-
[Math for Deeplearning] Linear AlgebraA.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)
크로네커 곱은 끝내 이해하지 못해서 이렇게 간단하게 정리했다.
이건 추후에 다른책으로 좀 더 공부할 예정이다.
'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