記録帳

クラウド、データ分析、ウイスキーなど。

畳み込みニューラルネットワークPart2

ゼロから作るDeepLearningの7章畳み込みニューラルネットワークを読んだ。

 

畳み込みニューラルネットワーク(convolutional neutral network:CNN

今までのニューラルネットワークはAffine層とReLU層のペアを繰り返していたが、CNNでは畳み込み層とプーリング層が入る。
今までは画像データを1次元に並べて学習させていたが、CNNでは画像データのまま(チャンネル数、縦ピクセル数、横ピクセル数)で学習が可能。つまり、空間的な情報も入れて学習できる。画像認識の分野で頻繁に使われる。

 

畳み込み層

・計算

フィルタを用いて入力データを畳み込み演算し、それぞれにバイアスを足す。
p219の図7-13がわかりやすい。
ここでは、入力データ、フィルタ、バイアス、出力データの次元数だけ記載する。

(N, C, H, W) * (FN, C, FH, FW) → (N, FN, OH, OW) + (FN, 1, 1) → (N, FN, OH, OW)

入力データ  フィルタ     畳み込み結果  バイアス  出力データ

出力データの高さ、幅であるOH、OWは、式によって計算可能。

 

・チャネル数

ここでいうCは、フィルタのチャネル数。画像のRGB表記であれば、R,G,Bそれぞれで値を持つので、3チャネル。

 

・*について

畳み込み演算を指す。フィルタのそれぞれの値と入力データのそれぞれの値をかけて合計し、さらに全フィルタでの値を合計する。
p214の図7-8がわかりやすい。

 

プーリング層

・計算

縦/横方向の空間を小さくする演算。
プーリングの種類はMax、Average等いくつかあり、プーリングの大きさの範囲を、その種類の演算をして集約する。

 

・特徴

少しのズレにロバストであること。
1つ入力がズレていても、プーリングはある程度の空間でMaxやAverageを取得するため、結果はあまり変わらない。

 

・im2col

畳み込み演算を簡単に行うライブラリ。
計算する順番を考えて、データを芋けんぴのように切り出して、1列に展開していく。こうすることで、畳み込み演算を巨大な行列計算に落とし込む。
行列計算に落とし込むことで、高速な行列計算ライブラリを使用できる。

 

実装時の流れ

Conv層とAffine層は、Wとbをinitでセットする。

OrderedDict( )を用いて、各層をインスタンス化し、順番に格納する。この際に、W、bやハイパーパラメータを引数に渡し各層にセットする。

OrderdDictをfor文で回して、各層のforwardメソッドを実施する。

lossを算出する。

OrderedDictをreverseメソッドで順番を逆転させ、dout=1から各層のbackwardメソッドを実施する。

最終的に得られたdW,dbを今のW,bに足して、学習の1サイクルが完了。