AutoML : NNI 1.5 : 自動調整 : チューナー : Hyperband (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/28/2020 (1.6.0)
* 本ページは、NNI の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
自動調整 : チューナー : Hyperband
1. イントロダクション
Hyperband はポピュラーな autoML アルゴリズムです。Hyperband の基本的なアイデアは幾つかのバケットを作成することです、各々は n 個のランダムに生成されたハイパーパラメータ configuration を持ち、各々の configuration は r リソース (e.g., エポック数、バッチ数) を使用します。n configuration が終了した後、それは top n/eta configuration を選択してそれらを増やされた r*eta リソースを使用して実行します。最後に、それはそれまでに見つけた最善の configuration を選択します。
2. 完全な並列性を持つ実装
最初に、これはチューナーとアセッサーではなく、MsgDispatcherBase に基づいて autoML アルゴリズムをどのように書くかのサンプルです。Hyperband はこのように実装されています、何故ならばそれはチューナーとアセッサーの両者の関数を統合するからです、そしてそれをアドバイザーと呼びます。
2 番目に、この実装は Hyperband の内部的な並列性をフルに活用しています。特に、次のバケットは厳密には現在のバケット後に開始はされません。代わりに、それは利用可能なリソースがあるときに開始します。
3. 使用方法
Hyperband を使用するには、貴方の実験の YAML config ファイルで以下のspec を追加するべきです :
advisor: #choice: Hyperband builtinAdvisorName: Hyperband classArgs: #R: the maximum trial budget R: 100 #eta: proportion of discarded trials eta: 3 #choice: maximize, minimize optimize_mode: maximize
ひとたびアドバイザーを使用すれば、config ファイルにチューナーとアセッサー spec を追加することは許されないことに注意してください。Hyperband を使用するとき、トライアルにより受け取るハイパーパラメータ (i.e., キーバリューペア) の中に、ユーザにより定義される TRIAL_BUDGET と呼ばれるもう一つのキーがあります。この TRIAL_BUDGET を使用することにより、トライアルはそれがどのくらい長く実行されるかを制御できます。
貴方のトライアルコードの report_intermediate_result(metric) と report_final_result(metric) については、メトリックは数値か辞書であるべきで、これはその値として数値を持つキー default を持ちます。この数値は貴方が最大化または最小化することを望む一つ、例えば、精度か損失です。
R と eta は貴方が変更可能な Hyperband のパラメータです。R は configuration に割り当てることができる最大トライアル・バジェットです。ここでは、トライアル・バジェットはエポックかミニバッチの数です。この TRIAL_BUDGET はそれがどのくらい長く実行されるかを制御するためにトライアルにより使用されるべきです。詳細は examples/trials/mnist-advisor/ 下のサンプルを参照してください。
eta は、n configuration からの n/eta configuration は存続してより多くのバジェットを使用して再実行されることを意味します。
ここに R=81 と eta=3 の具体的なサンプルがあります :
s=4 | s=3 | s=2 | s=1 | s=0 | |
i | n r | n r | n r | n r | n r |
0 | 81 1 | 27 3 | 9 9 | 6 27 | 5 81 |
1 | 27 3 | 9 9 | 3 27 | 2 81 | |
2 | 9 9 | 3 27 | 1 81 | ||
3 | 3 | 1 81 | |||
4 | 1 81 |
s はバケットを意味し、n は生成される configuration の数を意味し、対応する r はこれらの configuration が幾つのバジェットを実行するかを意味します。i はラウンドを意味し、例えば、バケット 4 は 5 ラウンドを持ち、バケット 3 は 4 ラウンドを持ちます。
トライアルコードを書くことについての情報は、examples/trials/mnist-hyperband/ 下の手順を参照してください。
4. 将来的な改良
Hyperband の現在の実装は単純な早期停止アルゴリズムをサポートすることにより更に改良できます、何故ならばトップ n/eta の総ての configuration が上手くは遂行されない可能性があるからです。任意の見込みのない configuration は早期に停止されるべきです。
現在の実装では、configuration はランダムに生成されます、これは ペーパー のデザインに従っています。改良として、configuration はより進んだアルゴリズムを活用することによりより賢明に生成できるでしょう。
以上