🔻 STEP 17: プーリング層
特徴マップを縮小して、効率的に情報を圧縮しよう
📋 このステップで学ぶこと
- プーリング(Pooling)とは何か?
- Max Poolingの仕組み
- Average Poolingの仕組み
- プーリングの効果(ダウンサンプリング、位置不変性)
- Global Average Pooling
- Kerasでの実装方法
🔻 1. プーリング(Pooling)とは?
1-1. プーリングの定義
プーリング(Pooling)は、特徴マップのサイズを縮小する操作です。
一定の領域から代表的な値を1つ取り出すことで、データを圧縮します。
プーリングは「文章の要約」のようなものです。
元の文章:
「今日は朝から天気がとても良くて、空は青く澄み渡っていました」
要約(プーリング):
「今日は晴れ」
重要な情報だけを残して、データを小さくします。
1-2. プーリングの目的
- 計算量の削減:特徴マップを小さくすることで、後続の層のパラメータ数を減らす
- 位置不変性の獲得:特徴の「正確な位置」よりも「存在するかどうか」を重視
- 過学習の抑制:情報を圧縮することで、細かいノイズに依存しにくくなる
⬆️ 2. Max Pooling(最大値プーリング)
2-1. Max Poolingの仕組み
Max Poolingは、指定した領域の中で最大値を取り出す操作です。
最も一般的なプーリング手法で、CNNでは標準的に使われます。
以下の図は横スクロールできます。
2-2. なぜMax Poolingが有効?
畳み込み層で検出された「特徴の強さ」を表す値のうち、
最も強い反応を残すことで、重要な特徴を保持します。
「この領域のどこかにエッジがある」という情報を圧縮して伝えます。
2-3. パラメータ
| パラメータ | 説明 | 一般的な値 |
|---|---|---|
| pool_size | プーリングする領域のサイズ | (2, 2) |
| strides | ウィンドウを動かす幅 | (2, 2) または pool_sizeと同じ |
| padding | パディング方法 | ‘valid’(デフォルト) |
📊 3. Average Pooling(平均値プーリング)
3-1. Average Poolingの仕組み
Average Poolingは、指定した領域の平均値を取り出す操作です。
3-2. Max PoolingとAverage Poolingの比較
Max Pooling:
✅ 最も強い特徴を保持
✅ エッジ検出などに有効
✅ 一般的に高い性能
❌ 細かい情報が失われやすい
Average Pooling:
✅ 全体的な情報を保持
✅ 滑らかな特徴に有効
❌ 強い特徴が薄まる可能性
→ 一般的にはMax Poolingが使われる
🌐 4. Global Average Pooling
4-1. Global Average Poolingとは?
Global Average Pooling(GAP)は、各チャンネルの全体の平均を取る操作です。
特徴マップを1つの値に圧縮します。
4-2. GAPの利点
- Flattenの代替:全結合層への接続をスムーズに
- パラメータ削減:Flatten + Denseよりも大幅にパラメータが少ない
- 過学習の抑制:パラメータが少ないため
- 入力サイズの柔軟性:異なるサイズの画像にも対応可能
💻 5. Kerasでの実装
5-1. MaxPooling2D
5-2. AveragePooling2D
5-3. GlobalAveragePooling2D
5-4. CNNモデルでの使用例
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 28, 28, 32) 320 max_pooling2d (MaxPooling2D)(None, 14, 14, 32) 0 ← パラメータなし! conv2d_1 (Conv2D) (None, 14, 14, 64) 18496 max_pooling2d_1 (MaxPooling)(None, 7, 7, 64) 0 ← パラメータなし! flatten (Flatten) (None, 3136) 0 dense (Dense) (None, 128) 401536 dropout (Dropout) (None, 128) 0 dense_1 (Dense) (None, 10) 1290 ================================================================= Total params: 421,642 ※ プーリング層はパラメータを持たない(学習なし) ※ 前回(STEP 16)のモデルより大幅にパラメータ削減!
5-5. 学習と評価
Epoch 1/10 375/375 - accuracy: 0.9456 - val_accuracy: 0.9812 ... Epoch 10/10 375/375 - accuracy: 0.9945 - val_accuracy: 0.9901 テスト精度: 0.9912 → MLPより高い精度!CNNの威力を実感
📝 STEP 17 のまとめ
- プーリング:特徴マップを縮小する操作
- Max Pooling:領域内の最大値を取る(最も一般的)
- Average Pooling:領域内の平均値を取る
- Global Average Pooling:チャンネル全体の平均を取る
- プーリングの効果:計算量削減、位置不変性、過学習抑制
- パラメータなし:プーリング層は学習するパラメータを持たない
畳み込み層とプーリング層を理解したので、次のSTEP 18ではCNNアーキテクチャの構築を学びます。
CIFAR-10データセットを使って、カラー画像の分類に挑戦しましょう!
📝 練習問題
プーリングの目的
プーリングの目的として、正しくないものを選んでください。
- A. 特徴マップのサイズを縮小する
- B. 計算量を削減する
- C. 新しい特徴を学習する
- D. 位置不変性を獲得する
プーリング層はパラメータを持たず、新しい特徴を「学習」することはありません。単に決められた操作(max, averageなど)を適用するだけです。
Max Poolingの計算
以下の2×2領域にMax Poolingを適用した結果はいくつになりますか?
[3, 7]
[1, 5]
- A. 1
- B. 4
- C. 5
- D. 7
Max Poolingは領域内の最大値を取ります。max(3, 7, 1, 5) = 7
出力サイズの計算
入力サイズが16×16、pool_size=(2, 2)、strides=(2, 2)のMax Poolingを適用した場合、出力サイズはいくつになりますか?
- A. 4×4
- B. 8×8
- C. 14×14
- D. 16×16
Global Average Poolingの出力
入力形状が(None, 7, 7, 512)の特徴マップにGlobalAveragePooling2Dを適用した場合、出力形状はどうなりますか?
- A. (None, 7, 7, 1)
- B. (None, 1, 1, 512)
- C. (None, 512)
- D. (None, 3584)
学習メモ
ディープラーニング基礎 - Step 17