ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Math for Deeplearning] Linear Algebra
    A.I/Study 2023. 7. 8. 17:27
    글을 시작하기 앞서, 이 글은 Math for Deeplearning (Ronald T. Kneusel)을 읽고 정리한 글임을 밝힙니다.

    Scalar, Vector, Matrix, 그리고 Tensor

    Scalars

    Scalar는 우리가 일반적으로 사용하는 숫자다. (예: 7, 42, 𝝅 등)

    일반적으로 scalar variables는 Bold 처리되지 않은 소문자로 표시된다.

    $$ x = 1 $$

    Vectors

    Vector는 숫자로 구성된 1차원 array이다.
    수학적으로, vector는 가로와 세로 방향을 가진다.

    가로 방향일 경우 row vector라고 불리며, 다음과 같이 표현된다.

    $$ \textbf{x} = [x_0, x_1, x_2 ] $$

    세로 방향의 경우 column vector라고 불린다.

    $$ \textbf{x} = \begin{pmatrix} v_1 \\ \vdots \\ v_n \end{pmatrix} $$

    Vector의 경우, Bold처리된 소문자로 표기한다.

    수학에서 vector는 보통 column vector을 의미한다.

    만약 column vector x의 components 갯수가 4개일 경우 4차원 벡터로도 표시할 수 있다. (화살표로 표시되는 그것이다.)

    이러한 column vector의 component는 종종 각 좌표 축 방향에 대한 길이로 해석되기도 한다.

    예를 들어, 3차원 공간에서의 좌표를 표기한다면, 다음과 같이 표기 가능하다.

    $$ \textbf{x} = [x, y, z] $$

    이들은 Cartesian coordinates이며 3d 공간의 모든 점을 고유하게 식별하는 역할을 한다.

    Vector의 각 components들은 서로 종종 엄격한 기하학적 구조에서 서로 관계가 없는 경우가 많다. (이를 종종 features로도 불린다.)

    이리헌 특징은 k-nearest neighbors와 같은 일부 machine learning 기법에서 좌표로서 해석하기도 한다.

    딥러닝에서는 feature space에 대해 다루기도 하는데, 이는 가능한 입력들의 집합을 의미한다.

    Matrices

    Matrix는 숫자로 구성된 2차원 array이다.

    $$
      \textbf{X} = \left[\begin{array}{rrrr}
        1 & 2 & 4 & 8 \\
        16 & 32 & 64 & 128 \\
        256 & 512 & 1024 & 2048
      \end{array}\right]
    $$

    각 components에는 row와 column에 대한 아래 첨자가 붙는다. (전산학의 array처럼 0부터 시작한다.)

    예시 속 matrix는 row을 3개 column을 4개를 가지고 있는데, 이를  3 X 4 matrix라고 표기할 수 있으며, 이를 matrix의 order라고 부른다.

    일반적으로, matrix는 Bold처리된 대문자로 표기한다.

    matrix는 실제로 테이블의 형태라기 보다 각 row가 column에 해당하는 sublist를 가지고 있다고 볼 수 있는데, 각 sublist의 길이는 모두 동일하다.

    Tensor

    Tensor는 3차원 이상의 수학적 객체를 의미한다.

    기본적으로 matrix와 표기법이 유사하지만, sans serif로 표기한다.

    tensor의 차원 수는 order에 의해 결정된다. (order-n tensor 같은 느낌)

    Arithmetic with Tensor

    Array Operations

    Array operations는 element-wise operations로도 불리며, 같은 위치의 components 끼리 연산된다.

    Scalar 값과의 연산도 이 array operations와 마찬가지로 각 components마다 연산한다.

    덧셈, 뻴셈, 곱셈, 나눗셈 그리고 제곱(**)은 각 component끼리 연산한다고 생각하면 된다.

    Element-wise 곱셈을 Hadamard product라고 알려져 있기도 하다.

    Vector Operations

    Magnitude

    Magnitude는 그 matrix나 vector의 크기라고 보면된다.

    vector x가 있고, n개의 components를 가질 때, 아래의 공식과 같이 계산 할 수 있다.

    $$ \lVert \textbf{x} \rVert = \sqrt{x_0^2+x_1^2+\cdots+x_{n-1}^2} $$

    Unit Vectors

    Unit Vectors는 특정 Vector를 그 Vector의 magnitude로 나눈 vector이며, 이 vector의 magnitude는 1이다.

    $$ \hat{v} = \frac{v}{\lVert v \rVert} $$

    Vector Transpose

    Vector Transpose는 matrix의 row vector와 column vector를 바꾸는 것이다.

    아래의 수식처럼 표기할 수 있다.

    $$ x^\mathrm{T} $$

    Inner Product

    가장 흔하게 사용되는 vector operation은 inner product이다.

    이것은 종종 dot product라고 불리기도 한다.

    아래의 방법으로 구할 수 있다.

    $$ a \cdot b = \polar {a, b} = a^\mathrm{T} b $$

    $$ = \sum_{k=0}^{n-1}a_kb_k $$

    $$ = \lVert a \rVert \lVert b \rVert cos \theta $$

    여기서 𝜽는 두 vector의 각도이며, 계산 결과는 scalar 값이다.

    inner product에는 몇가지 성질이 있다.

    $$ a \cdot a = {\lVert a \rVert}^2 $$

    $$ a \cdot b = b \cdot a $$

    $$ a \cdot (b + c) = a \cdot b + a \cdot c $$

    그리고 cos를 사용하고 있기 때문에, 두 vector 사이의 각도가 90도이면 0이 된다. (이를 직교(orthogonal)한다고 부른다.)

    딥러닝에서는 inner product의 수식을 변환해서 다음과 같이 사용하기도 한다.

    $$ \theta = cos^{-1} \frac{a \cdot b}{\lVert a \rVert \lVert b \rVert} $$

    이 수식을 통해 두 벡터의 각도를 파악 할 수 있다.

    Projection

    한 vector를 다른 vector에 projection(투영)하면 두 번째 방향에 있는 첫 번째 vector의 양이 계산된다. (a onto b)

    $$ proj_b a = \frac{a \cdot b}{{\lVert b \rVert}^2} b $$

    만약 두 vectors의 각도가 90도라면, projection은 0이다.

    Outer Product

    두 vector를 outer product하면 결과로 matrix가 생성된다.

    이때, inner product와 다르게, 두 vector의 components의 수가 같을 필요가 없다.

    Transpose의 위치가 해깔리지 않도록 주의하자.

    $$ ab^\mathrm{T} \neq a^\mathrm{T} b $$

    보통은 아래의 기호로 표기한다.

    $$ a \otimes b$$

    Cross Product

    이 계산법은 오직 3차원 공간에서만 이용가능한 연산자이다.

    a와 b의 cross product는 a와 b를 포함하는 plane에 수직인 새로운 vector이다.

    $$ a \times b = \lVert a \rVert \lVert b \rVert sin(\theta)\hat{n} $$

    $$ = (a_1b_2 - a_2b_1, a_0b_2 - a_2b_0, a_0b_1 - a_1b_0) $$

    여기서 \hat{n}은 unit vector이고 𝜽는 두 vectors의 각도이다.

    그 unit vector의 방향은 right-hand rule에 의해 주어진다.

    inner product의 공식과 비슷해 보일 수 있지만, cos가 아닌 sin이 사용된다.

    Matrix Multiplication

    Matrices간의 곱셈을 의미한다.

    Matrix multiplication에는 다음의 특성이 있다.

    $$ (AB)C = A(BC) $$

    $$ A(B + C) = AB + AC $$

    $$ (A + B)C = AC + BC $$

    $$ AB \neq BA $$

    마지막의 교환법칙이 성립하지 않는 것에 주의하자.

    계산 방법은 다음과 같다.

    A가 a x b이고 B가 c x d일 때, b와 c가 같아야 이 연산자를 수행할 수 있으며, 결과 matrix는 a x d의 형태를 가진다.

    수식으로는 다음과 같이 표시가능 하다.

    $$ c_{ij} = \sum_{k=0}^{m-1} a_{ik}b_{kj} $$

    Kronecker Product

    두 matrix의 matrix direct product라고도 불린다.

    outer product의 특별한 경우 중 하나라서 동일한 기호로 표시한다.

    A가 n x p이고 B가 m x d일때 A와 B의 Kronecker Product A x B는 크기가 nm x pd인 matrix이다. 

    두 matrix의 tensor product라고도 불리는 것 같다.

    참고 자료: 행렬의 크로네커 곱 (freshrimpsushi.github.io)

     

    행렬의 크로네커 곱

    Kroneker Product of Matrices

    freshrimpsushi.github.io

    크로네커 곱은 끝내 이해하지 못해서 이렇게 간단하게 정리했다.

    이건 추후에 다른책으로 좀 더 공부할 예정이다.

    'A.I > Study' 카테고리의 다른 글

    [밑시딥2] 게이트가 추가된 RNN  (0) 2023.07.14
    [밑시딥2] 순환 신경망 (RNN)  (0) 2023.07.13
    [밑시딥2] word2vec 속도 개선  (0) 2023.07.02
    [Math for Deeplearning] Probability  (0) 2023.07.01
    [밑시딥2] word2vec  (0) 2023.06.26
Designed by Tistory.