らんだむな記憶

blogというものを体験してみようか!的なー

ニューラルネットワーク (4) 誤差逆伝播法 (1)

ニューラルネットワークの損失関数に対してgradient descentを適用することを考える。

\begin{equation}
J(\Theta) = \frac{1}{m} \sum_{p = 1}^m \sum_{k = 1}^K \mathrm{Cost}(h_\Theta(x^p)_k,\ y^p_k) + R(\Theta)
\end{equation}
だった(記号が紛らわしくなるので、ここでは訓練データのインデックスをpで表現する)。$\theta_{ij}^\ell$での偏微分を考える。
正則化項は
\begin{equation}
\frac{\partial R(\Theta)}{\partial \theta_{ij}^\ell} = \frac{\partial}{\partial \theta_{ij}^\ell} \frac{\lambda}{2 m} \sum_{\ell = 1}^{L - 1} \sum_{j = 1}^{s_{\ell}} \sum_{i = 1}^{s_{\ell+1}} (\theta_{ij}^{\ell})^2 = \frac{\lambda}{m} \theta_{ij}^\ell,\ 1 \le \ell \le L - 1,\ 1 \le i \le s_{\ell+1},\ 1 \le j \le s_{\ell}
\end{equation}
また、
\begin{equation}
\frac{\partial R(\Theta)}{\partial \theta_{i0}^\ell} = 0,\ 1 \le \ell \le L - 1,\ 1 \le i \le s_{\ell+1}
\end{equation}
で簡単に求まる。このため、一旦、$J(\Theta)$においては$R(\Theta) = 0$と思うことにして、後で計算結果を併せることにする。
さて、$\frac{\partial J(\Theta)}{\partial \theta_{ij}^\ell}$を考えたいが、ここで$J(\Theta)$の依存変数について考えなおしてみる。

簡単のため、$m = 1$として考える。
ネットワーク内のデータの伝播を考えると、
\begin{align}
a^1 &= x \\
z^{\ell + 1} &= \Theta^{\ell} a^{\ell},\ 1 \le \ell \le L - 1 \\
a^{\ell + 1} &= \varsigma(z^{\ell + 1}) = \varsigma(\Theta^{\ell} a^{\ell}),\ 1 \le \ell \le L - 1 \\
&\cdots \\
z^L &= \Theta^{L - 1} a^{L - 1} \\
a^L &= h_{\Theta}(x) = \varsigma(z^L) = \varsigma(\Theta^{L - 1} a^{L - 1})
\end{align}
という形になっている。
$\ell$番目の層から$\ell + 1$番目の層でのデータの流れを考えると、$J(\Theta)$は$a^{\ell + 1}$と$\Theta^{\ell + 1}, \Theta^{\ell + 2}, \cdots, \Theta^{L - 1}$で決まることが分かる。$a^{\ell + 1}$には$\Theta^{1}, \cdots, \Theta^{\ell}$の情報だけが入っている。よって、
\begin{equation}
J(\Theta) = J(a^{\ell + 1}, \Theta^{\ell + 1}, \cdots, \Theta^{L - 1}),\ 1\le \ell \le L - 1
\end{equation}
となる。
さて、この$\theta_{ij}^\ell$での偏微分を考えると、連鎖律より
\begin{equation}
\frac{\partial J(\Theta)}{\partial \theta_{ij}^\ell} = \sum_{p = 1}^{s_{\ell + 1}} \frac{\partial J}{\partial a_p^{\ell + 1}} \frac{\partial a_p^{\ell + 1}}{\partial \theta_{ij}^\ell}
\end{equation}
となる。
\begin{align}
\frac{\partial a_p^{\ell + 1}}{\partial \theta_{ij}^\ell} =
\begin{cases}
\varsigma^\prime(z_p^{\ell + 1}) a_j^{\ell},\ &(p = i) \\
0,\ &(p \neq i)
\end{cases}
\end{align}
である。すると、生き残る項は、
\begin{equation}
\frac{\partial J(\Theta)}{\partial \theta_{ij}^\ell} = \frac{\partial J}{\partial a_i^{\ell + 1}} \varsigma^\prime(z_i^{\ell + 1}) a_j^{\ell}
\end{equation}
ということになる。
ここで天下り的に
\begin{equation}
\delta_i^{\ell} := \frac{\partial J}{\partial a_i^{\ell}} \varsigma^\prime(z_i^{\ell}),\ 2 \le \ell \le L,\ 1 \le i \le s_{\ell}
\end{equation}
と置くと、
\begin{equation}
\frac{\partial J(\Theta)}{\partial \theta_{ij}^\ell} = a_j^{\ell}\,\delta_i^{\ell + 1},\ 1 \le \ell \le L -1,\ 1 \le i \le s_{\ell + 1},\ 0 \le j \le s_{\ell}
\end{equation}
として、求める偏導関数が求まることになる。

なお、
\begin{equation}
\frac{\partial J}{\partial z_i^{\ell}} = \frac{\partial J}{\partial a_i^{\ell}} \frac{\partial a_i^{\ell}}{\partial z_i^{\ell}} = \frac{\partial J}{\partial a_i^{\ell}} \frac{d \varsigma(z_i^{\ell})}{d z_i^{\ell}} = \frac{\partial J}{\partial a_i^{\ell}} \varsigma^\prime(z_i^{\ell})
\end{equation}
なので、要するに、
\begin{equation}
\delta_i^{\ell} = \frac{\partial J}{\partial z_i^{\ell}}
\end{equation}
が成立する。