ゼロから作るDeep Learningに行列の和と積の誤差逆伝播法の証明が書いていなかったため、Deep Learningという本(英語版はネットで無料公開されています、邦訳版はこちら)を参考に、自分で証明を書いてみました。
#証明を読む前に
行列の微分というマニアックな分野になってくるので、行列の微分の定義および表記法(分子レイアウト記法と分母レイアウト記法など)を知るために、その名もMatrix Differentiationという資料に一通り目を通しておいてください。僕もこれを読んで勉強しました。
以下はすべて分母レイアウト記法です。
#記法
太字の大文字$\boldsymbol{X}$は行列を表します。普通の太さの大文字$X$や普通の太さの小文字$x$はスカラーを表します。普通の太さの小文字に添字が付いたもの$x_{ij}$は対応する太字の大文字の行列$\boldsymbol{X}$の第$(i, j)$成分を表します。$R^{m \times n}$は$m \times n$の実数の行列の全体の集合を表します。
#証明のもととなる定理(拡張版連鎖律)
Deep Learning英語版のChapter 6のp203の式6.47がもととなりますが、以下の証明のために書き換えておきます。本ではテンソルですが、今回の証明では行列で十分ですし、一般のテンソルで考えるとややこしくなるので、ここでは行列に限定して議論します。
z = f(\boldsymbol{Y})\\
\boldsymbol{Y} = g(\boldsymbol{X})\\
\frac{\partial z}{\partial \boldsymbol{X}} =
\sum_{i, j}
\frac{\partial y_{ij}}{\partial \boldsymbol{X}}
\frac{\partial z}{\partial y_{ij}}
#行列の和の証明
損失関数の値を$L$とし、$L$は$\boldsymbol{Z}$の関数であるとします。$\boldsymbol{X}, \boldsymbol{Y}, \boldsymbol{Z} \in R^{m \times n}$であり、$\boldsymbol{Z} = \boldsymbol{X} + \boldsymbol{Y}$という関係があるとします。そして、$\frac{\partial L}{\partial \boldsymbol{Z}}$がわかっていて、$\frac{\partial L}{\partial \boldsymbol{X}}$と$\frac{\partial L}{\partial \boldsymbol{Y}}$を求めたいとします。このとき
z_{ij} = x_{ij} + y_{ij}
この式の両辺を$\boldsymbol{X}$で微分して
\frac{\partial z_{ij}}{\partial \boldsymbol{X}} =
\begin{pmatrix}
0 && \cdots && 0\\
\vdots && \ddots && \vdots\\
0 & \cdots & 1 & \cdots & 0\\
\vdots && \ddots && \vdots\\
0 && \cdots && 0
\end{pmatrix}
第$(i, j)$成分のみが1で他の成分はすべて0です。
さらに両辺に$\frac{\partial L}{\partial z_{ij}}$をかけて
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\begin{pmatrix}
0 && \cdots && 0\\
\vdots && \ddots && \vdots\\
0 & \cdots & \frac{\partial L}{\partial z_{ij}} & \cdots & 0\\
\vdots && \ddots && \vdots\\
0 && \cdots && 0
\end{pmatrix}
これを$j$について和をとると
\sum_{j=1}^n
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\begin{pmatrix}
0 && \cdots && 0\\
\vdots && \ddots && \vdots\\
\frac{\partial L}{\partial z_{i1}} &
\frac{\partial L}{\partial z_{i2}} &
\frac{\partial L}{\partial z_{i3}} &
\cdots &
\frac{\partial L}{\partial z_{in}}\\
\vdots && \ddots && \vdots\\
0 && \cdots && 0
\end{pmatrix}
さらに$i$について和をとると
\sum_{i=1}^l
\sum_{j=1}^n
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\begin{pmatrix}
\frac{\partial L}{\partial z_{11}} &
\frac{\partial L}{\partial z_{12}} &
\frac{\partial L}{\partial z_{13}} &
\cdots &
\frac{\partial L}{\partial z_{1n}}\\
\frac{\partial L}{\partial z_{21}} &
\frac{\partial L}{\partial z_{22}} &
\frac{\partial L}{\partial z_{23}} &
\cdots &
\frac{\partial L}{\partial z_{2n}}\\
\vdots && \ddots && \vdots\\
\frac{\partial L}{\partial z_{m1}} &
\frac{\partial L}{\partial z_{m2}} &
\frac{\partial L}{\partial z_{m3}} &
\cdots &
\frac{\partial L}{\partial z_{mn}}\\
\end{pmatrix} =
\frac{\partial L}{\partial \boldsymbol{Z}}
ここで、上記の定理より
\frac{\partial L}{\partial \boldsymbol{X}} =
\sum_{i, j}
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\sum_{i=1}^l
\sum_{j=1}^n
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}}
したがって
\frac{\partial L}{\partial \boldsymbol{X}} =
\frac{\partial L}{\partial \boldsymbol{Z}}
同様にして
\frac{\partial L}{\partial \boldsymbol{Y}} =
\frac{\partial L}{\partial \boldsymbol{Z}}
#行列の積の証明
損失関数の値を$L$とし、$L$は$\boldsymbol{Z}$の関数であるとします。$\boldsymbol{X} \in R^{l \times m}, \boldsymbol{Y} \in R^{m \times n}, \boldsymbol{Z} \in R^{l \times n}$であり、$\boldsymbol{Z} = \boldsymbol{X} \boldsymbol{Y}$という関係があるとします。そして、$\frac{\partial L}{\partial \boldsymbol{Z}}$がわかっていて、$\frac{\partial L}{\partial \boldsymbol{X}}$と$\frac{\partial L}{\partial \boldsymbol{Y}}$を求めたいとします。このとき、行列の積の定義より
z_{ij} = \sum_{k=1}^mx_{ik}y_{kj}
この式の両辺を$\boldsymbol{X}$で微分して
\frac{\partial z_{ij}}{\partial \boldsymbol{X}} =
\begin{pmatrix}
0 && \cdots && 0\\
\vdots &&\ddots&& \vdots\\
y_{1j} & y_{2j} &y_{3j} & \cdots & y_{mj}\\
\vdots &&\ddots&& \vdots\\
0 && \cdots && 0
\end{pmatrix}
第$i$行が$\begin{matrix}y_{1j} & y_{2j} &y_{3j} & \cdots & y_{mj}\end{matrix}$であり、他の行はすべて0で埋まっている状態です。
さらに両辺に$\frac{\partial L}{\partial z_{ij}}$をかけて
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\begin{pmatrix}
0 && \cdots && 0\\
\vdots &&\ddots&& \vdots\\
y_{1j} \frac{\partial L}{\partial z_{ij}} &
y_{2j} \frac{\partial L}{\partial z_{ij}} &
y_{3j} \frac{\partial L}{\partial z_{ij}} &
\cdots &
y_{mj} \frac{\partial L}{\partial z_{ij}}\\
\vdots &&\ddots&& \vdots\\
0 && \cdots && 0
\end{pmatrix}
これを$j$について和をとると
\sum_{j=1}^n
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\begin{pmatrix}
0 && \cdots && 0\\
\vdots &&\ddots&& \vdots\\
\sum_{j=1}^n y_{1j} \frac{\partial L}{\partial z_{ij}} &
\sum_{j=1}^n y_{2j} \frac{\partial L}{\partial z_{ij}} &
\sum_{j=1}^n y_{3j} \frac{\partial L}{\partial z_{ij}} &
\cdots &
\sum_{j=1}^n y_{mj} \frac{\partial L}{\partial z_{ij}}\\
\vdots &&\ddots&& \vdots\\
0 && \cdots && 0
\end{pmatrix}
さらに$i$について和をとると
\sum_{i=1}^l
\sum_{j=1}^n
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\begin{pmatrix}
\sum_{j=1}^n y_{1j} \frac{\partial L}{\partial z_{1j}} &
\sum_{j=1}^n y_{2j} \frac{\partial L}{\partial z_{1j}} &
\sum_{j=1}^n y_{3j} \frac{\partial L}{\partial z_{1j}} &
\cdots &
\sum_{j=1}^n y_{mj} \frac{\partial L}{\partial z_{1j}}\\
\vdots &&\ddots&& \vdots\\
\sum_{j=1}^n y_{1j} \frac{\partial L}{\partial z_{lj}} &
\sum_{j=1}^n y_{2j} \frac{\partial L}{\partial z_{lj}} &
\sum_{j=1}^n y_{3j} \frac{\partial L}{\partial z_{lj}} &
\cdots &
\sum_{j=1}^n y_{mj} \frac{\partial L}{\partial z_{lj}}\\
\end{pmatrix}
ここで、上記の定理より
\frac{\partial L}{\partial \boldsymbol{X}} =
\sum_{i, j}
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}} =
\sum_{i=1}^l
\sum_{j=1}^n
\frac{\partial z_{ij}}{\partial \boldsymbol{X}}
\frac{\partial L}{\partial z_{ij}}
したがって
\frac{\partial L}{\partial \boldsymbol{X}} =
\begin{pmatrix}
\sum_{j=1}^n y_{1j} \frac{\partial L}{\partial z_{1j}} &
\sum_{j=1}^n y_{2j} \frac{\partial L}{\partial z_{1j}} &
\sum_{j=1}^n y_{3j} \frac{\partial L}{\partial z_{1j}} &
\cdots &
\sum_{j=1}^n y_{mj} \frac{\partial L}{\partial z_{1j}}\\
\vdots &&\ddots&& \vdots\\
\sum_{j=1}^n y_{1j} \frac{\partial L}{\partial z_{lj}} &
\sum_{j=1}^n y_{2j} \frac{\partial L}{\partial z_{lj}} &
\sum_{j=1}^n y_{3j} \frac{\partial L}{\partial z_{lj}} &
\cdots &
\sum_{j=1}^n y_{mj} \frac{\partial L}{\partial z_{lj}}\\
\end{pmatrix}
すなわち
\frac{\partial L}{\partial x_{ij}} =
\sum_{k=1}^n y_{jk} \frac{\partial L}{\partial z_{ik}} =
\sum_{k=1}^n \frac{\partial L}{\partial z_{ik}} y_{jk}
ここで、$\boldsymbol{X} \in R^{l \times m}, \boldsymbol{Y} \in R^{m \times n}, \boldsymbol{Z} \in R^{l \times n}$であり、$\boldsymbol{Z} = \boldsymbol{X} \boldsymbol{Y}$であるとき、$
z_{ij} = \sum_{k=1}^mx_{ik}y_{kj}
$であることを思い出すと、$\boldsymbol{Y} \rightarrow \boldsymbol{Y}^T$で$y_{jk} \rightarrow y_{kj}$であることを利用して
\frac{\partial L}{\partial \boldsymbol{X}} =
\frac{\partial L}{\partial \boldsymbol{Z}} \boldsymbol{Y}^T
$\frac{\partial L}{\partial \boldsymbol{X}}$が求まったので、次に$\frac{\partial L}{\partial \boldsymbol{X}}$を求める。転置行列の性質(参考)を用いて、$\boldsymbol{Z} = \boldsymbol{X} \boldsymbol{Y}$の両辺を転置すると、$\boldsymbol{Z}^T = \boldsymbol{Y}^T \boldsymbol{X}^T$が導ける。よって、先の結果と転置行列の性質を用いて
\frac{\partial L}{\partial \boldsymbol{Y}^T} =
\frac{\partial L}{\partial \boldsymbol{Z}^T} \boldsymbol{X}
すなわち
\left( \frac{\partial L}{\partial \boldsymbol{Y}} \right) ^ T =
\left( \frac{\partial L}{\partial \boldsymbol{Z}} \right) ^ T \boldsymbol{X}
両辺を転置して
\frac{\partial L}{\partial \boldsymbol{Y}} =
\boldsymbol{X}^T \frac{\partial L}{\partial \boldsymbol{Z}}