sweep 設定は、入れ子になったキーと値のペアで構成されます。sweep 設定内のトップレベルキーを使用して、探索対象のパラメーター (parameter キー) や、パラメーター空間の探索手法 (method キー) など、sweep 検索の特性を定義します。
以下の表は、トップレベルの sweep 設定キーとその簡単な説明を示しています。各キーの詳細については、それぞれのセクションを参照してください。
| Top-level keys | Description |
|---|
program | (必須) 実行するトレーニングスクリプト |
entity | この sweep の entity |
project | この sweep のプロジェクト |
description | sweep の説明テキスト |
name | W&B UI に表示される sweep の名。 |
method | (必須) 検索戦略 |
metric | 最適化するメトリクス (一部の検索戦略および停止条件でのみ使用) |
parameters | (必須) 探索するパラメーターの範囲 |
early_terminate | 早期終了の条件 |
command | トレーニングスクリプトの呼び出しと引数の受け渡しに使用する command 構造 |
run_cap | この sweep の runs の最大数 |
sweep 設定の構造化方法について詳しくは、Sweep configuration を参照してください。
metric の最上位の sweep 設定キーを使用して、最適化するメトリクスの名、目標、およびターゲット値を指定します。
| Key | Description |
|---|
name | 最適化するメトリクスの名。 |
goal | minimize または maximize のいずれかです (デフォルトは minimize) 。 |
target | 最適化するメトリクスの目標値です。run が指定したターゲット値に達すると、sweep は新しい run を作成しなくなります。run を実行中のアクティブな エージェント は、その run が完了するまで待機し、その後は新しい run の作成を停止します。 |
YAML ファイルまたは Python スクリプトで、トップレベルキーとして parameters を指定します。parameters キー内では、最適化したいハイパーパラメーターの名を指定します。一般的なハイパーパラメーターには、学習率、バッチサイズ、エポック数、オプティマイザーなどがあります。sweep 設定で定義する各ハイパーパラメーターには、1 つ以上の探索制約を指定します。
次の表は、サポートされるハイパーパラメーター探索の制約を示しています。ハイパーパラメーターやユースケースに応じて、以下のいずれかの探索制約を使用し、sweep エージェントに探索または使用する対象を指定します。分布を使う場合はどこを探索するか、value や values などを使う場合は何を使用するかを指定します。
| Search constraint | Description |
|---|
values | このハイパーパラメーターで有効なすべての値を指定します。grid と互換性があります。 |
value | このハイパーパラメーターで有効な単一の値を指定します。grid と互換性があります。 |
distribution | 確率分布を指定します。デフォルト値については、この表の後の注記を参照してください。 |
probabilities | random を使用する場合に、values の各要素が選択される確率を指定します。 |
min, max | (intor float) 最大値と最小値です。int の場合は int_uniform 分布のハイパーパラメーター、float の場合は uniform 分布のハイパーパラメーターに使用します。 |
mu | (float) normal 分布または lognormal 分布のハイパーパラメーターの平均パラメーターです。 |
sigma | (float) normal 分布または lognormal 分布のハイパーパラメーターの標準偏差パラメーターです。 |
q | (float) 量子化ハイパーパラメーターの量子化 step サイズです。 |
parameters | ルートレベルのパラメーター内に、他のパラメーターをネストします。 |
分布が指定されていない場合、W&B は以下の条件に応じて次の分布を設定します。
values を指定した場合は categorical
max と min を整数で指定した場合は int_uniform
max と min を浮動小数点数で指定した場合は uniform
value に値を設定した場合は constant
method キーを使用して、ハイパーパラメーター探索の戦略を指定します。選択できる戦略は、grid、random、ベイズ探索の 3 つです。
ハイパーパラメーター値のあらゆる組み合わせを順に試します。グリッドサーチでは、各反復で使用するハイパーパラメーター値の組み合わせを、過去の結果に基づかずに決定します。グリッドサーチは計算コストが高くなる場合があります。
連続的な探索空間を探索する場合、グリッドサーチは終了しません。
各反復で、分布に基づいて、事前情報を用いずにランダムなハイパーパラメーター値のセットを選択します。ランダムサーチは、コマンドライン、Python スクリプト内、または W&B App からプロセスを停止しない限り、実行され続けます。
ランダムサーチ (method: random) を選択する場合は、メトリクスキーで分布空間を指定します。
ランダム検索やグリッド検索とは異なり、ベイズモデルは情報に基づいて判断を行います。ベイズ最適化では、目的関数を評価する前に、サロゲート関数上で値を試す反復プロセスを通じて、どの値を使用するかを確率モデルで決定します。ベイズ探索は、少数の連続パラメーターには適していますが、スケーリング性能は高くありません。ベイズ探索の詳細については、Bayesian Optimization Primer paperを参照してください。
ベイズ探索は、コマンドラインから、Pythonスクリプト内で、または W&B App でプロセスを停止しない限り、実行され続けます。
parameter キーの中に、ハイパーパラメーターの名をネストします。次に、distribution キーを指定し、その値の分布を指定します。
次の表に、W&B がサポートする分布を示します。
Value for distribution key | Description |
|---|
constant | 定数分布。使用する定数値 (value) を指定する必要があります。 |
categorical | カテゴリカル分布。このハイパーパラメーターで有効な値をすべて (values) 指定する必要があります。 |
int_uniform | 整数上の離散一様分布。max と min は整数で指定する必要があります。 |
uniform | 連続一様分布。max と min は浮動小数点数で指定する必要があります。 |
q_uniform | 量子化一様分布。X が一様分布に従うとき、round(X / q) * q を返します。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 | 量子化対数一様分布。X が log_uniform に従うとき、round(X / q) * q を返します。q のデフォルトは 1 です。 |
q_log_uniform_values | 量子化対数一様分布。X が log_uniform_values に従うとき、round(X / q) * q を返します。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 | 量子化正規分布。X が normal に従うとき、round(X / q) * q を返します。q のデフォルトは 1 です。 |
log_normal | 対数正規分布。自然対数 log(X) が平均 mu (デフォルト 0) 、標準偏差 sigma (デフォルト 1) の正規分布に従う値 X を返します。 |
q_log_normal | 量子化対数正規分布。X が log_normal に従うとき、round(X / q) * q を返します。q のデフォルトは 1 です。 |
パフォーマンスの低い run を停止するには、早期終了 (early_terminate) を使用します。早期終了が発生すると、W&B は新しいハイパーパラメーター値のセットで新しい run を作成する前に、現在の run を停止します。
early_terminate を使用する場合は、停止アルゴリズムを指定する必要があります。sweep の設定では、type キーを early_terminate の中にネストしてください。
Hyperband ハイパーパラメーター最適化では、プログラムを停止すべきか、それとも brackets と呼ばれる 1 つ以上の事前設定された反復回数まで継続すべきかを評価します。
W&B run が bracket に到達すると、sweep はその run のメトリクスを、それまでに報告されたすべてのメトリクス値と比較します。目標が最小化の場合は run のメトリクス値が高すぎると run を終了し、目標が最大化の場合は run のメトリクス値が低すぎると run を終了します。
brackets は、ログされた反復回数に基づいて決まります。bracket の数は、最適化対象のメトリクスをログする回数に対応します。反復は steps、epochs、またはその中間に対応する場合があります。step カウンターの数値は bracket の計算には使用されません。
bracket スケジュールを作成するには、min_iter または max_iter のいずれかを指定します。
| Key | Description |
|---|
min_iter | 最初の bracket の反復回数を指定します |
max_iter | 反復の最大回数を指定します。 |
s | bracket の総数を指定します (max_iter では必須) |
eta | bracket の乗数スケジュールを指定します (デフォルト: 3) 。 |
strict | run を積極的に刈り込む ‘strict’ モードを有効にし、元の Hyperband paper により忠実に従います。デフォルトは false です。 |
Hyperband は数分ごとに、どのrunsを終了するかを確認します。run や反復が短い場合、終了した run の Timestamp は指定した brackets と異なることがあります。
command キー内のネストされた値を使って、形式と内容を変更できます。ファイル名などの固定コンポーネントを直接含めることもできます。
Unix システムでは、/usr/bin/env により、環境に応じて OS が適切な Python インタープリターを選択します。
W&B は、コマンドの可変コンポーネントに対して次のマクロをサポートします。
| コマンドマクロ | 説明 |
|---|
${env} | Unix システムでは /usr/bin/env に展開され、Windows では省略されます。 |
${interpreter} | python に展開されます。 |
${program} | sweep 設定の 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 の値に展開されます。 __ |