sweep configuration はネストされたキーと値のペアで構成されます。 sweep configuration 内のトップレベルキーを使用して、探索するパラメータ(parameter キー)、パラメータ空間を探索する方法(method キー)など、sweep 探索の特性を定義します。
以下の表は、トップレベルの sweep configuration キーとその簡単な説明をリストしたものです。各キーの詳細については、それぞれのセクションを参照してください。
| トップレベルキー | 説明 |
|---|
program | (必須) 実行するトレーニングスクリプト |
entity | この sweep の Entity |
project | この sweep の Project |
description | sweep のテキスト説明 |
name | W&B UI に表示される sweep の名前 |
method | (必須) 探索戦略 |
metric | 最適化するメトリクス(特定の探索戦略と停止基準でのみ使用) |
parameters | (必須) 探索するパラメータの範囲 |
early_terminate | 早期終了の基準 |
command | トレーニングスクリプトを呼び出し、引数を渡すためのコマンド構造 |
run_cap | この sweep の最大 Run 数 |
sweep configuration の構築方法の詳細については、 Sweep configuration の構造を参照してください。
metric
最適化するメトリクスの名前、目標、ターゲット値を指定するには、トップレベルの sweep configuration キー metric を使用します。
| キー | 説明 |
|---|
name | 最適化するメトリクスの名前 |
goal | minimize(最小化)または maximize(最大化)。デフォルトは minimize |
target | 最適化するメトリクスの目標値。Run が指定したターゲット値に到達した場合、sweep は新しい Run を作成しません。実行中の Run があるアクティブなエージェントは、その Run が完了するまで待機してから新しい Run の作成を停止します。 |
parameters
YAML ファイルまたは Python スクリプトで、parameters をトップレベルキーとして指定します。parameters キーの中に、最適化したいハイパーパラメーターの名前を指定します。一般的なハイパーパラメーターには、学習率、バッチサイズ、エポック、オプティマイザーなどがあります。sweep configuration で定義する各ハイパーパラメーターに対して、1 つ以上の探索制約を指定します。
以下の表は、サポートされているハイパーパラメーター探索制約を示しています。ハイパーパラメーターとユースケースに基づいて、以下の探索制約のいずれかを使用して、sweep agent にどこを(分布の場合)または何を(value、values など)探索または使用するかを指示します。
| 探索制約 | 説明 |
|---|
values | このハイパーパラメーターのすべての有効な値を指定します。grid と互換性があります。 |
value | このハイパーパラメーターの単一の有効な値を指定します。grid と互換性があります。 |
distribution | 確率 分布 を指定します。デフォルト値については、この表に続く注記を参照してください。 |
probabilities | random を使用する際に、values の各要素を選択する確率を指定します。 |
min, max | (int または float) 最大値と最小値。int の場合は int_uniform 分布、float の場合は uniform 分布のハイパーパラメーターに使用されます。 |
mu | (float) normal または lognormal 分布の平均パラメータ。 |
sigma | (float) normal または lognormal 分布の標準偏差パラメータ。 |
q | (float) 量子化されたハイパーパラメーターの量子化ステップサイズ。 |
parameters | ルートレベルのパラメータの中に他のパラメータをネストします。 |
分布 が指定されていない場合、W&B は以下の条件に基づいて分布を設定します。
values を指定した場合は categorical
max と min を整数で指定した場合は int_uniform
max と min を浮動小数点数で指定した場合は uniform
value にセットを指定した場合は constant
method
method キーでハイパーパラメーター探索戦略を指定します。グリッド検索、ランダム検索、ベイズ探索の 3 つの戦略から選択できます。
グリッド検索 (Grid search)
ハイパーパラメーターの値のすべての組み合わせを反復します。グリッド検索は、各反復で使用するハイパーパラメーターのセットについて、過去の試行に基づかない決定(uninformed decisions)を行います。グリッド検索は計算コストが高くなる可能性があります。
連続的な探索空間内を探索する場合、グリッド検索は永久に実行されます。
ランダム検索 (Random search)
分布に基づいて、各反復でハイパーパラメーター値のランダムなセットを選択します。ランダム検索は、コマンドライン、Python スクリプト内、または W&B App からプロセスを停止しない限り、永久に実行されます。
ランダム検索(method: random)を選択した場合は、metric キーで分布空間を指定してください。
ベイズ探索 (Bayesian search)
ランダム検索 や グリッド検索 とは対照的に、ベイズモデルは過去の試行に基づいた決定(informed decisions)を行います。ベイズ最適化は確率モデルを使用して、目的関数を評価する前にサロゲート関数上で値をテストする反復プロセスを通じて、どの値を使用するかを決定します。ベイズ探索は少数の連続パラメータに対してうまく機能しますが、スケール性は劣ります。ベイズ探索の詳細については、Bayesian Optimization Primer の論文 を参照してください。
ベイズ探索は、コマンドライン、Python スクリプト内、または W&B App からプロセスを停止しない限り、永久に実行されます。
ランダム検索とベイズ探索の分布オプション
parameter キーの中にハイパーパラメーターの名前をネストします。次に、distribution キーを指定し、値の分布を指定します。
以下の表は、W&B がサポートする分布をリストしたものです。
distribution キーの値 | 説明 |
|---|
constant | 定数分布。使用する定数値(value)を指定する必要があります。 |
categorical | カテゴリカル分布。このハイパーパラメーターのすべての有効な値(values)を指定する必要があります。 |
int_uniform | 整数上の離散一様分布。max と min を整数で指定する必要があります。 |
uniform | 連続一様分布。max と min を浮動小数点数で指定する必要があります。 |
q_uniform | 量子化一様分布。round(X / q) * q を返します(X は一様分布)。q のデフォルトは 1 です。 |
log_uniform | 対数一様分布。自然対数が min と max の間で一様分布となるような、exp(min) と exp(max) の間の値 X を返します。 |
log_uniform_values | 対数一様分布。log(X) が log(min) と log(max) の間で一様分布となるような、min と max の間の値 X を返します。 |
q_log_uniform | 量子化対数一様分布。round(X / q) * q を返します(X は log_uniform)。q のデフォルトは 1 です。 |
q_log_uniform_values | 量子化対数一様分布。round(X / q) * q を返します(X は log_uniform_values)。q のデフォルトは 1 です。 |
inv_log_uniform | 逆対数一様分布。log(1/X) が min と max の間で一様分布となるような X を返します。 |
inv_log_uniform_values | 逆対数一様分布。log(1/X) が log(1/max) と log(1/min) の間で一様分布となるような X を返します。 |
normal | 正規分布。平均 mu(デフォルト 0)、標準偏差 sigma(デフォルト 1)の正規分布に従う値を返します。 |
q_normal | 量子化正規分布。round(X / q) * q を返します(X は normal)。q のデフォルトは 1 です。 |
log_normal | 対数正規分布。自然対数 log(X) が平均 mu(デフォルト 0)、標準偏差 sigma(デフォルト 1)の正規分布に従うような値 X を返します。 |
q_log_normal | 量子化対数正規分布。round(X / q) * q を返します(X は log_normal)。q のデフォルトは 1 です。 |
early_terminate
パフォーマンスの低い Run を停止するには、早期終了(early_terminate)を使用します。早期終了が発生すると、W&B は現在の Run を停止してから、新しいハイパーパラメーター値のセットで新しい Run を作成します。
early_terminate を使用する場合は、停止アルゴリズムを指定する必要があります。sweep configuration の early_terminate 内に type キーをネストしてください。
停止アルゴリズム
Hyperband ハイパーパラメーター最適化は、プログラムを停止すべきか、あるいは bracket と呼ばれる 1 つ以上のあらかじめ設定された反復回数で続行すべきかを評価します。
W&B の Run が bracket に到達すると、sweep はその Run のメトリクスを、それまでに報告されたすべてのメトリクス値と比較します。Run のメトリクス値が高すぎる(目標が最小化の場合)または低すぎる(目標が最大化の場合)、sweep はその Run を終了します。
Bracket はログに記録された反復回数に基づいています。bracket の数は、最適化しているメトリクスをログに記録した回数に対応します。反復はステップ、エポック、またはその中間の何かに対応させることができます。ステップカウンターの数値自体は bracket の計算には使用されません。
bracket スケジュールを作成するには、min_iter または max_iter のいずれかを指定してください。
| キー | 説明 |
|---|
min_iter | 最初の bracket の反復回数を指定します |
max_iter | 最大反復回数を指定します |
s | bracket の総数を指定します(max_iter には必須) |
eta | bracket の倍率スケジュールを指定します(デフォルト: 3) |
strict | 元の Hyperband 論文により忠実に、より積極的に Run を整理する「厳密(strict)」モードを有効にします。デフォルトは false です。 |
Hyperband は数分に一度、終了すべき Runs をチェックします。Run や反復が短い場合、Run の終了タイムスタンプが指定した bracket と異なる場合があります。
command
command キー内のネストされた値を使用して、形式と内容を変更できます。ファイル名などの固定コンポーネントを直接含めることができます。
Unix システムでは、/usr/bin/env を使用することで、OS が環境に基づいて正しい Python インタープリタを選択するようにします。
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 という形式のハイパーパラメーターとその値。ただし、boolean パラメータは True の場合は --boolean_flag_param 形式になり、False の場合は省略されます。 |
${args_no_hyphens} | param1=value1 param2=value2 という形式のハイパーパラメーターとその値。 |
${args_json} | JSON としてエンコードされたハイパーパラメーターとその値。 |
${args_json_file} | JSON としてエンコードされたハイパーパラメーターとその値を含むファイルへのパス。 |
${envvar} | 環境変数を渡す方法。 ${envvar:MYENVVAR} は環境変数 MYENVVAR の値に展開されます。 |