Configurare la terminazione anticipata
L'ottimizzazione degli iperparametri consente di ottimizzare il modello e di selezionare i valori degli iperparametri che ne miglioreranno le prestazioni.
La ricerca del modello migliore, tuttavia, può essere un'impresa senza fine. È necessario considerare sempre se vale la pena dedicare tempo e costi ai test di nuovi valori di iperparametri per trovare un modello che potrebbe avere prestazioni migliori.
A ogni prova in un processo sweep, viene eseguito il training di un nuovo modello con una nuova combinazione di valori iperparametri. Se il training di un nuovo modello non comporta un modello significativamente migliore, è possibile arrestare il processo sweep e usare il modello che ha offerto finora le prestazioni migliori.
Quando si configura un processo sweep in Azure Machine Learning, è anche possibile impostare un numero massimo di prove. Un approccio più sofisticato può essere di arrestare un processo sweep quando i modelli più recenti non producono risultati significativamente migliori. Per arrestare un processo sweep in base alle prestazioni dei modelli, è possibile usare un criterio di terminazione anticipata.
Quando usare un criterio di terminazione anticipata
La decisione se usare o meno un criterio di terminazione anticipata può dipendere dallo spazio di ricerca e dal metodo di campionamento in uso.
Ad esempio, si può scegliere di usare un metodo di campionamento a griglia su uno spazio di ricerca discreto che comporta un massimo di sei prove. Con sei prove, è possibile eseguire il training di un massimo di sei modelli e un criterio di terminazione anticipata potrebbe non essere necessario.
Un criterio di terminazione anticipata può essere particolarmente utile quando si usano iperparametri continui nello spazio di ricerca. Gli iperparametri continui presentano un numero illimitato di valori possibili tra cui scegliere. È probabile che si voglia usare un criterio di terminazione anticipata quando si usano iperparametri continui e un metodo di campionamento casuale o bayesiano.
Configurare un criterio di terminazione anticipata
Esistono due parametri principali quando si sceglie di usare un criterio di terminazione anticipata:
evaluation_interval
: specifica in corrispondenza di quale intervallo si vuole valutare il criterio. Ogni volta che la metrica primaria viene registrata per una prova viene conteggiata come intervallo.delay_evaluation
: specifica quando iniziare a valutare il criterio. Questo parametro consente di completare almeno un minimo di prove senza che un criterio di terminazione anticipata le influenzi.
I nuovi modelli possono continuare ad avere prestazioni solo leggermente migliori di quelli precedenti. Per determinare l'entità in base a cui un modello deve avere prestazioni migliori delle prove precedenti, esistono tre opzioni per la terminazione anticipata:
- Criterio Bandit: usa
slack_factor
(relativo) oslack_amount
(assoluto). Qualsiasi nuovo modello deve avere prestazioni che rientrano nell'intervallo slack del modello con le prestazioni migliori. - Criterio di arresto in base alla mediana: usa la mediana delle medie della metrica primaria. Qualsiasi nuovo modello deve avere prestazioni migliori della mediana.
- Criterio di selezione del troncamento: usa
truncation_percentage
, che rappresenta la percentuale di prove con prestazioni più basse. Qualsiasi nuovo modello deve avere prestazioni migliori delle prove con prestazioni più basse.
Criteri Bandit
È possibile usare il criterio Bandit per arrestare una prova se la metrica delle prestazioni obiettivo indica prestazioni inferiori a quelle della prova migliore finora in base a un margine specificato.
Ad esempio, il codice seguente applica un criterio Bandit con un ritardo di cinque prove, valuta il criterio a ogni intervallo e consente una quantità assoluta di slack pari a 0,2.
from azure.ai.ml.sweep import BanditPolicy
sweep_job.early_termination = BanditPolicy(
slack_amount = 0.2,
delay_evaluation = 5,
evaluation_interval = 1
)
Si supponga che la metrica primaria sia l'accuratezza del modello. Se, dopo le prime cinque prove, il modello con prestazioni migliori ha un'accuratezza pari a 0,9, qualsiasi nuovo modello deve avere prestazioni migliori rispetto a (0,9-0,2) ovvero 0,7. Se l'accuratezza del nuovo modello è superiore a 0,7, il processo sweep continuerà. Se il nuovo modello ha un punteggio di accuratezza inferiore a 0,7, il criterio termina il processo sweep.
È anche possibile applicare criteri di tipo Bandit usando un fattore di margine di flessibilità che confronta la metrica delle prestazioni come un rapporto anziché come un valore assoluto.
Criteri di arresto con valore mediano
Il criterio di arresto in base alla mediana abbandona le prove quando la metrica di prestazioni obiettivo indica prestazioni peggiori della mediana delle medie di esecuzione di tutte le altre probe.
Ad esempio, il codice seguente applica un criterio di arresto in base alla mediana con un ritardo di cinque prove e valuta il criterio a ogni intervallo.
from azure.ai.ml.sweep import MedianStoppingPolicy
sweep_job.early_termination = MedianStoppingPolicy(
delay_evaluation = 5,
evaluation_interval = 1
)
Si supponga che la metrica primaria sia l'accuratezza del modello. Quando l'accuratezza viene registrata per la sesta prova, la metrica deve essere superiore alla mediana dei punteggi di accuratezza calcolati finora. Si supponga che la mediano dei punteggi di accuratezza finora sia 0,82. Se l'accuratezza del nuovo modello è superiore a 0,82, il processo sweep continuerà. Se il nuovo modello ha un punteggio di accuratezza inferiore a 0,82, il criterio arresterà il processo sweep e non verrà eseguito il training di nessun modello.
Criteri di selezione con troncamento
Il criterio di selezione del troncamento annulla l'X% di prove con le prestazioni più basse a ogni intervallo di valutazione in base al valore di truncation_percentage specificato per X.
Ad esempio, il codice seguente applica un criterio di selezione del troncamento con un ritardo di quattro prove, valuta il criterio a ogni intervallo e usa una percentuale di troncamento del 20%.
from azure.ai.ml.sweep import TruncationSelectionPolicy
sweep_job.early_termination = TruncationSelectionPolicy(
evaluation_interval=1,
truncation_percentage=20,
delay_evaluation=4
)
Si supponga che la metrica primaria sia l'accuratezza del modello. Quando l'accuratezza viene registrata per la quinta prova, la metrica non deve rientrare nel 20% peggiore delle prove eseguite finora. In questo caso, il 20% si traduce in una prova. In altre parole, se la quinta versione di valutazione non è il modello con prestazioni peggiori finora, il processo sweep continuerà. Se la quinta prova ha il punteggio di accuratezza più basso di tutte le prove finora, il processo sweep si arresterà.