前の節では、プーリング層を、畳み込み層で見つけた特徴をぎゅっとまとめる層として見てきました。
でも、「まとめる」といっても、まとめ方は一つではありません。
たとえば、虫めがねで絵を観察してメモを取ったあと、その記録を整理するときにも、いくつかのやり方があります。
・いちばん目立った特徴だけ残す
・全体の平均的な印象をまとめる
・絵全体を大きく一つの印象として見る
プーリング操作の違いも、これに少し似ています。
ここでは代表的な3つ、
・最大値プーリング
・平均値プーリング
・グローバルアベレージプーリング(GAP)
を見ていきましょう。
最大値プーリング
まず代表的なのが、最大値プーリング(max pooling)です。
これは、ある小さな範囲の中にある値のうち、いちばん大きい値だけを残す方法です。
虫めがねで絵を見てメモを取ったあと、その範囲の中で
・ここがいちばん強く反応していた
・この特徴がいちばんはっきり出ていた
というものだけを残すイメージです。
たとえば、近くに似たような線の反応がいくつかあっても、その中でいちばん強いものを「このへんの代表」として残す。
つまり最大値プーリングは、その範囲で、もっとも目立つ特徴を選び取る方法なのです。
この方法は、「そこに特徴があったかどうか」を強く捉えたいときに向いています。
平均値プーリング
次に平均値プーリング(average pooling)です。
こちらは、ある小さな範囲の値を見て、その平均を取る方法です。
虫めがねで見たメモを整理するときに、このへん全体として、そこそこ反応があった目立つ一点というより、周囲も含めた雰囲気を残したいという感じで、全体の平均的な印象をまとめるイメージです。
最大値プーリングが「この範囲でいちばん強いもの」を重視するのに対して、平均値プーリングは「この範囲全体のバランス」を見ます。
つまり平均値プーリングは、強い一点を選ぶというより、その範囲の特徴をならして受け取る方法と言えます。
例:3×3 の領域をプーリングする
たとえば、特徴マップのある 3×3 の領域に、次のような値が入っているとします。
1 3 4
3 4 2
3 5 6
このとき、プーリングの方法によって出力される値は変わります。
最大値プーリング
最大値プーリングでは、この 3×3 の中で最も大きい値を取り出します。
1 3 4
3 4 2
3 5 6
↓
6
この例では、いちばん大きい値は 6 なので、出力は 6 になります。
最大値プーリングは、その範囲の中で「いちばん強く現れている特徴」を残す方法です。
平均値プーリング
平均値プーリングでは、この 3×3 の中にあるすべての値の平均を取ります。
1 3 4
3 4 2
3 5 6
↓
(1+3+4+3+4+2+3+5+6) ÷ 9
= 31 ÷ 9
= 3.44…
つまり、平均値プーリングの出力は 3.44… になります。
必要に応じて、3.4 と丸めて書いてもよいでしょう。
平均値プーリングは、その範囲全体の「平均的な特徴」を残す方法です。
グローバルアベレージプーリング(GAP)
最後に、グローバルアベレージプーリング(Global Average Pooling, GAP)です。
これは名前のとおり、特徴マップ全体の平均を取る方法です。
平均値プーリングは、ふつうは「小さな範囲ごと」に平均を取ります。
でもGAPは、そうではありません。
絵の一部分ごとにメモをまとめるのではなく、絵全体を見て、この特徴は全体としてどれくらいあったかを一つの値にしてしまう。そんなイメージです。
たとえば、ある特徴マップが「猫の耳らしさ」を表しているとしたら、GAPはこの特徴が画像全体でどれくらい出ていたかを、全体の平均として一つにまとめます。
つまりGAPは、局所的なまとめではなく、画像全体の特徴を大きく一つに要約する方法なのです。
GAPのよいところは、情報をかなりコンパクトにできることです。
特徴マップ全体を一つの値にまとめるので、後ろの全結合層に入れる前の情報量を大きく減らせます。
その結果、
・パラメータ数を減らしやすい
・過学習を抑えやすい
・シンプルな構造にしやすい
といった利点があります。
虫めがねで集めた膨大なメモを、最後に「この絵全体の印象はこうだった」と、一行にまとめるようなものだと思ってもよいでしょう。
まとめ
ここまでの3つを、虫めがねの物語でまとめるとこうなります。
最大値プーリング→ その範囲でいちばん目立った特徴だけ残す
平均値プーリング→ その範囲全体の平均的な特徴を残す
グローバルアベレージプーリング(GAP)→ 画像全体の特徴を大きく一つにまとめる
つまり違いは、どれくらいの範囲を、どんなふうに要約するかにあります。
プーリング操作は、単に情報を減らしているだけではありません。
それは同時に、何を大事な情報として残すかを選ぶことでもあります。
いちばん強い特徴を残すのか。
平均的な雰囲気を残すのか。
全体の印象としてまとめるのか。
その選び方によって、ネットワークが次の層で受け取る世界の姿は少しずつ変わります。
Global Average Pooling(GAP)を語るとき、よく名前が挙がるモデルの一つが GoogLeNet です。GoogLeNet は、画像認識の分野で大きな影響を与えたディープラーニングモデルで、分類の終盤で特徴マップをコンパクトにまとめるために GAP を取り入れた代表例として知られています。
全結合層をたくさん重ねる代わりに、特徴マップ全体を平均してまとめることで、パラメータ数を抑えやすくなる。そうした考え方を印象づけたモデルとして、GoogLeNet はよく紹介されます。
なお、GoogLeNet そのものの構造や Inception モジュールについては、別の章であらためて詳しく見ていきます。ここではひとまず、「GAPを語るときに登場する代表選手」として名前を覚えておけば大丈夫です。
next ▶ プーリング層の役割