大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

プーリングと特徴マップ

プーリングは局所窓を最大値または平均値で置き換えます。ストライドが 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、パディングなしです。

  1. 一窓を計算:チャネル 0 の行 2–3、列 0–1 は [[8,0],[0,0]]。最大 8 を出力 (1,0) へ書きます。元マップは変更せず、新しいマップを作ります。
  2. 別々に完成:チャネル 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. 入力を右へ 1 ピクセル:明点は (3,2) → (3,3)。再フィルタ後、チャネル 0 は (2,0) → (2,1)、チャネル 1 は (2,2) → (2,3) です。どちらも元の窓内なので上の出力と完全一致します。異なる特徴テンソルが同じプール済みテンソルになるため、出力だけでは元の窓内位置を識別できません。
  2. 窓境界を越える:明点を元の位置から右へ 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 移動で変わる値数
16×6×2728/84/4
23×3×2188/20/4
32×2×288/(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ではフィルタを変更し、画像分類では実モデルの入力切り出しへの依存を確認できます。