Configurer une méthode d’échantillonnage

Effectué

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.