MXNet で ResNet : EC2 上の分散トレーニングで画像分類 – CIFAR-10 他 –

MXNet で ResNet : EC2 上の分散トレーニングで画像分類 – CIFAR-10 他 –

MXNet のドキュメントの翻訳が続いていたので、検証実験のレポートも載せておきます。
MXNet には画像分類用のモデルが各種定義されていて簡単に利用可能です。今回は CIFAR-10 及び Oxford 17 Flowers データセットを題材に ResNet を試してみます。

また Amazon EC2 上で GPU インスタンス (p2.xlarge) 2つを使用して MXNet が得意とする分散トレーニングも実行してみました。

Deep Residual Learning (ResNet)

Deep Residual Learning は Microsoft Research Asia (MSRA) が提唱したモデルで ILSVRC 2015 の分類タスクで優勝したモデルです :

ImageNet Large Scale Visual Recognition Challenge 2015 (ILSVRC2015)
and Results

ペーパーは以下 :

Deep Residual Learning for Image Recognition
K. He, X. Zhang, S. Ren and J. Sun

参考まで、abstract だけ翻訳しておきます :

ニューラルネットワークはより深くなるに従ってトレーニングがより困難になります。ネットワークのトレーニングを容易にすることが可能な residual learning フレームワークを公開します。これは前から使われていたものよりも本質的にはより深くなります。層を、learning unreferenced function の代わりに、learning residual function として明示的に再公式化 (reformulate) します。これらの residual ネットワークが最適化するのがより簡単であり、かなり増やした深さからでも精度を得られることを示す、包括的で実証的な証拠を提供します。ImageNet データセット上で 152 層まで増やした深さで residual ネットを評価します — これは VGG ネットよりも 8 倍深いですが依然として複雑の度合いは低いです。これらの residual ネットのアンサンブルは ImageNet テスト・セット上でエラー率 3.57 % を達成しています。結果は ILSVRC 2015 分類タスクにおいて1位を勝ち取りました。また 100 と 1000 層による CIFAR-10 上の解析も示します。表現の深さは多くのビジュアル認識タスクのために中心的な重要性があります。極めて深い表現のみによって、COCO 物体検知データセット上で 28% の相対的改善を得ました。deep residual ネットは ILSVRC & COCO 2015 コンペへの提示の拠り所で、そこではまた ImageNet 検知、ImageNet localization、COCO 検知、そして COCO セグメンテーションのタスクにおいて1 位を獲得しました。

 
それから関連記事も紹介しておきますと、ResNet については “ゲートのない LSTM と同等である” という興味深い議論もあります。以下で後者は評価しつつも、批判的なニュアンスもこめられています :

How does deep residual learning work?
Microsoft Wins ImageNet 2015 through Feedforward LSTM without Gates

以下は何故 Residual なのかという説明があります :

Why is Deep Residual Learning called that way?

この説明は短いので粗く翻訳しておきます :

【質問】
何故 Deep Residual Lerning はそのように呼称されるのでしょう?

F(X)=H(X)-X を学習することの本質は何でしょう?
フィッシャー・ベクトル (Fischer vectors) や他の residual テクニックとの関係は?
その関係がそこから名をとってこのテクニックに命名するに十分に本質的なのは何故でしょう?

【回答】
深層 Convolutional ネットワークを解析し始めた時、直感に反して、より深いネットワークはより少ないエラーを持つわけではないことを発見しました。事実、追加層は恒等写像であるにもかかわらず、エラーはより浅いネットワークよりも大きいです。これは奇妙なことです、何故なら全ての追加層が恒等層であるならば、ネットワークは少なくとも基となったネットワークと同程度の性能は保持すべきです。この問題は、バッチ正規化で効果的に取り組まれてきた勾配消失問題とは異なっていました。

この奇妙な挙動をガイド的な手がかりとして、特徴マッピングを学習するために、residual を学習して元の特徴ベクトルを追加することによりネットワークをトレーニングすることを決めました。こうして、residual が 0 だとしてもネットワークは恒等写像を学習します。residual は H(x) = F(x) – x によって与えられます、ここで x は画像で F(x) は通常ネットワークが学習するマッピング(写像)です。

この大きなアイデアは、もし AlexNet, VGG あるいは GoogLeNet のような成功したネットワークがあれば、そしてそれに更なる多くの層を追加したならば、後の層で基本的な恒等写像を学習することが今や可能になります。その結果、少なくとも元のネットワークと同程度には性能が出ます。この residual 公式化 (formulation) はそれを可能にします。

結果、1000 層以上を持つネットワークをトレーニングすることが今や可能となり、そして追加された深さは認識タスクにおいてより良い性能を提供する役割を果たします。

ResNet の MXNet 実装

上記の abstract によればオリジナル・モデルは 152 層 – VGG の 8 倍の深さがあるわけですが、MXNet による実装は実は簡単です。定義されたモデルが用意されていて層数を指定するだけで利用可能です。
以下はそのモデル・グラフを層数を 18 として描画した図です :

MXNet で CIFAR-10

ご存知かと思いますが、CIFAR-10 は機械学習定番のベンチマークとして使用され、RGB 32×32 ピクセル画像を 10 カテゴリーに渡って分類するものです : 飛行機、自動車、鳥、猫、鹿、犬、蛙、馬、船そしてトラック。

CIFAR-10 の詳細は TensorFlow : Tutorials : 畳込み ニューラルネットワーク を参照してください。

以下はサンプル画像です :

【サンプル画像】
ae_cifar10_list_samples.01

【トレーニング結果】
そして以下がトレーニング結果になります。
取り敢えず 50 epochs 回してみましたが、これだけで 90 % 近い精度を達成できました :

MXNet 分散トレーニングで Oxford 17 Flowers

そして今回の検証実験の主眼として、MXNet 分散トレーニングで Oxford 17 Flowers データセットの分類問題に挑戦してみました。Oxford 17 Flowers データセットは University of Oxford が提供しているデータセットです。元々は VGG モデルのトレーニングのために利用されていたものと思われます。

Dataset の詳細は 17 Category Flower Dataset を参照してください。

【サンプル画像】
ae_oxf17f_list_samples.01

【MXNet 分散トレーニングの結果】

  • 分散トレーニングは Amazon EC2 の GPU インスタンスを2つ利用しています。
  • MXNet の ResNet モデルは層数が指定可能です。今回は最初に 18 層でトレーニングし次に 34 層で試してみました。左下図が 18 層、右下図が 34 層です。当然 34 層の方が収束は遅くなります。
  • それぞれトレーニング精度と検証精度をグラフ化しています。振動が大きい方が検証精度です。


  • 以下のグラフ左下図はトレーニング精度を層の違いで比較したグラフで、右下図は検証精度を比較したものです。


 

以上