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