행렬연산 (Matrix Equations)


1. Element Wise Sum

두 개의 행렬을 더하는 것을 Element Wise Sum이라고 합니다. 전제조건은 두 행렬의 모양이 같아야 합니다. 아래 수식과 같이 $m \times n$ 행렬 A와 $m \times n$ 행렬 B의 합은 행렬의 같은 위치의 성분들을 더한 것과 같습니다.

$$\begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} + \begin{bmatrix} b_{11} & \cdots & b_{1n} \\ \vdots & \ddots & \vdots \\ b_{m1} & \cdots & b_{mn} \\ \end{bmatrix} = \begin{bmatrix} a_{11} + b_{11} & \cdots & a_{1n} + b_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} + b_{m1} & \cdots & a_{mn} + b_{mn} \\ \end{bmatrix}$$

행렬의 합은 교환법칙, 결합법칙이 성립합니다.

  • $A + B = B + A$
  • $(A + B) + C = A + (B + C)$


1.1 Broadcasting $(m \times n) + (m \times 1)$

다음은 행렬 덧셈에서의 브로드캐스팅에 대해서 알아보겠습니다. 브로드캐스팅은 행령을 더할 때 행 또는 열의 개수가 1일때 자동으로 복사된 성분으로 계산해주는 기능을 말합니다. 자세한 내용은 numpy Broadcasting을 참고하세요.

아래 수식과 같이 $m \times n$ 행렬 A과 $m \times 1$ 행렬 B의 element wise sum은 행렬 B의 열을 n번 복사해서 $m \times n$ 행렬로 변경후 행렬의 같은 위치의 성분들을 더한 것과 같습니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} + \begin{bmatrix} b_{11} \\ \vdots \\ b_{m1} \\ \end{bmatrix} = \begin{bmatrix} a_{11} + b_{11} & \cdots & a_{1n} + b_{11} \\ \vdots & \ddots & \vdots \\ a_{m1} + b_{m1} & \cdots & a_{mn} + b_{m1} \\ \end{bmatrix} $$


1.2. Broadcasting $(m \times n) + (1 \times n)$

두번째 경우는 아래 수식과 같이 $m \times n$ 행렬 A과 $1 \times n$ 행렬 B의 element wise sum은 행렬 B의 행을 m번 복사해서 $m \times n$ 행렬로 변경후 행렬의 같은 위치의 성분들을 더한 것과 같습니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} + \begin{bmatrix} b_{11} & \cdots & b_{1n} \\ \end{bmatrix} = \begin{bmatrix} a_{11} + b_{11} & \cdots & a_{1n} + b_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} + b_{11} & \cdots & a_{mn} + b_{1n} \\ \end{bmatrix} $$


1.3. Broadcasting $(m \times n) + (1 \times 1)$

세번째 경우는 아래 수식과 같이 $m \times n$ 행렬 A과 $1 \times 1$ 행렬 B의 element wise sum은 행렬 B를 복사해서 $m \times n$ 행렬로 변경후 행렬의 같은 위치의 성분들을 더한 것과 같습니다. 이때 B는 행렬이 아닌 실수 스칼라 값이어도 동일합니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} + \begin{bmatrix} b_{11} \\ \end{bmatrix} = \begin{bmatrix} a_{11} + b_{11} & \cdots & a_{1n} + b_{11} \\ \vdots & \ddots & \vdots \\ a_{m1} + b_{11} & \cdots & a_{mn} + b_{11} \\ \end{bmatrix} $$


2. Element Wise Product

행렬의 각 성분끼리 곱하는 것을 element wise product라고 합니다. Element wise product는 기호로는 $\odot$와 같이 표현합니다. 더하기와 비슷하게 전제조건은 두 행렬의 모양이 같아야 합니다. 아래 수식과 같이 $m \times n$ 행렬 A와 $m \times n$ 행렬 B의 element wise product는 행렬의 같은 위치의 성분들을 곱한 것과 같습니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} \odot \begin{bmatrix} b_{11} & \cdots & b_{1n} \\ \vdots & \ddots & \vdots \\ b_{m1} & \cdots & b_{mn} \\ \end{bmatrix} = \begin{bmatrix} a_{11} \times b_{11} & \cdots & a_{1n} \times b_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} \times b_{m1} & \cdots & a_{mn} \times b_{mn} \\ \end{bmatrix} $$

행렬의 element wise product는 교환법칙, 결합법칙이 성립합니다.

  • $A \odot B = B \odot A$
  • $(A \odot B) \odot C = A \odot (B \odot C)$


2.1. Broadcasting $(m \times n) + (m \times 1)$

행렬 element wise product에서의 브로드캐스팅은 element wise sum과 차이가 앖습니다.

아래 수식과 같이 $m \times n$ 행렬 A과 $m \times 1$ 행렬 B의 element wise product는 행렬 B의 열을 n번 복사해서 $m \times n$ 행렬로 변경후 행렬의 같은 위치의 성분들을 곱한 것과 같습니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} \odot \begin{bmatrix} b_{11} \\ \vdots \\ b_{m1} \\ \end{bmatrix} = \begin{bmatrix} a_{11} \times b_{11} & \cdots & a_{1n} \times b_{11} \\ \vdots & \ddots & \vdots \\ a_{m1} \times b_{m1} & \cdots & a_{mn} \times b_{m1} \\ \end{bmatrix} $$


2.2. Broadcasting $(m \times n) + (1 \times n)$

두번째 경우는 아래 수식과 같이 $m \times n$ 행렬 A과 $1 \times n$ 행렬 B의 element wise product는 행렬 B의 행을 m번 복사해서 $m \times n$ 행렬로 변경후 행렬의 같은 위치의 성분들을 곱한 것과 같습니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} \odot \begin{bmatrix} b_{11} & \cdots & b_{1n} \\ \end{bmatrix} = \begin{bmatrix} a_{11} \times b_{11} & \cdots & a_{1n} \times b_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} \times b_{11} & \cdots & a_{mn} \times b_{1n} \\ \end{bmatrix} $$


2.3. Broadcasting $(m \times n) + (1 \times 1)$

세번째 경우는 아래 수식과 같이 $m \times n$ 행렬 A과 $1 \times 1$ 행렬 B의 element wise product는 행렬 B를 복사해서 $m \times n$ 행렬로 변경후 행렬의 같은 위치의 성분들을 곱한 것과 같습니다. 이때 B는 행렬이 아닌 실수 스칼라 값이어도 동일합니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} \odot \begin{bmatrix} b_{11} \\ \end{bmatrix} = \begin{bmatrix} a_{11} \times b_{11} & \cdots & a_{1n} \times b_{11} \\ \vdots & \ddots & \vdots \\ a_{m1} \times b_{11} & \cdots & a_{mn} \times b_{11} \\ \end{bmatrix} $$


3. Matrix multiplication

행렬 간의 matrix multiplication를 해 보겠습니다. Matrix multiplication는 기호로는 $A \times B$와 같이 표현합니다. 또는 간단하게 $AB$ 기호를 생락하기도 합니다. 전제조건은 첫 번째 행렬의 열의 개수와 두 번째 행렬의 행의 개수가 같아야 합니다. 아래 수식과 같이 $m \times n$ 행렬 A와 $n \times k$ 행렬 B의 matrix multiplication은 A의 행들과 B의 열들을 dot product 한 것과 같습니다.

결과는 첫 번째 행렬의 행 개수와 두 번째 행렬의 열 개수와 동일한 $m \times k$ 행렬입니다.

$$ \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} \times \begin{bmatrix} b_{11} & \cdots & b_{1k} \\ \vdots & \ddots & \vdots \\ b_{n1} & \cdots & b_{nk} \\ \end{bmatrix} = \begin{bmatrix} a_{11}b_{11} + \cdots + a_{1n}b_{n1} & \cdots & a_{11}b_{1k} + \cdots + a_{1n}b_{nk} \\ \vdots & \ddots & \vdots \\ a_{m1}b_{11} + \cdots + a_{mn}b_{n1} & \cdots & a_{1m}b_{1k} + \cdots + a_{mn}b_{nk} \\ \end{bmatrix} $$

행렬의 크기만을 표현하면 아래와 같습니다.

$$ (m, n) \times (n, k) = (m, k) $$

행렬의 matrix multiplication은 교환법칙은 성립하지 않고 결합법칙은 성립합니다.

  • $A \times B \ne B \times A$
  • $(A \times B) \times C = A \times (B \times C)$

위 행렬을 아래와 같이 행벡터와 열벡터로 표현할 수 있습니다.

matrix-to-vector.png

이제 matrix multiplication을 행벡터와 열벡터 수식으로 표현하면 아래와 같습니다.

$$ \begin{bmatrix} \vec{a_{1}} \\ \vdots \\ \vec{a_{m}} \\ \end{bmatrix} \times \begin{bmatrix} \vec{b_{1}} & \cdots & \vec{b_{k}} \\ \end{bmatrix} = \begin{bmatrix} \vec{a_{1}} \bullet \vec{b_{1}} & \cdots & \vec{a_{1}} \bullet \vec{b_{k}} \\ \vdots & \ddots & \vdots \\ \vec{a_{m}} \bullet \vec{b_{1}} & \cdots & \vec{a_{m}} \bullet \vec{b_{k}} \\ \end{bmatrix} $$


3.1. 열벡터 연산으로의 해석

딥러닝에서 수식으로 모델을 설명할 때 열벡터로 표현하는 경우가 대부분입니다. 우선 행렬과 하나의 열벡터의 matrix multiplication은 다음과 같이 표현할 수 있습니다.

$$ \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \\ \end{bmatrix} \times \begin{bmatrix} x \\ y \\ x \\ \end{bmatrix} = x\begin{bmatrix} a_{11} \\ a_{21} \\ a_{31} \\ \end{bmatrix} + y\begin{bmatrix} a_{12} \\ a_{22} \\ a_{32} \\ \end{bmatrix} + z\begin{bmatrix} a_{13} \\ a_{23} \\ a_{33} \\ \end{bmatrix} $$

이제 두 행렬의 matrix multiplication을 행렬과 열벡터로 표현하면 아래와 같습니다. A 행렬과 B의 열벡터들의 matrix multiplication으로 표현할 수 있습니다.

$$ A \times \begin{bmatrix} \vec{b_{1}} & \cdots & \vec{b_{k}} \\ \end{bmatrix} = \begin{bmatrix} A \times \vec{b_{1}} & \cdots & A \times \vec{b_{k}} \ \end{bmatrix} $$


3.2. 행벡터 연산으로의 해석

드물지만 딥러닝에서 수식으로 모델을 설명할 때 행벡터로 표현하는 때도 있습니다. 그리고 numpy, tensorflow, pytorch 등은 행벡터로 동작합니다. 우선 하나의 행벡터와 행렬의 matrix multiplication은 다음과 같이 표현할 수 있습니다.

$$ \begin{bmatrix} x & y & z \\ \end{bmatrix} \times \begin{bmatrix} b_{11} & b_{12} & b_{13} \\ b_{21} & b_{22} & b_{23} \\ b_{31} & b_{32} & b_{33} \\ \end{bmatrix} = x\begin{bmatrix} b_{11} & b_{12} & b_{13} \\ \end{bmatrix} + y\begin{bmatrix} b_{21} & b_{22} & b_{23} \\ \end{bmatrix} + z\begin{bmatrix} b_{31} & b_{32} & b_{33} \\ \end{bmatrix} $$ $$ = \begin{bmatrix} b_{11}x + b_{21}y + b_{31}z & b_{12}x + b_{22}y + b_{32}z & b_{13}x + b_{23}y + b_{33}z \\ \end{bmatrix} $$

이제 두 행렬의 matrix multiplication을 행벡터와 행렬로 표현하면 아래와 같습니다. A의 행벡터와 B 행렬의 matrix multiplication으로 표현할 수 있습니다.

$$ \begin{bmatrix} \vec{a_{1}} \\ \vdots \\ \vec{a_{m}} \\ \end{bmatrix} \times B = \begin{bmatrix} \vec{a_{1}} \times B \\ \cdots \\ \vec{a_{m}} \times B \\ \end{bmatrix} $$


4. Dot Product

두 벡터간의 dot product에 대해서 알아보겠습니다. Dot product의 기호는 $\vec{a} \bullet \vec{b}$와 같이 표현합니다. 전제조건은 두 벡터의 차원 수가 같아야 합니다. 아래 수식과 같이 같은 위치의 성분들을 곱해서 전체를 더한 것과 같습니다. 결과는 하나의 스칼라 값입니다.

$$ \begin{bmatrix} a_{1} \\ \vdots \\ a_{n} \\ \end{bmatrix} \bullet \begin{bmatrix} b_{1} \\ \vdots \\ b_{n} \\ \end{bmatrix} = \begin{bmatrix} a_{1}b_{1} + \cdots + a_{n}b_{n} \\ \end{bmatrix} $$

두 벡터의 dot product를 기하적으로 표현하면 다음과 같습니다. 두 벡터의 길이의 곱에 두 벡터가 이루는 내각 $\theta$에 cosine을 취한 값을 더하는 것입니다.

dot-product.png

위 그림을 수식으로 표현하면 다음과 같습니다.

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

cosine 값은 아래그림과 같이 변합나다.

cosine.png

  • 두 벡터의 방향이 같을 때 cosine 값이 1이 되어 dot-product 값이 최대가 됩니다
  • 두 벡터의 방향이 직각을 이룰 때 cosine 값이 0이 되어 dot-product 값이 0이 됩니다. 이때를 직교(orthogonality) 한다고 표현합니다.
  • 두 벡터가 방향이 반대 방향일 때 cosine 값이 -1이 되어 dot-product 값이 최소가 됩니다.