Configurare un metodo di campionamento
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.