1. 最大値プーリング(Max Pooling)とは
最大値プーリング(Max Pooling )とは,CNN(畳み込みニューラルネットワーク)で用いられる,基本的なプーリング層である.最大値プーリング層では,スライディングウィンドウ処理を行い,各位置のカーネル窓内で,最大値のみを残すプーリング処理である.
(局所)最大プーリングは,平均プーリング(Average Pooling)とともに,CNNの最も基本的な「隠れ層向けのプーリング層」として用いられる.
1.1 最大値プーリング(Max Pooling)の定義
図1は,大きさ[2 x 2]のカーネルで,ストライド幅=2画素の例である(1.2節)(局所)最大プーリング層では,入力の特徴マップ上の各チャンネルk(の画像)において(図1-左),チャンネルごとに独立に,カーネル窓のスライディングウィンドウによって,各位置(x,y)の局所カーネル内の最大値を抽出する.出力のチャンネルkの画像の位置(i,j)に対応する,カーネル$ \mathcal{R}_{(i,j)}$(= 図1の黄,緑,赤,青の範囲)の中において,それぞれ最大値のみを出力する .
1.1.1 数式による定義
最大プーリングの演算を,数式でも定義しておく.
CNNにおいて,$l$層目の特徴マップのチャンネル画像(活性化出力)$Z(x,y)_k^{(l)}$ を,プーリング層によって,空間方向にダウンサンプリングされた$Z(i,j)_k^{(l+1)}$へと変換する.
このとき,最大値プーリングの操作は,各カーネル位置(x,y)における「カーネル内平均の計算」として,以下のように,表すことができる:
\[
Z(i,j)_k^{(l+1)} =\max_{(x,y) \in \mathcal{R}_{(i,j)}} Z(x,y)_k^{(l)} \tag{1.1}
\]
ここで,$(W_f,H_f)$は,それぞれプーリング層のカーネルサイズの幅と高さである.
1.1.2 標準的に使われるカーネルサイズとストライド
多くのCNNバックボーンでは,縦・横のストライド幅をともに2画素とし,カーネルサイズを [2 × 2]にして「重なり無しプーリング」を行うのが典型的である(図1).この場合,カーネルサイズは$(W_f,H_f )= (2,2)$であり,元の特徴マップの空間サイズを,1/2にダウンサンプリングすることができる(ここまでは,平均プーリングと最大値プーリングで共通のはなしである)
伝統的な初期のCNNバックボーン(VGGNetなど)では,最大値プーリングが隠れ層のファーストチョイスであった(平均値プーリングはあまり使われなかった).逆に,ブロックを繰り返すネットワークが主流になってからは,ブロック内で平均プーリングも使われるようになった (DenseNetのDenseブロックなど).
AlexNet の最大値プーリングでは,プーリング領域同士が,お互い重なりあう「重なり有り最大値プーリング」が使われていた.ストライド幅2で,カーネルサイズを[3×3]にすると,隣り合うプーリング位置同士は,縦1行の領域分は重なり有りのまま,平均値の集約を行う.これは,双方の出力に,重なっている一行部分の値が,共に入力になって影響する.
参考書籍
- Pythonで学ぶ画像認識 (機械学習実践シリーズ), 田村 雅人, 中村 克行, インプレス, 2023.
- 第4章 画像分類(物体認識) p98 ~
- 最大値プーリングと平均プーリング (p114~)
- 第4章 画像分類(物体認識) p98 ~
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022.
- 5.4.2節 いろいろなプーリング (p87)
- 画像認識(機械学習プロフェッショナルシリーズ),原田達也,講談社,2017.
- 6.3.3節 プーリング層 (p176)