いや、ここが大事なポイントで、プーリング層には学習するパラメータが1つもないんだ。左の「学習パラメータ数」がずっと0のままなのはそのため。「最大値を取る」「平均を取る」という演算は固定で、誤差逆伝播で変わる重みは存在しない。畳み込み層がカーネルの数字を学習するのとは対照的だね。プーリングが決めるのはプールサイズ k とストライド s というハイパーパラメータだけで、これは設計者が事前に決める。
使われ方は少し変わってきたね。古典的なCNNは「畳み込み+最大プーリング」をワンセットで何度も重ねていた。最近のResNetなどは、ダウンサンプリングを「ストライド2の畳み込み」で代用して、途中のプーリングを減らす設計も多い。ただし、ネットワークの最後で特徴マップ全体を1点に潰す「大域平均プーリング(Global Average Pooling)」は今でも定番だよ。プーリングは形を変えながら、CNNの基本部品であり続けているんだ。
よくある質問
プーリング層は、CNN(畳み込みニューラルネットワーク)の中で特徴マップを縮小(ダウンサンプリング)する層です。畳み込み層の後に挿入し、k×kの小さな窓を特徴マップ上でストライド s ずつスライドさせ、各窓を1つの代表値に置き換えます。これにより空間サイズが小さくなり、深い層の計算量とメモリを大きく減らせます。出力サイズは outN = floor((N−k)/s)+1 で決まります。
ありません。プーリング層は「最大値を取る」「平均を取る」という固定の演算であり、学習で最適化される重みは1つもありません(学習パラメータ数 = 0)。これは重みを学習する畳み込み層や全結合層との大きな違いです。プーリング層が決める要素はプールサイズ k とストライド s というハイパーパラメータだけで、これらは設計者が事前に決め、学習中は変化しません。
大域平均プーリング(Global Average Pooling):近年のCNNでは、ネットワークの最終段で特徴マップ全体(H×W)を1つの値に平均する「大域平均プーリング」が定番です。これは全結合層の代わりに使われ、膨大なパラメータを削減しつつ過学習を抑え、特徴マップとクラスの対応を分かりやすくします。クラス活性化マップ(CAM)による可視化も、この大域平均プーリングを土台にしています。
次に、「出力サイズの計算で端数を切り捨てる」点の見落としです。出力サイズは outN = floor((N−k)/s)+1 で、floor(切り捨て)が入ります。入力サイズ N とプールサイズ k、ストライド s の組み合わせによっては、入力の端のほうの数画素が、どのプーリング窓にも入らず無視されることがあります。これに気づかないと、計算したつもりの出力サイズと実際のサイズがずれ、後続の層の形状不一致エラーにつながります。パディングを入れてサイズを揃える設計もよく使われます。