最大値プーリング(Max Pooling)

記事を共有する:

1. 最大値プーリング(Max Pooling)とは

最大値プーリング(Max Pooling )とは,CNN(畳み込みニューラルネットワーク)で用いられる,基本的なプーリング層である.最大値プーリング層では,スライディングウィンドウ処理を行い,各位置のカーネル窓内で,最大値のみを残すプーリング処理である.

(局所)最大プーリングは,平均プーリング(Average Pooling)とともに,CNNの最も基本的な「隠れ層向けのプーリング層」として用いられる.

1.1 最大値プーリング(Max Pooling)の定義

最大値プーリング(Max Pooling)
図1. 最大値プーリング (Max pooling):
各位置の「カーネル内での最大値」が出力される(白=最大値, 黒= 0)

図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行の領域分は重なり有りのまま,平均値の集約を行う.これは,双方の出力に,重なっている一行部分の値が,共に入力になって影響する.

参考書籍