Configurare un metodo di campionamento

Completato

I valori specifici usati nell'esecuzione di ottimizzazione degli iperparametri, o processo di sweep, dipendono dal tipo di campionamento usato.

In Azure Machine Learning sono disponibili tre metodi principali di campionamento:

  • Campionamento a griglia: prova ogni possibile combinazione.
  • Campionamento casuale: sceglie in modo casuale i valori dello spazio di ricerca.
    • Sobol: aggiunge un valore di inizializzazione al campionamento casuale per rendere riproducibili i risultati.
  • Campionamento bayesiano: sceglie nuovi valori in base ai risultati precedenti.

Nota

Sobol è una variante del campionamento casuale.

Campionamento a griglia

Il campionamento a griglia può essere applicato solo quando tutti gli iperparametri sono discreti e viene usato per provare ogni possibile combinazione di parametri nello spazio di ricerca.

Nell'esempio di codice seguente viene usato il campionamento a griglia per provare ogni possibile combinazione di valori discreti di batch_size e 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",
    ...
)

Campionamento casuale

Il campionamento casuale viene usato per selezionare in modo casuale un valore per ogni iperparametro, che può essere una combinazione di valori discreti e continui, come illustrato nell'esempio di codice seguente:

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

Potrebbe essere necessario riprodurre un processo sweep di campionamento casuale. In questo caso, in alternativa è possibile usare Sobol. Sobol è un tipo di campionamento casuale che consente di usare un valore di inizializzazione. Quando si aggiunge un valore di inizializzazione, il processo sweep può essere riprodotto e la distribuzione dello spazio di ricerca viene distribuita in modo più uniforme.

L'esempio di codice seguente illustra come usare Sobol aggiungendo un valore di inizializzazione e una regola e usando la classe RandomSamplingAlgorithm:

from azure.ai.ml.sweep import RandomSamplingAlgorithm

sweep_job = command_job_for_sweep.sweep(
    sampling_algorithm = RandomSamplingAlgorithm(seed=123, rule="sobol"),
    ...
)

Campionamento bayesiano

Il campionamento bayesiano sceglie i valori degli iperparametri in base all'algoritmo di ottimizzazione bayesiana, che cerca di selezionare le combinazioni di parametri che consentono un miglioramento delle prestazioni rispetto alla selezione precedente. Nell'esempio di codice seguente viene illustrato come configurare il campionamento bayesiano:

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

È possibile usare il campionamento bayesiano solo con le espressioni dei parametri choice, uniform e quniform.