プーリングと特徴マップ
プーリングは局所窓を最大値または平均値で置き換えます。ストライドが 1 より大きければ空間解像度を下げ、チャネルは分離したままです。保存値は減りますが位置の細部を失い、応答が窓境界を越えると出力は変わりえます。
最大値は領域の最強応答を伝えても、窓内の座標は復元できません。正確な位置が必要なら元の特徴マップを保ちます。本例は 72 値を 18 値へ減らし、1 ピクセルの移動が出力から区別できなくなることを示します。
特徴マップ、チャネル、集約
特徴マップは一つのフィルタの各位置での応答です。二つのフィルタは見た目が似ても別のチャネルです。ここではフィルタの識別であり、予測クラスでも、必ず RGB 成分というわけでもありません。
8×8 入力の 0 始まり座標 (3,2) だけが強度 8 で、他はゼロです。二つの固定 3×3 核が逆の水平方向差分を測ります。
右 − 左 左 − 右
0 0 0 0 0 0
−1 0 1 1 0 −1
0 0 0 0 0 0
パディングも核反転もせず走査し、ReLU を適用すると二枚の 6×6 マップです。チャネル 0 の (2,0)、チャネル 1 の (2,2) が 8、他はゼロ。手選びフィルタの実計算で、分類器の架空の活性値ではありません。
プーリングはチャネル内で行います。k×k 最大プーリングは最大値、平均はゼロも含む k² 値の総和を k² で割ります。[[8,0],[0,0]] なら最大 8、平均 2。最大はピーク、平均は領域の平均応答を表し、どちらも有用な特徴とノイズの区別はしません。
ストライドは窓の開始点の間隔です。本課は窓もストライドも 2 で重ならず、6×6×2 → 3×3×2(高さ×幅×チャネル)、72 値から 18 値へ減り、チャネル数は同じです。
ステップ実行
既定は最大プーリング、2×2 窓、ストライド 2、パディングなしです。
- 一窓を計算:チャネル 0 の行 2–3、列 0–1 は
[[8,0],[0,0]]。最大 8 を出力(1,0)へ書きます。元マップは変更せず、新しいマップを作ります。 - 別々に完成:チャネル 0 の他の八窓はゼロ。チャネル 1 の応答
(2,2)はその位置から始まる窓に属し、出力(1,1)へ 8 を書きます。
チャネル 0 チャネル 1
0 0 0 0 0 0
8 0 0 0 8 0
0 0 0 0 0 0
同じ窓へ戻り、最大 8 と平均 (8+0+0+0)/4 = 2 を比較します。この比較だけでは選択中の Max 出力を変更しません。Average を選ぶと二つの非ゼロ値が 2 になり、窓、出力位置、チャネル数は同じです。
- 入力を右へ 1 ピクセル:明点は
(3,2) → (3,3)。再フィルタ後、チャネル 0 は(2,0) → (2,1)、チャネル 1 は(2,2) → (2,3)です。どちらも元の窓内なので上の出力と完全一致します。異なる特徴テンソルが同じプール済みテンソルになるため、出力だけでは元の窓内位置を識別できません。 - 窓境界を越える:明点を元の位置から右へ 2、
(3,4)にします。応答はチャネル 0 の(2,2)、チャネル 1 の(2,4)で、次の窓へ入ります。
チャネル 0 チャネル 1
0 0 0 0 0 0
0 8 0 0 0 8
0 0 0 0 0 0
各チャネルで旧位置が 8 → 0、新位置が 0 → 8。二値ずつ、合計 4 値が変わります。一つの応答の移動は一セルの変更ではありません。三つの入力位置はいずれも valid フィルタの範囲内なので、画像端の切り捨てが原因ではありません。
サイズ、細部、費用
パディング・膨張なしで入力 H×W、窓 k、ストライド s なら:
H_out = floor((H − k) / s) + 1
W_out = floor((W − k) / s) + 1
C_out = C_in
選択肢は k = s = 1、2、3 で、どれも 6 を割り切ります。任意サイズでは最後の valid 窓が覆わない端が残りえます。PyTorch 最大プーリングと平均プーリングの定義も参照してください。
| 窓とストライド | 出力高×幅×チャネル | 保存値 | 孤立ピーク:最大/平均 | +1/+2 移動で変わる値数 |
|---|---|---|---|---|
| 1 | 6×6×2 | 72 | 8/8 | 4/4 |
| 2 | 3×3×2 | 18 | 8/2 | 0/4 |
| 3 | 2×2×2 | 8 | 8/(8/9 ≈ 0.889) | 2/2 |
大きい窓でも小さな移動を必ず隠せるわけではありません。サイズ 3 ではチャネル 1 が列 2 から 3 へ移るだけで境界を越え、旧・新の二位置が変わります。窓の位置合わせも必要な条件です。
直接計算の時間は O(C × H_out × W_out × k²)、出力空間は O(C × H_out × W_out)。本課は重ならず全体を覆うので、各入力が一度集約され、時間は O(CHW) です。後段の計算を減らせても、要素数 75% 減は情報量や実行時間の 75% 減という測定ではありません。
境界ケース
- 1×1、ストライド 1:最大も平均も元の値を返し、ダウンサンプリングや位置損失はありません。
- 全ゼロや最大値の同点:最大値は定義できますが一意の座標は分かりません。説明は同点をすべて囲みます。
- 平均での孤立ピーク:窓拡大で
8 → 2 → 8/9。固定0–8色域が減衰を示し、結果ごとの最大値に合わせません。 - パディングや重なる窓:本例の対象外で、境界や数え方を別途定めます。重なりなし・パディングなしの簡略結論はそのまま使えません。
よくある間違い
- 可逆なリサイズと考える。既定の設定では元と 1 ピクセル移動後が同じ出力なので、出力だけで復元できません。
- 誤ってチャネル間で集約する。空間プーリングはフィルタの識別を保ち、混合は別の操作です。
- 出力をクラス確率と読む。局所応答の要約で、ラベル予測ではありません。
- 最大ならノイズを除くと思う。強いノイズも最大になり、原因は分かりません。
- 完全な平行移動不変性を主張する。窓への所属で結果が変わり、境界比較は機構の一部です。
モデルの範囲
合成グレースケール画像、二つの固定差分核、ReLU、重ならないプーリングです。学習、学習済みフィルタ群、正規化、パディングの変種、勾配、後段の分類は省略します。ダウンサンプリングの方法の一つであり、CNN に必須ではありません。CNNではフィルタを変更し、画像分類では実モデルの入力切り出しへの依存を確認できます。
続けて学ぶ
同じ手法につながるレッスンや、次の概念への入口です。
鍵マークのあるレッスンの操作には有料アクセスが必要です。解説はすべて無料で読めます。
誤りや気になる点を見つけましたか? フィードバックを送る。