畳み込みニューラルネットワーク(CNN)
やっと来た7章。
ついにCNNについて学びます。
CNNとニューラルネットワークの違いは?
CNN→畳み込み層とプーリング層があること(プーリング層については別の記事で)
NN→ない。全結合層のみ(Affine層)
全結合っていうのは、隣接する層のすべての間でニューロンが結合された状態
この図が個人的には鬼わかりやすくって、
NNの時はAffine-RELUの組み合わせだったのがCNNになるとConv-RELU-Poolingの結合になる。
あ、Poolingはたまに省かれることもある。
ただ、似ているところは、最後の出力層近くのところにはAffine-RELU(全結合)が入って、
最後には、これまでと同じ、SOFTMAXも入ってくる。
では、実際に構造はどうなってるんだ?
畳み込み層について
ニューラルネットワークでは全部の層は全結合されていた。
隣接する層のニューロンはすべてつながっているので、出力の数は任意に決めれる。いうことなし!
って思いきや、弱点があった。
全結合するときに、すべてのデータの形状が無視されて、フラットな形状になる。
たとえ話~
縦400横300の2人の人間が移った写真をイメージ。
この写真の情報は(3, 400, 300)の3次元の形状になる。
これをフラットにしてしまうので、どこに、だれがどんな感じで映ってるのか
わかりにくくなっちゃう、っていう致命的な問題があった。
これを改良したのが畳み込み層の存在だった。
つまりは3次元で入ってきたデータは3次元のまま受け取って、3次元のまま出力をしてくれる。
畳み込み演算
では、そんなとてもとても賢い畳み込み層。
どうやって計算してんの?って話。
畳み込み演算は入力データに対して、フィルター(NNで言う重み)を使う。
この例では、
入力サイズを(4,4)、フィルターサイズを(3,3)、出力サイズを(2,2)で考えてみる。
①入力データに対して、まず、フィルターサイズと同じ(3,3)をあてがう
②フィルターの該当箇所と入力データの該当箇所がマッチしているところを掛け算
③掛け算した合計を足算して、出力データにはめ込む。
これを出力サイズに合わせて繰り返す。
上記の通り、CNNの場合、重みとなるのはこのフィルター。
でもバイアスがまだかかっていないので、
一応例として3のバイアスとしておこう。
これのようにフィルターで重みを付けて、
バイアスを足算し、演算を行っている。
次回はパディングについて書きます。
ではまた。