TensorFlow: Network-In-Network で CIFAR-10 精度 90%
作成 : (株)クラスキャット セールスインフォメーション
日時 : 05/08/2017
Network In Network
マイクロ・ネットワークで有名な Network in Network (NiN) は、より小さいモデルでより高速に訓練することを可能とし、over-fitting も比較的起きにくいとされます。多大な影響を与えた epoch-making なモデルです。
その基本アイデアは MLP 畳込み層 (mlpconv) – マイクロ・ネットワーク – の導入とグローバル平均プーリングによる完全結合層の代用ですが、特に前者については広く利用され、類似のアイデアは Inception や ResNet にも見られます。後者は解釈を容易にして over-fitting を起きにくくします。
Network In Network 全体の構成としては mlpconv 層のスタックになり、そのトップにグローバル平均プーリング、更に目的コスト層が存在することになります。イメージと違い、意外にシンプルなモデルです。
参照されることが多いわりにはオリジナル・モデルがそのまま使われることは (知る限りでは) 少ないように思われますが、実装は簡単ですので定番のデータセットで威力を試しておきます。
MNIST、CIFAR-10 及び CIFAR-100 について原論文の結果に匹敵、あるいは凌駕する結果が得られました。CIFAR-10 では精度 90 % に到達します。
Network In Network の原論文は以下です :
- Network In Network
Min Lin, Qiang Chen, Shuicheng Yan
(Submitted on 16 Dec 2013 (v1), last revised 4 Mar 2014 (this version, v3))
Abstract のみ翻訳しておきますが、基本的にはここに書かれていることが全てです :
受容野内のローカルパッチのモデル識別性を強化するために “Network in Network” (NIN) と呼ばれる、新しい深層ネットワーク構造を提案します。従来の畳込み層は入力をスキャンするために、非線形活性化関数が続く線形フィルタを使用します。代わりに、受容野内のデータを抽象化するためにより複雑な構造でマイクロ・ニューラルネットワークを構築します。そのマイクロ・ニューラルネットワークは潜在的な関数近似器である多層パーセプトロンでインスタンス化します。特徴マップは CNN と同様の流儀で入力に渡ってマイクロ・ネットワークをスライドさせることで得られます; そしてそれらは次の層に供給されます。深層 NIN は上で記述された構造を多層化することで実装されます。マイクロ・ネットワークを通したローカルモデリングの強化により、分類層の特徴マップに渡るグローバル平均プーリングを利用することが可能で、これは伝統的な完全結合層よりも解釈がより容易で過剰適合しにくいです。私たちは CIFAR-10 と CIFAR-100 上の NIN で state-of-the-art な分類性能を示し、SVHN と MNIST データセットで合理的な性能を示しました。
実装
実装は簡単ですが、以下の Caffe 実装を参考にしました (というか後者を殆どそのまま TensorFlow に流用しました) :
MNIST
手始めに MNIST です。取り敢えず 80 epochs 実行してみましたが、最後の 10 epochs の平均エラー率は 0.393 % で、state of the art に近い精度が出ました (ちなみに原論文のエラー率は 0.47 % ですので、僅かばかり良い結果が得られたことになります)。
CIFAR-10
原論文では 91.2 % のようですが、そこまでは出ませんでしたが、400 epochs で 90 % に到達します :
念のため更に 100 epochs 再調整します :
最後の 10 epochs の平均精度は 90.204 でした。時間をかければ 91 % に近い精度は出る感じですが、超えるのは難しそうです。
CIFAR-100
続いて CIAR-100 ですが、スクラッチからの訓練ではなく上記の CIFAR-10 の訓練済みのモデルを流用しました。この方法だと 66 % は出ます。原論文の結果は 64.32% です :
以上