이 내용은 책 Mathematics for machine learning(Marc Peter Deisenroth et al.)을 기반으로 하고 있습니다.
5.1장에서는 일변수 함수의, 5.2장에서는 다변수 함수의, 5.3장에서는 벡터값 함수의 미분을 보았다. 5.4장에서는 벡터 혹은 또다른 행렬에 대한 행렬의 그래디언트에 대해 살펴본다.
벡터/행렬에 대한 행렬의 그래디언트는 편미분값들을 모은 다차원 텐서(다차원 배열) 형태로 나타난다. m X n 크기의 행렬 A의 p X q 크기의 행렬 B에 대한 그래디언트를 구한다고 할 때, 그 결과인 자코비안은 (m X n) X (p X q) 형태의 4차원 행렬 J가 되며, 각각의 요소는 $J_{ijkl} = \cfrac{\partial A_{ij}}{\partial B_{kl}}$ 이다.
이전 장에서 보았던 그림이 이를 나타낸다. (편미분을 합쳐(collating) 자코비안 텐서로 만드는 방법)
또 다른 방법으로는, 행렬이 선형 매핑을 의미한다는 점에서 기인해, $m \times n$ 의 $\mathbb{R}^{m \times n}$ 공간에서 $m n$ 벡터의 $\mathbb{R}^{mn}$ 공간으로 벡터 공간의 동형사상(isomorphism)을 이용한다.
두 벡터공간 V, W 사이에 전단사 맵핑(linear transformation, 일대일 대응)이 존재할 때를 말한다. 전단사 관계가 있을 때 invertible mapping이 된다. 쉽게 말해, 역함수가 존재한다.
출처: 피그티, “(선형대수학) 2.3 Isomorphism”
그럼 행렬을 각각 $mn$ , $pq$ 크기의 벡터 둘로 나눌 수 있다. $mn$ 크기의 벡터를 이용한 그래디언트는 $mn \times pq$ 크기의 자코비안이 된다.
실제로는 이처럼 행렬을 벡터로 re-shape한 뒤 자코비안 행렬로 작업하는 것이 선호된다. Chain rule은 간단한 행렬 연산을 만드는데 반해 자코비안 텐서는 각 연산의 차원 확인에 주의해야 하기 때문이다.
이 두 번째 방식 역시 이전 장에서 보았던 그림에서 확인할 수 있다. 행렬을 열벡터를 stacking해 벡터들로 변환하는 방식(flattening)인 것이다.
함수 $\boldsymbol{f} = \boldsymbol{Ax}$ 가 있고, 그래디언트 $\cfrac{\mathrm{d} \boldsymbol{f}}{\mathrm{d} \boldsymbol{A}}$ 를 구해보자. 함수가 벡터로 가는 mapping이기 때문에 행렬에 대한 ‘벡터의 그래디언트’를 구하는 것이다.
$\boldsymbol{f} \in \mathbb{R}^{M}$ 이고, $\boldsymbol{A} \in \mathbb{R}^{M \times N}$ 이며, $\boldsymbol{x} \in \mathbb{R}^{N}$ 이다.
그래디언트의 차원은 $\cfrac{\mathrm{d} \boldsymbol{f}}{\mathrm{d} \boldsymbol{A}} \in \mathbb{R}^{M \times (M \times N)}$ 이고, 그래디언트를 정의대로 ‘편미분의 모음’으로 나타내면 아래와 같다.
\[\cfrac{\mathrm{d} \boldsymbol{f}}{\mathrm{d} \boldsymbol{A}} = \begin{bmatrix} \cfrac{\partial f_1}{\partial \boldsymbol{A}} \\ \vdots \\ \cfrac{\partial f_M}{\partial \boldsymbol{A}} \end{bmatrix} , \ \cfrac{\partial f_i}{\partial \boldsymbol{A}} \in \mathbb{R}^{1 \times (M \times N)}\]따라서, 그라디언트를 구하기 위해 A에 대한 각 함수의 편미분($\frac{\partial f_i}{\partial \boldsymbol{A}} \in \mathbb{R}^{1 \times (M \times N)}$)을 구해야 한다.
각 함수는 아래와 같이 행렬과 벡터의 곱으로 이루어져있다.
\[f_i = \sum \limits_{j=1}^N A_{ij} x_j \ (i = 1, \cdots, M)\]그럼 A의 한 요소에 대한 각 함수의 편미분은 아래와 같다.
\[\cfrac{\partial f_i}{\partial A_{iq}} = x_q \ (q = 1, \cdots, N)\]위 식을 A의 한 행, 즉 q = 1 ~ N을 전부 모으면 그것은 곧 x 전체와 같다. 따라서 A의 한 행에 대한 각 f의 편미분은 아래처럼 나타낼 수 있다. $f_i$ 함수일 때 A의 $i$ 행에 대한 편미분은
\[\cfrac{\partial f_i}{\partial A_{i,\ :}} = \boldsymbol{x}^T \in \mathbb{R}^{1 \times 1 \times N}\]이고, 그 외 행에 대한 편미분은
\[\cfrac{\partial f_i}{\partial A_{k \ne i,\ :}} = \boldsymbol{0}^T \in \mathbb{R}^{1 \times 1 \times N}\]따라서 A에 대한 각 함수의 편미분 $\frac{\partial f_i}{\partial \boldsymbol{A}} \in \mathbb{R}^{1 \times (M \times N)}$ 은
\[\cfrac{\partial f_i}{\partial \boldsymbol{A}} = \begin{bmatrix} \boldsymbol{0}^T \\ \vdots \\ \boldsymbol{0}^T \\ \boldsymbol{x}^T \\ \boldsymbol{0}^T \\ \vdots \\ \boldsymbol{0}^T \end{bmatrix} \in \mathbb{R}^{1 \times (M \times N)}\]이고, 이를 모든 i에 대해(1부터 M까지) 수행하면 최종적으로 $M \times (M \times N)$ 형태가 된다.
행렬과 행렬의 mapping인 함수 $\boldsymbol{f} : \mathbb{R}^{M \times N} \rightarrow \mathbb{R}^{N \times N}$ 와 행렬 $\boldsymbol{R} \in \mathbb{R}^{M \times N}$ 이 있다고 하자. 이때 함수는 아래와 같은 연산을 한다. 입력으로 들어오는 행렬(R)의 행렬곱을 수행해 또다른 행렬(K)을 만들어내는 것이다.
\[\boldsymbol{f}(\boldsymbol{R}) = \boldsymbol{R}^T \boldsymbol{R} =: \boldsymbol{K} \in \mathbb{R}^{N \times N}\]여기서 행렬 R에 대한 행렬 K의 그래디언트를 구해보자. 아래에서도 알 수 있듯이 그래디언트 결과는 텐서의 형태이다.
\[\cfrac{\mathrm{d} \boldsymbol{K}}{\mathrm{d} \boldsymbol{R}} \in \mathbb{R}^{(N \times N) \times (M \times N)}\]함수의 결과인 K 행렬의 (p, q)번째 요소를 $K_{pq}$라고 하면, 이는 곧 R의 열 $\boldsymbol{r}_i$ 의 내적이다.
\[K_{pq} = \boldsymbol{r}_p^T \boldsymbol{r}_q = \sum \limits_{m=1}^M R_{mp} R_{mq} \ (p, q = 1, \cdots, N)\]따라서 K의 한 원소의 R에 대한 그래디언트는
\[\cfrac{\mathrm{d} K_{pq}}{\mathrm{d} \boldsymbol{R}} \in \mathbb{R}^{1 \times M \times N}\]이다. 그럼 이 편미분을 풀어보자.
\[\cfrac{\partial K_{pq}}{\partial R_{ij}} = \sum \limits_{m=1}^M \cfrac{\partial R_{mp} R_{mq}}{\partial R_{ij}} = \partial_{pqij} = \begin{cases} R_{iq} & \mathrm{if} \ j=p, p \ne q \\ R_{ip} & \mathrm{if} \ j=q, p \ne q \\ 2R_{iq} & \mathrm{if} \ j=p, p = q \\ 0 & \mathrm{otherwise} \end{cases}\]전체 그라디언트는 $(N \times N) \times (M \times N)$ 형태고, 텐서의 각 요소는 $\partial_{pqij} \ ( p, q, j = 1, \cdots, N \ , \ i=1, \cdots, M)$ 이다.