AutoML : NNI 1.5 : 自動調整 : アセッサー : 組込みアセッサー (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/30/2020
* 本ページは、NNI の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
自動調整 : アセッサー : 組込みアセッサー
計算リソースを節約するため、NNI は早期停止 (= early stopping) ポリシーをサポートしていてこのジョブを行なうためにアセッサー (= Assessor) と呼ばれるインターフェイスを持ちます。
アセッサーはトライアルから中間結果を受け取り、そしてトライアルが特定のアルゴリズムを使用して kill されるべきかを決定します。トライアル実験がひとたび早期停止条件に適合すれば (これはアセッサーが最終結果について悲観的であることを意味します)、アセッサーはトライアルを kill してトライアルのステータスは EARLY_STOPPED になります。
ここに ‘maximize’ モードの ‘Curvefitting’ アセッサーを使用した後の MNIST の実験結果があります。アセッサーが悪いハイパーパラメータを持つ多くのトライアルを前もって成功的に 早期停止 したことを見れます。アセッサーを使用する場合、同じ計算リソースを使用してより良いハイパーパラメータを得るかもしれません。
実装コード・ディレクトリ : [config_assessor.yml](https://github.com/Microsoft/nni/blob/master/examples/trials/mnist-tfv1/config_assessor.yml)
組込みアセッサー : 概要
NNI は組込みアセッサー内で最先端の調整アルゴリズムを提供してそれらを容易に利用できるようにしています。下は NNI の現在の組込みアセッサーの簡潔な概要です。
Note : 各アセッサーのインスール要件、推奨使用シナリオ、そして config サンプルを得るためにはアセッサーの名前をクリックしてください。各アルゴリズムの詳細説明へのリンクは各アセッサーの提案シナリオの最後で提供されます。
現在、以下のアセッサーをサポートしています :
- Medianstop
Medianstop は単純な早期停止ルールです。それは、トライアルのステップ S までのベスト目的値がステップ S までに報告された総ての完了したトライアルの目的の実行平均の median 値よりも厳密に悪い場合に、ステップ S でペンディング・トライアル X を停止します。
参照ペーパー - Curvefitting
カーブフィッティング (曲線あてはめ) アセッサーは LPA (learning, predicting, assessing) アルゴリズムです。それは、最終エポックのパフォーマンスの予測が訓練履歴の最善の最終パフォーマンスよりも悪い場合、ステップ S でペンディング・トライアル X を停止します。このアルゴリズムでは、精度曲線にあてはめるために 12 曲線を使用します。
参照ペーパー
組込みアセッサーの使用方法
NNI SDK により提供される組込みアセッサーの使用方法は config.yml ファイルで builtinAssessorName と classArgs を宣言する一つを必要とします。このパートでは、各アセッサーのための使用方法の詳細と提案シナリオ、classArg 要件と、サンプルを紹介します。
Note: config.yml ファイルを書くとき提供される形式に従ってください。
組込みアセッサー名 : Medianstop
推奨シナリオ
それはパフォーマンス曲線の広い範囲で適用可能ですので、それは調整進捗をスピードアップするために様々なシナリオで利用できます。
詳細説明
classArgs の要件
- optimize_mode (maximize または minimize, オプション, default = maximize) –
‘maximize’ の場合、アセッサーはより小さい期待値を持つトライアルを停止します。
‘minimize’ の場合、アセッサーはより大きい期待値を持つトライアルを停止します。 - start_step (int、オプション、default = 0) –
トライアルは、報告された中間結果の start_step 数を受け取った後にだけ、停止されるか否かを決定されます。
使用方法サンプル :
# config.yml assessor: builtinAssessorName: Medianstop classArgs: optimize_mode: maximize start_step: 5
組込みアセッサー名 : Curvefitting
推奨シナリオ
それはパフォーマンス曲線の広い範囲で適用可能ですので、それは調整進捗をスピードアップするために様々なシナリオで利用できます。更に良いことに、それは類似のパフォーマンスを持つ曲線を処理して評価することができます。
詳細説明
classArgs の要件
- epoch_num (int, required) –
エポックの総数。どのポイントを予測する必要があるかを決定するためにエポック数を知る必要があります。 - optimize_mode (maximize または minimize, オプション, default = maximize) –
‘maximize’ の場合、アセッサーはより小さい期待値を持つトライアルを停止します。
‘minimize’ の場合、アセッサーはより大きい期待値を持つトライアルを停止します。 - start_step (int、オプション、default = 6) –
トライアルは、報告された中間結果の start_step 数を受け取った後にだけ、停止されるか否かを決定されます。 - threshold (float、オプション、default = 0.95) –
最悪のパフォーマンス曲線を早期停止することを決定するために使用する閾値。例えば: threshold = 0.95, optimize_mode = maximize、履歴の最善パフォーマンスが 0.9 である場合、予測された値が 0.95 * 0.9 = 0.855 より低いトライアルを停止します。 - gap (int、オプション、default = 1) –
アセッサー判定の間の gap interval。例えば: gap = 2, start_step = 6 である場合、6, 8, 10, 12… の中間結果を得るときに結果を査定します。
使用方法サンプル :
# config.yml assessor: builtinAssessorName: Curvefitting classArgs: epoch_num: 20 optimize_mode: maximize start_step: 6 threshold: 0.95 gap: 1
以上