Back Propagation とは
前述より,重みと閾値はランダムに初期化され,学習データに基づいて調整される.ニューラルネットワークが望ましい出力をするために,重みを調整する必要がある.Back Propagation法は,それを行う手法である.
Back Propagation の導出
入力層I,中間層J,出力層Kそれぞれ1つの3層ニューラルネットワークを考える.前向き計算で示した式より,ニューロンの出力をo,閾値を\theta,積和をX,シグモイド関数をf(x),とすると,層Kにおけるニューロンkの出力、いわゆるニューラルネットワークの出力を以下の式で示す.
\begin{align}
X_k =& \sum_{j=1}^{J}{o_j w_{kj}} + \theta_k \\
o_k =& f(X_k)
\end{align}
二乗和誤差
しかし,重みと閾値はランダムに初期化されるため,出力は望ましい出力と完全に違うだろう.そこで,望ましい出力である学習データ,いわゆる教師信号t_kを用いて,入力信号pに対するニューラルネットワークの出力が望ましい出力からどれだけ離れているかを計算する.これを誤差Eといい,今回は二乗和誤差を用いる.
E_p = \frac{1}{2} \sum_{k=1}^{K} (o_k - t_k)^2
これは,入力信号pに対する出力の二乗和誤差である.すべてのP個の入力信号のパターンに対する二乗和誤差E_{all}は以下のようになる.
E_{all} = \sum_{p=1}^{P} E_p
最急降下法
望ましい出力が得られるように重みを調整するというのは,ニューラルネットワーク全体の出力の誤差であるE_{all}が最小になるように重みを調整する.Back Propagation 法では,E_{all}を最小化するためにはそれぞれのE_pを最小化する.ここで,最急降下法が登場する.学習係数を\etaとし,最急降下法を用いて,E_pを最小化するような重みwを見つければよい.
w = w - \eta \frac{\partial E_p}{\partial w}
上式より,\frac{\partial E_p}{\partial w}がわかれば,重みが調整できるようになる.それで,\frac{\partial E_p}{\partial w}を求めるために,出力ニューロンの場合と中間ニューロンの場合に分けて考える.
出力ニューロンの重み
出力ニューロンの重みを対象にすると,\frac{\partial E_p}{\partial w_{kj}}を求めるには,E_pの式をw_{kj}で表す必要がある。そこで,チェーンルールを用いる.
\begin{align}
E_p =& \frac{1}{2} \sum_{k=1}^{K} (o_k - t_k)^2 \\
o_k =& f(X_k) \\
X_k =& \sum_{j=1}^{J}{o_j w_{kj}} + \theta_k
\end{align}
より,
\begin{align}
\frac{\partial E_p}{\partial w_{kj}} =& \frac{\partial E_p}{\partial o_k} \frac{\partial o_k}{\partial X_k} \frac{\partial X_k}{\partial w_{kj}}
\end{align}
ここで,\frac{\partial E_p}{\partial o_k},\frac{\partial o_k}{\partial X_k},\frac{\partial X_k}{\partial w_{kj}}をそれぞれ偏微分し求める.
\begin{align}
\frac{\partial E_p}{\partial o_k} =& (o_k - t_k) \\
\frac{\partial o_k}{\partial X_k} =& f'(X_k) \\
\frac{\partial X_k}{\partial w_{kj}} =& o_j \\ \\
\end{align}
よって,
\begin{align}
\frac{\partial E_p}{\partial w_{kj}} =& (o_k - t_k) f'(X_k) o_j \\
w_{kj} =& w_{kj} - \eta (o_k - t_k) f'(X_k) o_j
\end{align}
さらに,\frac{\partial E_p}{\partial o_k} \frac{\partial o_k}{\partial X_k} = (o_k - t_k) f'(X_k) = \delta_kとすると,
\begin{align}
\frac{\partial E_p}{\partial w_{kj}} =& \delta_k o_j \\
w_{kj} =& w_{kj} - \eta \delta_k o_j
\end{align}
\left( \delta_k = \frac{\partial E_p}{\partial o_k} \frac{\partial o_k}{\partial X_k} = (o_k - t_k) f'(X_k) \right)
以上より,出力ニューロンに対する重みを最急降下法で修正できる.また,閾値\theta_kに対して同様な導出を行うと,以下のようになる.
\begin{align}
\frac{\partial E_p}{\partial \theta_k} =& \delta_k \\
\theta_k =& \theta_k - \eta \delta_k
\end{align}
中間ニューロンの重み
同様に,中間ニューロンの重みを対象にすると,\frac{\partial E_p}{\partial w_{ji}}を求めるには,E_pの式をw_{ji}で表す必要がある。そこで,チェーンルールを用いる.
\begin{align}
E_p =& \frac{1}{2} \sum_{k=1}^{K} (o_k - t_k)^2 \\
o_k =& f(X_k) \\
X_k =& \sum_{j=1}^{J}{o_j w_{kj}} + \theta_k \\
o_j =& f(X_j) \\
X_j =& \sum_{i=1}^{I}{o_i w_{ji}} + \theta_j
\end{align}
より,
\begin{align}
\frac{\partial E_p}{\partial w_{ji}} =&
\frac{\partial E_p}{\partial o_k}
\frac{\partial o_k}{\partial X_k}
\frac{\partial X_k}{\partial o_j}
\frac{\partial o_j}{\partial X_j}
\frac{\partial X_j}{\partial w_{ji}}
\end{align}
ところが,実はこれが間違っている.中間層にある中間ニューロンは出力層のK個の出力ニューロンに接続しているため,中間ニューロンの重みw_{ji}がE_pに影響を及ぼすのがK通りある.そのため,各出力ニューロンに対して足し合わせる必要がある.つまり,正しい式は以下に示す.
\begin{align}
\frac{\partial E_p}{\partial w_{ji}} =&
\sum_{k=1}^{K}
\frac{\partial E_p}{\partial o_k}
\frac{\partial o_k}{\partial X_k}
\frac{\partial X_k}{\partial o_j}
\frac{\partial o_j}{\partial X_j}
\frac{\partial X_j}{\partial w_{ji}}
\end{align}
それぞれを解くと,
\begin{align}
\frac{\partial E_p}{\partial o_k}
\frac{\partial o_k}{\partial X_k} =& \delta_k \\
\frac{\partial X_k}{\partial o_j} =& w_{kj} \\
\frac{\partial o_j}{\partial X_j} =& f'(X_j) \\
\frac{\partial X_j}{\partial w_{ji}} =& o_i
\end{align}
よって,
\begin{align}
\frac{\partial E_p}{\partial w_{ji}} =&
\sum_{k=1}^{K}
\delta_k w_{kj} f'(X_j) o_i \\
w_{ji} =& w_{ji} - \eta \sum_{k=1}^{K} \delta_k w_{kj} f'(X_j) o_i
\end{align}
さらに,\sum_{k=1}^{K}\frac{\partial E_p}{\partial o_k} \frac{\partial o_k}{\partial X_k} \frac{\partial X_k}{\partial o_j} \frac{\partial o_j}{\partial X_j} = \sum_{k=1}^{K}\delta_k w_{kj}f'(X_j) = \delta_jとすると,
\begin{align}
\frac{\partial E_p}{\partial w_{ji}} =&
\delta_j o_i \\
w_{ji} =& w_{ji} - \eta \delta_j o_i
\end{align}
\left( \delta_j = \sum_{k=1}^{K}\frac{\partial E_p}{\partial o_k} \frac{\partial o_k}{\partial X_k} \frac{\partial X_k}{\partial o_j} \frac{\partial o_j}{\partial X_j} = \sum_{k=1}^{K}\delta_k w_{kj}f'(X_j) \right)
以上より,中間ニューロンに対する重みを最急降下法で修正できる.また,閾値\theta_jに対して同様な導出を行うと,以下のようになる.
\begin{align}
\frac{\partial E_p}{\partial \theta_j} =&
\delta_j \\
\theta_j =& \theta_j - \eta \delta_j
\end{align}
Part 3: https://zenn.dev/aizakovzky/articles/1a74e6f5133e89
Discussion