コンボリューショナル(畳み込み)ニューラルネットワークConvolutional Neural Network(CNN)の誤差逆伝播法

従来のニューラルネットワークの誤差逆伝播法に関してはすでに解説したので、今回はディープラーニングでよく用いられるコンボリューショナル(畳み込み)ニューラルネットワークの誤差逆伝播法(Back Propagation)について解説する。

コンボリューショナルニューラルネットワークの構造を解説した投稿の図2を念頭に置きながら、以下の式の意味を理解して頂きたい。

先ず、\(p-1\)番目の層は2次元配列\((i,j)\)のユニットで構成された、出力\(X_{i j}^{p-1}\)のコンボリューション層であり、\(p\)番目の層はk座標にe枚の特徴マップを持つ層であるとする。コンボリューションのカーネルサイズをm×m、カーネルの2次元座標を\((a,b)\)、結合荷重を\(w_{abk}\)とすると、\(p\)番目の層への入力\({Y}_{ijk}^{p}\)と出力\({X}_{ijk}^{p}\)は式(1)、(2)で表される。

\[\begin{eqnarray*}
{Y}_{ijk}^{p} &=& \sum _{ a=0 }^{ m-1 }{ \sum _{ b=0 }^{ m-1 }{ {w}_{abk} {X}_{ (i+a)(j+b) }^{p-1}} }\qquad(1)\\
\\X_{ijk}^{p} &=& f(Y_{ijk}^{p}) \qquad \qquad \qquad (2)
\end{eqnarray*}\] ここで\(k\)は特徴マップの枚数のインデックスであるので\(0~e-1\)の値をとる。fは非線形活性化関数を表している。\(p-1\)番目の層がd枚の特徴マップで構成される場合は、式(1)は次式のようになる。

\[{Y}_{ijk}^{p}=\sum _{ c=0 }^{ d-1 }\sum _{ a=0 }^{ m-1 }{ \sum _{ b=0 }^{ m-1 }{ {w}_{abck} { X }_{ (i+a)(j+b)c}^{p-1} } }\qquad(3)\]ここで\(c\)は\(p-1\)番目の層の特徴マップのインデックスを表す。式(3)は式(1)と同様の形をしているので、以下では式(1)を例として話を進める。

誤差逆伝播法では各層の出力の誤差を\(E\)とすると、1回の学習における結合荷重の微小更新量\(\Delta {w}_{abk}\)は学習率\(\eta\)を用いて次式のように設定される。
\[\Delta {w}_{abk} = -\eta\frac {\partial E}{ \partial {w}_{abk}} \qquad (4) \] コンボリューション層のユニット数がN×Nで構成されているとすると、コンボリューションのカーネルが移動できるユニット数は(N-m+1)×(N-m+1)となる。これら全てが結合荷重\({w}_{abk}\)で重み付けされているので、式(4)はChain rule(連鎖法則)により次のように変形される。
\[\begin{eqnarray*}
\Delta {w}_{abk} &=& -\eta \sum _{ i=0 }^{ N-m }{ \sum _{ j=0 }^{ N-m }{ \frac { \partial E }{ \partial {X}_{ijk}^{p}} \frac { \partial {X}_{ijk}^{p}}{ \partial {Y}_{ijk}^{p}} \frac { \partial {Y}_{ijk}^{p} }{ \partial {w}_{abk}}}} \qquad(5)\\
\\ &=& -\eta \sum _{i=0}^{N-m}{ \sum _{ j=0 }^{ N-m }{ \frac { \partial E }{ \partial {X}_{ijk}^{p}} \frac { \partial \left( f\left( {Y}_{ijk}^{p} \right)\right)}{ \partial {Y}_{ijk}^{p}} \cdot {X}_{ (i+a)(j+b)}^{p-1}}} \qquad(6) \\
\\ &=& -\eta \sum _{i=0}^{N-m}{ \sum _{ j=0 }^{ N-m }{ \frac { \partial E }{ \partial {X}_{ijk}^{p}} f^{ \prime }\left( {Y}_{ijk}^{p} \right) \cdot {X}_{ (i+a)(j+b)}^{p-1}}} \qquad(7)
\end{eqnarray*}\]ここでは式(1)を偏微分して得られる次式(8)を用いた。
\[X_{(i+a)(j+b)}^{p-1}=\frac { \partial {Y}_{ijk}^{p} }{ \partial {w}_{abk} } \qquad(8)\]
式(7)の\(X_{(i+a)(j+b)}^{p-1}\)はフォワードプロパゲーションの時に得られる値であり、\(f^{ \prime }\left( {Y}_{ijk}^{p} \right)\)は微分した活性化関数に入力値を代入すれば得られる値で、共に既知である。出力に関する微分誤差\(\partial E/\partial {X}_{ijk}^{p}\)が分かれば、結合荷重の微小更新量\(\Delta {w}_{abk}\)を得ることができる。

出力に関する微分誤差は、出力層の出力と教師画像との二乗誤差の微分値を最初の値とし、それを前の層に順番に逆伝播して利用するものである。従って、p番目のコンボリューション層からp-1番目の層へ逆伝播する方法が分かれば、式(7)の\(\partial E/\partial {X}_{ijk}^{p}\)は求められ、荷重結合の微小更新量を得ることができる。

一般に、出力層はコンボリューション層ではなく普通の全結合層であるので、出力層の出力と教師画像との微分誤差は従来のニューラルネットワークの誤差逆伝播法に記載した方法で算出できる。ここではコンボリューション層での誤差逆伝播法について説明する。

p番目のコンボリューション層はe枚の特徴マップで構成されているので、p-1番目の層の微分誤差は次式のように展開される。
\[\begin{eqnarray*}
\frac { \partial E }{ \partial {X}_{ij}^{p-1}} &=& \sum _{c=0} ^{e-1} \sum _{a=0} ^{m-1}{ \sum _{b=0}^{m-1}{ \frac {\partial E}{\partial {X}_{(i-a)(j-b)c}^{p} } \frac { \partial {X}_{(i-a)(j-b)c}^{p} }{ \partial {Y}_{(i-a)(j-b)c}^{p}} \frac { \partial {Y}_{(i-a)(j-b)c}^{p} }{ \partial {X}_{ij}^{p-1}} }} \quad(9) \\
\\ &=& \sum _{c=0} ^{e-1} \sum _{a=0} ^{m-1}{ \sum _{b=0}^{m-1}{ \frac {\partial E}{\partial {X}_{(i-a)(j-b)c}^{p} } f^{ \prime }\left( {Y}_{(i-a)(j-b)c}^{p} \right) \cdot {w}_{abc}}} \quad(10)
\end{eqnarray*}\] ここでは式(2)と、式(1)を\(X\)で偏微分して得られる式(11)を用いた。
\[\frac{\partial{Y}_{(i-a)(j-b)c}^{p}}{\partial{X}_{ij}^{p-1}} = w_{abc} \qquad(11)\]p番目の層の\(Y\)や\(X\)の添え字が\(i-a\)や\(j-b\)と表記されているが、式(1)におけるp-1番目の層の\(X\)の添え字\(i+a\)や\(j+b\)と符号が逆になっている。これはフォワードプロパゲーションの畳み込み演算において、p-1番目の層の座標\((i+a,j+b)\)がp番目の層の\((i,j)\)に対応しているので、p-1番目の層の座標\((i,j)\)はp番目の層の\((i-a,j-b)\)に対応するからである。

式(10)の\(\partial E/\partial {X}_{(i-a)(j-b)c}^{p}\)はp番目の層の微分誤差であり既知であるので、前の層に逆伝播される\(\partial E/\partial {X}_{ijk}^{p-1}\)が求められる。

コンボリューション層の誤差逆伝播式は式(9)などに表されるように、サメーション\(\sum\)を複数用いるので、何をしているのか分かりにくいかもしれない。しかし、ここで行っている誤差逆伝播は従来のニューラルネットワークの誤差逆伝播と本質的に同じである。結合荷重で結ばれているユニット間で誤差を伝播しているだけである。ただコンボリューション層では一つの結合荷重が複数のユニット間を結合しているので、それらの誤差を積算しなければならない。そのためにサメーション\(\sum\)が複数個使われることになる。

コンボリューショナルニューラルネットワークでは、マックスプーリング層が用いられるが、この層は単にコンボリューション層のユニットを一定サイズのブロックに区分し、各ブロック内の最大値を持つユニットを抽出する役割を果たす。従って、誤差逆伝播ではプーリング層のユニットをコンボリューション層の各ブロックの最大値を持つユニットに結びつけるだけでよい。

以上のようにして、コンボリューショナルニューラルネットワークに関する誤差逆伝播を計算することができる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です