メインコンテンツへスキップ
sweep は、ハイパーパラメーターの値を探索する戦略と、それらを評価するコードを組み合わせたものです。戦略は、すべての候補を試すシンプルなものから、Bayesian Optimization や Hyperband (BOHB) のような複雑なものまでさまざまです。 このガイドでは、どのハイパーパラメーターを探索するか、どの探索戦略を使用するか、各 run をどのように評価するかを指定する sweep 設定の定義方法を示します。新しい sweep を設定する場合や、既存の設定を別の探索方法やパラメーター空間に合わせて調整する場合に使用してください。 sweep 設定は、Python の辞書 または YAML ファイルで定義します。どちらの形式で sweep 設定を定義するかは、sweep をどのように管理したいかによって異なります。
コマンドラインから sweep を初期化し、sweep エージェント を起動する場合は、YAML ファイルで sweep 設定を定義してください。Python スクリプトまたはノートブック 内ですべて完結させて sweep を初期化し、開始する場合は、Python の辞書 で sweep を定義してください。
以下のセクションでは、sweep 設定の書式を説明します。最上位レベルの sweep 設定キーの一覧については、Sweep configuration options を参照してください。

基本構造

sweep 設定は、YAML または Python の辞書のいずれかを使用して、キーと値のペアおよびネストされた構造で定義します。 sweep 設定のトップレベルキーを使用して、sweep 検索の特性を定義します。たとえば、sweep の name、検索対象の parameters、検索 method などです。 たとえば、次のコードスニペットは、YAML ファイル内と Python の辞書内で定義した同じ sweep 設定を示しています。sweep 設定では、programnamemethodmetricparameters の 5 つのトップレベルキーを指定しています。
コマンドラインから Sweeps をインタラクティブに管理するには、YAML ファイルで sweep 設定を定義します。
config.yaml
トップレベルの parameters キーの中には、learning_ratebatch_sizeepochsoptimizer の各キーがネストされています。指定した各ネストキーには、1 つ以上の値、分布、確率などを指定できます。詳細は、Sweep configuration optionsparameters セクションを参照してください。

二重にネストしたパラメーター

関連するハイパーパラメーターをまとめてグループ化したい場合や、トレーニング コードでネストされた設定構造を想定している場合は、ネストされたパラメーターを使用します。ネストされたパラメーターを定義するには、トップレベルのパラメーター名の下に parameters キーを追加します。 次の例は、ネストされたパラメーター nested_category_1nested_category_2nested_category_3 を含む sweep 設定を示しています。各ネストされたパラメーターには、さらに momentumweight_decay という 2 つのパラメーターが含まれています。次のコード例は、この設定を YAML ファイルと Python の辞書の両方で示しています。
sweep 設定で定義したネストされたパラメーターは、W&B の run 設定で指定したキーを上書きします。例として、ネストされたデフォルト値を使って run を初期化する train.py スクリプトがあるとします。
sweep 設定では、最上位の "parameters" キーの下にネストされたパラメーターを定義します。
sweep run 中は、run.config["nested_param"] に sweep 設定で定義された サブツリー (learning_ratedouble_nested_param) が反映されます。これには、wandb.init(config=...) で定義された manual_key は含まれません。

Sweep 設定テンプレート

このテンプレートを、新しい sweep 設定の出発点として使用してください。ここでは、最も一般的なパラメーターと早期終了のパターンを示しています。hyperparameter_name は使用するハイパーパラメーターの名に置き換え、角括弧で囲まれた値も必要に応じて置き換えてください。
config.yaml
数値を科学表記で表すには、YAMLの!!float演算子を追加して、値を浮動小数点数として扱います。たとえば、min: !!float 1e-5です。詳細は、マクロとカスタム コマンド引数の例をご覧ください。

sweep 設定例

以下の sweep 設定は、一般的なシナリオを示したものです。ご自身のトレーニングスクリプトに合わせて sweep を調整する際の参考として使用してください。
config.yaml

Bayes hyperbandの例

次の例では、ベイズ探索と Hyperband の早期終了を組み合わせることで、パフォーマンスの低い run を早い段階で停止し、より有望な設定にリソースを割り当てます。
以下のタブでは、early_terminate の反復回数の最小値または最大値を指定する方法を示します。
この例でのブラケットは [3, 3*eta, 3*eta*eta, 3*eta*eta*eta] で、[3, 9, 27, 81] になります。

マクロとカスタムコマンド引数の例

この例では、デフォルトの invocation よりも細かく制御したい場合に、sweep エージェントが各試行で実行するコマンドをどのように構築するかを示します。 より複雑なコマンドライン引数では、マクロを使用して環境変数、Python インタープリター、追加の引数を渡せます。W&B は事前定義済みのマクロと、sweep 設定で指定できるカスタムコマンドライン引数をサポートしています。 たとえば、次の sweep 設定 (sweep.yaml) では、Python スクリプト (run.py) を実行するコマンドを定義しており、sweep の実行時に ${env}${interpreter}${program} の各マクロが適切な値に置き換えられます。 --batch_size=${batch_size}--test=True--optimizer=${optimizer} の各引数ではカスタムマクロを使用して、sweep 設定で定義された batch_sizetestoptimizer の各パラメーターの値を渡します。
sweep.yaml
対応する Python スクリプト run.py では、argparse モジュールを使って、これらのコマンドライン引数を解析できます。
run.py
[sweep 設定で使用できる、あらかじめ定義されたマクロの一覧については、Sweep configuration optionsコマンドマクロ セクションを参照してください。](/models/sweeps/sweep-config-keys#command-macros)

ブール引数

sweep がコマンド引数としてブールフラグを渡す場合、argparse はデフォルトではブール値の文字列を解釈しないため、トレーニングスクリプトで追加の処理が必要です。 argparse モジュールは、デフォルトではブール引数をサポートしていません。ブール引数を定義するには、action パラメーターを使用するか、ブール値の文字列表現をブール型に変換するカスタム関数を使用します。 たとえば、次のコードスニペットを使用してブール引数を定義できます。ArgumentParser の引数として store_true または store_false を渡します:
ブール値の文字列表現をブール型に変換するカスタム関数を定義することもできます。たとえば、次のコードスニペットでは、文字列をブール値に変換するstr2bool関数を定義しています: