Panoramica dell'ottimizzazione degli iperparametri
Nel machine learning, l'ottimizzazione degli iperparametri identifica un insieme di iperparametri ottimali per un algoritmo di apprendimento. Un iperparametro è un argomento del modello il cui valore viene impostato prima dell'inizio del processo di apprendimento. Viceversa, i valori degli altri parametri, come i coefficienti di un modello lineare, vengono appresi.
L'ottimizzazione degli iperparametri consente di dedicare meno tempo all'iterazione manuale degli iperparametri e più tempo all'esplorazione degli insight estratti dai dati.
Puoi specificare le opzioni di ottimizzazione degli iperparametri per i seguenti tipi di modello:
- Regressione lineare e logistica
- K-means
- Fattorizzazione matriciale
- Autoencoder
- Modelli boosted tree
- Foresta casuale
- Rete neurale profonda (DNN)
- Rete Wide & Deep
Per questi tipi di modelli, l'ottimizzazione degli iperparametri è abilitata quando specifichi un valore per l'opzione NUM_TRIALS
nell'istruzione CREATE MODEL
.
Per provare a eseguire l'ottimizzazione degli iperparametri su un modello di regressione lineare, consulta Utilizzare l'ottimizzazione degli iperparametri di BigQuery ML per migliorare le prestazioni del modello.
Anche i seguenti modelli supportano l'ottimizzazione degli iperparametri, ma non consentono di specificare valori particolari:
- I modelli AutoML Tables hanno il tuning automatico degli iperparametri incorporato nell'addestramento del modello per impostazione predefinita.
- I modelli ARIMA_PLUS
ti consentono di impostare
l'argomento
AUTO_ARIMA
per eseguire l'ottimizzazione degli iperparametri utilizzando l'algoritmo auto.ARIMA. Questo algoritmo esegue l'ottimizzazione degli iperparametri per il modulo di tendenza. L'ottimizzazione degli iperparametri non è supportata per l'intera pipeline di modellazione.
Località
Per informazioni sulle località che supportano l'ottimizzazione degli iperparametri, consulta Località BigQuery ML.
Imposta gli iperparametri
Per ottimizzare un iperparametro, devi specificare un intervallo di valori per questo
iperparametro che il modello può utilizzare per un insieme di prove. Puoi farlo
utilizzando una delle seguenti parole chiave quando imposti l'iperparametro nell'istruzione
CREATE MODEL
, anziché fornire un singolo valore:
HPARAM_RANGE
: Un valoreARRAY(FLOAT64)
di due elementi che definisce i limiti minimo e massimo dello spazio di ricerca dei valori continui per un iperparametro. Utilizza questa opzione per specificare un intervallo di valori per un iperparametro, ad esempioLEARN_RATE = HPARAM_RANGE(0.0001, 1.0)
.HPARAM_CANDIDATES
: un valoreARRAY(STRUCT)
che specifica l'insieme di valori discreti per l'iperparametro. Utilizza questa opzione per specificare un insieme di valori per un iperparametro, ad esempioOPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL'])
.
Iperparametri e obiettivi
La tabella seguente elenca gli iperparametri e gli obiettivi supportati per ogni tipo di modello che supporta l'ottimizzazione degli iperparametri:
Tipo di modello | Obiettivi degli iperparametri | Iperparametro | Intervallo valido | Intervallo predefinito | Tipo di scalabilità |
---|---|---|---|---|---|
LINEAR_REG
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predefinito)
EXPLAINED_VARIANCE
|
L1_REG
L2_REG
|
(0, ∞]
(0, ∞]
|
(0, 10]
(0, 10]
|
LOG
LOG
|
LOGISTIC_REG
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (valore predefinito)
|
L1_REG
L2_REG
|
(0, ∞]
(0, ∞]
|
(0, 10]
(0, 10]
|
LOG
LOG
|
KMEANS
|
DAVIES_BOULDIN_INDEX
|
NUM_CLUSTERS
|
[2, 100]
|
[2, 10]
|
LINEAR
|
MATRIX_ (esplicito)
|
MEAN_SQUARED_ERROR
|
NUM_FACTORS
L2_REG
|
[2, 200]
(0, ∞)
|
[2, 20]
(0, 10]
|
LINEAR
LOG
|
MATRIX_ (implicito)
|
MEAN_AVERAGE_PRECISION (predefinito)
MEAN_SQUARED_ERROR
NORMALIZED_DISCOUNTED_CUMULATIVE_GAIN
AVERAGE_RANK
|
NUM_FACTORS
L2_REG
WALS_ALPHA
|
[2, 200]
(0, ∞)
[0, ∞)
|
[2, 20]
(0, 10]
[0, 100]
|
LINEAR
LOG
LINEAR
|
AUTOENCODER
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR (predefinito)
MEAN_SQUARED_LOG_ERROR
|
LEARN_RATE
BATCH_SIZE
L1_REG
L2_REG
L1_REG_ACTIVATION
DROPOUT
HIDDEN_UNITS
OPTIMIZER
ACTIVATION_FN
|
[0, 1]
(0, ∞)
(0, ∞)
(0, ∞)
(0, ∞)
[0, 1)
Array of [1, ∞)
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[0, 1]
[16, 1024]
(0, 10]
(0, 10]
(0, 10]
[0, 0.8]
N/D { ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
N/D |
LOG
LOG
LOG
LOG
LOG
LINEAR
N/A N/A N/A |
DNN_CLASSIFIER
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (valore predefinito)
|
BATCH_SIZE
DROPOUT
HIDDEN_UNITS
LEARN_RATE
OPTIMIZER
L1_REG
L2_REG
ACTIVATION_FN
|
(0, ∞)
[0, 1)
Array di [1, ∞)
[0, 1]
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
(0, ∞)
(0, ∞)
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[16, 1024]
[0, 0.8]
N/D [0, 1]
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
(0, 10]
(0, 10]
N/D |
LOG
LINEAR
N/A LINEAR
N/A LOG
LOG
N/A |
DNN_REGRESSOR
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predefinito)
EXPLAINED_VARIANCE
|
||||
DNN_LINEAR_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (valore predefinito)
|
BATCH_SIZE
DROPOUT
HIDDEN_UNITS
L1_REG
L2_REG
ACTIVATION_FN
|
(0, ∞)
[0, 1)
Array di [1, ∞)
(0, ∞)
(0, ∞)
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[16, 1024]
[0, 0.8]
N/A (0, 10]
(0, 10]
N/A |
LOG
LINEAR
N/A LOG
LOG
N/A |
DNN_LINEAR_
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predefinito)
EXPLAINED_VARIANCE
|
||||
BOOSTED_TREE_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (valore predefinito)
|
LEARN_RATE
L1_REG
L2_REG
DROPOUT
MAX_TREE_DEPTHMAX_TREE_DEPTH
SUBSAMPLE
MIN_SPLIT_LOSS
NUM_PARALLEL_TREE
MIN_TREE_CHILD_WEIGHT
COLSAMPLE_BYTREE
COLSAMPLE_BYLEVEL
COLSAMPLE_BYNODE
BOOSTER_TYPE
DART_NORMALIZE_TYPE
TREE_METHOD
|
[0, ∞)
(0, ∞)
(0, ∞)
[0, 1]
[1, 20]
(0, 1]
[0, ∞)
[1, ∞)
[0, ∞)
[0, 1]
[0, 1]
[0, 1]
{ GBTREE , DART }
{ TREE , FOREST }
{ AUTO , EXACT , APPROX , HIST }
|
[0, 1]
(0, 10]
(0, 10]
N/A [1, 10]
(0, 1]
N/A N/A N/A N/A N/A N/A N/A N/A N/A |
LINEAR
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
N/A N/A N/A |
BOOSTED_TREE_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predefinito)
EXPLAINED_VARIANCE
|
||||
RANDOM_FOREST_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (valore predefinito)
|
L1_REG
L2_REG
MAX_TREE_DEPTH
SUBSAMPLE
MIN_SPLIT_LOSS
NUM_PARALLEL_TREE
MIN_TREE_CHILD_WEIGHT
COLSAMPLE_BYTREE
COLSAMPLE_BYLEVEL
COLSAMPLE_BYNODE
TREE_METHOD
|
(0, ∞)
(0, ∞)
[1, 20]
(0, 1)
[0, ∞)
[2, ∞)
[0, ∞)
[0, 1]
[0, 1]
[0, 1]
{ AUTO , EXACT , APPROX , HIST }
|
(0, 10]
(0, 10]
[1, 20]
(0, 1)
N/A [2, 200]
N/A N/A N/A N/A N/A |
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
N/A |
RANDOM_FOREST_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (predefinito)
EXPLAINED_VARIANCE
|
La maggior parte degli iperparametri di scala LOG
utilizza il limite inferiore aperto di 0
. Puoi
comunque impostare 0
come limite inferiore utilizzando la parola chiave HPARAM_RANGE
per
impostare l'intervallo dell'iperparametro. Ad esempio, in un modello di classificazione
boosted tree classifier, puoi impostare l'intervallo
per l'iperparametro L1_REG
come L1_REG = HPARAM_RANGE(0, 5)
. Un valore di 0
viene convertito in 1e-14
.
Sono supportati gli iperparametri condizionali. Ad esempio, in un modello di regressione
ad albero potenziato, puoi ottimizzare solo l'iperparametro
DART_NORMALIZE_TYPE
quando il valore dell'iperparametro
BOOSTER_TYPE
è DART
. In questo caso, specifichi sia gli spazi di ricerca sia le condizioni
vengono gestite automaticamente, come mostrato nell'esempio seguente:
BOOSTER_TYPE = HPARAM_CANDIDATES(['DART', 'GBTREE'])
DART_NORMALIZE_TYPE = HPARAM_CANDIDATES(['TREE', 'FOREST'])
Cerca punto di partenza
Se non specifichi uno spazio di ricerca per un iperparametro utilizzando
HPARAM_RANGE
o HPARAM_CANDIDATES
, la ricerca inizia dal valore predefinito
di quell'iperparametro, come documentato nell'argomento CREATE MODEL
per quel tipo
di modello. Ad esempio, se esegui l'ottimizzazione degli iperparametri per un
modello ad albero potenziato,
e non specifichi un valore per l'iperparametro
L1_REG
,
la ricerca inizia da 0
, il valore predefinito.
Se specifichi uno spazio di ricerca per un iperparametro utilizzando HPARAM_RANGE
o
HPARAM_CANDIDATES
, i punti di partenza della ricerca dipendono dal fatto che lo spazio di ricerca specificato
includa il valore predefinito per quell'iperparametro, come documentato
nell'argomento CREATE MODEL
per quel tipo di modello:
- Se l'intervallo specificato contiene il valore predefinito, la ricerca inizia da lì. Ad esempio, se esegui l'ottimizzazione degli iperparametri per un
modello di fattorizzazione
della matrice
implicita e specifichi il valore
[20, 30, 40, 50]
per l'iperparametroWALS_ALPHA
, la ricerca inizia da40
, il valore predefinito. - Se l'intervallo specificato non contiene il valore predefinito, la ricerca inizia
dal punto dell'intervallo specificato più vicino al valore predefinito.
Ad esempio,se specifichi il valore
[10, 20, 30]
per l'iperparametroWALS_ALPHA
, la ricerca inizia da30
, che è il valore più vicino al valore predefinito di40
.
Suddivisione dati
Quando specifichi un valore per l'opzione NUM_TRIALS
, il servizio identifica
che stai eseguendo il tuning degli iperparametri ed esegue automaticamente una suddivisione
a tre vie dei dati di input per suddividerli in set di addestramento, valutazione e test.
Per impostazione predefinita, i dati di input vengono randomizzati e poi suddivisi in 80% per l'addestramento, 10% per la valutazione e 10% per i test.
I set di addestramento e valutazione vengono utilizzati in ogni addestramento di prova, proprio come nei modelli che non utilizzano l'ottimizzazione degli iperparametri. I suggerimenti per gli iperparametri di prova vengono calcolati in base alle metriche di valutazione del modello per quel tipo di modello. Al termine di ogni addestramento di prova, il set di test viene utilizzato per testare la prova e registrare le relative metriche nel modello. Ciò garantisce l'obiettività delle metriche di valutazione dei report finali utilizzando dati che non sono ancora stati analizzati dal modello. I dati di valutazione vengono utilizzati per calcolare le metriche intermedie per il suggerimento degli iperparametri, mentre i dati di test vengono utilizzati per calcolare le metriche finali e oggettive del modello.
Se vuoi utilizzare solo un set di addestramento, specifica NO_SPLIT
per l'opzione
DATA_SPLIT_METHOD
dell'istruzione CREATE MODEL
.
Se vuoi utilizzare solo i set di addestramento e valutazione, specifica 0
per l'opzione
DATA_SPLIT_TEST_FRACTION
dell'istruzione CREATE MODEL
. Quando il test set è vuoto, il set di valutazione viene utilizzato come test set per la generazione dei report sulle metriche di valutazione finali.
Le metriche dei modelli generati da un normale job di addestramento e quelle di un job di addestramento per l'ottimizzazione degli iperparametri sono confrontabili solo quando le frazioni di suddivisione dei dati sono uguali. Ad esempio, i seguenti modelli sono comparabili:
- Ottimizzazione non iperparametrica:
DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
- Ottimizzazione degli iperparametri:
DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0
Prestazioni
Le prestazioni del modello quando si utilizza l'ottimizzazione degli iperparametri in genere non sono peggiori rispetto alle prestazioni del modello quando si utilizza lo spazio di ricerca predefinito e non si utilizza l'ottimizzazione degli iperparametri. Un modello che utilizza lo spazio di ricerca predefinito e non utilizza l'ottimizzazione degli iperparametri utilizza sempre gli iperparametri predefiniti nel primo tentativo.
Per verificare i miglioramenti delle prestazioni del modello forniti dall'ottimizzazione degli iperparametri, confronta la prova ottimale per il modello di ottimizzazione degli iperparametri con la prima prova per il modello senza ottimizzazione degli iperparametri.
Transfer learning
Il transfer learning è abilitato per impostazione predefinita quando imposti l'opzione HPARAM_TUNING_ALGORITHM
nell'istruzione CREATE MODEL
su VIZIER_DEFAULT
. L'ottimizzazione degli iperparametri per un modello trae vantaggio dall'apprendimento da modelli ottimizzati in precedenza se soddisfa i seguenti requisiti:
- Ha lo stesso tipo di modello dei modelli ottimizzati in precedenza.
- Si trova nello stesso progetto dei modelli ottimizzati in precedenza.
- Utilizza lo stesso spazio di ricerca degli iperparametri o un sottoinsieme dello spazio di ricerca degli iperparametri dei modelli ottimizzati in precedenza. Un sottoinsieme utilizza gli stessi nomi e tipi di iperparametri, ma non deve avere gli stessi intervalli.
Ad esempio,
(a:[0, 10])
è considerato un sottoinsieme di(a:[-1, 1], b:[0, 1])
.
Il transfer learning non richiede che i dati di input siano gli stessi.
Il transfer learning aiuta a risolvere il problema dell'avvio a freddo, in cui il sistema esegue l'esplorazione casuale durante il primo batch di prova. Il transfer learning fornisce al sistema alcune conoscenze iniziali sugli iperparametri e sui loro obiettivi. Per migliorare continuamente la qualità del modello, addestra sempre un nuovo modello di ottimizzazione degli iperparametri con gli stessi iperparametri o un sottoinsieme.
Il transfer learning aiuta l'ottimizzazione degli iperparametri a convergere più rapidamente, anziché aiutare i sottomodelli a convergere.
Gestione degli errori
L'ottimizzazione degli iperparametri gestisce gli errori nei seguenti modi:
Annullamento: se un job di addestramento viene annullato durante l'esecuzione, tutte le prove riuscite rimangono utilizzabili.
Input non valido: se l'input utente non è valido, il servizio restituisce un errore utente.
Iperparametri non validi: se gli iperparametri non sono validi per una prova, la prova viene ignorata e contrassegnata come
INFEASIBLE
nell'output della funzioneML.TRIAL_INFO
.Errore interno di prova: se più del 10% del valore
NUM_TRIALS
non riesce a causa diINTERNAL_ERROR
, il job di addestramento si interrompe e restituisce un errore utente.Se meno del 10% del valore
NUM_TRIALS
non va a buon fine a causa diINTERNAL_ERROR
, l'addestramento continua con i tentativi non riusciti contrassegnati comeFAILED
nell'output della funzioneML.TRIAL_INFO
.
Funzioni di pubblicazione del modello
Puoi utilizzare i modelli di output dell'ottimizzazione degli iperparametri con una serie di funzioni di servizio dei modelli esistenti. Per utilizzare queste funzioni, segui queste regole:
Quando la funzione accetta dati di input, viene restituito solo il risultato di una prova. Per impostazione predefinita, si tratta della prova ottimale, ma puoi anche scegliere una prova specifica specificando
TRIAL_ID
come argomento per la funzione indicata. Puoi ottenereTRIAL_ID
dall'output della funzioneML.TRIAL_INFO
. Sono supportate le seguenti funzioni:Quando la funzione non accetta dati di input, vengono restituiti tutti i risultati di prova e la prima colonna di output è
TRIAL_ID
. Sono supportate le seguenti funzioni:
L'output di
ML.FEATURE_INFO
non cambia, perché tutte le prove condividono gli stessi dati di input.
Le metriche di valutazione di ML.EVALUATE
e ML.TRIAL_INFO
possono essere diverse
a causa del modo in cui vengono suddivisi i dati di input. Per impostazione predefinita, ML.EVALUATE
viene eseguito sui dati di test, mentre ML.TRIAL_INFO
viene eseguito sui dati di valutazione. Per saperne di più, consulta la sezione Suddivisione dei dati.
Funzioni non supportate
La funzione ML.TRAINING_INFO
restituisce informazioni per ogni iterazione e i risultati dell'iterazione non vengono salvati
nei modelli di ottimizzazione degli iperparametri. Vengono salvati i risultati della prova. Puoi utilizzare la
funzione ML.TRIAL_INFO
per ottenere informazioni sui risultati della sperimentazione.
Esportazione del modello
Puoi esportare i modelli creati con l'ottimizzazione degli iperparametri nelle posizioni Cloud Storage utilizzando l'istruzione EXPORT MODEL
.
Puoi esportare la prova ottimale predefinita o qualsiasi prova specificata.
Prezzi
Il costo dell'addestramento per l'ottimizzazione degli iperparametri è la somma del costo di tutte le prove eseguite. Il prezzo di una prova è coerente con il modello di prezzi di BigQuery ML esistente.
Domande frequenti
Questa sezione fornisce risposte ad alcune domande frequenti sull'ottimizzazione degli iperparametri.
Di quante prove ho bisogno per ottimizzare un modello?
Ti consigliamo di utilizzare almeno 10 prove per un iperparametro, quindi il numero totale di prove deve essere almeno 10 * num_hyperparameters
. Se utilizzi lo spazio di ricerca predefinito, consulta la colonna Iperparametri nella tabella Iperparametri e obiettivi per il numero di iperparametri ottimizzati per impostazione predefinita per un determinato tipo di modello.
Cosa succede se non vedo miglioramenti delle prestazioni utilizzando l'ottimizzazione degli iperparametri?
Per ottenere un confronto equo, assicurati di seguire le indicazioni riportate in questo documento. Se continui a non notare miglioramenti del rendimento, potrebbe significare che gli iperparametri predefiniti funzionano già bene per te. Ti consigliamo di concentrarti sul feature engineering o di provare altri tipi di modelli prima di tentare un altro ciclo di ottimizzazione degli iperparametri.
Cosa succede se voglio continuare a ottimizzare un modello?
Addestra un nuovo modello di ottimizzazione degli iperparametri con lo stesso spazio di ricerca. Il transfer learning integrato consente di continuare l'ottimizzazione in base ai modelli ottimizzati in precedenza.
Devo eseguire di nuovo l'addestramento del modello con tutti i dati e gli iperparametri ottimali?
Dipende dai seguenti fattori:
I modelli K-means utilizzano già tutti i dati come dati di addestramento, quindi non è necessario riaddestrare il modello.
Per i modelli di fattorizzazione della matrice, puoi eseguire di nuovo il training del modello con gli iperparametri selezionati e tutti i dati di input per una migliore copertura di utenti e articoli.
Per tutti gli altri tipi di modelli, il riaddestramento di solito non è necessario. Il servizio conserva già l'80% dei dati di input per l'addestramento durante la suddivisione casuale predefinita dei dati. Puoi comunque eseguire di nuovo l'addestramento del modello con più dati di addestramento e gli iperparametri selezionati se il set di dati è piccolo, ma lasciare pochi dati di valutazione per l'interruzione anticipata potrebbe peggiorare l'overfitting.
Passaggi successivi
- Per provare a eseguire l'ottimizzazione degli iperparametri, consulta Utilizzare l'ottimizzazione degli iperparametri di BigQuery ML per migliorare le prestazioni del modello.
- Per saperne di più sulle istruzioni e sulle funzioni SQL supportate per i modelli ML, consulta Percorsi utente end-to-end per i modelli ML.