#1. CNN(畳み込みニューラルネットワーク)の活用範囲
Convolutional Neural Network
CNNは、画像判別によく使われるが、画像のみに使う手法ではない。
次元間で繋がりがあるデータなら何でも扱える。音声、や動画など。
次元間の繋がりとは、画像の場合、横のピクセルは似たような色という意味合い。音声なら次の時刻の強度は似たような強度であるなど。
#2. CNNの構造
CNNの基本構造は以下。
##2.1 LeNetの構造
1998年にヤンルカンが発表した有名なLeNetは、入力画像は、32×32ピクセルとかなり小さいサイズの画像をとる。(LeNetは現在のCNNの原型といわれる。)
そして、出力として、10種類の何かに画像分類を行う。
構造は以下。
####2.1.1 LeNet内での処理
- 6人で入力画像を見て、特徴を抽出(Convolution : C1)
- 6人で出した特徴をわかりやすく要約(Pooling :S2 sub sampling)
- 要約した特徴を16人に見てもらって、さらに特徴を抽出(Convolution : C3)
- 16人で出した特徴をさらに分かりやすく要約(Pooling :S4)
- すべての情報を120文字で言い表す(dense)
- さらに84文字に要約(dense)
- さらに10文字に要約(dense)
####2.1.2 畳み込み層の処理(Convolution)
畳み込み層では、入力画像に対してフィルタ処理(赤枠)を行い、結果を特徴画像として出力する。フィルタは、入力画像よりも小さいサイズで、ピクセルを横へずらしながら計算を行っていく。
なお、この際に、バイアスや活性化関数を通す。
このフィルタ処理の際に、周りの次元のデータを合わせて処理を行うことで、次元間の繋がりを特徴量として抽出することができることがCNNの特徴である。
####2.1.3 全結合層の処理(dense)
全結合層の処理は、NNの基礎となる入力に重みをかけてバイアスを足してを行うだけの処理である。
ここでは次元の繋がりなどは考慮されない。
#3. 畳み込み演算
##3.1 convolution処理
畳み込み層は、画像の場合、縦、横、RGBの入力データに対して学習が出来る。つまり多次元、多チャンネルのデータに対応した演算ができる。
普通の全結合層の処理だと、RGBの関連を含めて学習を行うことが出来ないという問題の解決策となる。
ここで、畳み込みの処理を少し詳細にみる。
基本的に、フィルタという重みをかけてバイアスをかけてやるだけである。
##3.2 パディング
ただし、これをすると、どんどんサイズが小さくなってくるので、パティングという処理を行う。
パディングとは、入力画像の周囲を固定データ(ふつうは0)ですこし広げる処理をいう。事前にサイズを広げておくことで、どんどん小さくなることを防ぐ。これを行うと、入力画像に対して、同じサイズの出力画像を出すことが出来る。
##3.3 ストライド
フィルタ処理は、通常は、1ピクセルずつずらして処理を行う。このずらす量をストライドという。ストライドが2ピクセル、3ピクセルずつの場合もある。
#4. プーリング演算
プーリングには、MaxPoolingや、AveragePoolingという種類がある。畳み込みのように重みはなく、領域内の最大値か、平均値を出力結果として採用する。
#5. プーリング層から全結合層への演算
畳み込みが終わり、プーリング層から全結合層へいくさいに、複数レイヤー(多次元 16層×5×5)のデータを1次元(120)のデータへ落とす処理が必要である。
この際によく使われる3種類の処理がある。
- Flatten
- GlobalMaxPooling
- GlobalAveragePooling
##5.1 Flatten
Flattenは単純に複数レイヤーにわたる全データを単純に一次元配列に並べる処理だる。データ数は変わらない。
##5.2 GlobalMaxPooling
GlobalMaxPoolingは、各層の最大値を1次元配列として出力する。データ数が一気に削減され、かつ特徴量をよく抽出する優秀なやつ。
##5.3 GlobalAveragePooling
GlobalAveragePoolingは、各層の平均値を1次元配列として出力する。データ数が一気に削減され、かつ特徴量をよく抽出する優秀なやつ。