はじめに
全結合型ニューラルネットワークの逆伝搬の式の計算で、行列のどれの転置をとるのか、どっちからかけるのか、ということが良くわからなくなります。そういう時は、各行列の次元を考えればよいですね。
行列の基本的なこと
行列の掛け算
行列
A[l, m] : l行m列
B[m, n] : m行n列
のとき、行列の掛け算でC=ABを計算すると
C[l, n]=A[l, m]B[m, n]
となって、l行n列の行列Cとなる。
真ん中のmの数字が同じ時、mに関して掛け合わせることができるのでmの数字が消えて、残りのインデックスが残った行列ができる。
なので、B[m, n]A[l, m]の掛け算を行うことはできない。
行列の転置
A[l, m]の行列の転置をとるとは行と列を入れ替えることで、
$A^T$と表し、次元は[m, l]になる。
$A^T[m, l]$
各パラメータの次元の確認
入力側のノード数:$d_1$
出力側のノード数:$d_2$
バッチサイズ:$N$
であるとき、
入力側のデータ: $X[N, d_1]$
出力側のデータ: $Y[N, d_2]$
で表すことができ、この時の重み係数とバイアス係数は、
重み係数:$W[d_1, d_2]$
バイアス係数: $b[d_2]$
で表すことができる。
このとき、
$Y[N, d_2]=X[N, d_1]W[d_1, d_2]+b[d_2]$
という関係式がなりたつ。$d_1$が掛け合わされてなくなり、$[N, d_2]$の次元になっている。
行列の足し算は、numpy式?で計算される。
逆伝搬の式
勾配を求めるとは、損失関数$L$に対して、
$\frac{\partial L}{\partial X}$, $\frac{\partial L}{\partial W}$, $\frac{\partial L}{\partial b}$
を求めるという事。この勾配を求めるときはどれも
$\frac{\partial L}{\partial Y}[N, d_{2}]$
を用いる。
入力の勾配
$\frac{\partial L}{\partial X}=\frac{\partial L}{\partial Y}\frac{\partial Y}{\partial X}$であって$\frac{\partial Y}{\partial X}$は$W$である。
なので、$\frac{\partial L}{\partial Y}[N, d_{2}]$に$W[d_1, d_2]$をかけることで入力の勾配$\frac{\partial L}{\partial X}[N, d_1]$が得られる。
次元に注意すれば
$\frac{\partial L}{\partial X}[N, d_1]=\frac{\partial L}{\partial Y}[N, d_{2}]W^T[d_2, d_1]$
となる。
\frac{\partial L}{\partial X}=\frac{\partial L}{\partial Y}W^T
重みパラメータの勾配
$\frac{\partial L}{\partial Y}[N, d_{2}]$に$X[N, d_1]$をかけることで重みパラメータの勾配$\frac{\partial L}{\partial W}[d_1, d_2]$が得られる。
次元に注意すれば
$\frac{\partial L}{\partial W}[d_1, d_2]=X^{T}[d_1, N]\frac{\partial L}{\partial Y}[N, d_{2}]$
となる。
\frac{\partial L}{\partial W}=X^{T}\frac{\partial L}{\partial Y}
バイアスパラメータの勾配
$\frac{\partial L}{\partial Y}[N, d_{2}]$に$\frac{\partial Y}{\partial b}$をかけることでバイアスパラメータの勾配を求めることができる。これはN個の要素が全て1である行列[N]になるので、
\frac{\partial L}{\partial b}=(\frac{\partial L}{\partial Y}をサンプル方向に足したもの)
別の表記
次の式が基本にある。
dL=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} dy_{ij}
入力の勾配
\frac{\partial L}{\partial x_{kl}}=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} \frac{\partial y_{ij}}{\partial x_{kl}}
同じサンプリングのとこだけが残るので、iに関する和は消える。つまり、
\frac{\partial L}{\partial x_{kl}}=\sum_{j}\frac{\partial L}{\partial y_{kj}} \frac{\partial y_{kj}}{\partial x_{kl}}
$\frac{\partial y_{kj}}{\partial x_{kl}}$は、$w_{lj}$になるので、結局、
\frac{\partial L}{\partial x_{kl}}=\sum_{j}\frac{\partial L}{\partial y_{kj}} w_{lj}
重みパラメータの勾配
\frac{\partial L}{\partial w_{mn}}=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} \frac{\partial y_{ij}}{\partial w_{mn}}
ここで、
y_{ij}=\sum_{k}x_{ik}w_{kj}+b_{j}
なので、
\frac{\partial y_{ij}}{\partial w_{mn}}=\sum_{k}x_{ik}\frac{\partial w_{kj}}{\partial w_{mn}}=\sum_{k}x_{ik}\delta_{km} \delta_{jn}=x_{im}\delta_{jn}
という関係式に注意すれば、
\begin{align}
\frac{\partial L}{\partial w_{mn}} & = \sum_{i, j}\frac{\partial L}{\partial y_{ij}} x_{im} \delta_{jn}\\
&= \sum_{i}\frac{\partial L}{\partial y_{in}} x_{im}
\end{align}
バイアスパラメータの勾配
\frac{\partial L}{\partial b_{l}}=\sum_{i,j}\frac{\partial L}{\partial y_{ij}} \frac{\partial y_{ij}}{\partial b_{l}}
これは、$\frac{\partial y_{ij}}{\partial b_{l}}=\delta_{jl}$なので、結局次の通りになる。
\frac{\partial L}{\partial b_{l}}=\sum_{i}\frac{\partial L} {\partial y_{il}}
すなわち、サンプリング方向の和になっている。