Help us understand the problem. What is going on with this article?

行列の和と積の誤差逆伝播法の証明

ゼロから作る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}}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした