メインコンテンツまでスキップ

Sweep configuration structure

W&B Sweepは、ハイパーパラメータの値を探索するための戦略と、それらを評価するコードを組み合わせたものです。戦略はすべてのオプションを試すほどシンプルなものから、ベイズ最適化やHyperband (BOHB)のように複雑なものまであります。

sweep configuration のオプションについては、トップレベルのスイープ設定キーの完全なリスト を参照してください。

基本構造

両方のスイープ設定フォーマットオプション(YAML と Python 辞書)は、キーと値のペア、およびネストされた構造を利用します。

スイープ設定内のトップレベルキーを使用して、sweep の検索の品質(例: スイープの名前 (name キー)、検索するパラメーター (parameters キー)、パラメータスペースを検索する方法論 (method キー)など)を定義します。

例えば、次のコードスニペットは、同じスイープ設定が YAML ファイルと Python 辞書内で定義されていることを示しています。スイープ設定内には以下の5つのトップレベルキーが指定されています: program, name, method, metric, parameters.

コマンドライン(CLI)からインタラクティブにスイープを管理したい場合は、YAMLファイルにスイープ設定を定義します。
config.yaml
program: train.py
name: sweepdemo
method: bayes
metric:
goal: minimize
name: validation_loss
parameters:
learning_rate:
min: 0.0001
max: 0.1
batch_size:
values: [16, 32, 64]
epochs:
values: [5, 10, 15]
optimizer:
values: ["adam", "sgd"]

トップレベルの parameters キー内には、以下のキーがネストされています:learning_rate, batch_size, epoch, optimizer。指定する各ネストされたキーについて、1つ以上の値、分布、確率などを提供できます。詳細は、Sweeps 設定オプション内のparametersセクションを参照してください。

二重ネストされたパラメータ

スイープ設定はネストされたパラメータをサポートしています。ネストされたパラメータを区別するには、トップレベルのパラメータ名の下に追加の parameters キーを使用します。スイープ設定は複数レベルのネストをサポートします。

ベイズまたはランダムハイパーパラメータ検索を使用する場合は、ランダム変数の確率分布を指定します。各ハイパーパラメータについて:

  1. スイープ設定にトップレベルの parameters キーを作成します。
  2. parameters キー内に次の要素をネストします:
    1. 最適化したいハイパーパラメータの名前を指定します。
    2. distribution キーのために使用する分布を指定します。ハイパーパラメータ名の下に distribution キーとその値をネストします。
    3. 探索する値を1つ以上指定します。値(または値)の指定は分布キーと一致する必要があります。
      1. (オプション)ネストされたパラメータを区別するために、トップレベルのパラメータ名の下に追加の parameters キーを使用します。
注意

スイープ設定に定義されたネストされたパラメータは、W&B run 設定で指定されたキーを上書きします。

例えば、次のコードスニペットでは、train.py Pythonスクリプト内で次の設定を使って W&B run を初期化したとします(1-2行目)。続いて、辞書 sweep_configuration にスイープ設定を定義します(4-13行目)。その後、スイープ設定辞書を wandb.sweep に渡してスイープ設定を初期化します(16行目)。

train.py
def main():
run = wandb.init(config={"nested_param": {"manual_key": 1}})


sweep_configuration = {
"top_level_param": 0,
"nested_param": {
"learning_rate": 0.01,
"double_nested_param": {"x": 0.9, "y": 0.8},
},
}

# Initialize sweep by passing in config.
sweep_id = wandb.sweep(sweep=sweep_configuration, project="<project>")

# Start sweep job.
wandb.agent(sweep_id, function=main, count=4)

W&B run が初期化されたときに渡される nested_param.manual_key(2行目)はアクセスできません。run.config にはスイープ設定辞書(4-13行目)で定義されたキー値ペアのみが含まれます。

スイープ設定テンプレート

以下のテンプレートは、パラメータを設定し検索制約を指定する方法を示しています。hyperparameter_nameをハイパーパラメータ名に置き換え、<>で囲まれた値を適切な値に置き換えてください。

config.yaml
program: <insert>
method: <insert>
parameter:
hyperparameter_name0:
value: 0
hyperparameter_name1:
values: [0, 0, 0]
hyperparameter_name:
distribution: <insert>
value: <insert>
hyperparameter_name2:
distribution: <insert>
min: <insert>
max: <insert>
q: <insert>
hyperparameter_name3:
distribution: <insert>
values:
- <list_of_values>
- <list_of_values>
- <list_of_values>
early_terminate:
type: hyperband
s: 0
eta: 0
max_iter: 0
command:
- ${Command macro}
- ${Command macro}
- ${Command macro}
- ${Command macro}

スイープ設定例

config.yaml
program: train.py
method: random
metric:
goal: minimize
name: loss
parameters:
batch_size:
distribution: q_log_uniform_values
max: 256
min: 32
q: 8
dropout:
values: [0.3, 0.4, 0.5]
epochs:
value: 1
fc_layer_size:
values: [128, 256, 512]
learning_rate:
distribution: uniform
max: 0.1
min: 0
optimizer:
values: ["adam", "sgd"]

ベイズハイパーバンド例

program: train.py
method: bayes
metric:
goal: minimize
name: val_loss
parameters:
dropout:
values: [0.15, 0.2, 0.25, 0.3, 0.4]
hidden_layer_size:
values: [96, 128, 148]
layer_1_size:
values: [10, 12, 14, 16, 18, 20]
layer_2_size:
values: [24, 28, 32, 36, 40, 44]
learn_rate:
values: [0.001, 0.01, 0.003]
decay:
values: [1e-5, 1e-6, 1e-7]
momentum:
values: [0.8, 0.9, 0.95]
epochs:
value: 27
early_terminate:
type: hyperband
s: 2
eta: 3
max_iter: 27

以下のタブはearly_terminate の最少または最大反復回数を指定する方法を示しています:

early_terminate:
type: hyperband
min_iter: 3

この例の括弧は [3, 3*eta, 3*eta*eta, 3*eta*eta*eta] です。これは [3, 9, 27, 81] になります。

コマンドの例

program: main.py
metric:
name: val_loss
goal: minimize

method: bayes
parameters:
optimizer.config.learning_rate:
min: !!float 1e-5
max: 0.1
experiment:
values: [expt001, expt002]
optimizer:
values: [sgd, adagrad, adam]

command:
- ${env}
- ${interpreter}
- ${program}
- ${args_no_hyphens}
/usr/bin/env python train.py --param1=value1 --param2=value2

以下のタブは、一般的なコマンドマクロを指定する方法を示しています:

{$interpreter} マクロを削除し、Pythonインタープリターをハードコードするために値を明示的に指定します。例えば、次のコードスニペットはその方法を示しています:

command:
- ${env}
- python3
- ${program}
- ${args}
Was this page helpful?👍👎