サンプリング メソッドを構成する
ハイパーパラメーターのチューニングの実行、またはスイープ ジョブで使われる特定の値は、使うサンプリングの種類によって異なります。
Azure Machine Learning で使用できる主なサンプリング方法は 3 つあります。
- グリッド サンプリング: 考えられるすべての組み合わせを試行します。
- ランダム サンプリング: 検索空間からランダムに値を選びます。
- ソボル: ランダム サンプリングにシードを追加し、結果を再現可能にします。
- ベイジアン サンプリング: 以前の結果に基づいて新しい値を選びます。
注意
ソボルはランダム サンプリングの一種です。
グリッド サンプリング
グリッド サンプリングは、すべてのハイパーパラメーターが不連続の場合にのみ適用できます。また、検索空間内のパラメーターのすべての組み合わせを試すために使用されます。
たとえば、次のコード例では、グリッド サンプリングを使用して、不連続の batch_size と learning_rate の値のすべての組み合わせを試します。
from azure.ai.ml.sweep import Choice
command_job_for_sweep = command_job(
batch_size=Choice(values=[16, 32, 64]),
learning_rate=Choice(values=[0.01, 0.1, 1.0]),
)
sweep_job = command_job_for_sweep.sweep(
sampling_algorithm = "grid",
...
)
ランダム サンプリング
ランダム サンプリングは、各ハイパーパラメーターの値をランダムに選択するために使用されます。次のコード例に示すように、不連続値と連続値を混在させることができます。
from azure.ai.ml.sweep import Normal, Uniform
command_job_for_sweep = command_job(
batch_size=Choice(values=[16, 32, 64]),
learning_rate=Normal(mu=10, sigma=3),
)
sweep_job = command_job_for_sweep.sweep(
sampling_algorithm = "random",
...
)
sobol
ランダム サンプリングのスイープ ジョブを再現可能にしたいと思うかもしれません。 そのようなことを期待する場合は、代わりにソボルを使用できます。 ソボルは、シードを使用できランダム サンプリングの一種です。 シードを追加すると、スイープ ジョブを再現できます。また、検索空間の分布がより均等に広がります。
次のコード例は、シードと規則を追加し、RandomSamplingAlgorithm
クラスを使うことで、ソボルを使う方法を示しています。
from azure.ai.ml.sweep import RandomSamplingAlgorithm
sweep_job = command_job_for_sweep.sweep(
sampling_algorithm = RandomSamplingAlgorithm(seed=123, rule="sobol"),
...
)
ベイジアン サンプリング
ベイジアン サンプリングでは、ベイジアン最適化アルゴリズムに基づいてハイパーパラメーター値を選択します。これにより、前の選択からパフォーマンスが向上するパラメーターの組み合わせを選択しようとします。 次のコード例は、ベイジアン サンプリングを構成する方法を示しています。
from azure.ai.ml.sweep import Uniform, Choice
command_job_for_sweep = job(
batch_size=Choice(values=[16, 32, 64]),
learning_rate=Uniform(min_value=0.05, max_value=0.1),
)
sweep_job = command_job_for_sweep.sweep(
sampling_algorithm = "bayesian",
...
)
ベイジアン サンプリングは、choice、uniform、quniform のパラメーター式でのみ使用できます。