配置采样方法

已完成

超参数优化运行或扫描作业中使用的特定值取决于所使用的采样类型。

Azure 机器学习中提供了以下三种主要采样方法:

  • 网格采样:尝试各种可能的组合。
  • 随机采样:从搜索空间中随机选择值。
    • Sobol:将种子添加到随机采样,使结果可重现。
  • Bayesian 采样:根据以前的结果选择新值。

注意

Sobol 是随机采样的变体。

网格采样

网格采样只能在所有超参数都是离散的情况下应用,并且可用于尝试搜索空间中所有可能的参数组合。

例如,在下面的代码示例中,网格采样用于尝试离散 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

你可能希望能够重现随机采样扫描作业。 如果希望这样做,可以改用 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"),
    ...
)

贝叶斯采样

Bayesian 采样根据 Bayesian 优化算法来选择超参数值,此算法尝试选择参数组合,以提高前一个选择的性能。 下面的代码示例展示了如何配置 Bayesian 采样:

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 参数表达式一起使用。