CNNの最後で「特徴マップ1枚を数値1個に要約してしまう」大胆な操作がグローバルアベレージプーリング(GAP)です。なぜそれで分類ができるのか、全結合層を置き換えると何がうれしいのかを解説します。

📖 ひと言でいうと

グローバルアベレージプーリング(Global Average Pooling、GAP)とは、CNNの終盤で特徴マップの各チャネルの「空間全体」の平均を1つずつ計算し、チャネル数分の数値ベクトルに要約する手法です。従来ここで使われていた全結合層の代わりになります。

例えるなら、各チャネルを「ある特徴の専門調査員が作った地図」だと考えてください。GAPは各地図の詳細な場所情報を捨てて、「この特徴は画像全体でどれくらい強く見つかったか」という平均スコア1個だけを報告させる操作です。地図が512枚あれば512個のスコアが並び、それをそのまま分類の判断材料にします。

🖼 1枚でわかるグローバルアベレージプーリング

グローバルアベレージプーリング(GAP)
  • 何をする — 各チャネルの特徴マップ全体を平均し、1×1×チャネル数のベクトルに
  • 置き換える相手 — CNN終盤の全結合層(パラメータの塊)
  • 利点 — パラメータ大幅削減・過学習の抑制・モデル軽量化
  • 副次効果 — 物体の位置に依存しない特徴抽出でロバスト性向上
  • 注意 — 空間全体を平均するため局所的な情報は失われうる
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

畳み込みニューラルネットワーク(CNN)の終盤で用いられる手法で、特徴マップの各チャネルに対して空間領域全体の平均値を計算し、1×1×チャネル数のベクトルを得る。これにより、全結合層を使用せずに分類タスクを実現でき、パラメータ数の削減や過学習の抑制に寄与する。従来、CNNの最終段階では全結合層が用いられ、特徴マップを1次元ベクトルに変換して分類を行っていた。しかし、全結合層は大量のパラメータを持ち、計算資源を多く消費する。GAPを導入することで、各チャネルの平均値を直接出力層に接続でき、全結合層を省略可能となる。GAPの利点として、モデルの軽量化や計算効率の向上が挙げられる。また、全結合層を排除することで、モデル全体が畳み込み操作中心の構成となり、特徴抽出と分類のプロセスが統一される。さらに、GAPは画像中のオブジェクトの位置に依存しない特徴抽出を可能にし、モデルのロバスト性を高める。一方、GAPは特徴マップの情報を平均化するため、局所的な情報が失われる可能性がある。そのため、回帰タスクや細かい位置情報が必要なタスクには適さない場合がある。

かみ砕くと、CNNの最終盤に残る「高さ×幅×チャネル数」の特徴マップを、チャネルごとの平均値だけを残して「1×1×チャネル数」まで一気に圧縮する操作です。たとえば7×7×512の特徴マップなら、512個の数値のベクトルになります。

従来はここを全結合層で処理していましたが、全結合層は「入力の全要素×出力の全ニューロン」分の重みを持つため、CNN全体のパラメータの大半を占めることも珍しくありませんでした。GAPは平均を取るだけで学習パラメータがゼロなので、モデルが劇的に軽くなり、過学習もしにくくなります。

🔍 しっかり理解する

処理の流れを追う

畳み込み層群
特徴マップ
例: 7×7×512
GAP
各チャネル7×7を
平均して1値に
特徴ベクトル
1×1×512
(パラメータなしで生成)
出力層
クラス数分の
スコアへ接続

ポイントは、GAP自体には学習すべき重みが1つもないことです。畳み込み層が「意味のある特徴をチャネルごとに検出する」役割を最後まで担い、GAPはそれを集計するだけ。特徴抽出と分類が畳み込み中心で統一される、と公式テキストが述べているのはこの構造を指します。

なぜ位置に依存しなくなるのか

平均は「どこにあったか」を区別しません。猫の顔が画像の左上に写っていても右下に写っていても、「猫の顔らしさ」に反応するチャネルの平均値は同じように高くなります。これが「オブジェクトの位置に依存しない特徴抽出」であり、分類タスクでのロバスト性につながります。

ただし裏返すと、位置情報を平均で潰しているので、「どこに何があるか」を答える必要のある物体検出やセグメンテーション、細かい位置・数値を当てる回帰タスクには不向きな場合があります。利点と欠点が同じ「平均化」から生じている点をセットで理解しましょう。

全結合層と比べてどれくらい軽くなるか

具体的に数えてみます。7×7×512の特徴マップを4096ニューロンの全結合層につなぐと、重みは 7×7×512×4096 ≒ 1億個にもなります。GAPを使えばこの層のパラメータはゼロで、その後の出力層(512×クラス数)だけで済みます。1000クラス分類でも約51万個と、およそ200分の1にまで減ります。パラメータが減れば過学習のリスクも計算資源の消費も減る、という公式テキストの記述が実感できる数字です。

💡 具体例で考える

GAPは、Network in Network(NiN)という研究で全結合層の代替として提案され、その後ResNetやGoogLeNetなど代表的なCNNの終盤で標準的に使われるようになりました。ResNetの構成を見ると、畳み込み層を深く積んだ後、最後は「GAP→出力用の全結合1層」という締め方になっています。分類の直前をGAPにしたことで、深さ152層のような大規模モデルでもパラメータの爆発を防げています。

またGAPは、CAM(Class Activation Map)という「モデルが画像のどこを見て判断したか」を可視化する技術の土台にもなりました。GAP直前のチャネルごとの特徴マップとクラスごとの重みを組み合わせると、判断根拠のヒートマップが得られます。GAPが「チャネル=特徴の意味」を保ったまま集計する操作だからこそできる芸当です。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • 平均値プーリングとの違い — 通常の平均値プーリングは小さな窓(2×2など)をスライドさせて縮小し、出力はまだ「小さめの特徴マップ」です。GAPは窓が特徴マップ全体で、チャネルあたり出力は1値。使われる場所も、平均値プーリングは中間層、GAPは終盤(全結合層の代替)です。
  • 「GAPを使えば全結合層は一切ない」とは限らない — 最終の出力層として小さな全結合(チャネル数→クラス数)を1つ置く構成が一般的です。GAPが省くのは「特徴マップを平らに伸ばして受ける巨大な全結合層」です。
  • 万能な圧縮ではない — 平均化で局所情報・位置情報は失われます。細かい位置が必要なタスクに常に適するわけではありません。
  • Flatten(平坦化)との混同 — Flattenは7×7×512を25088次元に「並べ替えるだけ」で情報は捨てませんが、その後の全結合層が巨大になります。GAPは512次元に「要約」します。

📝 試験でのポイント

💡 ポイント
  • 「特徴マップの各チャネルの空間全体を平均し、1×1×チャネル数のベクトルを得る」「全結合層の代替」という表現が出たらGAPです。
  • 利点として「パラメータ数の削減」「過学習の抑制」「軽量化」を選ばせる問題が想定されます。
  • 欠点(局所情報の喪失、位置情報が必要なタスクに不向き)まで問われることがあるので、利点とセットで押さえましょう。
  • 最大値プーリング・平均値プーリングとの違いは「窓のサイズ(局所か全体か)」と「使われる位置(中間層か終盤か)」で判別できます。

📚 まとめ

💡 ポイント
  • GAPは、特徴マップの各チャネル全体を平均して1×1×チャネル数のベクトルに要約する、CNN終盤の手法です。
  • 巨大な全結合層を置き換えることで、パラメータ削減・過学習抑制・軽量化を実現します。
  • 平均化により位置に依存しない頑健な特徴が得られる一方、局所的な情報は失われるため位置が重要なタスクには不向きな場合があります。
  • 「窓が画像全体の平均値プーリング」「使い所は終盤」という2点で、通常のプーリングと区別しましょう。