【誤差逆伝搬】多層パーセプトロンのまとめ(1)

最近注目を集めている深層学習ですが、やっと私も勉強を始めました。特にその中でも、画像認識で有用性が示されている畳み込みニューラルネットワークについて注目してます。それで、なんだか難しそうなんですが、大雑把に言うと、

画像フィルタリング → プーリング(画質を縮小)

を何度か繰り返したのち、最後に多層パーセプトロンを結合させて識別結果を出力するという方法らしい。で、注目すべきなのは、最後の多層パーセプトロンの結合重みだけでなく、入力層に近い画像フィルタリングのフィルタ係数の値もバックプロパゲーションで学習させるとのこと。

ふむ、なんか少しは理解できそうな気がします。

それで、先ずは出力側の多層パーセプロンの部分だけを備忘録代わりに書いていきたいと思います。

まず、$j$番目のニューロンへの$I$個の入力を$x_i$、出力を$y_j$、結合重みを$w_{ij}$とすると、
\[
u_j = \sum_{i=0}^{I-1} w_{ij} x_i – \theta_j \\
y_j = f(u_j)
\]
と書く。ただし、$w_{I, j}=\theta_j$とおいて$x_{I}=1$と定義すると、以下のように書けます。

\[
u_j = \sum_{i=0}^{I} w_{ij} x_i \\
y_j = f(u_j)
\]

$I=2$、$J=2$の場合は以下の図のようになります。もちろん、これだけでは2層なので隠れ層がなくて不十分。だけど、まずはここから。

ここで、$f(u) = 1/(1+e^{-u})$で表される活性化関数(シグモイド関数)。出力結果が教師信号$t_j$と等しくなればよいので、$E = \sum_{j=1}^{J} (t_j – y_j)^2$を定義して、この値がゼロに近づくように重み$w_{ij}$の値を更新する。これは最急降下法を用いて、
\[
w_{ij} \leftarrow w_{ij} – \alpha \frac{\partial E}{\partial w_{ij}}
\]
で値を更新すれば良い。$\alpha $は学習係数で小さい正の値(0.1とか0.01など)を設定する。ここで、$\partial E/\partial w_{ij}$の値は解析的に求められるので、
\[
\frac{\partial E}{\partial w_{ij}} = \frac{dE}{dy_j}\frac{dy_j}{du_j}\frac{\partial u_j}{\partial w_{ij}}
\]
により、
\[
\frac{\partial E}{\partial w_{ij}} = -2(t_j – y_j)\cdot y_j(1-y_j)\cdot x_i
\]
ドット($\cdot $)で各々の偏微分を区切ってます。これで、出力層との結合重み$w_{ij}$の学習ができます。さて、さらにもう一層入力側の結合重みについては次の投稿にしたいと思います。