ホーム » AutoML » Auto ML : NNI Tutorials : チューナー (1) 組み込みチューナー

Auto ML : NNI Tutorials : チューナー (1) 組み込みチューナー

Auto ML : NNI Tutorials : チューナー (1) 組み込みチューナー (翻訳/解説)

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

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

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

 

NNI Tutorials : チューナー

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

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

NNI では、チューナーを設定するために 2 つのアプローチをサポートします : 1 番目は nni sdk により提供される組み込みチューナーを直接的に使用します、2 番目は貴方自身でチューナーファイルをカスタマイズします。チューナー & アセッサーの機能を結合する Advisor もまた持ちます。

 

NNI Tutorials : 組み込みチューナー

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

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

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

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

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

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

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

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

  • グリッドサーチ
    グリッドサーチは searchspace で定義されたハイパーパラメータ空間の手動で指定されたサブセットを通してしらみつぶし探索 (= exhaustive searching) を遂行します。受け入れ可能な探索空間の型は choice, quniform, qloguniform だけであることに注意してください。quniform と qloguniform の数字 q は特別な意味を持ちます (探索空間 spec の spec とは異なります)。範囲 low と high から公平にサンプリングされる値の数を意味します。

  • Hyperband
    Hyperband は多くの configuration をできるかぎり調査するために限定されたリソースを利用しようとして最終結果を得るために有望なもの達を見出します。基本的なアイデアは多くの configuration を生成して有望な一つを見い出すために少数の STEPs の間それらを実行して、それから幾つかのより有望なものを選択するために更にそれらの有望なもの達を訓練します。
    参照ペーパー

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

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

 

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

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

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

 

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

推奨シナリオ

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

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

 
使用例 :

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

 

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

推奨シナリオ

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

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

 
使用例 :

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

 

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

推奨シナリオ

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

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

 
使用例 :

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

 

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

推奨シナリオ

その計算リソースの要件は比較的高いです。特に、局所的な最適条件にはまることを回避するためにそれは巨大な初期個体群 (= population) を必要とします。貴方のトライアルが短いかアセッサーを活用するのであれば、このチューナーは良い選択です。そして、貴方のトライアルコードが weight transfer をサポートする、つまり、トライアルは converged weights をその親から継承できるときにより提案されます。これは訓練進捗を大いにスピードアップできます。

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

 
使用例 :

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

 

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

インストール

SMAC は最初の使用前に次のコマンドによりインストールされる必要があります。

nnictl package install --name=SMAC

 
推奨シナリオ

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

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

 
使用例 :

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

 

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

推奨シナリオ

試すことを望む configuration が決定すれば、それらを (choice を使用して) searchspace ファイルでリストしてそれらをバッチ・チューナーを使用して実行できます。

 
使用例 :

# 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 でなければなりませんそして値は総て combined-params 値を含みます。

 

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

推奨シナリオ

受け入れ可能な探索空間の型は choice, quniform, qloguniform だけであることに注意してください。quniform と qloguniform の数字 q は特別な意味を持ちます (探索空間 spec の spec とは異なります)。範囲 low と high から公平にサンプリングされる値の数を意味します。

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

 
使用例 :

# config.yml
tuner:
  builtinTunerName: GridSearch

 

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

推奨シナリオ

それは制限された計算リソースを持ちながら比較的巨大な探索空間を持つときに提案されます。中間結果 (e.g. 精度) が良いまたは悪い最終結果 (e.g. 精度) をある程度反映できるシナリオで上手く動作します。

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

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

 
使用例 :

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

 

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

インストール

NetworkMorphism は pyTorch を必要としますので、ユーザはそれを最初にインストールするべきです。

 
推奨シナリオ

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

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

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

 
使用例 :

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

 

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

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

 
インストール

Metis チューナーは sklearn を必要としますので、ユーザは最初にそれをインストールするべきです。ユーザはそれをインストールするために “pip3 install sklearn” を使用できるでしょう。

 
推奨シナリオ

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

 
classArg の要件

  • optimize_mode (maximize または minimize, optional, default = maximize) –
    ‘maximize’ の場合、チューナーはより大きな expectation でハイパーパラメータ・セットを返します。
    ‘minimize’ の場合、チューナーはより小さな expectation でハイパーパラメータ・セットを返します。

 
使用例 :

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

以上






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