딥러닝 이론 공부 중 역전파의 수식을 보다가 스칼라, 벡터, 행렬에 대한 미분을 정리해놓는 게 좋을 것 같아서 기록합니다.
스칼라, 벡터, 행렬
스칼라는 크기만 있고 방향을 가지지 않는 양입니다. 상수나 변수 함수 모두 크기만 있고 방향을 가지지 않는다면 스칼라가 될 수 있습니다.
벡터는 스칼라와 대비되는 개념으로 크기와 방향을 가집니다. 열벡터 또는 행벡터를 아울러 의미합니다.
행렬(matrix)이란 실수 또는 복소수를 위 그림의 좌변과 같이 직사각형으로 배열한 것 입니다. 원소로 다항식이 들어가는 경우도 있습니다.
CASE
스칼라, 벡터, 행렬 간 미분에서 따져볼 경우는 아래와 같습니다.
나머지 부분(행렬-벡터, 행렬-행렬)은 스칼라 - 벡터 또는 스칼라 - 행렬 간의 미분처럼 생각하면 구할 수 있겠지만 다루지 않습니다.
나머지 부분에 해당하는 미분의 경우 2보다 Tensor Rank가 높은 표현에서 자연스럽게 나타나기 때문에, 표현이 까다롭지 않은 범위까지만 정리하겠습니다.
미분
위에서 나눈 각 경우의 미분 정의입니다. (스칼라-스칼라는 위에 나온대로 입니다.)
Scalar-by-vector (스칼라 함수를 벡터로 미분)
Vector-by-Scalar (벡터를 스칼라로 미분)
Vector-by-vector (벡터를 벡터로 미분)
Scalar-by-Matrix (스칼라 함수를 행렬로 미분)
Matrix-by-scalar (행렬을 스칼라로 미분)
스칼라-벡터 또는 벡터-스칼라의 경우 열벡터로 쓰나 행벡터로 쓰나 모두 맞는 표현입니다.
맥락상 알아보시면 될 것 같습니다.
벡터 $W$와 벡터$X$에 대해 $W^T X$를 미분해보겠습니다. (결과는 $W^T$입니다.)
위에서 정의한 미분대로 한번 따라가보겠습니다.
$W^T = \begin{bmatrix}w_1 w_2 \dots w_n\end{bmatrix}$ , $X = \begin{bmatrix} x_1 \\ \vdots \\ x_n \end{bmatrix}$
$W^T X = w_1x_1 + w_2x_2 + \dots + w_nx_n$
* 위의 $W^T X$ 결과는 하나의 스칼라 값입니다.
$\frac{\partial{W^T}X}{\partial{X}} = \begin{bmatrix} \frac{\partial{W^T}X}{\partial{x_1}} \dots \frac{\partial{W^T}X}{\partial{x_n}} \end{bmatrix} \\ = \begin{bmatrix} \frac{\partial{(w_1x_1 + \dots + w_nx_n)}}{\partial{x_1}} \dots \frac{\partial{(w_1x_1+\dots +w_nx_n)}}{\partial{x_n}} \end{bmatrix} \\ = \begin{bmatrix} w_1 w_2\dots w_n\end{bmatrix} \\ = W^T$
위에서 미리 언급한대로 결과는 $W^T$입니다.
이런 식으로 행렬-행렬에도 적용을 할 수 있습니다.
[참고자료]
[1] https://en.wikipedia.org/wiki/Matrix_calculus
[2] https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/resources/dims_types.html