スイープ構成を定義する
Wandb のスイープは、ハイパーパラメータ値を探索するための戦略と、ハイパーパラメータ値を計算するためのコードを組み合わせたものです。この戦略は、すべてのオプションを試すという単純なものもあれば、ベイジアン最適化とハイパーバンディング (BOHB) のような複雑なものもあります。
スイープ構成の形式で戦略を定義します。構成を次のように指定します。
Jupyter Notebook または Python スクリプトを使用する場合は、Python のネストされた辞書データ構造を使用します。
コマンド ライン (CLI) を使用する場合は YAML ファイル。以下のコード スニペットは、Jupyter Notebook、Python スクリプト、または YAML ファイルでスイープ構成を定義する方法の例を示しています。構成キーについては、後のサブセクションで詳しく定義します。
1. Python スクリプトまたは Jupyter Notebook:
Jupyter Notebook または Python スクリプトでは、スキャンは辞書 Python データ構造で定義されます。
sweep_configuration = {
'method': 'random',
'name': 'sweep',
'metric': {
'goal': 'minimize',
'name': 'validation_loss'
},
'parameters': {
'batch_size': {'values': [16, 32, 64]},
'epochs': {'values': [5, 10, 15]},
'lr': {'max': 0.1, 'min': 0.0001}
}
}
2、YAML
キーが値としてさらにキーを持つことができるマップを YAML 内に作成します。
program: train.py
method: bayes
metric:
name: validation_loss
goal: minimize
parameters:
learning_rate:
min: 0.0001
max: 0.1
optimizer:
values: ["adam", "sgd"]
注: Python スクリプトまたは Jupyter Notebook で最適化するスキャンを定義する正確なメトリック名を必ずログ (wandb.log) に記録してください。W&B スキャン エージェントの開始後は、スキャン設定を変更できません。
たとえば、トレーニング中の検証精度を最大化するために W&B スキャンが必要だとします。Python スクリプトでは、検証精度を変数 val_loss に保存します。YAML 構成ファイルでは、以下を定義します。
metric:
goal: maximize
name: val_loss
Python スクリプトまたは Jupyter Notebook の変数 val_loss (この場合) を W&B に記録する必要があります。W&B では、この辞書型ファイルを W&B サーバーにアップロードするのがログの機能です。
wandb.log({
'val_loss': validation_loss
})
スイープ構成構造
スイープ設定はネストされており、キーには値としてさらにキーを含めることができます。最上位のキーを以下にリストして簡単に説明し、次のセクションで詳しく説明します。
最上位のキー | 説明 |
---|---|
program |
(必須) 実行するトレーニング スクリプト。 |
method |
(必須) 検索戦略を指定します。 |
parameters |
(必須) 検索するパラメータ範囲を指定します。 |
name |
W&B UI に表示されるスキャンの名前。 |
description |
スキャンのテキストによる説明。 |
metric |
最適化するメトリックを指定します (特定の検索戦略および停止基準の場合のみ)。 |
early_terminate |
早期停止条件を指定します。 |
command |
パラメータを呼び出してトレーニング スクリプトに渡すためのコマンド構造を指定します。 |
project |
このスキャンの項目を指定します。 |
entity |
このスキャンのエンティティを指定します。 |
run_cap |
スキャン実行の最大数を指定します。 |
method:
検索タイプの方法
以下のリストでは、ハイパーパラメータの検索方法を説明します。次のメソッドを使用して検索戦略を指定します。
グリッド - ハイパーパラメータ値の各組み合わせを繰り返します。計算コストが高い。
ランダム - 提供された分布に基づいて、反復ごとにハイパーパラメータ値のランダムなセットを選択します。
Bayes - ハイパーパラメータの関数としてメトリクス スコアの確率モデルを作成し、メトリクスを改善する可能性が高いパラメータを選択します。ベイジアン ハイパーパラメーター検索手法では、ガウス プロセスを使用してパラメーターとモデル メトリック間の関係をモデル化し、パラメーターを選択して改善の確率を最適化します。このポリシーでは、metrickey を指定する必要があります。少数の連続パラメータにはうまく機能しますが、スケーリングが不十分です。
一般的にはランダム戦略が使用されます。たとえば、YOLOv5 のデフォルトのハイパーパラメータ検索戦略はランダムとして構成されています。
手順
- ランダム検索
method: random
グリッド検索
-
method: grid
- ベイズ探索
method: bayes
metric:
name: val_loss
goal: minimize
注:ランダム検索とベイズ検索は、コマンド ライン、Python スクリプト、または UI からプロセスを停止するまで、永久に実行されます。グリッド検索も、連続した検索スペースを検索する場合は永久に実行されます。
構成の重要なポイント
方法
スイープ設定でメソッド キーを使用して、検索戦略を指定します。
method |
説明 |
---|---|
grid |
グリッド検索は、パラメーター値のすべての可能な組み合わせに対して反復されます。 |
random |
ランダム検索では、反復ごとにランダムな値のセットが選択されます。 |
bayes |
当社のベイジアン ハイパーパラメータ検索手法では、ガウス プロセスを使用してパラメータとモデル メトリクスの間の関係をモデル化し、改善の確率を最適化するパラメータを選択します。この戦略では、メトリック キーを指定する必要があります。 |
parameters
スイープ中に調査されるハイパーパラメータについて説明します。各ハイパーパラメータについて、名前と可能な値を定数のリストとして (任意のメソッドに対して) 指定するか、ランダム分布またはベイジアン分布を指定します。
価値観 | 説明 |
---|---|
values |
このハイパーパラメータに有効な値をすべて指定します。互換性のあるグリッド。 |
value |
このハイパーパラメータに有効な値を 1 つ指定します。互換性のあるグリッド。 |
distribution |
以下の分布表から分布を選択します。指定されていない場合、値が設定されている場合は categorical がデフォルトとなり、max と min が整数に設定されている場合は int_uniform、max と min が浮動小数点に設定されている場合は unique、value が定数に設定されている場合はデフォルトになります。 |
probabilities |
ランダムが使用される場合に、各値要素が選択される確率を指定します。 |
min 、 max |
(float 内) 最大値と最小値。int の場合、int_uniform - 分散ハイパーパラメータ。float の場合、一様分布のハイパーパラメータ。 |
mu |
(float) 正規分布または対数正規分布のハイパーパラメータの平均パラメータ。 |
sigma |
(float) 正規分布または対数正規分布ハイパーパラメータの標準偏差パラメータ。 |
q |
(float) 量子化ハイパーパラメータの量子化ステップ サイズ。 |
parameters |
ルートレベルのパラメータ内に他のパラメータをネストします。 |
例
単一の値
parameter_name:
value: 1.618
複数の値
parameter_name:
values:
- 8
- 6
- 7
- 5
- 3
- 0
- 9
確率
parameter_name:
values: [1, 2, 3, 4, 5]
probabilities: [0.1, 0.2, 0.1, 0.25, 0.35]
分布
parameter_name:
distribution: normal
mu: 100
sigma: 10
入れ子になった
optimizer:
parameters:
learning_rate:
values: [0.01, 0.001]
momentum:
value: 0.9
distribution
ランダム (ランダム) またはベイズ (ベイズ) メソッドでは変数を指定する必要がありますが、グリッド メソッドでは変数を指定する必要はありません。
ランダム (ランダム) またはベイジアン (ベイズ) 検索方法を選択した場合は、値を分散する方法を指定します。
価値 | 説明 |
---|---|
constant |
一定の分布。値を指定する必要があります。 |
categorical |
カテゴリ分布。値を指定する必要があります。 |
int_uniform |
整数の離散一様分布。max と min は整数として指定する必要があります。 |
uniform |
継続的に均等に分配されます。最大値と最小値は浮動小数点数として指定する必要があります。 |
q_uniform |
量子化された一様分布。整数 (X / q) * q を返します。ここで、X は一様です。Q のデフォルトは 1 です。 |
log_uniform |
対数均一分布。自然対数が最小値と最大値の間で均等に分布するように、exp(min) と exp(max) の間の値 X を返します。 |
log_uniform_values |
対数均一分布。log(X) が log(min) と log(max) の間に均一に分布するように、min と max の間の値 X を返します。 |
q_log_uniform |
ログの均一性を定量化します。整数 (X / q) * q を返します。X は log_uniform です。Q のデフォルトは 1 です。 |
q_log_uniform_values |
ログの均一性を定量化します。整数 (X / q) * q を返します。X は log_uniform_values です。Q のデフォルトは 1 です。 |
inv_log_uniform |
逆対数一様分布。log(1/X) が最小値と最大値の間で均一に分布する X を返します。 |
inv_log_uniform_values |
逆対数一様分布。log(1/X) が log(1/max) と log(1/min) の間に均一に分布する X を返します。 |
normal |
正規分布。戻り値は正規分布で、平均は mu (デフォルト 0)、標準偏差は sigma (デフォルト 1) です。 |
q_normal |
正規分布を量子化します。整数 (X / q) * q を返します。X は通常の値です。Q のデフォルトは 1 です。 |
log_normal |
对数正态分布。返回一个值X,使自然对数log(X)正态分布为均值mu(默认0)和标准差sigma(默认1)。 |
q_log_normal |
量化对数正态分布。返回整数(X / q) * q,其中X为log_normal。Q默认为1。 |
以YOLOv5的sweep配置文件为例:
sweep.yaml
yolov5中distribution统一使用:uniform,连续均匀分布,最大值和最小值指定为浮点数。
# Hyperparameters for training
# To set range-
# Provide min and max values as:
# parameter:
#
# min: scalar
# max: scalar
# OR
#
# Set a specific list of search space-
# parameter:
# values: [scalar1, scalar2, scalar3...]
#
# You can use grid, bayesian and hyperopt search strategy
# For more info on configuring sweeps visit - https://docs.wandb.ai/guides/sweeps/configuration
program: utils/loggers/wandb/sweep.py
method: random
metric:
name: metrics/mAP_0.5
goal: maximize
parameters:
# hyperparameters: set either min, max range or values list
data:
value: "data/coco128.yaml"
batch_size:
values: [64]
epochs:
values: [10]
lr0:
distribution: uniform
min: 1e-5
max: 1e-1
lrf:
distribution: uniform
min: 0.01
max: 1.0
momentum:
distribution: uniform
min: 0.6
max: 0.98
weight_decay:
distribution: uniform
min: 0.0
max: 0.001
warmup_epochs:
distribution: uniform
min: 0.0
max: 5.0
warmup_momentum:
distribution: uniform
min: 0.0
max: 0.95
warmup_bias_lr:
distribution: uniform
min: 0.0
max: 0.2
box:
distribution: uniform
min: 0.02
max: 0.2
cls:
distribution: uniform
min: 0.2
max: 4.0
cls_pw:
distribution: uniform
min: 0.5
max: 2.0
obj:
distribution: uniform
min: 0.2
max: 4.0
obj_pw:
distribution: uniform
min: 0.5
max: 2.0
iou_t:
distribution: uniform
min: 0.1
max: 0.7
anchor_t:
distribution: uniform
min: 2.0
max: 8.0
fl_gamma:
distribution: uniform
min: 0.0
max: 0.1
hsv_h:
distribution: uniform
min: 0.0
max: 0.1
hsv_s:
distribution: uniform
min: 0.0
max: 0.9
hsv_v:
distribution: uniform
min: 0.0
max: 0.9
degrees:
distribution: uniform
min: 0.0
max: 45.0
translate:
distribution: uniform
min: 0.0
max: 0.9
scale:
distribution: uniform
min: 0.0
max: 0.9
shear:
distribution: uniform
min: 0.0
max: 10.0
perspective:
distribution: uniform
min: 0.0
max: 0.001
flipud:
distribution: uniform
min: 0.0
max: 1.0
fliplr:
distribution: uniform
min: 0.0
max: 1.0
mosaic:
distribution: uniform
min: 0.0
max: 1.0
mixup:
distribution: uniform
min: 0.0
max: 1.0
copy_paste:
distribution: uniform
min: 0.0
max: 1.0