#03 人工知能入門 CNN画像認識
プーリング——情報を圧縮して位置ずれに強くなる
プーリングとは
畳み込みで特徴マップを作ったあと、その情報を圧縮する処理がプーリング(Pooling) です。
なぜ圧縮するのでしょうか?大きな特徴マップをそのまま次の層に渡すと計算量が膨大になります。またサイズを小さくすることで、「物体が少し左にずれても、少し右にずれても同じパターンと認識できる」ロバスト性(頑健性)が生まれます。
MaxPoolingの仕組み
MaxPooling(最大プーリング) は、小さな領域の中から最大値だけを取り出す処理です。
2×2のプーリング(ストライド=2)の例:
入力(4×4):
1 3 2 4
5 6 1 2
3 2 7 8
1 4 3 6
2×2のウィンドウで最大値を取る:
左上2×2: {1,3,5,6} → 最大値 6
右上2×2: {2,4,1,2} → 最大値 4
左下2×2: {3,2,1,4} → 最大値 4
右下2×2: {7,8,3,6} → 最大値 8
出力(2×2):
6 4
4 8
入力が4×4だったのに、出力は2×2になりました。サイズが半分になっています。
位置ずれに強い理由
MaxPoolingが「位置ずれに強い」理由を確認しましょう。
あるエッジが「6」という強い反応を示した場合:
元の位置: 1ピクセルずれた位置:
0 0 0 0 0 0
0 6 0 0 0 6
0 0 0 0 0 0
MaxPooling後(2×2):
6 6
(どちらも同じ「6」が出てくる)
元の位置にエッジがあっても、少し右にずれていても、同じ2×2の領域に含まれている限り同じMaxPooling結果になります。
これが「位置ずれに強い(平行移動不変性)」の仕組みです。
AveragePoolingの仕組み
AveragePooling(平均プーリング) は、領域内の平均値を取る処理です。
同じ4×4の入力で試してみましょう:
入力(4×4):
1 3 2 4
5 6 1 2
3 2 7 8
1 4 3 6
左上2×2: {1,3,5,6} → 平均 3.75
右上2×2: {2,4,1,2} → 平均 2.25
左下2×2: {3,2,1,4} → 平均 2.5
右下2×2: {7,8,3,6} → 平均 6.0
出力(2×2):
3.75 2.25
2.5 6.0
MaxPooling vs AveragePooling
| 特徴 | MaxPooling | AveragePooling |
|---|---|---|
| 取り方 | 領域の最大値 | 領域の平均値 |
| 特徴の捉え方 | 「その領域に特徴が存在するか」 | 「その領域の全体的な強度」 |
| エッジ検出 | 強い反応だけ拾う→鮮明 | 弱い反応も含む→なだらか |
| よく使われる場面 | 中間層のプーリング | Global Average Poolingなど最終層 |
MaxPoolingが主流な理由: 「エッジが存在するかどうか」は最大値で十分わかります。弱い反応は「そのパターンはここにない」という情報なので切り捨てて問題ありません。
Global Average Pooling(GAP)
最近のモデルではよくGlobal Average Pooling(GAP) が使われます。特徴マップ全体の平均を取り、1つの値にする処理です。
特徴マップ(7×7×512)
→ GAP →
出力(1×1×512)= 512次元のベクトル
チャンネルごとに全ピクセルの平均を計算するだけ
全結合層の代わりにGAPを使うとパラメータ数が激減し、過学習が減ります。
CNNにおけるプーリングの位置
プーリングは畳み込みのあとに置かれます:
[入力画像]
↓
[Conv(畳み込み)] ← 特徴を検出
↓
[ReLU(活性化)] ← 非線形性を追加
↓
[Pooling(プーリング)] ← 情報を圧縮
↓
[Conv → ReLU → Pooling の繰り返し]
↓
[全結合層 or GAP → 分類]
まとめ
- プーリングは特徴マップを小さく圧縮する処理
- MaxPoolingは領域の最大値を取る——位置ずれに強く、強い特徴を保持する
- AveragePoolingは領域の平均を取る——全体的な情報を保持する
- 2×2のMaxPoolingでサイズが半分になり、計算量が4分の1になる
- 「少しズレても同じと認識できる」ロバスト性がプーリングの最大の効果
次回は、層が深くなるにつれてCNNが「何を見ているか」変わっていく——特徴マップの概念を学びます。