前回に続き、CNNの中核となる『畳み込み演算』と『プーリング演算』を掘り下げます。何をしているのかを手触りで理解できれば、試験問題で迷わなくなりますよ。数式よりもスライドしていくフィルタのイメージを持つのがコツです。
先生、畳み込み演算では具体的にどのような計算が行われているんですか? 図だけ見ると、ただフィルタを動かしているように見えるのですが。
いい質問ね。
畳み込みでは、例えば3×3の小さなフィルタを画像の上で1ピクセルずつスライドさせて、フィルタと画像の対応部分を掛け算して合計するの。
この値が、そのフィルタが検出したい特徴 (縦線、横線、斜め線など) の『反応の強さ』を表すのよ。
つまりフィルタが一種の『形探知機』になってるってこと? 縦線フィルタを当てれば、画像のどこに縦線があるか地図みたいに分かるじゃん!
そのとおり! 畳み込みの結果は『特徴マップ』と呼ばれて、そこに特徴の位置情報が残るのよ。
学習の過程で、どんなフィルタを使うかはネットワークが自動で見つけていくの。
人間が『縦線を探そう』と指示する必要はないのよ。
フィルタが何枚もあれば、いろんな形を同時に探せるんですねぇ! えへへ、なんだか宝探しみたいで楽しそうですぅ。
ここでストライドやパディングという用語も押さえておきたいですね。
ストライドが大きいと出力マップが小さくなり、パディングを使うと入出力サイズを揃えられます。
で、プーリングっていうのは何やってるの?
プーリングは、特徴マップを縮小する操作ね。
例えば最もよく使うMaxプーリングでは、2×2の領域から最大値だけを残すの。
ぎゅーって小さくしても、大事なところ (最大値) は残るってことですぅ?
そう。
データ量を減らせるうえに、特徴の位置が少しズレても同じ結果が出やすくなる『平行移動不変性』という大事な性質も得られるの。
猫が画像の左上にいても右下にいても『猫』と認識できるのは、この性質のおかげですね。
めっちゃよく出来てるね! 畳み込みで特徴を拾って、プーリングで要約して、また畳み込み……を繰り返すってことじゃん!
あらあら、今日のジャスミンちゃんは冴えてるわね。
まさにそのループで、浅い→深い層へと特徴が抽象化されていくのよ。
最後に全結合層で分類したり、最近は Global Average Pooling という手法を使ってパラメータを減らす構造も多いわ。
また、畳み込みカーネルのサイズは3×3が主流ですが、これは『小さなカーネルを積み重ねるほうが、大きなカーネルよりパラメータ数が少なく表現力も高い』というVGGの知見によるものです。
3×3を2回重ねると5×5と同じ視野が得られるんですねぇ。
えへへ、賢い節約術ですぅ。
細かい工夫が積み重なって、今のCNNの賢さになってるんだね。
確認クイズ
Maxプーリング (2×2) が行う処理として正しいものはどれか?
- 2×2の領域の平均値を出力する
- 2×2の領域の最大値を出力する
- 2×2の領域の最小値を出力する
- 2×2の領域の合計値を出力する
こたえを見る
正解: 2. 2×2の領域の最大値を出力する
Maxプーリングは指定された領域内の最大値を取り出す操作です。これにより特徴マップのサイズを縮小しながら、最も強い特徴 (反応の大きい場所) を保持できます。