Configurer une méthode d’échantillonnage
Les valeurs spécifiques utilisées dans une exécution de réglage des hyperparamètres, ou travail de balayage, dépendent du type d’échantillonnage utilisé.
Trois méthodes d’échantillonnage principales sont disponibles dans Azure Machine Learning :
- Échantillonnage de grille : essaie toutes les combinaisons possibles.
- Échantillonnage aléatoire : choisit des valeurs de manière aléatoire dans l’espace de recherche.
- Sobol : ajoute une valeur initiale à l’échantillonnage aléatoire pour que les résultats deviennent reproductibles.
- Échantillonnage bayésien : choisit de nouvelles valeurs en fonction des résultats précédents.
Notes
Sobol est une variante de l’échantillonnage aléatoire.
Échantillonnage par grille
L’échantillonnage par grille peut s’appliquer uniquement quand l’ensemble des hyperparamètres sont discrets. Il sert à tester toutes les combinaisons possibles de paramètres dans l’espace de recherche.
Par exemple, dans l’exemple de code suivant, l’échantillonnage par grille est utilisé pour essayer toutes les combinaisons possibles de valeur batch_size et learning_rate discrète :
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",
...
)
Échantillonnage aléatoire
L’échantillonnage aléatoire est utilisé pour sélectionner de manière aléatoire une valeur pour chaque hyperparamètre, qui peut être une combinaison de valeurs discrètes et continues, comme indiqué dans l’exemple de code suivant :
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
Vous souhaitez peut-être reproduire un travail de balayage d’échantillonnage aléatoire. Dans ce cas-là, vous pouvez utiliser Sobol à la place. Sobol est un type d’échantillonnage aléatoire qui vous permet d’utiliser une valeur initiale. Quand vous ajoutez une valeur initiale, le travail de balayage peut être reproduit et la distribution de l’espace de recherche est répartie plus uniformément.
L’exemple de code suivant montre comment utiliser Sobol en ajoutant une valeur initiale et une règle, à l’aide de la classe RandomSamplingAlgorithm
:
from azure.ai.ml.sweep import RandomSamplingAlgorithm
sweep_job = command_job_for_sweep.sweep(
sampling_algorithm = RandomSamplingAlgorithm(seed=123, rule="sobol"),
...
)
Échantillonnage bayésien
L’échantillonnage bayésien choisit des valeurs d’hyperparamètre basées sur l’algorithme d’optimisation bayésien, qui tente de sélectionner des combinaisons de paramètres qui entraînent une amélioration des performances de la sélection précédente. L’exemple de code suivant montre comment configurer l’échantillonnage bayésien :
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",
...
)
Vous pouvez uniquement utiliser l’échantillonnage bayésien avec des expressions de paramètre choice, uniform et quniform.