Configure a sampling method
The specific values used in a hyperparameter tuning run, or sweep job, depend on the type of sampling used.
There are three main sampling methods available in Azure Machine Learning:
- Grid sampling: Tries every possible combination.
- Random sampling: Randomly chooses values from the search space.
- Sobol: Adds a seed to random sampling to make the results reproducible.
- Bayesian sampling: Chooses new values based on previous results.
Note
Sobol is a variation of random sampling.
Grid sampling
Grid sampling can only be applied when all hyperparameters are discrete, and is used to try every possible combination of parameters in the search space.
For example, in the following code example, grid sampling is used to try every possible combination of discrete batch_size and learning_rate value:
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",
...
)
Random sampling
Random sampling is used to randomly select a value for each hyperparameter, which can be a mix of discrete and continuous values as shown in the following code example:
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
You may want to be able to reproduce a random sampling sweep job. If you expect that you do, you can use Sobol instead. Sobol is a type of random sampling that allows you to use a seed. When you add a seed, the sweep job can be reproduced, and the search space distribution is spread more evenly.
The following code example shows how to use Sobol by adding a seed and a rule, and using the RandomSamplingAlgorithm
class:
from azure.ai.ml.sweep import RandomSamplingAlgorithm
sweep_job = command_job_for_sweep.sweep(
sampling_algorithm = RandomSamplingAlgorithm(seed=123, rule="sobol"),
...
)
Bayesian sampling
Bayesian sampling chooses hyperparameter values based on the Bayesian optimization algorithm, which tries to select parameter combinations that will result in improved performance from the previous selection. The following code example shows how to configure Bayesian sampling:
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",
...
)
You can only use Bayesian sampling with choice, uniform, and quniform parameter expressions.