第7章 [誤差逆伝播法] P275~(中盤) 【Pythonで動かして学ぶ! あたらしい機械学習の教科書】


誤差逆伝播法(バックプロパゲーション)

この誤差逆伝播法では、ネットワークの出力で生じる誤差(教師信号との差)の情報を使って、出力層の重み$v_{kj}$から中間層への重み$w_{ji}$へと入力法こと逆向きに重みを更新していくことから、この名前がつけられている。
しかし、この誤差逆伝播法は勾配法そのもので、勾配法をフィードフォワードニューラルネットに適用すると誤差逆伝播ほうが自然と導出される。

クラス分類をさせるので、誤差函数には式7-18の平均交差エントロピー誤差を考える(P266)
$$
E(w,v)=-\frac{1}{N}\sum_{n=0}^{N-1}\sum_{k=0}^{K-1}t_{nk}log(y_{nk})\hspace{40pt}(7-18)
$$

・ここでやりたいことは$\partial{E}/ \partial{w_{ji}}$(平均交差エントロピー誤差)を求めたい。
・データが1つの時の交差エントロピー$E_n$を考えたときに、その微分は$\partial{E_n} /
\partial{w_{ji}}$で求まるから、本命の$\partial{E}/ \partial{w_{ji}}$(平均交差エントロピー誤差)はデータの個数分の$\partial{E_n} / \partial{w_{ji}}$を求めてそれを平均すれば良い
ここでtはt=[0,0,1]とかで表していた、教師信号(なんのクラスを表すかの信号)

それが↓
$$
\frac{\partial{E}}{\partial{w_{ji}}}=\frac{\partial}{\partial{w_{ji}}}\frac{1}{N}
\sum_{n=0}^{N-1}E_n
=\frac{1}{N}\sum_{n=0}^{N-1}
\frac{\partial{E_n}}{\partial{w_{ji}}}
$$

今回はD=2,M=2,K=3の場合を考える。

D:入力値の個数
M:中間層の個数
K:出力の個数
w,v:重み

重みは、w,vの二つあるので、まず$E_n$を$v_{kj}$で偏微分した式を求める。その次に$E_n$を$w_{ji}$で偏微分した式を求める。(順番に特に意味はなさそう。誤差逆伝播法では、誤差を元に逆順に式展開が伝播するため逆から行っている。)

$
\frac{\partial{E}}{\partial{v_{kj}}}
$
の$E_n$の部分は7-22の$E_n(w,v)=-\sum_{k=0}^{K-1}t_{nk}log(y_{nk})$なので、$\frac{\partial{E}}{\partial{v_{kj}}}$これは連鎖律で偏微分を求めることができる。

連鎖律↓
$$
\frac{\partial{E}}{\partial{v_{kj}}}=
\frac{\partial{E}}{\partial{a_k}}\frac{\partial{a_k}}{\partial{v_{kj}}}
$$

$a_k$は入力値とダミー変数の総和

ここでは、まず左側の$\frac{\partial{E}}{\partial{a_k}}$から考える。
Eの部分は$E_n$が省略されているものなので、ここを式7-22で置き換えると、(k=0の場合で考える[データ数0個?])

$$
\frac{\partial{E}}{\partial{a_0}}= \
\frac{\partial}{\partial{a_0}}(-t_0logy_0-t_1logy_1-t_2logy_2)
$$

となる。
ここで対数の微分の公式を使うと
・説明にあるようにtは教師信号でyは入力総和の出力なので、$a_0$と関係があるため。
ここでtはt=[0,0,1]とかで表していた、教師信号(なんのクラスを表すかの信号)

対数の微分:
$
\begin{align*} (\log x)' = \frac{1}{x} \end{align*}
$

と表せる↓
$$
\frac{\partial{E}}{\partial{a_0}}=\
-t_0\frac{1}{y_0}\frac{\partial{y_0}}{\partial{a_0}}
-t_1\frac{1}{y_1}\frac{\partial{y_1}}{\partial{a_0}}
-t_2\frac{1}{y_2}\frac{\partial{y_2}}{\partial{a_0}}
\hspace{40pt}(7-27)
$$

第7章(前半)で説明したように$\partial{y_0} / \partial{a_0}$の部分ではソフトマックス関数が使用されている。

そこで、4-130で導いた、ソフトマックス関数の偏微分の公式通りにすると、
公式4-130:
$\frac{\partial{y_j}}{\partial{x_i}}=y_j(l_{ij}-y_i)$
・iは入力値の係数、jは出力値の係数
ここで、lは$i=j$のとき1、$i\neq{j}$の時0

式7-28のようになります。
$$
\frac{\partial{y_0}}{\partial{a_0}}=y_0(1-y_0)
$$
今回はダミー変数を含めるとM=K=3なのでlの部分は1

残りの二つは、入力値の係数と、出力値の係数が異なるのでそれぞれ
$$
\frac{\partial{y_1}}{\partial{a_0}}=-y_0y_1
$$
$$
\frac{\partial{y_2}}{\partial{a_0}}=-y_0y_2
$$
となる。

それぞれ3つを代入すると
よって、式7-27は以下のようになる(7-31):

\begin{align}
\frac{\partial{E}}{\partial{a_0}}&=
-t_0\frac{1}{y_0}\frac{\partial{y_0}}{\partial{a_0}}
-t_1\frac{1}{y_1}\frac{\partial{y_1}}{\partial{a_0}}
-t_2\frac{1}{y_2}\frac{\partial{y_2}}{\partial{a_0}}\\
&=-t_0(1-y_0)+t_1y_0+t_2y_0\\
&=(t_0+t_1+t_2)y_0-t_0\\
&=y_0-t_0
\end{align}

最後は$t_0+t_1+t_2=1$を使った。

$y_0$が1番目のノードのニューロンの出力で、$t_0$がそれに対する教師信号なので$y_0-t_0$は誤差を表している。

同じようにk番目のデータ(k=1,2)を考えると式(7-32)のようになる。

そして、式7-25の連鎖律の左側の部分は7-33のように表せる。(偏微分左側)

式7-25の $\partial{a_k} / \partial{v_kj}$ の部分を考える。
k=0の場合を考えると、総和の$a_0$は中間層の出力(z)と中間層から出力層への重みvの総和なので、
$$
a_0=v_{00}z_0+v_{01}z_1+v_{02}z_{02}
$$

なので、$a_0$をそれぞれのv($v_0,v_1,v_2$)について解くと7-37のようになる。

それで、7-37をまとめて書くと、7-38になる。

k=1,k=2の場合でも同様な結果が得られるので、全てまとめて式7-39のようになる
$$
\frac{\partial{a_k}}{\partial{v_{kj}}}=z_j\hspace{40pt}(7-39)
$$

これで偏微分の左側、右側が揃ったので、組み合わせると式7-40のようになる。

式7-41で言っていることは、今欲しい値は$v_{kj}$という適切な重みの値が欲しいので、その値を適切に調整する時の理論が図で表していること。
・zは(シグモイドを通しているから)0~1の値をとる確率で出力yと教師信号tの誤差分をなくすようなvになりたい分けだから、誤差($\delta_k^{(2)}$のぶんだけvの値を変更する。)
・誤差($\delta_k^{(2)}$)が0の場合 = 出力$y_k$と目標データ(教師信号)$t_k$ が一致していれば,($y_k-t_k=0$)変更分の$-\alpha\delta_k^{(2)}z_j$は0となる。

(重要)P281:

目標データ$t_k$が0なのに、出力$y_k$が0よりも大きかった場合、誤差$\delta_k^{(2)}=(y_k-t_k)$は正の値となります。$z_j$は常に正のですから、結果、$-\alpha\delta_k^{(2)}z_j$は負の数となり、$v_{kj}$は減る方向へ修正される。つまり、出力が大きすぎて誤差が生じたので、ニューロン$z_j$からの影響を絞る方向へ重みが変更されると解釈できます。また、入力$z_j$が大きかったら、その結合からの出力への寄与が大きかったことになるので、$v_{kj}$の変更量もその分大きくするようになっていると解釈できます。

ここの部分が非常に重要で、ここで言っていることは、
・目的データtよりも出力データyの方が大きければ、vの変更はその出力yを減らす方に変化する(v=0.2とかになるのかな?)
・そして、誤差(y-t=0)がなければ、vは変わらない
・また、入力値z(これは確率を表す)が大きければvの変更量もその分大きくなる

Eのwで微分を求める。

$\partial{E}/\partial{w_{ji}}$を求める

・式7-43は7-34と同じ
・式7-44は7-39と同じ
・なので、同様に式7-45は7-41と同じ
として処理できる。

$\delta_{j}^{(1)}$をとりあえずとしておいたで、それが何かを求める。

まず、最初に7-43の式を連鎖律で偏微分すると:
$$
\delta_j^{(1)}=\frac{\partial{E}}{\partial{b_j}}=
\biggl(
\sum_{k=0}^{K-1}\frac{\partial{E}}{\partial{a_k}}
\frac{\partial{a_k}}{\partial{z_j}}
\biggr)
\frac{\partial{z_j}}{\partial{b_j}}
$$
なるのを理解するのに、以下を理解する必要がある。

・ここでは、$g_0$と$g_1$が$w_0$とw_1$の関数で、fがg_0$とg_1$の関数となっている場合となっているので、これを置き換える。

$$
E(a_k(z_0,z_1))
$$
(k=0~2の3つ)

なので、(4-62)が適用できる。
という関数になる。
$$
\frac{\partial}{\partial{z_j}}E(a_0(z_0,z_1),a_1(z_0,z_1),a_2(z_0,z_1))=\sum_{k=0}^{K-1}\frac{\partial{E}}{\partial{a_k}}\frac{\partial{a_k}}{\partial{z_j}}
$$
となる。

これを組み合わせると、式7-46のように展開できる。

式7-47がなぜ$v_{kj}$になるかわかりませんが、P283で説明している通り、$\delta_{j}^{(1)}$は以下のようになる
・式7-47では、$z_j$について偏微分しろと言っているので、それ以外のvは定数とおく、z=1として残るところのvだけ定数も残るので、$v_{kj}$が残る。

それらを合わせると↓

$$
\delta_{j}^{(1)}=h'(b_j)\sum_{k=0}^{K-1}v_{kj}\delta_{k}^{(2)}
$$

P284~ 誤差逆伝播法まとめ

誤差逆伝播法で行いたいことは、w,vなどの重みパラメータの最適化であり、逆向きに伝播させることでそれを可能にしている。

・最初の$h'(b_j)$は、シグモイド関数で変換されたものなので、$b_j$は0~1の値をとっている、そのため、この値は常に正の値をとる。
・$\frac{\partial{E}}{\partial{a_k}}=
\delta_{k}^{(2)}=
(y_k-t_k)h'(a_k)$なので、出力層の出力yに重みvをかけて集めてきているものです。(出力層での誤差が大きければ、v*(大きい値)となり、vが大きく働く。) 

①では、まず、適当にw,vを設定して、出力yを得る。
②教師信号のtがあるので、そのtとyを比較する。
③今まで導出した式を用いて誤差を逆向きに伝播する。具体的には全ての誤差(y-t)と重みv(2層目)をかけて総和をとり、それを中間層のシグモイド関数を通した総和$h'(b_0)$をかける。(それが③の図の式)
④誤差が0になるようにw,vを更新する。(誤差がわかったので、その分が0になるようにする。)


 誤差逆伝播法式まとめ