AIが画像を理解する魔法の箱?GoogLeNetの画期的な仕組みをプロが徹底解説 その2

こんにちは。ゆうせいです。

前回の記事では、GoogLeNetの心臓部であるインセプションモジュールについてお話ししましたね。でも、GoogLeNetにはもう一つ、地味ながらも超画期的なアイデアが隠されています。

それが、ネットワークの最後の方に登場する Global Average Pooling(グローバル・アベレージ・プーリング) です。

これを知ると、AIがいかにして「無駄な贅肉」を削ぎ落として賢くなったのかが分かりますよ。皆さんは、テスト勉強で「丸暗記」をして、少し問題が変わっただけで解けなくなった経験はありませんか?実は、昔のAIも同じ悩みを抱えていたんです。

そもそも、昔はどうしていたのか

GoogLeNetが登場する前のモデル(AlexNetなど)は、ネットワークの最後に 全結合層 という仕組みを使っていました。

全結合層とは

全結合層とは、抽出した特徴データをすべて1列に並べて、力技で分類を行う巨大な層のことです。

例えるなら、全国から集まった大量の情報を、一つの大きな会議室に全員集めて、多数決で「これは猫だ!」と決めるようなものです。

一見良さそうですが、この「会議室」を維持するのに膨大な記憶容量(パラメーター)が必要になります。しかも、あまりにも細かく覚えすぎてしまうため、少し見た目が違う猫が出てくるとパニックを起こす「過学習」という問題が起きやすかったのです。

Global Average Poolingの画期的な仕組み

そこでGoogLeNetが採用したのが、Global Average Poolingです。名前は難しそうですが、仕組みは驚くほどシンプル!

画像から抽出された特徴マップ(各特徴がどこにあるかを示した地図のようなもの)が、例えば 7 \times 7 の大きさで1000枚あったとしましょう。

Global Average Poolingは、この 7 \times 7 (計49マス)の数字を、文字通り「全部足して平均(Average)を出す」だけ。つまり、1枚の地図をたった1つの数字にギュッと凝縮してしまうんです。

もし1000枚の地図があれば、最終的には1000個の数字が並ぶことになりますね。

なぜ「平均」をとるだけで賢くなるのか

「せっかく細かく調べたのに、平均しちゃって大丈夫なの?」と不安になりますよね。でも、これには深い理由があります。

  1. 特徴の位置に左右されない平均をとることで、その特徴が画像の「右上にあったか」「左下にあったか」という細かい位置情報をあえて捨てます。これにより、「どこにいても、その特徴があれば猫だ」と判断できるようになります。
  2. パラメーターの激減巨大な会議室(全結合層)が必要なくなるため、AIのデータサイズが驚くほど軽くなります。GoogLeNetが、前身のモデルより深いのにデータサイズが小さいのは、この工夫のおかげなんです!

メリットとデメリット

この賢い手法にも、得意・不得意があります。

メリット

  • 過学習に強い:細部をあえて無視するので、未知の画像に対しても柔軟に対応できます。
  • 計算が圧倒的に軽い:平均を出すだけなので、スマホなどの性能が低い機械でもサクサク動きます。
  • 解釈しやすい:どの特徴マップが強く反応したかが、そのまま分類結果に直結するため、AIが何を根拠に判断したかが分かりやすくなります。

デメリット

  • 位置情報が消える:物体の「正確な位置」を知る必要があるタスクには、そのままでは向きません。
  • 収束に時間がかかる場合がある:力技の全結合層に比べると、学習が安定するまでに少し時間がかかることがあります。

知識を整理しよう

全結合層とGlobal Average Poolingの違いを比較してみましょう。

比較項目全結合層(旧式)Global Average Pooling(新型)
計算方法全てのデータを繋いで掛け算エリア全体の平均を計算
データ量非常に大きい(贅肉が多い)非常に小さい(筋肉質)
性格丸暗記が得意本質を捉えるのが得意
主な用途複雑なパターンの暗記汎用的な画像分類

今後の学習の指針

Global Average Poolingの登場によって、AIは「効率的な要約」という武器を手に入れました。この考え方は、現代のほぼすべての画像認識モデルに引き継がれています。

次にステップアップするなら、以下のテーマがおすすめです。

  1. 物体検出(Object Detection)を調べる:平均化してしまった「位置情報」を、どうやって復活させて物の場所を特定しているのかを学べます。
  2. CAM(Class Activation Map)を知る:Global Average Poolingの仕組みを逆手に取って、「AIが画像のどこを見て判断したか」を可視化する技術です。
import torch.nn as nn
# プログラミングでは、たった一行で実装できます
gap = nn.AdaptiveAvgPool2d(1)
# これで、どんなサイズの地図も「1つの本質」に凝縮されます

「細部にとらわれず、本質を見る」。AIの設計思想は、私たちの学び方にも通じるところがありますね。

次は、GoogLeNetがさらに進化して、どのように「1x1畳み込み」を使いこなしていくのか、その秘密に迫ってみませんか?

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。