JA EN
体系CNN・画像認識
·無料·論文·12分で読めます

ImageNetの瞬間 — 深層学習が勝った日

2012年、画像認識のコンテストで誤り26%の壁が15%まで一気に落ちた。ニューラルネットは30年前からあったのに、なぜその年だったのか。データ・計算・手法という3条件が揃った瞬間を、技術の中身まで下りて解き直します。

対象textタスクvision

ImageNet Large Scale Visual Recognition Challenge


教科書が1年で書き換わるということ

たいていの分野では、教科書の内容は10年かけて少しずつ入れ替わります。画像認識は違いました。2012年の秋を境に、それまで10年以上かけて磨かれてきた手法の一群が、ほぼ丸ごと使われなくなったのです。

舞台は ILSVRC(ImageNet大規模画像認識チャレンジ)という年に一度のコンテストです。1000種類のラベル(「ゴールデンレトリバー」「消防車」「エスプレッソ」など)が付いた画像を大量に渡され、未知の写真がどれに当たるかを当てる。成績は top-5誤り率、つまり「モデルが自信のある順に5つ答えて、その5つに正解が1つも入っていなかった割合」で測ります。5%なら100枚中95枚は5候補以内に正解があった、ということです。

2010年と2011年の優勝記録は、この指標でおおむね26%前後。専門家が長年かけて設計した画像特徴量と、その上に載せた分類器の組み合わせが到達した水準です。そこへ2012年、トロント大学のAlex Krizhevsky・Ilya Sutskever・Geoffrey Hintonのチームが、のちに AlexNet と呼ばれる畳み込みニューラルネットを持ち込み、top-5誤り率 15.3% を出しました。2位は26.2%。1位と2位の差が、それまでの数年分の進歩より大きかったのです。

この記事が答えたいのは「AlexNetがすごい」ではありません。ニューラルネットワークの原理は1980年代からほとんど変わっていないのに、なぜ2012年だったのか、です。

比喩: 火が点くには3つ要る

焚き火が燃えるには、燃料・酸素・着火源の3つが同時に要ります。どれか1つでも欠ければ火は点かず、しかも「欠けている1つ」を足した瞬間に一気に燃え上がる。外から見ると着火源だけが原因に見えますが、燃料と酸素はそれ以前に静かに揃っていたわけです。

2012年もこの形をしていました。燃料がデータ、酸素が計算資源、着火源が手法の小さな改良です。

重要なのは、3つとも2012年の発明ではないという点です。畳み込みニューラルネットの原型は1980年のネオコグニトロン、実用形は1998年のLeNet-5に遡り、手書き数字の認識では当時すでに動いていました。動かなかったのは自然画像です。照明も角度も背景もばらばらな写真から1000種類を見分けるという問題の大きさに対し、燃料と酸素が足りていなかった。

燃料: ImageNetという「異常に大きい問題集」

2009年、Fei-Fei Liらのグループが ImageNet を公開します。辞書 WordNet の語彙体系を骨格に、各語に対応する写真を集めて人手でラベルを付けたデータセットです。全体で2万を超えるカテゴリ、1500万枚以上。コンテストで使われたのはその一部、1000カテゴリ・訓練用およそ120万枚でした。

数字だけ見ると「たくさん集めた」だけに見えますが、当時これは常識外れでした。標準的な画像データセットはカテゴリ数が数十、画像は数千から数万枚という桁だったからです。ラベル付けはクラウドソーシング(Amazon Mechanical Turk)で分散させ、複数人の一致で品質を担保しました。アルゴリズムではなくデータ収集の工学に数年を投じた仕事です。

なぜ量が効くのか。パラメータの多いモデルは、データが少ないと「答えを丸暗記する」方向に逃げます。訓練データでは満点なのに、初めて見る写真では外す。これが過学習です。逆に言えば、暗記しきれないほどデータがあれば、モデルは「一般に通じる特徴」を学ぶしかなくなる。ImageNetは当時のモデルにとって、暗記しきれない量でした。

FIG 1モデルの複雑さ(次数)を上げると訓練誤差は下がり続けるのに、テスト誤差はある点から上がり出す。この乖離を埋める最も素直な方法が「データを増やす」で、ImageNetがやったのはそれです

もっとも、120万枚でも6000万個のパラメータを持つAlexNetには足りませんでした。そこで論文は訓練中に画像をランダムに切り出し、左右反転し、色味を揺らして水増しします(データ拡張)。足りない燃料を、既存の燃料を割って増やしたわけです。

酸素: たまたま画像認識に向いていた機械

ニューラルネットの学習は、煎じ詰めれば巨大な行列の掛け算の繰り返しです。CPUは「複雑な手順を1つずつ速く」処理する設計なので、同じ形の掛け算を何百万回も並べる仕事は得意ではありません。一方GPUは、3Dゲームの画面を描くために「同じ計算を大量の画素へ一斉に適用する」用途で作られた部品でした。構造が偶然、ニューラルネットの学習と一致していたのです。2007年にNVIDIAがCUDAを公開し、グラフィックス以外の計算をGPUに書けるようになったことで、この一致が使えるようになりました。

AlexNetの学習は、GTX 580(当時のコンシューマ向けGPU、メモリ3GB)2枚で5〜6日でした。1枚にメモリが収まらなかったので、ネットワークを途中で2つに割って各GPUに載せ、特定の層だけで情報をやり取りしています。「並列化のための分割」ではなく「メモリが足りないための分割」でした。

つまり2012年の突破は、スーパーコンピュータではなく市販のゲーム用グラフィックスカード2枚で起きたわけです。研究室の予算で追試できたことが、その後の広がる速さを決めました。

着火源: 地味な部品の入れ替え

残るは手法です。AlexNetが持ち込んだ変更は、どれも単体では派手ではありません。しかし組み合わさると学習が「回る」ようになりました。

1つ目はReLUです。それまで活性化関数(ニューロンの出力を曲げる関数)にはシグモイドやtanhが使われていました。これらはS字形で、入力が大きくても小さくても出力が平らになります。

σ(x)=11+ex,σ(x)=σ(x)(1σ(x))14\sigma(x) = \frac{1}{1+e^{-x}}, \qquad \sigma'(x) = \sigma(x)\bigl(1-\sigma(x)\bigr) \le \frac{1}{4}
(1)

式(1)の右側が言っているのは、シグモイドの傾きはどんなに大きくても 1/4 にしかならないということです。学習では誤差を出力側から入力側へ掛け算で伝えていくので(誤差逆伝播)、層を1つ遡るたびに信号が最大でも1/4に縮みます。8層あれば (1/4)8(1/4)^8、6万分の1以下です。入力に近い層まで学習の信号が届かない。これが「深いネットは学習できない」と長く信じられていた理由の一つでした。

ReLUはこれを乱暴なほど単純に解きます。

ReLU(x)=max(0,x)\mathrm{ReLU}(x) = \max(0,\,x)
(2)

式(2)は「負なら0、正ならそのまま通す」というだけです。正の側では傾きがちょうど1なので、何層遡っても信号が縮みません。論文でも、訓練誤差が一定水準に落ちるまでの時間がtanhの数倍速くなったと報告されています。

FIG 2fn を sigmoid にして入力を大きく振ると、出力が上下で平らになり傾きが消えるのが見えます。relu に切り替えると、正の側の傾きがどこまでも1のまま。この違いだけで深いネットが学習できるかどうかが決まりました

2つ目はドロップアウトです。学習中、全結合層のニューロンを毎回ランダムに半分止めます。特定の組み合わせに依存した「共謀」が起きにくくなり、過学習が抑えられる。6000万パラメータを120万枚で訓練できたのは、この抑制があってこそでした。

3つ目は実装そのものです。Krizhevskyは畳み込み演算のGPU実装を自分で書いて公開しました。当時「速い畳み込み」は既製品ではなく、書ける人が書くものだった。手法の勝利であると同時にエンジニアリングの勝利でもあります。

コードで見る「2012年の3つ」

当時の変更点を現代のフレームワークで書くと、驚くほど短くなります。

import torch.nn as nn

block = nn.Sequential(
    nn.Conv2d(3, 96, kernel_size=11, stride=4),  # 畳み込み: 画像の局所パターンを拾う
    nn.ReLU(inplace=True),                       # 着火源1: 飽和しない活性化
    nn.MaxPool2d(kernel_size=3, stride=2),       # 位置ずれへの頑健さ
)
head = nn.Sequential(
    nn.Dropout(p=0.5),                           # 着火源2: 共謀を壊す
    nn.Linear(9216, 4096), nn.ReLU(inplace=True),
    nn.Linear(4096, 1000),                       # 1000クラス
)

nn.ReLUnn.Dropout(0.5) の2行が、2012年に世界記録を塗り替えた部分です。いま新人が最初の日に書く2行が、当時は論文の主張でした。畳み込みそのものの仕組みは画像分類を1から理解するで扱っています。

その後の雪崩

翌年から、ILSVRCの上位はほぼすべて深層ニューラルネットになります。top-5誤り率は2013年に約12%、2014年のGoogLeNetで6.7%、2015年のResNetで3.57%まで落ちました。同じ課題での人間の誤り率がおよそ5%と見積もられているので、この時点で「1000クラス画像分類」という課題自体が卒業段階に入ります。コンテストは2017年を最後に幕を閉じました。深さの競争がどう進んだかはCNNアーキテクチャの系譜にまとめてあります。

しかし本当の波及は、精度の数字ではなく転移学習でした。ImageNetで訓練したネットの中間層は、犬猫の区別ではなく「輪郭」「質感」「部品」といった汎用の視覚特徴を持っていることが分かったのです。おかげで、手元に数百枚しかない検査画像や医療画像でも、学習済みの重みから微調整するだけで実用水準に届くようになりました。1回の巨大な学習の成果を、無数の小さな課題が借りる——後の事前学習モデル(言語のBERTやGPT、画像のCLIP)の原型がここにあります。

なぜ「瞬間」と呼ばれるのか

ここから引き出せる教訓は、たぶん次の一文です。アイデアが機能しなかった期間の多くは、アイデアが悪かったのではなく、条件が揃っていなかった。

ニューラルネットは1990年代から2000年代にかけて「理論的にはともかく実用にならない」と見なされ、研究の主流から外れていました。しかし敗因はデータ量と計算量であって、原理ではなかった。だから3つ目が小さく足された瞬間に、評価が一夜で反転したのです。

逆向きにも読めます。いま「筋は良さそうだが動かない」手法があるとき、疑うべきは着想そのものよりどの条件が欠けているかです。データか、計算か、学習を妨げる部品が1つ混ざっているのか。この3分割は、手元のプロジェクトを診断するためにも使えます。

現場ではこう使う

誰が、いつ。画像を扱うMLエンジニアがモデル選定をするとき、そしてPMや研究者が「この課題は今やるべきか」を判断するときに、この3条件の枠組みを使います。

触るもの。ImageNet事前学習の重みは、いまも実務の出発点です。PyTorchなら torchvision.models.resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)、より広い選択肢が欲しければ timm ライブラリ。データが数百枚なら特徴抽出器として凍結して最終層だけ学習、数千枚以上あれば全体を小さい学習率(本体を 1e-4 程度、新設した分類層をその10倍、といった層別学習率)で微調整、というのが定石です。

事故になる落とし穴

面接や設計レビューで問われる形。「なぜ2012年だったのか」は定番の問いです。答えの筋は「原理は昔からあり、ImageNetという大規模ラベル付きデータとGPUによる並列計算が揃い、ReLUとドロップアウトが深いネットの学習を可能にした」。さらに「ReLUがなぜ効くのか」まで下りられると、暗記ではなく理解として通ります。式(1)の 1/4 を思い出せば説明できます。

まとめ

参考文献

  1. ImageNet Large Scale Visual Recognition Challenge. arXiv:1409.0575論文ページ·PDF
  2. ImageNet Classification with Deep Convolutional Neural Networks. NeurIPS 2012論文ページ
  3. Improving neural networks by preventing co-adaptation of feature detectors. arXiv:1207.0580論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です