드디어 행렬과 벡터의 연산이다. 여기서 배우는 연산들은 기초적인 연산으로 앞으로도 계속 사용하게 된다.
이번 장에서는 다음 내용들을 다룬다.
- 행렬과 벡터의 덧셈과 뺄셈, 스칼라배
- 행렬의 전치 (Transpose)
- 벡터의 내적과 정사영
- 벡터의 Norm
- 행렬의 곱셈
- Trace
행렬과 벡터의 덧셈과 뺄셈, 스칼라 배
벡터의 덧셈은 위 사진 한 장으로 요약 가능하다.
즉, 두 벡터의 덧셈은 한 벡터 $\textbf v$의 화살표에 다른 벡터 $\textbf u$의 시점을 놓고 $\textbf u$의 화살표와 $\textbf v$의 시점을 이은 벡터 $\textbf u'$가 $\textbf u + \textbf v = \textbf u'$의 결과이다.
위 예시에서 벡터 $\textbf u$는 $AB$ 벡터, $\textbf u$는 $BC$ 벡터, $\textbf u'$은 $AC$ 벡터가 되겠다.
이때 벡터의 덧셈은 순서가 상관이 없다는 것을 알 수 있다. $\textbf v + \textbf u = \textbf u'$이 되는 것 또한 간단히 확인할 수 있다.
벡터의 뺄셈의 경우는 그냥 벡터의 방향을 바꿔주면 된다.
마찬가지로 $\vec{u}$와 $\vec{v}$의 예시로 보면 그냥 대수와 똑같이 $\vec{u}$에 -를 취해 방향을 반대로 바꾼 후 벡터의 덧셈을 해주면 된다.
$$
\begin{matrix}
\vec{v} = \begin{bmatrix}
v_1\\
v_2
\end{bmatrix},
\vec{u} = \begin{bmatrix}
u_1\\
u_2
\end{bmatrix} \\
\vec{v} + \vec{u} = \begin{bmatrix}
v_1 + u_1\\
v_2 + u_2
\end{bmatrix}
\end{matrix}
$$
수치적으로 본다면 위와 같이 elemental wise 덧셈으로 계산이 된다. 매우 간단하죵??
행렬의 덧셈과 뺄셈도 위와 마찬가지로 Elemental Wise로 계산할 수 있다.
$$
A = \begin{bmatrix}
a_{1, 1} & a_{1, 2}\\
a_{2, 1} & a_{2, 2}
\end{bmatrix},
B = \begin{bmatrix}
b_{1, 1} & b_{1, 2}\\
b_{2, 1} & b_{2, 2}\end{bmatrix},
A + B = \begin{bmatrix}
a_{1, 1} + b_{1, 1} & a_{1, 2} + b_{1, 2}\\
a_{2, 1} + b_{2, 1} & a_{2, 2} + b_{2, 2}
\end{bmatrix}
$$
이것도 아주 간단하죵??
마지막으로 스칼라 배에 대해 알아보자. 스칼라 배란 벡터나 행렬에 단순히 Scalar를 곱해주는 것을 의미하며 이 또한 덧셈, 뺄셈과 마찬가지로 Elemental Wise하게 계산된다.
행렬에 대해서 수식적으로 보면 다음과 같다.
$$
\begin{bmatrix}
a & b\\
c & d
\end{bmatrix} * \alpha =
\begin{bmatrix}
\alpha \times a & \alpha \times b\\
\alpha \times c & \alpha \times d
\end{bmatrix}
$$
벡터에 대해서는 $2 \times 1$행렬의 스칼라 배를 생각하면 되기 때문에 생략한다.
어쨌든 이러한 덧셈과 뺄셈, 스칼라 배를 이용한다면 여러가지 일들을 할 수 있는데, 그 중에서도 중요한 것이 바로 [1,0], [0, 1] 벡터를 이용해 2 차원 상의 모든 점을 표현 가능하다는 점을 꼭 기억하자. (굳이 [1, 0], [0, 1]이 아니어도 되긴 한다. 한 직선 위에 있는 두 벡터만 아니면 된다.)
행렬의 전치
전치 (Transpose)는 행렬을 주 대각선 축을 기준으로 뒤집는 연산을 의미하며, $A^T$로 표현한다.
이때 주 대각선이란 행렬 A의 $a_{i, i}$ 번째 요소들이 이루는 대각선을 의미하며 이 축을 기준으로 뒤집기 때문에 $A^T_{i, j} = A_{j, i}$가 성립하게 된다. (즉, $i$행 $j$열 요소가 $j$행 $i$열로 이동하며, $i$행 $i$열의 요소들은 이들을 기준으로 뒤집기 때문에 위치가 그대로 유지되게 된다.)
$$
A = \begin{bmatrix}
1 & 2 \\
2 & 3
\end{bmatrix}
$$
그렇다면 위와 같이 전치를 취해도 전치를 취하기 전 행렬과 동일한 행렬이 존재할 수 있을 것이다. 이렇게 전치를 취해도 이전과 동일한 행렬을 Symmetric Matrix라 부르며 선대의 꽃인 고유값 분해 때 매우 독특한 특성이 있으므로 꼭 기억해두자!!
이젠 행렬의 전치의 특성들에 대해 간단히 나열해보자.
- $(A^T)^T=A$ → 즉, Transpose의 Transpose는 이전과 동일하다.
- $(A + B)^T = A^T + B^T$ → 즉, 분배가 가능하다.
- $(AB)^T = B^TA^T$ → 곱셈에 전치시 순서가 뒤바뀌며 전치가 취해진다. 이 특성은 매우 자주 나오므로 꼭 기억해 두자.
- $(cA)^T = cA^T$ → Scalar와 곱해진 행렬의 경우 당연하게도 그냥 나오면 된다.
- $det(A^T) = det(A)$ → Determinant 연산은 아직 배우지 않았으나 그냥 이렇다는 것을 기억하고 넘어가자
- $(A^T)^{-1} = (A^{-1})^T$ → 역 연산 시 그냥 역연산을 먼저 할지, Tranpose를 먼저할지 마음대로 변경 가능하다.
벡터의 내적과 정사영
벡터의 내적은 두 개의 벡터들 사이에서 정의된 연산으로 아래와 같이 표현한다.
$$
\begin{bmatrix}
1 \\
2
\end{bmatrix} \cdot
\begin{bmatrix}
3 \\
4
\end{bmatrix} = \vec{a}^T \vec{b} = \begin{bmatrix}
1 & 2
\end{bmatrix}
\begin{bmatrix}
3 \\
4
\end{bmatrix} = 1 \times 3 + 2 \times 4 = 11
$$
즉, 벡터의 내적은 두 벡터 사이의 연산으로 결과 값이 스칼라가 나온다는 것을 먼저 확인할 수 있다.
그리고 내적 연산 과정은 $\vec{a}$의 i번째 요소와 $\vec{b}$의 i번째 요소의 곱들의 합으로 나타낼 수 있으며 이를 수식으로 표현한다면 다음과 같다.
$$
\vec{a} \cdot \vec{b} = \sum_{i = 1}^n a_{i} b_{i}
$$
또 고등학생 때 배운 정의로도 나타낼 수 있다.
$$
\textbf a^T \textbf b = ||\textbf a|| \times ||\textbf b|| \cos\theta
$$
이때 $||\textbf a||$는 $\textbf a$의 norm으로 크기를 나타낸다. norm은 보통 $\sqrt{\textbf a^T \textbf a}$로 나타낼 수 있다.
위 식의 순서를 바꾸어 다음과 같이 나타내보자.
$$
\textbf a^T \textbf b = ||\textbf a|| \cos\theta ||\textbf b||
$$
이는 $\textbf a$를 $\textbf b$에 정사영 내린 벡터의 크기와 $\textbf b$의 크기를 곱한 것으로 생각할 수 있다.
그림으로 나타내면 위와 같다. 반대로 동일한 방식으로 $\vec{v}$를 $\vec{u}$에 수직하게 내린 것으로 생각할 수 있다.
그렇다면 $||\vec{u}|| \cos \theta$의 크기를 갖는 $\vec{u}$ 방향의 벡터도 구할 수 있을까? 즉, 내적을 내린 곳의 벡터를 구할 수 있느냐이다. 이는 Unit Vector라는 것을 통해 구할 수 있다.
Unit Vector란 특정 방향으로 크기가 1인 벡터를 의미하며 위 문제에서 필요한 Unit Vector는 $\vec{v}$의 Unit Vector이다. Unit Vector는 다음과 같이 크기로 나누어 주어 얻을 수 있다.
$$
\frac{\textbf v}{\sqrt{\textbf v^T \textbf v}} = \textbf v\text{'s unit vector}
$$
그렇다면 내적 내린 벡터를 구해보면 다음과 같다.
$$
\frac{\textbf u^T \textbf v}{\sqrt{\textbf v^T \textbf v}} \times \frac{\textbf v}{\sqrt{\textbf v^T \textbf v}}
$$
즉, $\textbf v$ 방향의 Unit vector와 곱해 정사영된 크기를 구했고, Unit vector와 다시 곱해 방향만을 얻어내는 것이다.
또 다른 방식으로 찾는 방법으로는 정사영의 성질을 이용하면 된다. 정사영 시 정사영된 벡터는 수직하게 내리게 된다. 즉, 원본 벡터에서 정사영 벡터를 빼서 나온 벡터는 정사영 벡터와 수직하게 된다.
이를 그림으로 나타내면 위와 같다.
$$
(\textbf u - \textbf vx)^T\textbf vx = 0
$$
즉, 위 식을 만족하는 $x$를 구하면 된다. 이때 $x$는 0이 되면 Trivial Solution이므로 제외하면$(\textbf u - \textbf vx)^T \textbf v = 0$이어야만 한다. 이를 풀어보면 다음과 같다.
$$
\begin{matrix}
\textbf u^T \textbf v - \textbf v^T \textbf vx = 0 \\
\therefore x = \frac{\textbf u^T \textbf v}{\textbf v^T \textbf v}
\end{matrix}
$$
이를 $\textbf v$의 unit vector $\frac{\textbf v}{\sqrt{\textbf v^T \textbf v}}$와 곱하면 이전과 동일한 $\frac{\textbf u^T \textbf v}{\sqrt{\textbf v^T \textbf v}} \times \frac{\textbf v}{\sqrt{\textbf v^T \textbf v}}$ 라는 식이 도출된다.
벡터의 Norm
Norm은 벡터의 크기를 측정하는 함수로 여러가지 종류가 존재한다. 일반적으로 $L^p$ Norm을 사용해서 Norm을 측정하며 아래와 같은 식을 갖는다.
$$
||x||_p = (\sum_i |x_i|^p)^{\frac{1}{p}}
$$
이러한 Norm 들 중 주로 나오는 Norm이 몇 가지 존재하니 하나 하나 알아보자.
- L2 Norm
아니 L1 Norm이 있을텐데 왜 2부터 하는지 궁금했었다. 근데 그냥 우리에게 더 익숙한 녀석이기 때문이다.L2 Norm은 $||\textbf a||_2 = (\sum_i |a|^2)^\frac{1}{2}$로 수식을 보면 각 원소들의 제곱 합의 제곱근을 의미한다.
이는 우리가 중 고등학생 때 배운 두 점 사이 거리 공식이랑 똑같다!!
이러한 L2 Norm을 선형대수적으로 나타내면 $||\textbf a|| = \sqrt{\textbf a^T \textbf a}$과 같이 내적으로 나타낼 수 있다. 이 공식은 매우 자주 나오므로 꼭 기억해두자. - L1 Norm
L1 Norm은 그냥 $||\textbf a||_1 = \sum_i |\textbf a_i|$로 벡터의 각 원소들의 합을 의미하며 이는 보통 맨하튼 거리 부른다. - Max Norm이 경우는 $L_\inf = (x_1^\inf + x_2^\inf + \dots + x_n^\inf)^\frac{1}{\inf} = max(x_i)$가 된다. 즉, 가장 큰 녀석만 살아남는다는 것이다.
- P가 1, 2, 10 뭐 이런 수가 아닌 무한히 큰 수로 설정하는 경우도 있을 것이다.
- Frobenius Norm
Frobeinus Norm의 경우는 벡터의 Norm은 아니고 행렬에 대해서 Norm을 구하는 함수다.
$$
||A||_{F} = \sqrt{\sum_{i, j} a^2_{i, j}}
$$
식은 위와 같이 요소의 제곱의 합의 제곱근으로 L2 Norm과 매우 유사한 것을 확인할 수 있다.
$|x| + |y| = 1$을 만족하는 벡터들의 $L^p$ Norm의 결과를 모아서 그려보며 $L^p$ Norm의 기하학적 특성을 확인해보자.
출처: https://m.blog.naver.com/qriositylog/221645184764
위 그림은 $p$에 따른 $|x|+|y| = 1$을 만족하는 점들의 norm 값들을 나타낸 것으로 $p$의 값이 커질수록 사각형에 가까워지는 것을 확인할 수 있었다.
또한 이러한 Norm은 뉴럴 넷에서 사용하는 Pooling과도 연관이 있는 것으로 보인다.
Pooling 시에는 특정 격자에 특정 연산을 가해 하나의 값으로 압축하는 연산인데, 가장 간단한 예시로 Max Pooling의 경우는 Max Norm과 굉장히 비슷한 성질을 보이는 것을 알 수 있다.
이외에도 Nuclear Norm 등 여러가지 Norm이 많지만 여기선 이 정도만 알고 가도록 하자.
행렬의 곱셈
드디어 행렬의 곱셈이 나왔다. 두 행렬의 곱은 특정 조건을 만족해야 곱셈을 수행할 수 있다.
만약 $AB=C$ 과 같이 두 행렬 $A, B$를 곱할 경우 좌측 행렬인 $A$의 column의 갯수가 $B$의 row 갯수와 동일 해야 한다. 즉, $A:n\times m, B:m \times k$인 경우에만 $AB$의 형태로 곱셈을 수행할 수 있다.
즉, 교환 법칙이 성립하지 않는다는 의미이다.
결과로 나온 $C$ 또한 행렬로 나오게 되며, 행렬 $C$의 형태(Shape)는 $n \times k$로 좌측 행렬 $A$의 row의 갯수인 $n$을 row의 갯수로, 우측 행렬인 $B$의 column의 갯수인 $k$를 column의 갯수로 갖는다.
예를 들어 $3 \times 4$인 행렬과 $4 \times 2$ 행렬의 곱은 $3 \times 2$ 행렬이 나온다는 것이다. 이때 첫번째 행렬의 열의 크기와 두번째 행렬의 row의 크기가 4로 동일하지 않았다면 곱이 성립하지 않는다.
이때 결과로 나온 $C$의 각 요소는 아래 식을 따른다.
$$
c_{i,j} = \sum_k a_{i,k}b_{k,j}
$$
이렇게 식으로만 보면 사실 잘 이해가 가질 않는다. 그림을 가져와서 이해해 보도록 하자.
위 그림에서 노란색 하이라이트를 친 두 부분을 각각 벡터로 생각해 내적을 하여 $c_{1,1}$의 값을 만든다고 생각하면 편하다.
💡 즉, 좌측 i번째 Row 벡터와 우측 j번째 Column 벡터의 내적의 결과를 결과 행렬의 i, j의 요소로 가지는 행렬을 만드는 연산을 행렬의 곱이라 생각할 수 있다.
추가적으로 Element wise 행렬 곱은 따로 Hadamard Product라 부르며, $A \odot B$로 표기한다.
몇 가지 행렬 곱셈의 특성을 알아보자.
- $A(B + C) = AB + AC$ : 분배 법칙이 성립한다.
- $A(BC) = (AB)C$ : 결합 법칙이 성립한다.
- 행렬의 곱셈에 Transpose를 하였을 경우
행렬의 곱셈에 Transpose를 적용하면, Transpose의 내부 곱셈의 순서가 뒤바뀌어 나오게 된다.
$$
(AB)^T = B^TA^T
$$ - Scalar와 행렬의 곱을 할 경우 Scalar가 행렬의 모든 요소에 각각 곱해진다.
$$
sA = \begin{bmatrix}
sa_{1, 1} & \dots &sa_{1, n} \\
\vdots & \ddots & \vdots \\
sa_{m, 1} & \dots &sa_{m, n}
\end{bmatrix}
$$
또한 이러한 행렬과 벡터의 곱을 여러가지 관점으로 바라보면 이후 학습에 매우 도움이 된다.
- 내적으로 바라보기
이전에 설명한 것처럼 벡터의 내적으로 행렬의 곱셈을 바라 본 것이다.
$$
AB = \begin{bmatrix}
a_1^T\\
a_2^T\\
a_3^T\\
\end{bmatrix}
\begin{bmatrix}
b_1 & b_2 & b_3
\end{bmatrix} = \begin{bmatrix}
a_1^T b_1 & a_1^T b_2 & a_1^T b_3\\
a_2^T b_2 & a_2^T b_2 & a_2^T b_3\\
a_3^T b_3 & a_3^T b_2 & a_3^T b_3\\
\end{bmatrix}
$$
$A$를 행 벡터의 $3\times 1$ 행렬로 보고, $B$를 열 벡터의 $1\times 3$ 행렬로 보고 행렬 곱셈을 해주는 것이다. 이러면 결과 행렬의 각 요소가 벡터의 내적임을 알 수 있다. - rank-1 Matrix의 합으로 바라보기
갑자기 Rank라는 개념이 튀어나와서 당황스럽지만 일단은 무시하고 진행해보자.
$$
AB = \begin{bmatrix}
a_1 & a_2 & a_3
\end{bmatrix}
\begin{bmatrix}
b_1^T\\
b_2^T\\
b_3^T\\
\end{bmatrix} =
a_1 b_1^T + a_2 b_2^T + a_3 b_3^T
$$
이전과 다르게 A를 열 벡터, B를 행 벡터로 보았다. 이때 $ab^T$는 행렬이 나오게 되며, 이 행렬은 언제나 rank라는 것이 1이기에 rank-1 matrix의 합으로 볼 수 있다는 것이다.
rank는 이후 다룰 것이지만 간단히 말하면 행렬 내의 column 벡터들이 얼마나 다른 지에 대해 알려준다 정도로만 알고 가자. - Column Space로 바라보기
이건 행렬과 행렬의 곱은 아니고 행렬과 변수 벡터의 곱에 대한 내용이다.
$$
A\textbf x = \begin{bmatrix}
\textbf a_1, \textbf a_2, \textbf a_3
\end{bmatrix}
\begin{bmatrix}
x_1\\
x_2\\
x_3
\end{bmatrix} =
\textbf a_1x_1 + \textbf a_2x_2 + \textbf a_3x_3
$$
$\textbf x$를 계속 바꿔주면 결과는 $A$의 column 벡터들이 나타내는 공간을 의미하게 된다.
만약 벡터의 덧셈과 뺄셈, 스칼라 배에서 본 것처럼 A의 Column 벡터들이 [1, 0], [0, 1]인 경우 2차원 공간 전체를 나타낼 수 있게 된다.
하지만 $\textbf x$를 아무리 바꿔도 column 벡터 차원 전체를 못 나타내는 경우가 존재할 수 있다.
$$
A = \begin{bmatrix}
1 & 0 & 1\\
0 & 1 & 1\\
0 & 0 & 0
\end{bmatrix}
$$
위의 경우 아무리 $\textbf x$를 바꿔도 $z$ 축 좌표에 대한 요소가 없기 때문에 3차원 공간을 column 벡터들이 전부 만들어 내지 못한다. - Row Space로 바라보기
3번과 사실상 똑같은데 $x^TA = \begin{bmatrix}
x_1 & x_2 & x_3
\end{bmatrix} \begin{bmatrix}
a_1^T \\
a_2^T \\
a_3^T
\end{bmatrix}$로 볼 수 있다. 위에서 언급한 내용과 그냥 똑같다.
마지막 3, 4번과 관련된 내용은 이후 선형 독립, rank 이런 내용들을 배우면 더욱 이해가 될 것이다.
Trace
$$
A = \begin{bmatrix}
a_{1,1} & \dots & a_{1,n}\\
\vdots & \ddots & \vdots\\
a_{n,1} & \dots & a_{n,n}
\end{bmatrix}, tr(A) = \sum_i^n a_{i, i}
$$
그냥 정 사각 행렬의 Diagonal Element들을 더한 scalar 값이 바로 Trace로 수식으로 쓰면 위와 같다.
이때 정 사각 행렬에 대해서만 Trace가 정의된다는 점을 꼭 기억하자.
이 Trace를 어디에서 사용할지 정말 애매했는데 혁펜하임이라는 유튜브에서는 이 최적화 문제를 풀때 Trace를 사용해 행렬의 Loss를 구할 때 사용하면 기가 막힌다고 한다.
아무래도 Loss를 하나의 Scalar로 내야 하는데 행렬이 Loss가 돼야 하는 상황에서는 이 방식을 사용하면 하나의 Scalar 값으로 행렬이 변환되니 맞는 말이다.
또 ChatGPT에게 물어보니 Trace는 나중에 배울 고유값 분해를 통해 얻어지는 고유값의 합과 같다고 한다. 이는 고유값 분해에서 다시 살펴보도록 하자.
Trace의 성질은 다음과 같다.
- $tr(A + B) = tr(A) + tr(B)$
- $tr(cA) = ctr(A), c\text{ is scalar}$
- $tr(A^T) = tr(A)$
- $tr(AB) = tr(BA)$ → 이때 Trace는 정 사각 행렬에서만 정의되므로 $A$가 $m \times n$ 행렬이면, $B$는 $n \times m$ 행렬이어야만 한다.
- $tr(a^Tb) = tr(ba^T)$
- $tr(ABCD) = tr(BCDA) = tr(CDAB) = tr(DABC)$ = Cyclic property로 맨 앞 행렬을 맨 뒤로 보내도 Trace가 같다.
- $tr(A) = \sum \lambda_i, \lambda \text{ is A's eigen value}$
이번 장에서는 행렬과 벡터의 여러가지 기본 연산인 덧셈, 뺄셈, 스칼라 배부터 벡터의 내적과 정사영 시킨 벡터 구하기, 노름, 그리고 행렬의 곱셈, Trace까지 차근차근 살펴보았다.
Reference
'공부 및 정리 > 선형대수학' 카테고리의 다른 글
최소 자승법 (0) | 2023.10.02 |
---|---|
가우스-조던 소거법과 역행렬 (0) | 2023.09.29 |
행렬의 특성과 특별한 행렬과 벡터 (0) | 2023.09.29 |
행렬과 벡터의 기초 (0) | 2023.09.25 |
선형대수학 개요 (0) | 2023.09.25 |