Edited at

機械学習論文読み:Deep Residual Learning for Image Recognition

Image Classsificationの重要論文の一つ。特に、2015年以降は、ResNetをベースとして改良されている論文が多く、重要性が高いと思います。


論文・参考サイトへのリンク

以下、Microsoft Researchの事を一般的な略語のMSRAと書きます。また、補足と書いてある部分は、論文には書いておらず、私が補足した点になります。

機械学習を絶賛勉強中なので、訂正、指摘、疑問、質問等あれば、どしどしお願いします。


始めに



  • 2015年のImageNetCompetitionで、以下の結果 (MSRAのスライドより)


    • ImageNet Detection: 1位 (16% better than 2nd)

    • ImageNet Localization: 1位 (27% better than 2nd)

    • COCO Detection: 1位 (11% better than 2nd)

    • COCO Segmentation: 1位 (12% better than 2nd)



  • 大幅なレイヤー数増加とエラー率低減を実現(図はMSRAのスライドP3より引用)


スクリーンショット 2017-08-06 11.52.14.png

以下、論文の流れに沿って書きます。以下特に明記しない限り、論文からの引用です。

※ 正直、MSRAのスライドの方が分かりやすいです。


Abstract


  • 深いニューラルネットワークは訓練することは困難


    • この論文では、これまで使用されていたよりもはるかに深いネットワークのトレーニングを容易にするために、Residential Learning Frameworkを提示する。



  • 非参照関数を学習するのではなく、層入力を参照してResidual functionを学習するように、レイヤーを再構成する


    • 補足:非参照関数(Unreferenced function)が何の事か分からないが、その後の文章の意味としては、そのレイヤで最適な出力を学習のではなく、層の入力を参照する残差関数を学習するようにする。$\mathcal{H}(x)$が学習して欲しい関数だとすると、$\mathcal{H}(x) = \mathcal{F}(x) + x$になるように学習させる。

    • 20170615193941.png



  • この論文では、これらのResidual Networkが最適化しやすく、かなり深い深いレイヤーでも精度を得ることができる、包括的な実験結果を提供する


  • ImageNetデータセットでは、VGGネットより8倍深い152レイヤーの深さの残差ネットを評価するが、依然として複雑さ(パラメーター数)は低い



  • これらの残差ネットは、ImageNetテストセットで3.57%のエラーを達成


    • この結果は、ILSVRC 2015分類作業の第1位を獲得



  • 我々はまた、100および1000層のCIFAR-10に関する分析を提示する



  • 表現の深さは、多くの視覚的認識課題にとって重要である。


    • 私たちの非常に深い表現のせいで、私たちはCOCOオブジェクト検出データセットで28%の相対的な改善を得ている



  • ImageNet Detection、ImageNet Localization、COCO Detection、およびCOCO Segmentation の第1位を獲得



1. Introduction


  • 深い畳み込みニューラルネットワークは、画像分類のための一連のブレークスルーを導いた。


    • 最近の研究で、ネットワークの深さは、クリティカルに重要である事が分かっている

    • ResNet以前の、ImageNetの先端的な結果では、「とても深い」モデルでは、16〜30レイヤである



  • そのため「より多くのレイヤーを積み重ねても、簡単にネットワークを学習できるのか」というのが疑問となる


  • この疑問の最初の障害は、悪名高い、勾配消失・勾配爆発である


    • 補足:勾配消失についてはこちらが分かりやすい

    • この問題自体は、Normalized initialization、Intermediate normalization layers及び、SGD(確率的勾配降下法)である解決が図られている


      • 補足:一般的には、Batch normalization、ReLU、Dropoutなども貢献していると言われている。






  • しかし、レイヤー深くすると、それでも degration problem が発生する


    • 下のFigure 1 のように、深いネットワークでは、エラー率高い。また、Accuracyが飽和(Training error が台地を迎える)していることが分かる



Figure 1.

スクリーンショット 2017-07-18 11.25.54.png

左はトレーニングエラー。右は、テストエラー。

共に、CIFAR-10 のデータを使い、20レイヤーと30レイヤーの plain network(後述)での結果。深いネットワークでは、エラー率高い事が分かる。Fig.4 にImageNetの結果があるが、類似した挙動を示している。



  • この結果は、overfitting によるものではない。


    • 補足:結局、勾配消失・勾配爆発が起こっているということ?論文中には書かれていない




  • 従来は、"construction"という方法で、解決していた。これは、より浅いModelで学習したものを、深いModelにコピーする方法


    • 補足:コピーされず、深いModelで新しくする登場するレイヤーは、"Identity"と呼ばれるらしい。「個性」という意味で使われているような印象。



(図はMSRAのスライドより)

スクリーンショット 2017-08-06 12.30.26.png



  • しかし、より深くすると、この方法ではうまくいかない。



  • 本論文では、Deep Residual Learning Framework でこれを解決する



  • $\mathcal{H}(x)$が学習して欲しい関数だとする。2レイヤーのPlain なネットワークを考える。


    • この2レイヤーは、$\mathcal{H}(x)$ にフィットするように学習される



(この図はMSRAのスライドより)

スクリーンショット 2017-08-06 14.20.24.png

20170615193941.png


  • 対して、Residual networkでは、$\mathcal{H}(x) = \mathcal{F}(x) + x$に対して学習させる。


    • これは、2レイヤは、$\mathcal{F}(x) = \mathcal{H}(x) - x$ に学習させることになる。これがResidual 残差の意味

    • つまり、x (identity)が、最適の場合、weight は 0 になる

    • これにより、x と $\mathcal{H}(x)$が近い場合でも、微少な差$\mathcal{F}(x)$を学習しやすくなる



  • Fig.2 の $\mathcal{F}(x) + x$は、"shortcut connection"付きのfeedforward neural network


    • これは、パラメータは増えないないし、計算も複雑では無い




2. Related work

すいません、飛ばします。MSRAのスライドのP19に簡単に解説があります


3. Deep Residual Learning


3.1. Residual Learning

先ほどの説明と同じ


3.2. Identity Mapping by Shortcuts


  • Fig. 2. の2つのレイヤのブロックを、この論文では、式1:$y = \mathcal{F}(x, \{W_i\}) + x$ と定義する


    • x が入力で、yが出力

    • $\mathcal{F}(x, \{W_i\})$ が学習されるべき関数を示している


      • Fig. 2 は2レイヤーなので、$\mathcal{F} = W_2\sigma(W_1x)$となる


        • $\sigma$は、ReLUを示す





    • ReLUが、$\mathcal{F} + x$の後にある


      • 補足:なぜか式1には書いて無いが。。





  • 式1において、$x$と$\mathcal{F}$の次元が同じである必要が有る


    • もし違う場合は、式2:$y = \mathcal{F}(x, \{W_i\}) + W_sx$

    • W_s は、1x1のconvolution ネットワーク(P4 3.3 のResidual Networkのところに書いてある)






3.3. Network Architectures

Figure 3.

スクリーンショット 2017-08-06 16.25.09.png

ImageNet用のネットワークアーキテクチャの例。左:VGG-19のモデル。計算量は19.6 GFlops (参考、中央:34レイヤーのResidual networkなしのPlainなネットワーク。計算量は3.6 GFlops、右:Residual network付きの34レイヤ。計算量は、3.6GFlops

点線は、Dimentonが増えていて、式2を使う必要が有る事を示す。

詳細は、Table 1 を参照。


  • できるだけシンプルにしている


    • VGG16にインスパイヤされたネットワーク

    • できるだけ、3x3 の Convolutional network になっている



  • その他の特徴。主にVGG16との違い。以下全てVGG16にはあった。(MSRAのスライドより


    • max pooling が無い

    • hidden fc が無い

    • dropoutが無い



Table 1.

スクリーンショット 2017-08-06 17.18.38.png

Imagenet向けのアーキテクチャ。 Bulidng blockは、Fig.5 で示されるもの。


  • 補足: [3x3, 64; 3x3, 64] 等は Fig.2 で示されたものと同じ。もう一つの [1x1, 64; 3x3, 64; 1x1, 256]等は、"bottleneck"というもの。Fig.3 は、このTable 1の 34 layers に対応している。例えば、Fig.3 のpool,/2 の後の6つのレイヤー(3つのBulidng block)が、[3x3, 64; 3x3, 64] $\times 3$ に対応している。


3.4 Implementation

特別なところは無いです。


  • Data augmentation は、以下の通り


    • [256, 480] の範囲で、Scale augmentation

    • 224x224 にランダムCrop

    • ランダム横方向反転



  • Per-pixel Mean Subtraction(チャンネル毎の平均値を引く)

  • Batch normalizationを全てのConvolution networkの直後、ReLUの直前に入れる

  • pretraining は無く、Scratchから学習

  • dropoutは使わない


    • ハイパーパラメータ

    • SDG mini-batch size: 256

    • learning rate 0.1 からスタート。error 率の低下が台地を迎えたら、10 で割る

    • $60 \times 10^4$ イテレーションまでトレーニング

    • weight decay : 0.0001

    • momentum: 0.9




4. Experiments


4.1. ImageNet Classification

Figure 4.

スクリーンショット 2017-08-06 17.27.59.png

ImageNet での結果。 細い線は、Training Error。太い線は、Validation error(Cropは中央に固定)。

左: Plaing network

右: ResNet

このグラフでは、ResNetとPlainネットワークで、Parameter数は同じ。にもかかわらず、Error率が下がっていることが分かる。

Table 2.

スクリーンショット 2017-08-06 17.39.11.png


  • Fig.4 を見ると、重要な点として、Plain-34はPlai-18よりも悪い。これは、degration problem が起こっている事を示している。が、ResNet-34は、ResNet-18よりも良く、degration problemを回避できていることが分かる。

  • Table 2を見ると、top-1エラーが、ResNetとPlainネットワークで比べると、3.5%良化している。これにより、Residual learningが深いネットワークで有効なことが示せた

  • Table 2を見ると、18レイヤは、ResNetとPlainネットワークでそんなに変わらない。が、収束が速いことが、Fig. 4で分かる。SGDは、18レイヤーの浅いネットワークぐらいでは、良い答えを導ける。その場合でも、ResNetの方が収束が速いことが分かる。


    • 補足:水色の18-レイヤの線を比べる。中央の台地を見た時、右のほうが低い




Iedntity vs. Projection Shortcuts.


  • 式2を使うの手法を評価


    • (Option A) zero-padding (Table 2、Fig.4右側のものと同じ)


      • 補足:サイズが違う場合、単にゼロで埋める。参考



    • (Option B) 次元が違う場合(サイズが違う場合)のみ、projection shortcuts


      • 補足: 1x1 convolution にする 参考



    • (OptionC) 全てのShortcutを projection にする



Table 3.

スクリーンショット 2017-08-06 18.12.04.png

Image Net でValidationした結果。10-crop testing をしている(補足:10-crop testing については末尾参照)

ResNet-50/101/152 は、Bを使った結果


  • A > B > C でCが一番良いが、大きく違わない


    • 今後の評価では、Cを使わない(明示しない限り、基本的にBを使う)




Deeper Bottleneck Architectures.


  • ImageNet向けの、より深いモデルに"bottleneck" building block を導入する

Figure 5.

スクリーンショット 2017-08-06 17.57.15.png

左: Fig. 3 でResNet-34に使われていた bulidng block

右:ResNet-50/101/152 に使う "bottleneck" bulidng block


  • Figure 5 の左右のComplexityは似通っている


    • 同じような計算量でレイヤを増やせるので、深いレイヤで有用



  • 50レイヤResNet(ResNet-50)


    • ResNet-34を、bottleneck blockに置き換えたもの。Option BのProject shortcutsを使う



  • 101レイヤ、152レイヤ(ResNet-101、ResNet-152)


    • レイヤは大幅に増えたが、それでも、VGG-16/19より計算量が少ない


      • VGG-16 15.3 GFlops

      • VGG-19 19.6 GFlops





  • Table 3 および、Table 4 を見ると、Depthを増やす毎に、Errorが減っており、degression problemは発生していないことが分かる

(MSRAのスライドより)

スクリーンショット 2017-08-06 20.24.20.png

Table 4.

スクリーンショット 2017-08-06 18.11.57.png

ImageNet validation setの single-model での、Error rates。(補足1:Table 3と結果が違うのは、10-crop testing をしているかどうかの差だと思う)(補足2:single-modelについては本ページ末尾参照)

Table 5.

スクリーンショット 2017-08-06 22.12.09.png

Ensembles(補足:本ページ末尾参照)をしたときのError rates。これは、ImageNetのコンペで使われるテストサーバーから提供されたtest setと、Error rate の値。


  • Table 4


    • ResNet-34 でも他手法と比べて、十分、優位である

    • ResNet-152 は、top-5 validation error で、4.49 である



  • Table 5


    • 異なる深さの6モデルをEnsembles をしている

    • top-5 error が、3.57% で1位を獲得した



(MSRAのスライドより)

スクリーンショット 2017-08-06 22.17.12.png


4.2 CIFAR-10 and Analysis


  • CIFAR-10 を使って、さらに深いネットワークでの挙動を検証する

Table 6.

スクリーンショット 2017-08-06 22.24.32.png

CIFAR-10のClasasification error。全ての手法は、data augumentationをしている。ResNet-110だけ、5回実行し、分散を計測している。

Figure 6.

スクリーンショット 2017-08-06 22.27.11.png

CIFAR-10の結果。破線は、training error、太線はtesting error

左: Plain networks。Plain-110のError rateはとても60%以上で表示されていない

中央: ResNet

右: ResNet-110とResNet-1202。(補足:3未満のIterationは省略されている)


  • ResNet-110 は、一番良い結果になっている。収束も早い


    • かつ、他の深いレイヤーの手法よりも、パラメータ数が少ない(FitNetやHighwayに比べ)



  • 1000以上のレイヤの場合


    • ResNet-1202の結果もそれほど悪くない

    • しかし、ResNet-110より結果が悪く、これほど深いモデルには、以前問題があることが分かる

    • これは、Overfittingだと思われる。強い正規化を行う事で、改善する可能性があるが、これは将来の課題である

    • また、ResNet-1202は、不必要にパラメータ数が多い



Figure 7.

スクリーンショット 2017-08-06 22.33.14.png

CIFAR-10を学習させたときの、レイヤー毎の標準偏差。(横軸が標準偏差)

それぞれの 3x3 layerで、Batch normalizationの後、ReLU/加算の前の偏差を表している。

上:レイヤーは、そのままの順番

下:レイヤーを、偏差の高い順に並べている


  • これは、他手法に比べて、偏差が0に近いことを示している。(これは、Residual functionの元々のモチベーションである)

  • また、ネットワークが深いほど、偏差が少ない


4.3 Object Detection on PASCAL and MS COCO

Table 7.

スクリーンショット 2017-08-06 22.54.01.png

PASCAL VOC2007/2012 test set の Object detction mAP(%)の結果。Apeendix のTable 10、11も参照。

Table 8.

スクリーンショット 2017-08-06 22.54.05.png

COCO validation set の Object detection mAP(%)の結果。Appendix の Table 9も参照


  • 他のタスクにも有効である事を示す


補足



  • top-5 error: Predictionの結果で、Accuracyがトップ5のクラスの中に正解が含まれていない確率。ImageNetの評価でよく使われる。なぜ、top-5 を見る必要があるかというと、画像の中に複数のオブジェクトが含まれている場合に、そのどれが、正解のクラスか分からない為。例えば、男性がドラムを叩いている場合、正解クラスが、男性なのか、ドラムなのか、不明。


  • 10-crop testing: テスト画像1つから、data augumentation のような手法で10個の画像を切り出し、それに対する予測結果を平均して答えを出す。1-crop testing に比べて、エラー率が減少する 参考


  • Ensembles: ネットワーク構造の違う複数のモデル、あるいはネットワーク構造は同じだが入力の異なる複数モデルを使って、出した結果を平均して結果をだす


  • single-model/single-model result: Ensembleではなく、一つのモデルだけの結果。多くの場合、一番良い結果のでたモデルを用いる。