AutoML : NNI 1.5 : 自動調整 : チューナー : BOHB アドバイザー (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/29/2020 (1.6.0)
* 本ページは、NNI の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
自動調整 : チューナー : BOHB アドバイザー
1. イントロダクション
BOHB は この参照ペーパー で述べられている堅牢で効率的なハイパーパラメータ調整アルゴリズムです。BO は「Bayesian 最適化」の略で HB は “Hyperband” の略です。
BOHB は評価するためにどのバジェットでどのくらいの configuration かを決定するために HB (Hyperband) に依拠しますが、それは各 HB 反復の最初で configuration のランダム選択をモデルベースの探索 (Bayesian 最適化) で置き換えます。ひとたび反復のための configuration の望ましい数に到達すれば、標準的な次の半減させる手続きがこれらの configuration を使用して遂行されます。後の反復のモデルのための基底として利用するため総てのバジェット b 上 configuration x の総ての関数評価 g(x, b) のパフォーマンスを追跡します。
下で BOHB プロセスの紹介を 2 つのパートに分割します :
HB (Hyperband)
バジェットを選択する Hyperband の方法に従い、SuccessiveHalving を使用し続けます。より多くの詳細については、Hyperband in NNIと Hyperband のための参照ペーパー を参照できます。この手続きは下の擬似コードで要約できます。
BO (Bayesian 最適化)
BOHB の BO パートは一つの主要な違いとともに TPE に密接に類似しています : 入力空間の交互作用効果をより良く処理するために TPE で使用される 1-次元 KDE の階層と比較してシングル多次元 KDE を選択しました。
ツリー Parzen 推定器 (TPE) : 密度をモデル化するために KDE (カーネル密度推定器) を使用します。
有用な KDE に適合するため、データポイントの最小数 Nmin を必要とします ; これは私達の実験のためには d + 1 に設定されます、ここで d はハイパーパラメータの数です。モデルを出来る限り早期に構築するため、Nb = |Db| まで待ちません、ここでバジェット b のための観測数は q · Nb ≥ Nmin を満たすために十分大きいです。代わりに、Nmin + 2 ラダム configuration で初期化後、以下を選択します :
それぞれ、2 つの密度をモデル化するために最善と最悪の configuration です。
configuration のランダム fraction と名前付けられた定数 fraction をランダムに一様にサンプリングすることにも注意してください。
2. ワークフロー
この画像は BOHB のワークフローを示します。ここで max_budget = 9, min_budget = 1, eta = 3, 他はデフォルトに設定します。この場合、s_max = 2 ですので、 {s=2, s=1, s=0, s=2, s=1, s=0, …} サイクルで連続的に実行します。SuccessiveHalving (オレンジ色のボックス) の各ステージで、トップ 1/eta configuration を選択して、SuccessiveHalving ステージをこの反復の終わりまで繰り返し、それらをより多くのバジェットで再度実行します。同時に、各トライアルの configuration、バジェットそして最後のメトリクスを集めてこれらをキー “budget” を持つ多次元 KDEmodel を構築するために使用します。多次元 KDE は次の反復のための configuration の選択をガイドするために使用されます。
(選択をガイドするために多次元 KDE を使用する) サンプリング手続きは下の擬似コードで要約されます。
3. 使用方法
BOHB は ConfigSpace パッケージを必要とします。ConfigSpace は次のコマンドを使用してインストールできます。
nnictl package install --name=BOHB
BOHB を利用するには、実験の YAML config ファイルで以下の spec を追加するべきです :
advisor: builtinAdvisorName: BOHB classArgs: optimize_mode: maximize min_budget: 1 max_budget: 27 eta: 3 min_points_in_model: 7 top_n_percent: 15 num_samples: 64 random_fraction: 0.33 bandwidth_factor: 3.0 min_bandwidth: 0.001
classArgs 要件 :
(訳注: classArgs 要件の詳細は 原文 参照)
4. ファイル構造
アドバイザーは多くの様々なファイル、関数とクラスを持ちます。ここでは、それらのファイルの殆どに簡潔な紹介を与えるだけです :
- bohb_advisor.py BOHB の定義、新しいトライアルの生成と結果の処理を含む、ディスパッチャーとの相互作用を扱います。HB (Hyperband) パートの実装も含みます。
- config_generator.py BO (Bayesian 最適化) パートの実装を含みます。関数 get_config は BO に基づいて新しい configuration を生成できます ; 関数 new_result は新しい結果でモデルを更新します。
5. 実験
MNIST with BOHB
コード実装 : examples/trials/mnist-advisor
MNIST データセット上で CNN を構築するために BOHB を選択しました。次は実験の最終結果です :
より多くの実験結果は 参照ペーパー で見つけられます。BOHB は前の結果を良く利用して調査と exploitation のバランスの取れたトレードオフを持つことを見れます。
以上