Sweep configuration options

sweep configurationは、ネストされたキーと値のペアで構成されています。sweep configuration内のトップレベルキーを使用して、検索するパラメータ(parameter キー)、パラメータ空間を検索する方法(method キー)など、sweep検索の品質を定義します。

以下の表は、トップレベルのsweep configurationキーと簡単な説明を示しています。各キーの詳細については、それぞれのセクションを参照してください。

トップレベルキー 説明
program (必須)実行するトレーニングスクリプト
entity このsweepのエンティティ
project このsweepのプロジェクト
description sweepのテキストによる説明
name sweepの名前。W&B UIに表示されます。
method (必須)検索戦略
metric 最適化するメトリック(特定の検索戦略と停止基準でのみ使用されます)
parameters (必須)検索するパラメータ範囲
early_terminate 早期停止基準
command トレーニングスクリプトを呼び出し、引数を渡すためのコマンド構造
run_cap このsweepのrunの最大数

sweep configurationの構造化方法の詳細については、Sweep configurationの構造を参照してください。

metric

metric トップレベルのsweep configurationキーを使用して、最適化する名前、目標、およびターゲットメトリックを指定します。

キー 説明
name 最適化するメトリックの名前。
goal minimize または maximize(デフォルトは minimize)。
target 最適化しているメトリックの目標値。指定した目標値にrunが到達した場合、sweepは新しいrunを作成しません。(runがターゲットに到達すると)runを実行しているアクティブなエージェントは、エージェントが新しいrunの作成を停止するまでrunの完了を待ちます。

parameters

YAMLファイルまたはPythonスクリプトで、parametersをトップレベルキーとして指定します。parametersキーの中で、最適化するハイパーパラメータの名前を指定します。一般的なハイパーパラメータには、学習率、バッチサイズ、エポック、オプティマイザーなどがあります。sweep configurationで定義するハイパーパラメータごとに、1つまたは複数の検索制約を指定します。

次の表は、サポートされているハイパーパラメータ検索制約を示しています。ハイパーパラメータとユースケースに基づいて、以下の検索制約のいずれかを使用して、sweep agentに検索場所(分布の場合)または検索または使用するもの(valuevaluesなど)を指示します。

検索制約 説明
values このハイパーパラメータの有効な値をすべて指定します。gridと互換性があります。
value このハイパーパラメータの単一の有効な値を指定します。gridと互換性があります。
distribution 確率分布を指定します。デフォルト値については、この表の後の注記を参照してください。
probabilities randomを使用する場合に、valuesの各要素を選択する確率を指定します。
minmax intまたは float)最大値と最小値。intの場合、int_uniform分散ハイパーパラメータ用。floatの場合、uniform分散ハイパーパラメータ用。
mu floatnormal - または lognormal - 分散ハイパーパラメータの平均パラメータ。
sigma floatnormal - または lognormal - 分散ハイパーパラメータの標準偏差パラメータ。
q float)量子化されたハイパーパラメータの量子化ステップサイズ。
parameters ルートレベルのパラメータ内に他のパラメータをネストします。

method

methodキーでハイパーパラメータ検索戦略を指定します。選択できるハイパーパラメータ検索戦略は、グリッド、ランダム、ベイズ探索の3つです。

グリッド検索

ハイパーパラメータ値のすべての組み合わせを反復処理します。グリッド検索は、各反復で使用するハイパーパラメータ値のセットについて、情報に基づかない決定を行います。グリッド検索は、計算コストが高くなる可能性があります。

グリッド検索は、連続検索空間内で検索している場合、永久に実行されます。

ランダム検索

分布に基づいて、各反復でランダムで情報に基づかないハイパーパラメータ値のセットを選択します。コマンドライン、Pythonスクリプト内、またはW&B App UIからプロセスを停止しない限り、ランダム検索は永久に実行されます。

ランダム(method: random)検索を選択した場合は、メトリックキーで分布空間を指定します。

ベイズ探索

ランダムおよびグリッド検索とは対照的に、ベイズモデルは情報に基づいた決定を行います。ベイズ最適化は、確率モデルを使用して、目的関数を評価する前に代用関数で値をテストする反復プロセスを通じて、使用する値を決定します。ベイズ探索は、連続パラメータの数が少ない場合にはうまく機能しますが、スケールは劣ります。ベイズ探索の詳細については、ベイズ最適化入門論文を参照してください。

ベイズ探索は、コマンドライン、Pythonスクリプト内、またはW&B App UIからプロセスを停止しない限り、永久に実行されます。

ランダムおよびベイズ探索の分布オプション

parameterキー内で、ハイパーパラメータの名前をネストします。次に、distributionキーを指定し、値の分布を指定します。

次の表は、W&Bがサポートする分布を示しています。

distributionキーの値 説明
constant 定数分布。使用する定数(value)を指定する必要があります。
categorical カテゴリ分布。このハイパーパラメータの有効な値(values)をすべて指定する必要があります。
int_uniform 整数に対する離散一様分布。maxminを整数として指定する必要があります。
uniform 連続一様分布。maxminをfloatとして指定する必要があります。
q_uniform 量子化された一様分布。round(X / q) * qを返します。ここで、Xは一様です。qのデフォルトは1です。
log_uniform 対数一様分布。exp(min)exp(max)の間の値Xを返します。自然対数はminmaxの間で均等に分布します。
log_uniform_values 対数一様分布。minmaxの間の値Xを返します。log(X)log(min)log(max)の間で均等に分布します。
q_log_uniform 量子化された対数一様分布。round(X / q) * qを返します。ここで、Xlog_uniformです。qのデフォルトは1です。
q_log_uniform_values 量子化された対数一様分布。round(X / q) * qを返します。ここで、Xlog_uniform_valuesです。qのデフォルトは1です。
inv_log_uniform 逆対数一様分布。Xを返します。ここで、log(1/X)minmaxの間で均等に分布します。
inv_log_uniform_values 逆対数一様分布。Xを返します。ここで、log(1/X)log(1/max)log(1/min)の間で均等に分布します。
normal 正規分布。平均mu(デフォルト0)および標準偏差sigma(デフォルト1)で正規分布した値を返します。
q_normal 量子化された正規分布。round(X / q) * qを返します。ここで、Xnormalです。Qのデフォルトは1です。
log_normal 対数正規分布。自然対数log(X)が平均mu(デフォルト0)および標準偏差sigma(デフォルト1)で正規分布するように、値Xを返します。
q_log_normal 量子化された対数正規分布。round(X / q) * qを返します。ここで、Xlog_normalです。qのデフォルトは1です。

early_terminate

パフォーマンスの低いrunを停止するには、早期終了(early_terminate)を使用します。早期終了が発生した場合、W&Bは新しいハイパーパラメータ値のセットで新しいrunを作成する前に、現在のrunを停止します。

停止アルゴリズム

Hyperbandハイパーパラメータ最適化は、プログラムを停止するか、事前設定された1つ以上の反復回数(ブラケットと呼ばれる)で続行するかを評価します。

W&Bのrunがブラケットに到達すると、sweepはそのrunのメトリックを以前に報告されたすべてのメトリック値と比較します。runのメトリック値が高すぎる場合(目標が最小化の場合)、またはrunのメトリックが低すぎる場合(目標が最大化の場合)、sweepはrunを終了します。

ブラケットは、ログに記録された反復回数に基づいています。ブラケットの数は、最適化するメトリックをログに記録する回数に対応します。反復は、ステップ、エポック、またはその間の何かに対応できます。ステップカウンターの数値は、ブラケットの計算には使用されません。

キー 説明
min_iter 最初のブラケットの反復を指定します
max_iter 最大反復回数を指定します。
s ブラケットの総数を指定します(max_iterに必要)。
eta ブラケット乗数スケジュールを指定します(デフォルト:3)。
strict 元のHyperband論文に厳密に従って、runをより積極的にプルーニングする「strict」モードを有効にします。デフォルトはfalseです。

command

commandキー内のネストされた値を使用して、形式と内容を変更します。ファイル名などの固定コンポーネントを直接含めることができます。

W&Bは、コマンドの可変コンポーネントに対して次のマクロをサポートしています。

コマンドマクロ 説明
${env} Unixシステムでは/usr/bin/env、Windowsでは省略。
${interpreter} pythonに展開されます。
${program} sweep configurationのprogramキーで指定されたトレーニングスクリプトのファイル名。
${args} --param1=value1 --param2=value2の形式のハイパーパラメータとその値。
${args_no_boolean_flags} --param1=value1の形式のハイパーパラメータとその値。ただし、ブールパラメータはTrueの場合は--boolean_flag_paramの形式になり、Falseの場合は省略されます。
${args_no_hyphens} param1=value1 param2=value2の形式のハイパーパラメータとその値。
${args_json} JSONとしてエンコードされたハイパーパラメータとその値。
${args_json_file} JSONとしてエンコードされたハイパーパラメータとその値を含むファイルへのパス。
${envvar} 環境変数を渡す方法。${envvar:MYENVVAR} はMYENVVAR環境変数の値に展開されます。