設定取樣方法

已完成

超參數微調執行或整理作業中使用的特定值,取決於使用的取樣類型。

Azure Machine Learning 中有三個主要的取樣方法:

  • 格線取樣:嘗試每個可能的組合。
  • 隨機取樣:隨機選擇搜尋空間中的值。
    • Sobol:將種子新增至隨機取樣以重現結果。
  • 貝氏取樣:根據先前的結果選擇新的值。

注意

Sobol 是隨機取樣的變化。

格線取樣

只有在所有超參數都是離散,且用來嘗試搜尋空間中的每個可能參數組合時,才能夠套用方格取樣。

例如,在下列程式碼範例中,使用方格取樣來嘗試離散 batch_sizelearning_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

您可能想要能夠重現隨機取樣整理作業。 如果您預期這麼做,則可以改用 Sobol。 Sobol 是一種隨機取樣類型,可讓您使用種子。 當您新增種子時,可以重現整理作業,而且搜尋空間分佈會更平均地散佈。

下列程式碼範例顯示如何藉由新增種子和規則,並使用 RandomSamplingAlgorithm 類別來使用 Sobol:

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",
    ...
)

您只能使用具有 choiceuniformquniform 參數運算式的貝氏取樣。