ホーム » AutoML » AutoML : NNI 1.5 : 自動調整 : チューナー : 組込みチューナー

AutoML : NNI 1.5 : 自動調整 : チューナー : 組込みチューナー

AutoML : NNI 1.5 : 自動調整 : チューナー : 組込みチューナー概要 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/26/2020

* 本ページは、NNI の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

自動調整 : チューナー : 組込みチューナー

NNI はパラメータ調整アルゴリズムをセットアップするアプローチを採用するための容易な方法を提供します、それらをチューナーと呼びます。

チューナーは、特定のパラメータ/アーキテクチャ構成のパフォーマンスを評価するためにトライアルからメトリクスを受け取ります。チューナーは次のハイパーパラメータあるいはアーキテクチャ構成をトライアルに送ります。

 

自動調整 : チューナー : ハイパーパラメータ調整のための組込みチューナー

NNI は組込みチューナーの一部として最先端チューニング・アルゴリズムを提供してそれらを利用することを容易にしています。下は現時点での NNI 組込みチューナーの簡潔な要約です。

Note: チューナーのインストール要件、推奨シナリオ、そしてサンプル configuration を得るにはチューナーの名前をクリックしてください。各アルゴリズムの詳細な説明のためのリンクは各チューナーのための推奨シナリオの最後にあります。ここに幾つかの問題における各種チューナーを比較する 記事 があります。

現在以下のアルゴリズムをサポートしています :

  • TPE
    TPE (木構造 Parzen 推定器, Tree-structured Parzen Estimator) は SMBO (シーケンシャル・モデルベースの最適化, sequential model-based optimization) アプローチです。SMBO 法は計測履歴に基づきハイパーパラメータのパフォーマンスを見積もるためにモデルをシーケンシャルに構築し、それから続いてこのモデルに基づいてテストするために新しいパラメータを選択します。
    参照ペーパー

  • ランダム探索 (Random Search)
    ハイパーパラメータ最適化のためのランダム探索ではランダム探索が驚くほど単純で効果的であるかもしれないことを示します。ハイパーパラメータの事前分布についての知識を持たないときにはベースラインとしてランダム探索を使用できるであろうことを提案します。
    参照ペーパー

  • 焼なまし (Anneal)
    この単純なアニーリング・アルゴリズムは事前分布からサンプリングすることにより開始しますが、点からのサンプリングは時間とともに (観測された) 最善のものにどんどん近づいていく傾向があります。このアルゴリズムは応答曲面 (= response surface) の滑らかさを活用するランダム探索の単純なバリエーションです。annealing 率は適応的ではありません。

  • Naive Evolution
    Naive Evolution (単純な or 先入的知識のない進化) は Large-Scale Evolution of Image Classifiers に由来します。それは探索空間に基づいて集団 (= population) をランダムに初期化します。各世代 (= generation) について、それは次の世代を得るためにより良いものを選択してその上で何某かの変異 (= mutation) (e.g., ハイパーパラメータを変更する、一つの層を追加/除去する) を行ないます。Naive Evolution は動作するために多くのトライアルを要求しますが、新しい特徴を拡張することは非常に単純で容易です。
    参照ペーパー

  • SMAC
    SMAC は SMBO (Sequential Model-Based Optimization) に基づいています。カテゴリカル・パラメータを扱うため、それは最も卓越した以前に使用されたモデルクラス (ガウス確率過程モデル) を適合させてランダムフォレストのモデルクラスを SMBO に導入します。NNI によりサポートされる SMAC は SMAC3 Github repo 上のラッパーです。注意してください、SMAC は nnictl パッケージコマンドによりインストールされる必要があります。
    参照ペーパー, Github レポジトリ

  • バッチ・チューナー (Batch tuner)
    バッチ・チューナーはユーザにトライアルコードのために様々な configuration (i.e., ハイパーパラメータの選択) を単純に提供することを可能にします。総ての configuration を終了後、実験は完了します。バッチ・チューナーは探索空間 spec で type choice をサポートするだけです。

  • グリッドサーチ
    グリッドサーチは searchspace ファイルで定義されたハイパーパラメータ空間の手動で指定されたサブセットを通してしらみつぶし探索 (= exhaustive searching) を遂行します。探索空間の受け入れ可能な type は choice, quniform, randint だけであることに注意してください。

  • Hyperband
    Hyperband は多くの configuration をできるかぎり調査するために限定されたリソースを利用しようとして最終結果として最も有望なものを返します。基本的なアイデアは多くの configuration を生成して小さい数のトライアルについてそれらを実行します。有望でない半分の configuration は破棄され、残りは新しい configuration の選択とともに更に訓練されます。これらの populations のサイズはリソース制約 (e.g. 割当て探索時間) に過敏です。
    参照ペーパー

  • Network Morphism
    Network Morphism は深層学習アーキテクチャを自動的に探索するための機能を提供します。それはチャイルドネットワークを生成します、それらは親ネットワークから知識を継承したそれらからの変形です。深さ、幅とスキップコネクションにおける変更を含みます。次に、それは履歴アーキテクチャとメトリックペアを使用してチャイルドネットワークの値を推定します。それからそれは訓練するために最も有望なものを選択します。
    参照ペーパー

  • Metis チューナー
    Metis はそれが調整パラメータになるとき次の恩恵を与えます : 多くのツールが最適な configuration の予測だけをする一方で、Metis は 2 つの出力を貴方に与えます : (a) 最適な configuration の現在の予測、そして (b) 次のトライアルのための提案です。それ以上の当て推量はありません。殆どのツールが訓練データセットがノイズのあるデータを持たないことを仮定する一方で、Metis は実際には特定のハイパーパラメータを再サンプリングする必要があるかを知らせます。
    参照ペーパー

  • BOHB
    BOHB は Hyperband への追随ワークです。それは、新しい configuration が終了したトライアルを活用することなくランダムに生成されるという、Hyperband の弱点を対象としています。名前 BOHB については、HB は Hyperband を意味し、BO は Bayesian 最適化を意味しています。BOHB はマルチ TPE モデルを構築することにより終了したトライアルを活用し、これらのモデルを通して新しい configuration の比率が生成されます。
    参照ペーパー

  • GP チューナー
    ガウス過程チューナーは代行としてガウス過程による sequential model-based 最適化 (SMBO) アプローチです。
    参照ペーパー, Github レポジトリ

  • PPO チューナー
    PPO チューナーは PPO アルゴリズムに基づく強化学習チューナーです。
    参照ペーパー

  • PBT チューナー
    PBT チューナーは単純な非同期最適化アルゴリズムで、これはパフォーマンスを最大化するためにモデルとそれらのハイパーパラメータの population を結合的に最適化するために固定された計算バジェットを効果的に利用します。
    参照ペーパー

 

組込みチューナーの使用方法

NNI SDK により提供される組込みチューナーの利用は config.yml ファイルで builtinTunerName と classArgs を宣言することを必要とします。このパートでは、使用方法と推奨シナリオ、classArgs 要件とサンプル configuration についての情報とともに各チューナーを紹介します。

Note: 貴方の config.yml ファイルを書く時フォーマットに従ってください。SMAC のように、幾つかの組込みチューナーは nnictl パッケージを使用してインストールされる必要があります。

 

組込みチューナー名 : TPE

推奨シナリオ

TPE は、ブラックボックスな最適化として、様々なシナリオで使用することができて一般に良いパフォーマンスを示します。特に、制限された計算リソースを持ち少数のトライアルを試すことだけができるときです。巨大な数の実験から、TPE がランダム探索よりも遥かに良いことを見い出せました。
詳細説明

 
classArgs の要件

  • optimize_mode (maximize または minimize, オプション, default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

Note: 巨大スケールのトライアルの同時並列のために TPE の並列性を最適化しました。最適化あるいは turn-on 最適化の原理については、TPE ドキュメント を参照してください。

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: TPE
  classArgs:
    optimize_mode: maximize

 

組込みチューナー名 : Random

推奨シナリオ

ランダム探索は各トライアルがそれほど長くはかからず (e.g., 各トライアルが非常に素早く完了できる、あるいはアセッサーにより早期に停止される)、そして十分な計算リソースを持つときに提案されます。探索空間を一様に調査することを望む場合にも有用です。
ランダム探索は探索アルゴリズムのベースラインとして考えることができます。
詳細説明

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: Random

 

組込みチューナー名 : Anneal

推奨シナリオ

アニールは各トライアルがそれほど長くはかからず、そして十分な計算リソースを持つときに提案されます (ランダム探索に非常に類似しています)。探索空間の変数がある事前分布からサンプリングできるときにも有用です。
詳細説明

 
classArgs の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: Anneal
  classArgs:
    optimize_mode: maximize

 

組込みチューナー名 : Evolution

推奨シナリオ

その計算リソースの要件は比較的高いです。特に、局所的な最適条件にはまることを回避するためにそれは巨大な初期集団 (= population) を必要とします。貴方のトライアルが短いかアセッサーを活用するのであれば、このチューナーは良い選択です。貴方のトライアルコードが重み転移をサポートするときにも推奨されます ; つまり、トライアルはその親から収束した重みを継承できるときです。これは訓練プロセスを非常にスピードアップできます。
詳細説明

 
classArgs の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとります。

  • population_size (int value (should > 0)、オプション、default = 20) –
    evolution チューナーにおける集団 (trial num) の初期サイズ。ユーザがアルゴリズムから多くを得られるように population_size は concurrency よりも遥かに大きいことが推奨されます (そして少なくとも concurrency、そうでなければチューナーはパラメータの最初の生成で失敗します)。

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: Evolution
  classArgs:
    optimize_mode: maximize
    population_size: 100

 

組込みチューナー名 : SMAC

SMAC は現在 Windows 上の実行をサポートしないことに注意してください。特定の理由については、GitHub issue を参照してください。

 
インストール

SMAC は最初の使用前に次のコマンドによりインストールされる必要があります。リマインダーとして、swig が SMAC のために必要です ; Ubuntu については swig は apt でインストールできます。

nnictl package install --name=SMAC

 
推奨シナリオ

TPE と類似して、SMAC もまた様々なシナリオで試せるブラックボックス・チューナーで、計算リソースが制限されているときに提案されます。それは離散的なハイパーパラメータのために最適化され、従って貴方のハイパーパラメータの多くが離散的であるときに提案されます。
詳細説明

 
classArgs の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

  • config_dedup (True or False、オプション、default = False) –
    True の場合、チューナーは既に生成された configuration を生成しません。
    False の場合、configuration は二度生成されるかもしれませんが、比較的巨大な探索空間については稀です。

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: SMAC
  classArgs:
    optimize_mode: maximize

 

組込みチューナー名 : BatchTuner

推奨シナリオ

前もって試すことを望む configuration が決定すれば、それらを (choice を使用して) 探索空間ファイルでリストしてそれらをバッチ・チューナーを使用して実行できます。
詳細説明

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: BatchTuner

BatchTuner のための探索空間は次のようなものであることに注意してください :

{
    "combine_params":
    {
        "_type" : "choice",
        "_value" : [{"optimizer": "Adam", "learning_rate": 0.00001},
                    {"optimizer": "Adam", "learning_rate": 0.0001},
                    {"optimizer": "Adam", "learning_rate": 0.001},
                    {"optimizer": "SGD", "learning_rate": 0.01}, 
                    {"optimizer": "SGD", "learning_rate": 0.005}, 
                    {"optimizer": "SGD", "learning_rate": 0.0002}]
    }
}

この探索空間ファイルは高位キー combine_params を含みます。探索空間の params の type は choice でなければなりませんそして値は総ての結合された params 値を含みます。

 

組込みチューナー名 : Grid Search

推奨シナリオ

探索空間の受け入れ可能な type は choice, quniform と randint だけであることに注意してください。

これは探索空間が小さいときに提案されます。総ての探索空間をしらみつぶしに sweep することが適しているときに提案されます。
詳細説明

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: GridSearch

 

組み込みチューナー名 : Hyperband

推奨シナリオ

これは制限された計算リソースを持ちながら比較的巨大な探索空間を持つときに提案されます。それは中間結果が良いまたは悪い最終結果をある程度示せるシナリオで上手く動作します。例えば、モデルが訓練で早期により正確なモデルが後でも更に正確なときです。
詳細説明

 
classArg の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

  • R (int、オプション、default = 60) – トライアルに割り当てられる最大量 (= budget) (ミニバッチかエポックの数であり得ます)。各トライアルはそれがどのくらい長く実行されるかを制御するために TRIAL_BUDGET を使用するべきです。
  • eta (int、オプション、default = 3) – (eta-1)/eta は破棄されるトライアルの割合です。

 
サンプル構成 :

# config.yml
advisor:
  builtinAdvisorName: Hyperband
  classArgs:
    optimize_mode: maximize
    R: 60
    eta: 3

 

組み込みチューナー名 : NetworkMorphism

インストール

NetworkMorphism は PyTorch と Keras を必要としますので、ユーザはそれらを最初にインストールするべきです。対応する requirements ファイルは ここ です。

 
推奨シナリオ

これは、深層学習メソッドを貴方のタスクに適用することを望むがしかしネットワークをどのように選択または設計するかのアイデアを持たないときに提案されます。貴方自身のデータセットと貴方自身のデータ増強メソッドに適合させるためにこの サンプル を変更して良いです。バッチサイズ、学習率や optimizer を変更することもできます。現在、このチューナーはコンピュータビジョン・ドメインをサポートするだけです。
詳細説明

 
classArgs の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

  • task ((‘cv’)、オプション、default = ‘cv’) – 実験のドメイン。今のところは、このチューナーはコンピュータ・ビジョン (cv) ドメインをサポートするだけです。
  • input_width (int、オプション、default = 32) – 入力画像幅
  • input_channel (int、オプション、default = 3) – 入力画像チャネル
  • n_output_node (int、オプション、default = 10) – クラス数

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: NetworkMorphism
    classArgs:
      optimize_mode: maximize
      task: cv
      input_width: 32
      input_channel: 3
      n_output_node: 10

 

組み込みチューナー名 : MetisTuner

探索空間 type の受け入れる type は quniform, uniform, randint と数値 choice だけであることに注意してください。数値だけがサポートされます、何故ならば値は異なるポイント間の「距離」を評価するために使用されるからです。

 
推奨シナリオ

TPE と SMAC に類似して、Metis はブラックボックス・チューナーです。貴方のシステムが各トライアルを終えるのに時間がかかるのであれば、Metis はランダム探索のような他のアプローチよりも好ましいでしょう。更に、Metis は続くトライアルのガイダンスを提供します。ここに Metis の利用の サンプル があります。ユーザは精度のような最終結果を NNI SDK を呼び出すことによりチューナーに送る必要があるだけです。
詳細説明

 
classArgs の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: MetisTuner
  classArgs:
    optimize_mode: maximize

 

組み込みチューナー名 : BOHB

インストール

BOHB アドバイザーは ConfigSpace パッケージを必要とします。ConfigSpace は次のコマンドを使用してインストールできます。

nnictl package install --name=BOHB

 
推奨シナリオ

Hyperband と同様に、BOHB は制限された計算リソースを持ちながら比較的巨大な探索空間を持つときに提案されます。それは中間結果が、良いあるいは悪い最終結果をある程度示せるシナリオで上手く遂行します。この場合、それは Bayesian 最適化の利用により Hyperband よりも良い configuration に収束するかもしれません。
詳細説明

 
classArgs の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

  • (訳注: 以下省略。必要な場合には 原文 を参照してください。)

 
サンプル構成 :

advisor:
  builtinAdvisorName: BOHB
  classArgs:
    optimize_mode: maximize
    min_budget: 1
    max_budget: 27
    eta: 3

 

組み込みチューナー名 : GPTuner

探索空間内の受け入れる type は randint, uniform, quniform, loguniform, qloguniform と数値 choice だけであることに注意してください。数値だけがサポートされます、何故ならば値は異なるポイント間の「距離」を評価するために使用されるからです。

 
推奨シナリオ

Sequential Model-based グローバル最適化 (SMBO) アルゴリズムのストラテジーとして、GP チューナーは (acquisition 関数の最大値を見つける) proxy (代理) 最適化問題を利用します、これは、依然として困難であるにもかかわらず、解くために (計算的な意味で) コストが安く、それを解くために一般的なツールが使用できます。従って、最適化される関数が評価するために非常に高価であるような状況のために最も適切です。GP は計算リソースが制限されているときに利用できます。けれども、GP チューナーはグラム行列を逆にする要件のために O(N^3) で増大する計算コストを持ちますので、多くのトライアルが必要なときには適しません。
詳細説明

 
classArg の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

  • (訳注: 以下省略。必要な場合には 原文 を参照してください。)

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: GPTuner
  classArgs:
    optimize_mode: maximize
    utility: 'ei'
    kappa: 5.0
    xi: 0.0
    nu: 2.5
    alpha: 1e-6
    cold_start_num: 10
    selection_num_warm_up: 100000
    selection_num_starting_points: 250

 

組み込みチューナー名 : PPOTuner

探索空間内の受け入れる type は mutable_layer だけであることに注意してください。optional_input_size は 0, 1 または [0, 1] だけであり得ます。

 
推奨シナリオ

PPOTuner は PPO アルゴリズムに基づく強化学習チューナーです。PPOTuner はニューラルアーキテクチャ探索を行なう NNI NAS インターフェイスを使用するとき利用できます。一般に、強化学習アルゴリズムはより多くの計算リソースを必要としますが、PPO アルゴリズムは他よりも比較的効率的です。多くの総量の利用可能な計算リソースを持つときこのチューナーを利用することが勧められます。mnist-nas (訳注: リンク切れ) サンプルのような非常に単純なタスクでそれを試せるでしょう。詳細 を見てください。

 
classArg の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

  • (訳注: 以下省略。必要な場合には 原文 を参照してください。)

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: PPOTuner
  classArgs:
    optimize_mode: maximize

 

組み込みチューナー名 : PBTTuner

 
推奨シナリオ

Population Based 訓練 (PBT) は並列探索法とシークエンシャル最適化法を橋渡しして拡張します。それはよりよいものを探索するために定期的に現在良いパフォーマンスのものから重みを継承することにより、比較的小さい計算リソースを必要とします。PBTTuner では、ユーザはスクラッチからモデルを訓練することにより訓練されたモデルを再生成できるような configuration ではなく、最終的に訓練されたモデルを得ます。これはモデル重みが探索プロセス全体をと推して定期的に継承されるからです。PBT はまた訓練アプローチとしても見れます。特定の configuration を得る必要がなく、単に良いモデルを期待する場合には、PBTTuner は良い選択です。詳細 を見てください。

 
classArg の要件

  • optimize_mode (maximize または minimize、オプション、default = maximize) –
    ‘maximize’ の場合、チューナーはメトリクスを最大化しようとします。
    ‘minimize’ の場合、チューナーはメトリクスを最小化しようとします。

  • (訳注: 以下省略。必要な場合には 原文 を参照してください。)

 
サンプル構成 :

# config.yml
tuner:
  builtinTunerName: PBTTuner
  classArgs:
    optimize_mode: maximize

このチューナーを利用するためには、トライアルコードはそれに応じて変更されるべきです、詳細は PBTTuner のドキュメント を参照してください。

 

以上






AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com