1. InceptionNet とは [概要]
InceptionNet (Inception Network, 別名 GoogLeNet) とは,Googleの研究チームが考案したCNN (畳み込みニューラルネットワーク)向けのアーキテクチャである [Szegedy et al., 2015].InceptionNet v1 のあとに,改善版であるv2, v3, v4 が順に発表された.
この記事では,それらの Inception v1 から v4について,登場順に,それぞれの重要点にフォーカスするかたちで紹介していく.
※(重要) このサイトでは,独自の InceptionNet という呼びかたで統一している.「Inception」を検索ワードとすると,由来である映画 Inception (1.2節)の検索結果がずらっと並んで競合しているので,検索エンジンからこの記事に直接跳びづらいからである.Google等からこの記事を直接検索する場合,タイトル文中の「 InceptionNet」をクエリーに入れて検索していただきたい(各バージョンの名前を言う場合には,普通に「Inception v3」 とNetを省いて表記する).
1.1 記事の構成
以降の2節以降では,以下の各バージョンを順番に紹介する:
- 1節 各バージョンの要点(1.2)と名前の由来(1.3)
- 2節 Inception v1 (GoogleNet) [CVPR2015] : 初期バージョン.
- 3節 Inception v2 (BN-Inception) [ICML2015]:バッチ正規化を導入
- 4節 Inception v3 [CVPR2016]:Inceptionブロックの改善
- 5節 Inception v4 と Inception-ResNet v1, v2 [AAAI 2017]:残差接続による改善
- 6節 まとめ
1.1 中心アイデアと各ver.の要点
InceptionNet (Inception v1 = GoogleNet, 2節) の中心アイデアは『各畳み込み層を,計算効率の良い Inceptionブロックで近似・代替させた』という1点にある.
Inceptionブロック (2.1節)は「1 x 1 畳み込み層による,チャンネル方向の次元削減」と「4経路構成の複数畳み込みサイズによる並列化(=ワイド化)」を用いたブロックである.これにより,表現力がありつつも,計算効率性も良い「ブロック」を,基本構成単位として用いることができた.
Inception v1は,以前のAlexNetなどのCNNバックボーンよりも,大幅なパラメータ数削減による計算コスト削減をしながらも,深いネットワークにして表現力を向上させることに成功した(ISLVRC 2014で一位).バッチ正規化の論文では,バッチ正規化を追加したInception v2が提案されたが,Inception v2 には他に貢献(新規提案)はない.
次に,Inception v3 [Segedy et al., 2016b] では,幅と深さのバランスをよくした新 Inceptionブロックが提案されたことで,より効率的かつ高精度な InceptionNet に進化した(4節).また,ラベル平滑化が提案されたのも,Inception v3の研究の重要点である.
最後に,Inception v4 の研究 [Szegedy et al., 2017] では,残差接続の追加によるResNet化により,96層の構成にまでなった,最終形の Inception-ResNet (v1, v2) が完成した(5節).Inceptionモジュールの効率性と,残差接続の大規模モデル最適化における利点を同居させた,強力なモデルであるので,その後,動画認識など「モデルの巨大さが必要な場面」を中心に Inception-ResNet は広く使用されていった.
※ ResNet や DenseNetなどで,複数層のまとまりを繰り返し使用することを「ブロック」と呼ぶ.Inception v1, v3論文では「Inception モジュール」と呼ぶのだが,ここでも「Inceptionブロック」と呼ぶように統一したい.Inception v1 からInception v3論文までは,Googleチームは「Inceptionモジュール」と論文中で呼んでいたが,Inception v4 論文ではResNet 系の言い方の「ブロック」に統一し,「Inceptionブロック」と呼ぶようになっている.
1.3 InceptionNet の名前の由来
「Inception」というネットワーク名は,当時の大ヒットSFアクション映画のインセプションから来ている(管理人も好きな映画である).
映画の題名「インセプション(Inception)」の意味は「開始」という意味だが,これは「inception of an idea(アイデアの開始,発想の芽生え)」という慣用フレーズから名付けられている.
英語では「のちに大きなアイデアに拡大して発展していくが,始めた最初の時点では小さいもの」を,inception of an idea と呼ぶ.映画インセプションの主人公達は,ターゲットに対して,こっそり明晰夢の中に入り込み,「より深い層」の夢へと入っていく.そしてターゲットにバレないように,夢の中で演技をして,深い潜在意識の階層まで入っていって『アイデアの植え付け』を行うことを企む,特集工作グループである.よって,映画の題名も『Inception (of a idea)』と名付けられた.
当時,超大ヒット映画として世界各国で流行したインセプションであるが,主人公(ディカプリオ)がターゲットの富豪に対して言うセリフ “We need to go deeper” が,イメージマクロ画像と,ネットスラングとして英語圏では大流行した.そこで,InceptionNetの著者ら [Szegedy et al., 2015] は,この映画の「夢の階層を何層も下っていく」というストーリーを元になぞらえて,InceptionNet の論文名とネットワークを命名したわけだ.
当時,新たなCNN構造を研究しているトップ研究者たちは「CNNをより深い構造にすることで,画像認識精度を向上させる」競争を行っていた.そこで,映画インセプション中の「夢のまた夢(dream in a dream)を,何層も深くへ下っていく(go deeper)」という,明晰夢階層間の「階層的メタ構造」を,Network-in-Network [Lin et al., 2014] の発想を利用する「メタネットワーク構造 = Inceptionモジュール」を活用した InceptionNetになぞらえて,その命名に用いた.従って,論文名も同様に “Going deeper with convolutions“となっているわけである.
長々と説明したが,第3次AIブームでは,このように若い研究者がつけた(時に幼稚な)手法名や論文名が,時折登場するが,あとで黒歴史になりがちなので,若い方は決して真似しないほうがよい.
2. v1 (GoogleNet)
InceptionNet v1のネットワーク構造は,AlexNet的な直列型CNNにおいて「畳み込み層の代わりに,Inceptionブロックを用いたアーキテクチャ」となっている:
- conv1: 畳み込み層 – [7 x 7]カーネル, stride=2
- pool1: 最大値プーリング – [3 x 3]カーネル, stride=2
- conv2: 畳み込み層 – [3 x 3]カーネル, stride=2
- pool2: 最大値プーリング – [3 x 3]カーネル, stride=2
- 3a: Inceptionブロック
- 3b: Inceptionブロック
- pool3: 最大値プーリング – [3 x 3]カーネル, stride=2
- 4a: Inceptionブロック
- 4b: Inceptionブロック
- 4c: Inceptionブロック
- 4d: Inceptionブロック
- 4e: Inceptionブロック
- pool4: 最大値プーリング – [3 x 3]カーネル, stride=2
- 5a: Inceptionブロック
- 5b: Inceptionブロック > 出力のサイズ: [7 × 7] x 1024
- pool5: グローバル平均プーリング – [7 x 7] カーネル, stride=1 > 出力のサイズ: [1 × 1] x 1024
- linear6: 全結合層:1024 x 1000
- softmax: 1000クラス確率分布
2.1 Inceptionモジュール
InceptionNet を構成する基本的なブロック単位が,Inceptionブロックである(図1).
InceptionNetブロックの内部では, (1) 多様なサイズ経路化(図1-a,2.1.1節)と,(2) 各経路の次元削減による軽量化 (図1-b, 2.1.2節)をおこなう.これにより,省パラメータながらも高い表現力を持つ.
2.1.1 複数サイズ経路に並列化
Inceptionブロックの新規性は,(1) の ブロック内を,並列に別の深さで分岐させることで,ブロックごとの表現力の向上を狙った点にある(図1-a).[1 x 1] , [3 x 3], [5 x 5] の 畳み込み層 + 最大値プーリング層 ]の,4経路を並行実施したあと,それらの各結果の特徴マップを,チャンネル方向へ1つに結合する(図1-a).
この「多様なサイズ経路に並列化(=ワイド化)」により,多様な畳み込みサイズの特徴の合成を,各Inceptionモジュールが表現できる.
2.1.2 次元削減で軽量化
しかし,4並行パス構成の Inceptionブロック(図1-a)のままだと,パラメータ数が多いので,何個も繋げていくとパラメータが大きくなりすぎて,深いネットワークとなり(当時の学習技術では)うまく学習できない.
そこで,NiN(Network-in-Network)で提案された 1 x 1 畳み込み [Lin et al., 2014] を用いて,ブロック内の各空間位置における,特徴の(チャンネル方向)次元削減を,3つの各経路の最初に導入して,チャンネル数を次元削減したのち畳み込み層を実施するようにした(図1-b).この図1-bの形のブロックが, Inception v1では使用された.
これにより,Inceptionモジュールの計算軽量化が達成できた.同時期のVGGNetよりも,かなりパラメータ数が少ないながら,同等の精度をInception v1は達成した
※ ISLVRC2014では,Inception v1が エラー率6.6%で一位であり,VGGNetがエラー率7.3%で2位であった.
2.2 グローバル平均値プーリング
Network-in-Network (NIN) [Lin et al., 2014]で提案されていた,終盤ヘッドで全結合層の代わりに使用できる「グローバル平均値プーリング」が,Inception v1でも使用された.
これにより,識別器ヘッド層部分の全結合層に使用する「層間重みパラメータ」が,グローバル平均値プーリングで代替すると全て不必要となるゆえ,CNNのパラメータ数を大きく減らすことができた.
2.3 補助識別器: 序盤層への逆伝播の安定化
深さ方向に合計22層の畳み込み層を導入すると,誤差逆伝播時に勾配が序盤の層まで伝わりにくい問題が出てしまう.そこで,InceptionNet v1 は,補助識別器(Auxiliary Classifier)を,安定的な学習のサポートとして用いる学習方法を提案した.
(AlexNet終盤と同じような全結合層から構成される)識別器ブランチを,Inceptionの中間層で,2回ヘッドとして追加する.そして,追加した補助識別器ヘッドの最後の出力でも,追加の交差エントロピー損失を取り,全体の損失に足して使用する.
これにより,中間部分へも容易く損失を逆伝播できるので,中間あたりの場所で,大きめの勾配を逆伝播に加えることができるようになった.おかげで,深い大規模構造のInceptionNetでも,勾配消失を避けて序盤の層まで勾配を伝播させることができ,深いCNNでも,安定して学習を収束できるようになった(補助識別器ブランチは学習だけに用い,テスト時には使用しない).
中間層や出力層の別ヘッドに補助識別器を追加し,ディープネットワークの学習を安定化させるこのアイデアは,その後 ACGAN (Auxiliary Classifier GAN)[Odena et al., 2017] などでも応用され,深層生成モデルによる画像生成や,画像対画像変換の界隈でも人気のアプローチとなる.
3. v2: バッチ正規化の導入
バッチ正規化の論文 [Ioffe and Szegedy, 2015] は,InceptionNetと同じGoogleの同じ著者人から発表された研究である.
そのバッチ正規化の論文中で,バッチ正規化を導入したInceptionであるInception v2 が実験されており,これをInceptionNetのversion 2と呼ぶ.のちの研究ではBN-Inceptionとよく呼ばれる.
4. v3: Inceptionブロックの改善
[Szegedy et al., 2016] では,Inception v1 を再考した改善版として,Inception v3 を提案した.
Inception v3では,「因数分解を活用した新Inceptionブロック(4.1節)」と「効率的な空間サイズ削減ブロック(4.2節)」を導入することで,画像認識性能と軽量モデル性をともに向上させた.これによりInception v1よりも,「幅と深さのバランスが取れたネットワーク構造」に進化している.
InceptionNet v3 の(補助識別器ブランチ以外の)ネットワーク構成は,以下のようになっている:
- 序盤の畳み込み+プーリング層
- InceptionブロックA (図2-a)
- 空間サイズ削減ブロック (図4-b)
- InceptionブロックB (図2-b)
- 空間サイズ削減ブロック (図4-b)
- InceptionブロックC (図3)
- 識別ヘッド層
また,2個目の空間サイズ削減ブロックから,補助識別器ブランチを分岐させることで,深いネットワークでも誤差逆伝播を行いやすくしている.
更に,損失関数の正規化項として,これ以降のディープモデルでよく使われることになるラベル平滑化(4.3節)が提案された.
4.1 因数分解でパラメータ削減
Inception v3 は,普通の3 x 3 畳み込み層 6層 + 3 x 3プーリング層でまず畳み込んでおいた終盤の特徴マップ [35 x 35 x 288] を入力として,以下に述べる モジュールA とモジュールB(図2)および モジュールC(図3)を,順に使用するネットワークである.
3つのモジュールではどれも「畳み込み層の因数分解」を活用している.これにより,InceptionNet v3全体の,(1) 省パラメータ化 ,(2)性能向上,の2つが達成された.
まず,Inception v1のInceptionブロック(図1)で用いていた,(VGGNetと同じ発想で)[5 x 5]畳み込みの経路を,2層の[3 x 3] 畳み込みに分解してパラメータ削減をおこなう「モジュールA(図2-a)」が提案された.各畳み込みの前に,先に [1 x 1] 畳み込み層でチャンネル方向次元削減を行っておくが,これはInception v1 と同じ工夫である(図1-b).
また,非対称な因数分解を用いた「モジュールB(図2-b)」も提案された. 元の[n x n]畳み込みを,受容野が等価な[n x 1]と[1 x n]の2層に因数分解して分担させることで,計算コストを抑える.
さらに,モジュール終盤でパスを分岐させることで,各パス最後を高次元特徴化する「モジュールC(図3)」も提案された.高次元化することで,各パスでは,もつれほどきがより促進された(畳み込み)特徴が得られる(論文中2節の原則2).これにより,収束性も向上して学習も速くなる.
4.2 効果的な空間サイズ削減

(a) 従来の空間サイズ削減の短所2点.(b) 改善版の空間サイズ削減:
[b-左] 空間サイズ観点で表示 [b-右] 各操作の観点で表示.
Inception v3では,効率化した新たな「空間サイズ削減ブロック (図4-b 青枠)」を用いて,空間サイズの削減を行うことを提案した.
Inception v1では,ブロック内の 1 x 1 畳み込みを用いてチャンネル方向に各空間位置の特徴は次元削減をしている.一方で,空間サイズの削減にはまだ問題点があり,以下2つの改善余地があった:
- タイプ1 (図4-a 左図) :
- Inceptionブロックより先にプーリングした場合
- 真ん中の特徴マップがボトルネック化してしまい,表現力向上の妨げになってしまう.
- タイプ2 (図4-a 右図):
- Inceptionブロックを先に配置した場合
- 計算量が3倍に増大してしまう.
そこで,Inception v3では,「改善版の空間サイズ削減ブロック」を提案して使用した (図4-b 青枠).この改善版を用いると,空間サイズを削減しながらも,フィルタ数は増やせる.おかげで,省計算コストを保持したまま,ボトルネック表現も回避して,空間サイズの削減が行えるようになった.
4.3 ラベル平滑化
2015~2016年の研究である Inception v3 (やResNet) は,当時の最先端のCNNバックボーンのVGGNet(16層/19層)より更に層を増やして深くしていきたいという動機の研究であった.しかし,層を更に増やすと,更にモデルのパラメータ数が増えるので,CNNの過学習の危険度が増してしまう問題があった.
Inception v3ではその対策として,softmax損失関数の正規化手法であるラベル平滑化(Label Smoothing)が提案された(図5).ラベル平滑化は,正解ラベル $y_k \in \{0,1\}$ からSoftmaxで作る分布にノイズ分布を全クラスに少し加えて緩和することにより,平滑化された疑似ラベルをつくり,その疑似ラベルで学習することで正則化を達成する.
5. Inception-v4 と Inception-ResNet
[Szegedy et al., 2017] では,InceptionNet v3のバージョンアップとして更に大規模ネットワーク化した Inception v4 と,ResNet [He et al., 2016] の残差接続をInceptionNet v3のInceptionブロックに組み合わせたInception-ResNetの v1, v2が,新たな物体認識むけのCNNバックボーンのアーキテクチャとして提案された.
まず [Szegedy et al., 2016b]で提案されたCNN構造は,以下の3種類である:
- Inception v4: Inception v3 の序盤を「stem(幹)」と名付けた2分岐ブロックへと差し替え.
- Inception-ResNet-v1: 残差接続ありのInceptionモジュールを導入.
- Inception-ResNet-v2: Inception-ResNet v1 を更に深く,幅を広くさせた.また,Inceptionモジュールも少し小さめの規模にし,比較するため Inception v4と計算オーダーを揃えたモデルになっている.
Inception v4 とInception-ResNet-v2は,ISLVRC 2012データセットに対して,同等の画像認識性能を示した.この論文以降,ResNet/ResNextと同様に,様々な画像系タスクのCNNバックボーンとして使われるようになった (特にInception-ResNet v2が,大規模モデルが必要な問題のCNNバックボーンに使われていった).
6. まとめ
InceptionNetは,Googleの研究チームから提案された代表的CNNバックボーンである.効率的に多様な表現を作る「Inceptionモジュール」を考案し,Inception v1 は,少ないパラメータ数のみで深いCNN(20層~45層程度)を学習できるようになった.
その再考版にあたるv3 が,主な(オリジナル性の高い)提案である.ResNet登場後には,残差接続も活用した v4が,最終形として提案された.
参考書籍
- 画像認識(機械学習プロフェッショナルシリーズ),原田達也,講談社,2017.
References
- [He et al., 2016] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016
- [Ioffe and Szegedy, 2015] S. Ioffe and C. Szegedy, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift” In ICML , 2015.
- [Lin et al., 2014] M. Lin, Q. Chen, and S. Yan. Network in network. In ICLR, 2014.
- [Odena et al., 2017] A. Odena, C. Olah, and J. Shlens. Conditional image synthesis with auxiliary classifier gans. In ICML, 2017.
- [Szegedy et al., 2015] Szegedy C, Liu W, Jia Y et al. Going deeper with convolutions. In CVPR 2015.
- [Szegedy et al., 2016] C.Szegedy, V. Vanhoucke,S. Ioffe, J. Shlens, and Z. Wojna. Rethinking the inception architecture for computer vision. In CVPR, 2016.
- [Szegedy et al., 2017] Szegedy, C., Ioffe, S., Vanhoucke, V., Alemi, A.A.: Inception-v4, inception-resnet and the impact of residual connections on learning. In AAAI, 2017.
参照外部リンク
- stMind | GoogLeNet(Inception V1) and Inception V3 memo
- towards data science | Simple Guide to the Versions of the Inception Network
- Medium Coinmonks | Review: GoogLeNet (Inception v1)— Winner of ILSVRC 2014 (Image Classification)
- Review: Inception-v3 — 1st Runner Up (Image Classification) in ILSVRC 2015
- Cloud TPU における Inception v3 の詳細ガイド