技術解説

ILSVRC を振り返り CNN を deep に理解する②

技術解説

はじめに

本記事は連載物の第二弾です。前回の記事を読んでいない方は以下からご参照ください。

ILSVRC 2013

2013年は ZFNet と呼ばれる手法が AlexNetの精度を 4% 上回り、優勝しました。

ZFNet について見ていきましょう。

ZFNet

論文リンクはこちら
https://arxiv.org/pdf/1311.2901.pdf

タイトルは『Visualizing and understanding convolutional networks』となっています。

畳み込みニューラルネットワークの可視化によって AlexNet の特性や課題点を明らかにし、改善することによって精度の向上を達成しています。

以下が ZFNet のアーキテクチャ図です。

ZFNet のアーキテクチャ
ZFNet のアーキテクチャ

なお、AlexNet との相違点は以下の3 点のみです。

  • 最初の畳み込み層のフィルタサイズを 11 → 7 に変更する
  • 最初の畳み込み層の ストライド を 4 → 2 に変更する
  • 3, 4, 5層目のレイヤーを単一GPU処理に変更する

これらの変更がなぜ精度向上に寄与したかを見ていきます。

AlexNet の問題 1

AlexNet の中間層を可視化していくと、最初の層から得られる特徴マップがうまく特徴を抽出できておらず無駄になっていることがわかりました。

(b)が AlexNet の1層(c)が ZFNet の1層

上図の通り、(b)の特徴マップは濃淡がほとんどないものがいくつもあり、特徴をうまく抽出できていないのに対し、(c)の特徴マップはほとんどが何らかの特徴を抽出できています。

これは、AlexNet の第 1 層が極端に大きなカーネルサイズを利用していることが原因と考えられています。

大きなカーネルサイズでは極端に高周波な情報と低周波な情報しか取得できず、中間的な特徴が取得できないためです。

ZFNet はカーネルサイズを 11 → 7 に落とすことでこの問題を解決しており、図(c)のように様々な特徴を抽出することに成功しています。

AlexNet の問題 2

AlexNet の層を可視化してわかったもう一つの事実は、2層目の特徴マップがエイリアシングされており、以降の層に充分な情報が伝わっていないことでした。

これは、AlexNet の畳み込みニューラルネットワーク第 1 層で大きなストライドを利用していることが原因でした。

ZFNet はストライドを 4 → 2 に落とすことでこの問題を解決しており、後段の層までうまく特徴を伝えることに成功しています。

まとめ

AlexNet の特徴を可視化して精度の劣化原因を調査、解決することで精度の向上に貢献したネットワークです。

特徴的な技術が出現したわけではないですが、ZFNet によってフィルターサイズやストライドが与える影響についての理解が進んだと思われます。

実際、近年提案されているほとんどの手法でも、フィルターサイズは 3 より小さいものですし、ストライドも 2 より小さいものです。

ILSVRC 2014

2014年の ILSVRC では GoogLeNet と呼ばれる手法が優勝しました。

また、2 位の VGGNet についても、シンプルかつ高精度であることから現在も学習済みモデルとしてよく利用されているため、こちらについても確認していきます。

GoogLeNet

論文リンクはこちら
https://arxiv.org/pdf/1409.4842.pdf

タイトルは『Going deeper with convolutions』となっています。

GoogLeNet のアーキテクチャ

論文のタイトルとアーキテクチャ図から見て分かる通り、過去のアーキテクチャと比較して層がずいぶん増えていますね。

AlexNet、 ZFNet が 5 層の CNN だったのに対し、 GoogLeNet は 21 層あります。

2014 年頃から、CNN の層をより多層にすること、層のチャネル数を増加させることによって精度が向上することが経験的に知られ始めたという背景があります。

GoogLeNet において特徴的なのは、複数の畳み込み層とプーリング層からなる『Inception』モジュールを繋いでいくことによって大きなネットワークを作り上げている点です。

また、最終層の直前に『Average Pooling』層が利用されている点にも注目です。

これらの機構について詳しく見ていきましょう。

Inception モジュール

Inception モジュールのアーキテクチャ

Inception モジュールはネットワークを分岐させ、サイズの異なる畳み込みを行った後に出力を結合する処理を行います。

(a) に注目すると、5×5 の畳み込みと、 3×3 の畳み込み、 1×1 の畳み込みと 3×3 max pooling の出力を結合していることがわかります。

この 3 つ並列して行われている畳み込み層は、本来は 5×5 の畳み込み層 1 つで表現が可能です。

しかし、明示的に 3 つの畳み込み層に分けることで 5×5 の畳み込み層 1 つで要するパラメータの数を削減することに成功しています。

例えば、最終的な出力サイズが 96 と仮定した場合、Inception モジュールと通常の畳み込み層の持つパラメータ数は以下になります。

  • Inception モジュール
    • (32 * 5 * 5) + (32 * 3 * 3) + (32 * 1 * 1) = 1120
  • 通常の 5×5 畳み込み層
    • 96 * 5 * 5 = 2400

なお、(b) は (a) の Inception モジュールの前に 1×1 畳み込み層を配置してチャネル方向の次元も削減しています。

2019 年現在も Inception モジュールはいくつか発展系が提案されており、精度の向上に寄与しています。

Global Average Pooling

Global Average Pooling は、入力された特徴マップと同じサイズで Average Pooling を行う Pooling 層です。

この層を通すことによって、高さ、幅が 1 でチャネル数のみが保持された特徴マップを作ることが可能です。

論文では最後の畳み込み層の出力を 1 度 Global Average Pooling 層を通した後に 1 つの全結合層へと入力を与えることで最終的な出力を得ています。

従来のネットワークアーキテクチャでは畳み込み層の最後に複数の全結合層を用いてクラス数に合わせた出力(ImageNet なら 1000 クラス)に調整することが一般的でした。

しかし、全結合層は非常にパラメータ数が多く過学習を引き起こしやすかったため、ドロップアウト等の工夫で過学習を抑制する必要がありました。

Global Average Pooling 層を利用することで全結合層によるパラメータ数の増加を防ぎ、過学習を抑制することに成功しています。

なお、この(GAPの後に全結合層を1層だけ適用し,最終出力を得る)構成は、現在ではクラス分類を行うCNNのベストプラクティスとして知られています。

VGG

論文リンクはこちら
https://arxiv.org/pdf/1409.4842.pdf

タイトルは『VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION』となっています。

VGG のアーキテクチャ説明図(D が VGG16 / E が VGG19)

今までのようなネットワーク図ではないので若干わかりづらくて恐縮ですが、提案されているアーキテクチャは 11 層から 19 層の 5 種類です。

GoogLeNet には少し劣りますが、AlexNet や ZFNet と比較すると 深いネットワークになっていることがわかります。

畳み込み層と Pooling 層を連ねたシンプルなアーキテクチャであることから、様々なタスクにおいて画像特徴の抽出器として利用される、非常に有名なネットワークです。

論文では CNN の深さが精度にどのような影響を与えるかを調査することを目的としています。この目的のために、以下の条件を固定して複数の実験が行われました(図中A ~ E)。

  • 3×3 の畳み込み層のみを利用する
  • Max Pooling 層によって特徴マップのサイズを半分にする
  • Max Pooling 層を通過した後の畳み込み層の出力サイズを 2 倍にする

この条件下のもと、畳み込み層を増やしていくことで安定的に精度が向上することが示されています。

※ 論文内では 19 層程度までの調査であるためこのような結果ですが、さらに深いネットワークを構築する場合は勾配消失問題が発生するため、一概には精度が向上しないことに注意が必要です。

なお、 3×3 の畳み込み層を 2 層通すことは実質的に 5×5 の畳み込み層を 1 度通すことと実質的には同等の効果でありながら計算コストの削減になっています。

  • 3×3 の畳み込み層 * 2 の計算コスト
    • 3×3 * 2 = 18
  • 5×5 の畳み込み層 * 1 の計算コスト
    • 5×5 * 1 = 25

計算コストを削減しながらより深いネットワークを構築できることから、以降の研究では広く 3×3 の畳み込み層が利用されることとなりました。

Glorot の初期化

最後に初期化の方法についても触れておきます。

VGG は比較的深いネットワークであるために従来の初期化手法では学習が難しく、浅いネットワーク(例えば 10 層など)で学習を進めた後に層を追加していく手法がとられていました。

その後、初期化の手法についても研究が進み Glorot の初期化と呼ばれる手法を採用することで事前学習なしでも学習が成功するようになったと報告されています。

終わりに

ISLVRC2013 ~ 2014 の手法について振り返りました。以降は次の記事にて記載します。

引き続きよろしくお願い致します。

コメント

タイトルとURLをコピーしました