AIが画像を理解する魔法の箱?GoogLeNetの画期的な仕組みをプロが徹底解説 その2
こんにちは。ゆうせいです。
前回の記事では、GoogLeNetの心臓部であるインセプションモジュールについてお話ししましたね。でも、GoogLeNetにはもう一つ、地味ながらも超画期的なアイデアが隠されています。
それが、ネットワークの最後の方に登場する Global Average Pooling(グローバル・アベレージ・プーリング) です。
これを知ると、AIがいかにして「無駄な贅肉」を削ぎ落として賢くなったのかが分かりますよ。皆さんは、テスト勉強で「丸暗記」をして、少し問題が変わっただけで解けなくなった経験はありませんか?実は、昔のAIも同じ悩みを抱えていたんです。
そもそも、昔はどうしていたのか
GoogLeNetが登場する前のモデル(AlexNetなど)は、ネットワークの最後に 全結合層 という仕組みを使っていました。
全結合層とは
全結合層とは、抽出した特徴データをすべて1列に並べて、力技で分類を行う巨大な層のことです。
例えるなら、全国から集まった大量の情報を、一つの大きな会議室に全員集めて、多数決で「これは猫だ!」と決めるようなものです。
一見良さそうですが、この「会議室」を維持するのに膨大な記憶容量(パラメーター)が必要になります。しかも、あまりにも細かく覚えすぎてしまうため、少し見た目が違う猫が出てくるとパニックを起こす「過学習」という問題が起きやすかったのです。
Global Average Poolingの画期的な仕組み
そこでGoogLeNetが採用したのが、Global Average Poolingです。名前は難しそうですが、仕組みは驚くほどシンプル!
画像から抽出された特徴マップ(各特徴がどこにあるかを示した地図のようなもの)が、例えば 7 7 の大きさで1000枚あったとしましょう。
Global Average Poolingは、この 7 7 (計49マス)の数字を、文字通り「全部足して平均(Average)を出す」だけ。つまり、1枚の地図をたった1つの数字にギュッと凝縮してしまうんです。
もし1000枚の地図があれば、最終的には1000個の数字が並ぶことになりますね。
なぜ「平均」をとるだけで賢くなるのか
「せっかく細かく調べたのに、平均しちゃって大丈夫なの?」と不安になりますよね。でも、これには深い理由があります。
- 特徴の位置に左右されない平均をとることで、その特徴が画像の「右上にあったか」「左下にあったか」という細かい位置情報をあえて捨てます。これにより、「どこにいても、その特徴があれば猫だ」と判断できるようになります。
- パラメーターの激減巨大な会議室(全結合層)が必要なくなるため、AIのデータサイズが驚くほど軽くなります。GoogLeNetが、前身のモデルより深いのにデータサイズが小さいのは、この工夫のおかげなんです!
メリットとデメリット
この賢い手法にも、得意・不得意があります。
メリット
- 過学習に強い:細部をあえて無視するので、未知の画像に対しても柔軟に対応できます。
- 計算が圧倒的に軽い:平均を出すだけなので、スマホなどの性能が低い機械でもサクサク動きます。
- 解釈しやすい:どの特徴マップが強く反応したかが、そのまま分類結果に直結するため、AIが何を根拠に判断したかが分かりやすくなります。
デメリット
- 位置情報が消える:物体の「正確な位置」を知る必要があるタスクには、そのままでは向きません。
- 収束に時間がかかる場合がある:力技の全結合層に比べると、学習が安定するまでに少し時間がかかることがあります。
知識を整理しよう
全結合層とGlobal Average Poolingの違いを比較してみましょう。
| 比較項目 | 全結合層(旧式) | Global Average Pooling(新型) |
| 計算方法 | 全てのデータを繋いで掛け算 | エリア全体の平均を計算 |
| データ量 | 非常に大きい(贅肉が多い) | 非常に小さい(筋肉質) |
| 性格 | 丸暗記が得意 | 本質を捉えるのが得意 |
| 主な用途 | 複雑なパターンの暗記 | 汎用的な画像分類 |
今後の学習の指針
Global Average Poolingの登場によって、AIは「効率的な要約」という武器を手に入れました。この考え方は、現代のほぼすべての画像認識モデルに引き継がれています。
次にステップアップするなら、以下のテーマがおすすめです。
- 物体検出(Object Detection)を調べる:平均化してしまった「位置情報」を、どうやって復活させて物の場所を特定しているのかを学べます。
- CAM(Class Activation Map)を知る:Global Average Poolingの仕組みを逆手に取って、「AIが画像のどこを見て判断したか」を可視化する技術です。
import torch.nn as nn
# プログラミングでは、たった一行で実装できます
gap = nn.AdaptiveAvgPool2d(1)
# これで、どんなサイズの地図も「1つの本質」に凝縮されます
「細部にとらわれず、本質を見る」。AIの設計思想は、私たちの学び方にも通じるところがありますね。
次は、GoogLeNetがさらに進化して、どのように「1x1畳み込み」を使いこなしていくのか、その秘密に迫ってみませんか?