sam_yusukeの日記

機械学習について書きます。

OSS AutoML:AutokerasでCifar10の画像分類を試してみた

Autokerasとは

Autokerasニューラルネットワークの構造やハイパーパラメータを自動的に探索してくれるPython製のライブラリです。

The ultimate goal of AutoML is to provide easily accessible deep learning tools to domain experts with limited data science or machine learning background.

 

From <https://github.com/jhfjhfj1/autokeras>

 

のように書かれていて、Googleのいう「AIの民主化」のようなものを目指しているようです。そのうち簡単なUIなども作られそうですね。テキサスA&M大学に開発されています。

GoogleのAutoMLやソニーのNeural Network Consoleが競合でしょうか。

まだまだアルファ版ということでIssueがさばききれてなかったり、チュートリアルがコードと一致していないなど、不完全なところも多く、使うには試行錯誤が必要そうです。

この記事の内容も古くなるかもしれません。

簡単な実験

とりあえず、学習してテストするところまでやります。データセットには、Cifar-10を使いました。画像分類タスクでベンチマークとしてよく使われるデータセットです。データセットの説明は他のサイトに任せます。

 

次のような設定をして学習と評価をしてみました。

  • データ強化あり
  • いくつかの制約を設定(現実的な時間で終わりGPUのメモリ量をオーバーしないように…)
    • 一つのモデルあたりミニバッチ勾配法による学習は最大7エポック
    • NNの層の数の最大値は64
    • ミニバッチ勾配法のバッチ最大数は64
  • 10時間でハイパーパラメータの探索を打ち切り

Accuracyの変化

合計25種類のNNが学習されたようで最大で約94%のAccuracyとなっています。

f:id:sam_yusuke:20181201115835p:plain

Autokerasの論文より性能が良くなっているが、Resnetの論文の正解率とトントン。

ハイパーパラメータチューニングされたResnetに適当に使って追いついているので、この結果だけ見るとそれなりにうまく行ってそうですが、今後、データセットを変えたりしてテストしたいです。

Accuracy最大の分類器の性能

実際に生成されたNNの分類器のCifar10に対するConfusion Matrixを見てみます。

Confusion Matrixで見てみると結構分類ミスされているように感じる。チューニングされた手法でどの程度なんだろう…

 

array([[925,   4,  21,   7,   4,   1,   2,   3,  26,   7],

       [  5, 958,   0,   0,   0,   0,   0,   0,   5,  32],

       [ 34,   0, 863,  20,  34,  14,  18,   7,   6,   4],

       [ 14,   3,  31, 798,  33,  85,  16,  11,   2,   7],

       [  3,   1,  20,  12, 924,  14,   9,  17,   0,   0],

       [  5,   0,  14,  82,  19, 850,   8,  20,   2,   0],

       [  2,   2,  23,  24,  12,  12, 923,   1,   1,   0],

       [  6,   0,   7,  12,  13,  24,   0, 936,   0,   2],

       [ 20,   8,   3,   5,   0,   0,   0,   1, 955,   8],

       [ 11,  21,   1,   0,   1,   0,   1,   0,   6, 959]])

 

ソースコード

現時点で最新のmasterのautokerasを使って実行確認してみます。

autokerasの現時点のコミットハッシュは21994919156aac15558f77555538346fb702bcbcです。使ったコードはgistに貼りました。

ただ、autokeras.image.image_supervised.PortableImageSuperviseのpredictメソッドがCPU計算になっていて遅いので、私はGPUを使うように書き換えました。

気になったこと

  • ENASとの比較がされていなくて本論文のベイズ最適化によるハイパーパラメータ探索がどの程度うまく行っているかわからない。
  • ハードウェア制約内でギリギリのモデルまで作ってくれるようにしてもいいのでは。GPUに応じて最大レイヤ数や各層の最大重み数などを計算するのが手間だし、必要な探索空間を削ってしまいそう。(特に計算速度やモデルサイズより性能を良くしたい場合に)
  • 時間打ち切りはなく、性能目標に達するまで試行錯誤するなどの設定があっても良さそう。
  • 4回の試行で90%近いAccuracyになっていて、探索空間が結構小さめに設定されているのでは?と思ってしまう。他のデータセットで試したり、同じ条件でENASと性能比較してみたい。
  • どの程度画像の分類に失敗しているかみたい。
  • チューニングされた手法との比較