画像認識でディープラーニングが力を発揮するのはCNNのおかげです。なぜ画像に専用の仕組みが要るのか、畳み込みとプーリングの役割を整理します。
こんにちは、zawato(@zawato7)です!
本記事はディープラーニング入門ロードマップの第15回です。
- 全結合層に画像をそのまま入れられない理由
- 畳み込み層・パディング・ストライドが何をしているか
- プーリング層の役割と、CNN全体の流れ
画像はそのまま全結合層に入れられない
画像を全結合層にそのまま流し込むと、パラメータ数が爆発し、位置の情報も失われます。画像データは高さ・幅・チャネルの3次元です。カラー画像は赤・緑・青のRGB3チャネルが重なったもので、小さめの画像でも画素数は数十万に達します。
全結合層は画素を独立した入力として扱うため重みが膨大になり、1列に並べた時点で隣り合う画素のつながりも消えます。これを解決するのがCNN(畳み込みニューラルネットワーク)で、人間の視覚野を参考にしたといわれています。
畳み込み層はフィルタで特徴マップを作る
畳み込みは、小さなフィルタを画像の上でずらしながら重ね、特徴の場所を浮かび上がらせる処理です。3×3のフィルタを画像の左上に重ね、重なった9個の値どうしを掛け合わせて全部足すと、数値が1つ得られます。1画素ずつ右へずらし、右端まで来たら1段下げて繰り返します。こうしてできた出力が特徴マップです。
右肩上がりの線に反応するフィルタなら、その形が画像のどこにあるかが特徴マップに現れます。値は重みと同じく乱数から始めて学習で定まります。カラー画像ではチャネルごとにフィルタを用意して結果を足すので特徴マップは1枚、フィルタを複数用意すればその数だけできます。
| 設定 | 内容 | 効果 |
|---|---|---|
| パディング | 外周を0で埋めてから畳み込む | 端の画素も使われ、サイズも保たれる |
| ストライド | フィルタをずらす幅 | 広げるほど特徴マップが小さくなり、粗く捉える |
プーリング層は位置のずれを吸収する
プーリングは特徴マップを縮小し、特徴の位置が多少ずれても同じ結果になるようにする処理です。2×2の区画ごとに代表値を1つ取り出すのが一般的で、最大値を取る最大プーリングと平均を取る平均プーリングがあり、よく使われるのは前者です。
区画は重ならずフィルタのサイズ分ずれるので、2×2なら縦横が半分になります。対象が少しずれても同じ代表値が残り、移動による不変性が得られます。畳み込みとの違いは2点です。
- 学習するパラメータがない:代表値を選ぶだけで、値を学習しない
- チャネル単位で行う:チャネル数は変わらず、サイズだけが小さくなる
CNN全体の流れと全結合層へのつなぎ方
CNNは畳み込みとプーリングを繰り返して特徴を抽出し、最後に全結合層へ渡して分類や回帰を行います。繰り返すほど特徴マップは小さくなり、代わりに枚数が増えます。全結合層は1次元しか受け取れないため、次のどちらかで変換します。
- flatten(フラット化):値をすべて1列に並べる。単純だが枚数が多いと長大になる
- Global Average Pooling(GAP):特徴マップ1枚につき平均値を1つ取って並べる。パラメータ数を大きく減らせ、近年よく使われる
まとめ
- 画像は高さ・幅・チャネルの3次元データ。全結合層に直接入れるとパラメータ数が爆発し、隣接画素の関係も失われる
- 畳み込みはフィルタをずらして重ね、特徴マップを作る処理。パディングで端の情報を保ち、ストライドでずらす幅を決める
- プーリングは代表値だけ残して縮小し、位置ずれに強くする。最後はflattenかGAPで1次元にして全結合層へ渡す
よくある質問
Q. 畳み込みのフィルタの値は誰が決めるのですか?
A. 人が設計するのではなく乱数で初期化され、誤差が小さくなるよう学習する中で自動的に定まります。有効なフィルタ自体をモデルが見つけるのがCNNの要点です。
Q. 畳み込み層とプーリング層の違いは何ですか?
A. 畳み込みは学習するフィルタで特徴を作り出し、複数チャネルの結果を足して1枚にまとめます。プーリングは学習パラメータを持たず、チャネル単位で縮小します。
Q. パディングをしないとどうなりますか?
A. 畳み込むたびに特徴マップが小さくなり、層を深く重ねにくくなります。外周の画素は使われる回数も少なく、端の特徴が拾われにくくなります。



コメント