Alexa Netの論文"ImageNet Classication with Deep Convolutional Neural Networks."を和訳する。

はじめに

Alexa Netの論文"ImageNet Classication with Deep Convolutional Neural Networks."を(一部省略しつつ)和訳したので、掲載しておきます。訳が間違っていたら教えてください。

https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

1 Introduction

最近の物体認識タスクにおいては、ニューラルネットワークの技術を使うのが一般的となっています。ニューラルネットワークのパフォーマンスを向上させるために、より大きいデータセットを集め、より強力なモデルで学習させ、そして過学習を防ぐ良い手法を取り入れる必要があります。しかし、既存の手法では、MNISTの手書き数字の認識のような単純な画像認識タスクはできても、複雑な画像認識タスクを行うためには、非現実的な量のデータが必要でした。CNNを用いた私たちの手法は、既存の手法よりはるかに良い画像認識精度を実現させることに成功しました。我々は、ImageNetの部分集合である、ILSVRC-2010とILSVRC-2012のデータセットを用いて、学習を行いました。

2 The Dataset

ImageNetは、1500万以上の画像と、22,000以上のカテゴリーからなるデータセットです。画像は、webで集められ、Amazon's Mechanical Turk crowded-sourcing toolを用いて、人の手でラベル付けされています。ILSVRCはとある画像認識タスクのコンペティションの名前で、ILSVRC-2010が2010年に行われた、ILSVRCのコンぺでつかわれたデートセットの名前です。そのデータセットはImageNetから作られていて、1000種類のカテゴリーについて、それぞれ1000枚程度の画像があって、合計120万枚の訓練画像と5万の検証データ、15万のテストデータからなるデータセットです。

ILSVRC-2010は、テストセットのラベルが公開されている、唯一のILSVRCのデータセットです。なので我々は、主にこのデータセットを使って、実験を行いました。テストセットのラベルが利用できない、ILSVRC-2012のデータセットを利用する、ILSVRC-2012のコンぺに参加したので、その結果を第6章にまとめておきました。
ImageNetでは、慣例的に2つの誤り率でモデルの精度を評価します。top-1エラー率とtop-5エラー率です。top5エラー率とは、モデルによって予測した答えの上位5つのうちのどれかが、正解ラベルと一致していたら正解とみなす評価方法です。

ImageNetのデータセットには、さまざまな解像度の画像を含みます。我々の手法では、入力の大きさが固定であるので、全ての画像に対して、256 * 256の解像度に変換するダウンサンプリングを行いました。長方形の画像に対しては、最初に短い方の辺が256ピクセルになるようにスケール変換して、その後中心の256*256を切り取って利用しました。それを除くと、訓練セットの各ピクセルからmean activityを引き出すということ以外に、前処理を行っていません。つまり我々は、(ほとんど)生のRGB値を使って、学習を行いました。

3. The Architecture

われわれのネットワークの概要は、図2に記載してあります。(元論文を参照してください。)8つの学習されたのレイヤー(5つの畳み込み層と3つの全結合層)を含みます。以下3.1から3.4のセクションでは、われわれのネットワークの設計において新規のあるいはあまりメジャーではないいくつかの特徴について記述します。セクション3.1~3.4は重要であると思われる順に並んでいます。

3.1 ReLU Nonlinearity

標準的なモデルにおけるニューロンのアウトプット部分では、入力xに対して、f(x) = tanh(x)またはf(x) = \frac{1}{1 + e ^ {-x}}というような関数を用います。最急降下法にかかる学習時間という観点から見ると、これらの関数は漸近が遅く、f(x) = max(0,x)という区分線形関数と比べると学習に時間がかかります。NairとHintonに従って、われわれはこの関数をReLUs(Rectified Linear Units)と呼ぶことにします。ReLUsによる深層CNNの学習は、tanhを使ったものよりも数倍早いです。図1でこのことを実際に示しています。図1は、CIFAR-10のデータセットで4層からなるCNNで訓練誤差が25%以下になるまでにかかる繰り返し回数を表示しています。このプロットによって、巨大なニューラルネットワークで実験を行うには、従来の関数を使っていては収束しないので、だめだということが分かります。

我々は、ニューロンの活性化関数に、従来のものと異なる関数を使用しようと最初に提唱したわけではありません。例えば、Jarrettetらは、非線形関数f(x) = |tanh(x)|が有効であったと主張しました。(あとはこの論文に関する説明なので略)

3.2 複数のGPUに用いた学習

GTX580(GPUの名前)単体では、3GBのメモリしかなく、学習できるネットワークの大きさを制限してしまいます。120万の訓練データは、一つのGPUに載せて学習を進めるには大きすぎるということが分かりました。それゆえ、われわれは、ネットワークを二つのGPUに分散させました。昨今のGPUは並列処理によく適合しており、ホストマシンのメモリを経由することなく、直接GPUのメモリ同士に読み書きできます。並列処理の枠組みは、二つのGPUにそれぞれカーネルを半分ずつのせました。また、GPU同士はある特定のレイヤーにおいてのみ通信をするようにしました。これは例えば、レイヤー3のカーネルは、レイヤー2のカーネルからのすべての出力を入力として受け取ります。一方で、レイヤー4のカーネルは、レイヤー3のうちで、自分と同じGPUに属している部分からのみ入力を受けます。繋ぎ方のパターンを選ぶことは、交差検証法の問題です。しかし、これによって、(コンピュータースペック的に)可能な計算量に達するまでの、通信路の量を調整を正確にすることができます。

結果としてできた構造は、Ciresanらによって、用いられた"柱状の"CNNと幾らか似ているものとなりました。異なる点は、我々の"柱"は、それぞれが独立していないと言う点です。このアーキテクチャを採用することによって、それぞれのレイヤーにおけるカーネルの数を半分にした一つのGPUで実装した場合と比べて、top1エラーとtop5エラーをそれぞれ1.7%と1.2%減らすことに成功しました。また、学習時間に関しても、2つのGPUを使った方が1つのGPUを使った時より、少し短くなりました。

3.3 Local Response Normalization

ReLUには、飽和を避けるための正則化をしなくてもよいという望ましい特徴があります。もし、少なくともいくつかの訓練サンプルがReLUに正の入力を生み出せれば、そのニューロンで学習は起きます。しかしながら、われわれは次のような局所正則化が汎化に役立ちます。a ^ i _ {x,y}を位置(x,y)にあるカーネルiニューロンの出力とします。


\begin{aligned}
b ^ i _ {x,y} = \frac{a ^ i _ {x,y}}{(k +\alpha \sum _ {max(0,i-n/2)} ^ {min(N _ i -1,i+n/2)} (a ^ j _ {x,y}) ^ 2) ^ \beta}
\end{aligned}

ここで、シグマ記号は空間的に同じ場所のn近傍のカーネルの出力について二乗和をとることを表しています。N _ iはレイヤーiの中のカーネルの数を表しています。カーネルマップの順序については、もちろん任意性があり、訓練を始める前に決める必要があります。この種の応答正規化は、本物の神経細胞にみられる活動からインスパイアされて、側方抑制の形を実装したものとなっていて、異なるカーネル間を使用して、計算されたニューロン間で大きな活動の競合を引き起こします。
定数k,n,\alpha,\betaは、ハイパーパラメーターで検証セットを使って調整しました。今回はk=2,n=5,\alpha=10 ^ {-4},\beta = 0.75となりました。我々はこの正則化を特定のレイヤーにReLUを適用した後に、おこないました。
この手法は、Jarrettらによって提案された、局所コントラスト正規化法(Local Contrast Normalization)といくつか類似点があります。しかし我々の手法の方が、カーネルの出力の平均値を引くという操作を行っていない分、"輝度の正規化"という意味では、正確です。応答正規化によって、top1エラーとtop5エラーをそれぞれ、1.4%と1.2%減らすことができました。我々は、CIFAR-10のデータセットに対してもこの手法の有効性を確認しました。4層からなるCNNに対して、正規化無しでは13%のエラー率であったのに対して、正規化ありでは11%のエラー率となりました。

3.4 Overlapping Pooling

CNNのプーリング層は、同じカーネルマップの隣接するグループのニューロンの出力をまとめます。伝統的には、隣り合うプーリングユニットによってまとめられる隣接するグループ同士は、重なりません。より正確にいうと、プーリング層は、それぞれがプール単位の位置を中心とするサイズz×zの近傍をまとめる、sピクセル間隔で配置されたプールリングユニットの格子から構成されていると考えることができます。もし、s=zとすると、一般的にCNNで採用されている伝統的な局所プーリングとなります。そして、もし、s<zならば、オーバーラッププーリングとなります。これが、我々のネットワークで採用したプーリングで、s=2およびz=3としました。この手法によって、s=2,z=2のオーバーラップさせないプーリングと比べて、top1エラーとtop5エラーをそれぞれ0.4%と0.3%減らすことができました。実験を通して、オーバーラッププーリングをさせていると過学習しづらくなるということが観察されました。

3.5 Overall Architecture

さて、我々のCNNの全体構成について描写する準備ができました。Figure2に描かれているように、ネットワークは8つの重み付きのレイヤーからなります。最初の5つは畳み込み層で、残りの3つは全結合層です。一番後ろの全結合層の出力は、1000個の出力をソフトマックス関数にします。我々のネットワークは、多項ロジスティック回帰の値を最大します。これは、訓練データにおいて、予測分布の下で正しいラベルの対数確率の平均値を最大化するということと等価です。

2,4,5番目の畳み込み層のカーネルは、同じGPUに属するレイヤーだけと結合しています。3番目の畳み込み層のカーネルは、2番目の畳み込み層のすべてのカーネルと結合しています。全結合層のニューロンはその1つ前のすべてのニューロンと結合しています。応答正規化層は、1番目と2番目の畳み込み層の後につけてあります。マックスプーリング層は、3.4節で詳しく説明したものを、2つの応答正規化層の後ろと、5番目畳み込み層の後ろに付けています。すべての層には、活性化関数として、ReLUを採用しています。

最初の畳み込み層は、224×224×3の入力を11×11×3の大きさの96個のカーネルを4ピクセルずつ動かして、フィルターします。そして、2番目にある畳み込み層が、(応答正規化され、プーリングされた)最初の層からの出力を、入力として受け取り、5×5×48の大きさのカーネルでフィルターします。3,4,5番目の畳み込み層同士の間は、プーリング層や正規化層を挟むことなく繋がっています。3番目の畳み込み層には、2番目の畳み込み層の(正規化され、プーリングされた)出力を入力として受け取る、3×3×256の大きさのカーネルが384個あります。4番目の畳み込み層には、3×3×192の大きさのカーネルが384個あって、5個目の畳み込み層には、3×3×192の大きさのカーネルが256個あります。そして、それぞれの全結合層には、4096個のニューロンがあります。

4 Reducing Overfitting

我々のニューラルネットワークには、6000万個のパラメータがあります。一方で、ILSVRCの1000のクラスは、それぞれの訓練データに対して、画像からラベルへのマッピングに10ビットの制限が課されていますが、これは、かなりの過学習をすることなしには、この非常に多くのパラメータを学習させることはできないということになります。下に、我々が過学習の問題に対処するために使った2つの主な方法を記述します。

4.1 Data Augmentation

画像データの過学習を抑制する、最も簡単で、最もありふれた方法は、ラベルを保存するのような変換によって、人工的にデータセットを増やしてしまうことです。我々は2つの異なる方法によってデータの水増しを行いました。どちらの手法も元の画像データから非常に少ない計算量で新しい画像をつくれるので、水増ししたデータはディスクに保存しておく必要がありません。我々の実装では、変換された画像は、GPUが前のバッチの画像について学習させている間に、CPU上でPythonのコードを使って生成されています。なので、これらのデータの水増しの方法は、事実上、計算コストなしに行なっています。

まず第1の手法は、画像の水平反転とイメージ変換によって生成する方法です。256 \times 256の画像からランダムに224 \times 224のパッチを選び、イメージ変換と水平反転をした画像をネットワークに流し込み、学習させました。もちろん、トレーニングデータ同士の相互依存性は高くなりますが、これによりトレーニングセットのサンプル数が2048倍に増加しました。この手法なしだと、われわれのネットワークはかなり過学習をしてしまい、より小さなネットワークを使わなければならないところでした。テストのときは、ネットワークは5つの224 \times 224パッチと(四隅と中心)その水平反転(合計10個のパッチ)を使って予測を行い、10個のソフトマックス関数の出力して現れる予測値を平均化します。

第2の手法は、トレーニングデータのRGBチャンネルの強度を変えることで画像を生成します。具体的には、それぞれのImageNetの訓練セットのRGBの値のセットに対して、主成分分析を実行します。それぞれの訓練画像に対して、対応する固有値と平均0,標準偏差0.1のガウス分布からランダムにとってきた値を掛けたものに比例した大きさの倍数を発見した主成分にかけたものを足し合わせます。従って、それぞれのRGBピクセルI _ {xy} = (I ^ R _ {xy}, I ^ G _ {xy}, I ^ B _ {xy}) ^ Tに対して、次のような量を加えることとなります。


\begin{aligned}
(\bf{p} _ 1, \bf{p} _ 2, \bf{p} _ 3)(\alpha _ 1 \lambda _ 1, \alpha _ 2 \lambda _ 2, \alpha _ 3 \lambda _ 3) ^ T
\end{aligned}

 \bf{p} _ i\lambda _ iはそれぞれ、3 \times 3のRGBピクセルの相関行列のi番目の固有ベクトル固有値を表しています。また\alpha _ iは、前述したようなランダムな値です。それぞれの\alpha _ iは、この手法によって、本来の画像の重要な特徴をだいたい捉えます。つまり、オブジェクトの特徴は輝度とカラーの変化に対して不変であるからです。この手法によって、top1エラー率は、1%以上減少します。

4.2 Dropout

様々なモデルの予測値を混ぜ合わせることは、テスト誤差を減らすのに非常に良い方法です。しかし、この方法は、ニューラルネットワークのサイズが大きいときは、訓練に非常に多くの計算資源を必要とします。しかしながら、モデルを組み合わせるのに非常に良い方法があります。最近導入された、ドロップアウトという手法は、隠れ層のそれぞれのニューロンの出力を確率0.5で0にしてしまいます。この手法によって、"ドロップアウト"されたニューロンは、出力に影響を与えず、また、誤差逆伝播にも関与しません。なので、毎回入力が与えられるたびに、ニューラルネットワークは、重み付けは共有しているが、アーキテクチャが異なるものとなります。この技法は、毎回あるニューロンがそのニューラルネットワークの形状の変化により特定のニューロンに依存できなくなることによって、ニューロンの複雑な共適応を防ぎます。それゆえ、ニューラルネットワークはより頑健な特徴を学習するように強いられます。テストの時は、我々はすべてのニューロンを使いますが、それぞれのニューロンの出力には、0.5をかけます。指数関数的な量のドロップアウトネットワークによって、予測された確率分布の幾何平均を取ることが、もっともらしい近似となるからです。

我々はドロップアウトを、図2にあるような最初の2つの全結合層で利用しました。ドロップアウトを入れないと、我々のネットワークは、かなりの過学習を示します。また、ドロップアウトは、収束するのに必要な試行回数をだいたい2倍にします。

5 Details of learning

我々は確率的勾配降下法を使ってモデルをトレーニングさせました。パラメーターは、バッチサイズ128、モーメンタム0.9、重み減衰(weight decay)が0.005です。我々は、この小さなweight decay の値が、モデルを学習させるのに重要であることを見つけました。つまり、ここでは、weight decay は単なる正則化項ではなく、モデルの訓練誤差を減らすことに貢献しているのです。重みパラメータwの更新規則は次のとおりです。


\begin{aligned}
v _ {i+1} := 0.9 \cdot v _ i - 0.0005 \cdot \epsilon \cdot w _ i - \epsilon \cdot <\frac{\partial L}{\partial w} | w _ i> _ {D _ i} 
\end{aligned}

iは回数のインデックス、vは運動量を表す変数、\epsilonは学習率、<\frac{\partial L}{\partial w} | w _ i> _ {D _ i}は、i番目のバッチD _ iの目的関数のそれぞれのwに対する導関数w _ iにおける値の平均を表しています。
まず、それぞれの層の重みパラメータ-を平均0、標準偏差0.01のガウス分布で初期化します。2,4,5番目の畳み込み層のニューロンのバイアスを、全結合している畳み込み層のバイアスと同様に、定数1で初期化します。この初期化は、正の入力が与えられたときの、ReLUの初めの方の学習を加速させます。そして、残りのニューロンのバイアスはすべて定数0で初期化させます。
われわれは、全てのレイヤーに対して、手動で設定した、同じ学習率を学習の間中適用させます。我々が参考にしたヒューリスティクスは、validation errorの減少がストップしたら、学習率を10で割ったものへ置き換えるというものです。学習率は0.01で初期化され、学習を終了するまでに3回学習率を減少させます。我々は、120万の画像セットに対して大体90サイクルを回し、学習終了までに、NVIDIA GTX 580 3GB GPU2台で5~6日ほどかかりました。

6 Results

われわれのILSVRC-2010に対する結果は、表1にまとめられています。我々のネットワークは、top-1およびtop-5テストエラーとして、それぞれ、37.5%と17.0%というスコアを達成しました。ちなみに、ILSVRC-2010コンペでの最高記録が47.1%および28.2%でした。

我々は、ILSVRC-2012のコンペティションに参加し、その結果を表2で記載しています。ILSVRC-2012のテストセットのラベルは非公開であるため、われわれが試したすべてのモデルに対するテストエラーを載せることはできません。この章における注意事項として、差が0.1%以上ないので、検証データとテストデータは交換し合えるということがあります。本論文で使用したCNNは、top-5エラー率が18.2%でした。5つ似通ったCNNの予測結果の平均をとった結果、エラー率は16.4%になりました。あるCNNを、6つの畳み込み層を追加して、ImageNet Fall 2011 のすべての画像(22000カテゴリの1500万の画像)を使って訓練させて、ILSVRC-2012のデータセットを使って”ファインチューニング”したところ、前述したような(ただし今回は7つ)CNNの予測平均のエラー率は15.3%になりました。ILSVRC-2012コンペにエントリーしていたモデルで2番目によかったものは、26.2%のエラー率でした。

最後に、2009年秋バージョンのImageNet(10184カテゴリー、890万枚の画像からなるデータセット)に対してのわれわれのモデルの エラー率を報告します。データセットのうち半分を訓練データに、半分をテストデータに使用しました。データセットの分け方に関しては決まりが存在していないため、他にこのデータセットを使ってモデルを評価した人たちと厳密に同じ条件であるというわけではないですが、この違いは感知できるほどは結果に影響しません。我々のtop-1及びtop-5エラー率はそれぞれ、67.4%と40.9%でした。

6.1 Qualitative Evaluations

図3は、ネットワークでの学習によって得られた畳み込み層のカーネルを示しています。ネットワークは、様々な色の表現とともに様々な方向の振動パターンと方向のカーネルを学習しています。セクション3.5で説明したように、我々のネットワークは2つのGPUによる、特殊なつなぎ方をしていることに注意してください。GPU1のカーネルの多くは、色に無頓着に見える一方で、GPU2のカーネルの多くは、色を特徴量して拾っています。この種の専門化は、毎回起きて、また、重み付けの初期化パラメータと独立な関係にあります。

図4の左側のパネルは、8つのテスト画像に対して、我々が学習させたネットワークによる、top-5の予測を定性的に評価したものです。上の段の一番左にあるmiteの写真のように、対象が中心にない写真でさえも、ネットワークによって認識されていることに注意してください。たいていのtop-5予測は、正当な予測であるように見えます。例えば、leopordの予測結果には、他の種類のネコのみが候補に挙げられています。いくつかのケースでは、(grille,cherry)画像が何を指しているのか曖昧であるために、別のものを検知してしまっています。

ネットワークの視覚的知識を証明する別の方法は、4096次元の隠れ層からなる最後の層の出力イメージから生成される、feature activationを考えることです。もし二つの画像が生成するfeature activation ベクトル同士のユークリッド距離が近いならば、ニューラルネットワークは高いレベルで、その二つの画像が似ているとみなしていると、言えます。図4の右側のパネルは、テストセットからとってきた5つの画像と、トレーニングセットから、この尺度に則って、それと最も似ている画像を6つ並べたものです。ピクセルレベルでは、これらの画像のL2ノルムは一般に、一番左の列の近くないということに注意してください。例えば、トレーニングセットから持ってきた象や犬たちは、いろいろな方向を向いています。補足資料では、たくさんのテスト画像に対する結果を示しています。

二つの4096次元の実ベクトルのユークリッド距離を用いて、類似性を計算することは、効率的ではありませんが、オートエンコーダを用いて、これらの4096次元ベクトルを、短いバイナリコードに押し縮めることは、有効かもしれません。この方法は、最初のデータのピクセルにオートエンコーダを適用するより良い画像を生み出します。というのは、この手法は画像のラベルを活用していなく、それゆえ、その画像が意味論的に一致しているかどうかにかかわらず、似たような輪郭のパターンを持つ画像を選んでしまう傾向にあるからです。

7 Discussion

我々の結果は、大きくて深いネットワークには、かなり難易度の高いデータセットに対しても、純粋な教師あり学習を使って、今までになかったようなすごい記録を生み出しうる能力があることを示しています。ネットワーク中の畳み込み層を一つでも外すと結果が悪くなるということは、注目すべきことです。例えば、任意の中間層を一つ外すと、top-1エラー率がだいたい2%ほど上昇してしまいました。なので、われわれの結果において、ネットワークの深さはかなり重要な役割を占めていることが分かります。

われわれの実験を簡略化するために、いかなる教師なし学習的な前処理を、たとえそれが役に立つことが予想できているものであっても、特に、かなりの量のラベル付けされたデータを利用できて、ネットワークをさらに巨大化できるほどの、十分の計算資源を手に入れていれいたとしても、行っていません。今のところは、我々のネットワークはさらに巨大化させて、長く学習させることで、より良い結果を生み出すと思いますが、人間の下側頭葉を走っている視覚システムとマッチさせるためには、まだ大きな課題があります。究極的には、現在の構造を流用した、とても大きくて深いCNNを映像情報に適用していきたいと思っています。

疑問点

  • 前処理を本当にしなくていいのか?
  • 3.2 1GPUの時とのスペックの比較カーネルの数同じにすべきでは??
  • 3.3 カーネル同士の順序はどう定義するの?