修行の場

知人が言っていました。これは修行だと。

OSSのAutoML AutokerasでCifar100タスクを学習

前回のCifar10に引き続き、Autokerasを使ってCifar100タスクの学習もやってみました。

実験に使ったソースコードcifar10のものに少しパラメータを追加してsacred対応したものです。

 

探索の進み方を見る

それぞれの畳み込みネットワークの学習にかける最大エポック数は7に設定し、20時間なんどか学習させてみたところ、探索1サイクルごとの正解率の変化は7割程度まで到達しました。resnetcifar100に適用した場合は160層程度で約75%の正解率だったようなので、まぁまぁ健闘しているように思えます。

この正解率が近いので探索の進み方は似ているのでは?ということです。

おそらく、acquisition functionによる次の探索ポイントの決定が確率的だが、結果として同じような成果が出ているということなのでしょう。探索の上限が同じ20時間かけているにもかかわらず、探索された構造が10個位上違うのは性能が似ているが学習に時間がかかる構造が選択されているから?それとも探索打ち切り周りにバグがあるから?このあたりはソースコードを読む必要がありそうです。

f:id:sam_yusuke:20181211204301p:plain

 

最大レイヤ数を変えてみた場合の性能の違い

探索範囲の最大レイヤ数を増やすことで、より高い性能のニューラルネットを発見できることが期待できます。やってみたところ、レイヤ数100くらいで性能が最も高くなっているような気がします。(まだ、データ数が少ないのでわからない。)

探索の上限時間が固定であれば、探索範囲が広くなりすぎると、逆に性能が劣化するという解釈もできますが、探索方法によるため原因は不明です。(例えば、最適化手法の勾配探索では、探索範囲の広さよりも、関数の形のほうが探索時間に影響しそうです。)

f:id:sam_yusuke:20181211204359p:plain

 

探索一回あたりの最大エポック数を変化させた場合

アーキテクチャ探索のパラメータではないが、探索する際の最大エポック数を上げて試してみました。最大エポック数を上げることで、探索数が増えています。

最大エポック数を30まで上げると、振動している様子が見えて、ベイズ最適化による探索が出来ているような気がします。

f:id:sam_yusuke:20181211204424p:plain

 

まとめ

探索範囲や探索アルゴリズムのパラメータだけでなく、学習の仕方も自動的に色々と変えてくれなければアーキテクチャ探索アルゴリズムで探索する際の手間が増えます。利用するには何らかの工夫が必要な気がします。例えば、目標性能を設定して、n時間工夫して出来なければ探索範囲を緩和したり、学習の仕方を変えるなどと行った方法が必要かもしれません。学習の仕方はハイパーパラメータとして本来は探索すべきな気もします。

 

組織などで内製AutoMLとして導入する場合、探索アルゴリズムのパラメータの調整、フロントエンドの開発、計算クラスタの準備や運用などが必要となりそうです。

その場合に重要なのは機械学習の専門知識を持った開発者も当然ですが、機械学習の試行錯誤を低コストでするために安価に計算クラスタを構築運用できる人も重要になりそうです。