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 di 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 modelli:

Per questi tipi di modelli, l'ottimizzazione degli iperparametri viene attivata 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.

I seguenti modelli supportano anche l'ottimizzazione degli iperparametri, ma non consentono di specificare valori specifici:

  • 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 il tuning 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 creazione del modello.

Per informazioni sugli statement e sulle funzioni SQL supportati per ogni tipo di modello, consulta Percorso utente end-to-end per ogni modello.

Località

Per informazioni sulle località che supportano l'ottimizzazione degli iperparametri, consulta Località di BigQuery ML.

Imposta gli iperparametri

Per ottimizzare un iperparametro, devi specificare un intervallo di valori che il modello può utilizzare per un insieme di prove. A tal fine, puoi utilizzare una delle seguenti parole chiave quando imposti l'iperparametro nell'istruzione CREATE MODEL, anziché fornire un singolo valore:

  • HPARAM_RANGE: un valore ARRAY(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 esempio LEARN_RATE = HPARAM_RANGE(0.0001, 1.0).

  • HPARAM_CANDIDATES: un valore ARRAY(STRUCT) che specifica l'insieme di valori discreti per l'iperparametro. Utilizza questa opzione per specificare un insieme di valori per un iperparametro, ad esempio OPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL']).

Iperparametri e obiettivi

La tabella seguente elenca gli iperparametri e gli obiettivi supportati per ciascun tipo di modello che supporta l'ottimizzazione degli iperparametri:

Tipo di modello Obiettivi degli iperparametri Iperparametro Intervallo valido Intervallo predefinito Tipo di scala
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_
FACTORIZATION
(esplicito)
MEAN_SQUARED_ERROR NUM_FACTORS

L2_REG
[2, 200]

(0, ∞)
[2, 20]

(0, 10]
LINEAR

LOG
MATRIX_
FACTORIZATION
(implicita)
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 di [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_
COMBINED_
CLASSIFIER
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_
COMBINED_
REGRESSOR
MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predefinito)

EXPLAINED_VARIANCE
BOOSTED_TREE_
CLASSIFIER
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


LINEAR

LOG

LOG

LINEAR

LINEAR



LINEAR

LINEAR

LINEAR


LINEAR


LINEAR


LINEAR


LINEAR


N/A

N/A

N/A
BOOSTED_TREE_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (predefinito)

EXPLAINED_VARIANCE
RANDOM_FOREST_
CLASSIFIER
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_
REGRESSOR






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 ancora impostare 0 come limite inferiore utilizzando la parola chiave HPARAM_RANGE per impostare l'intervallo di iperparametri. Ad esempio, in un modello di classificazione degli alberi con boosting, puoi impostare l'intervallo per l'iperparametro L1_REG su L1_REG = HPARAM_RANGE(0, 5). Un valore di 0 viene convertito in 1e-14.

Gli iperparametri condizionali sono supportati. Ad esempio, in un modello di regressione con albero migliorato, puoi ottimizzare l'iperparametro DART_NORMALIZE_TYPE solo quando il valore dell'iperparametro BOOSTER_TYPE è DART. In questo caso, specifichi sia gli spazi di ricerca sia le condizioni, che vengono gestite automaticamente, come mostrato nell'esempio seguente:

BOOSTER_TYPE = HPARAM_CANDIDATES(['DART', 'GBTREE'])
DART_NORMALIZE_TYPE = HPARAM_CANDIDATES(['TREE', 'FOREST'])

Punto di partenza della ricerca

Se non specifichi uno spazio di ricerca per un iperparametro utilizzando HPARAM_RANGE o HPARAM_CANDIDATES, la ricerca inizia dal valore predefinito dell'iperparametro, come descritto nell'argomento CREATE MODEL per quel tipo di modello. Ad esempio, se esegui l'ottimizzazione degli iperparametri per un modello ad albero con boosting, 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 descritto 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 implicito e specifichi il valore [20, 30, 40, 50] per l'iperparametro WALS_ALPHA, la ricerca inizia da 40, 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'iperparametro WALS_ALPHA, la ricerca inizia da 30, che è il valore più vicino al valore predefinito di 40.

Suddivisione dati

Quando specifichi un valore per l'opzione NUM_TRIALS, il servizio identifica il fatto che stai eseguendo il tuning degli iperparametri ed esegue automaticamente una suddivisione a tre vie dei dati di input per dividerli in set di addestramento, valutazione e test. Per impostazione predefinita, i dati di input vengono randomizzati e poi suddivisi per l'80% per l'addestramento, il 10% per la valutazione e il 10% per i test.

Gli insiemi di addestramento e valutazione vengono utilizzati in ogni addestramento di prova, come avviene 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. In questo modo viene garantita l'oggettività delle metriche di valutazione dei report finali utilizzando i dati che non sono stati ancora analizzati dal modello. I dati di valutazione vengono utilizzati per calcolare le metriche intermedie per il suggerimento di iperparametri, mentre i dati di test vengono utilizzati per calcolare le metriche oggettive finali 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 set di addestramento e valutazione, specifica 0 per l'opzione DATA_SPLIT_TEST_FRACTION dell'istruzione CREATE MODEL. Quando il set di test è vuoto, il set di valutazione viene utilizzato come set di test per i report sulle metriche di valutazione finale.

Le metriche dei modelli generate da un normale job di addestramento e quelle generate da un job di addestramento con ottimizzazione degli iperparametri sono paragonabili solo quando le frazioni di suddivisione dei dati sono uguali. Ad esempio, i seguenti modelli sono paragonabili:

  • Ottimizzazione non degli iperparametri: 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

In genere, le prestazioni del modello quando si utilizza l'ottimizzazione degli iperparametri 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 nella prima prova.

Per confermare i miglioramenti delle prestazioni del modello forniti dall'ottimizzazione degli iperparametri, confronta la prova ottimale per il modello con ottimizzazione degli iperparametri con la prima prova per il modello senza ottimizzazione degli iperparametri.

Transfer learning

L'apprendimento tramite trasferimento è abilitato per impostazione predefinita quando imposti l'opzione HPARAM_TUNING_ALGORITHM nel statement 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.
  • Risiede nello stesso progetto dei modelli ottimizzati in precedenza.
  • Utilizza lo stesso spazio di ricerca degli iperparametri OPPURE 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]).

L'apprendimento tramite trasferimento non richiede che i dati di input siano gli stessi.

L'apprendimento tramite trasferimento aiuta a risolvere il problema dell'avvio a freddo, in cui il sistema esegue un'esplorazione random durante il primo lotto di prova. Il transfer learning fornisce al sistema alcune conoscenze iniziali sugli iperparametri e sui relativi scopi. Per migliorare continuamente la qualità del modello, addestra sempre un nuovo modello di ottimizzazione degli iperparametri con gli stessi iperparametri o con un sottoinsieme.

Il trasferimento dell'apprendimento consente all'ottimizzazione degli iperparametri di convergere più rapidamente, anziché contribuire alla convergenza dei sottomodelli.

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 andate a buon fine rimangono utilizzabili.

  • Input non valido: se l'input utente dell'utente non è valido, il servizio restituisce un errore utente.

  • Iperparametri non validi: se gli iperparametri non sono validi per una prova, la prova viene saltata e contrassegnata come INFEASIBLE nell'output della funzione ML.TRIAL_INFO.

  • Errore interno della prova: se più del 10% del valore NUM_TRIALS non va a buon fine a causa di INTERNAL_ERROR, il job di addestramento si arresta e restituisce un errore utente.

  • Se meno del 10% del valore NUM_TRIALS non va a buon fine a causa di INTERNAL_ERROR, l'addestramento continua con i tentativi non riusciti contrassegnati come FAILED nell'output della funzione ML.TRIAL_INFO.

Funzioni di pubblicazione del modello

Puoi utilizzare i modelli di output dell'ottimizzazione degli iperparametri con una serie di funzioni di pubblicazione dei modelli esistenti. Per utilizzare queste funzioni, segui queste regole:

  • Quando la funzione riceve i dati di input, viene restituito solo il risultato di un esperimento. Per impostazione predefinita, questa è la prova ottimale, ma puoi anche scegliere una prova specifica specificando TRIAL_ID come argomento per la funzione indicata. Puoi ottenere TRIAL_ID dall'output della funzione ML.TRIAL_INFO. Sono supportate le seguenti funzioni:

  • Quando la funzione non accetta dati di input, vengono restituiti tutti i risultati della prova e la prima colonna di output è TRIAL_ID. Sono supportate le seguenti funzioni:

L'output di ML.FEATURE_INFO non cambia, perché tutti i trial 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 i dati di input vengono suddivisi. Per impostazione predefinita, ML.EVALUATE viene eseguito con i dati di test, mentre ML.TRIAL_INFO viene eseguito con i dati di valutazione. Per ulteriori informazioni, 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. I risultati della prova vengono salvati. Puoi utilizzare la funzione ML.TRIAL_INFO per ottenere informazioni sui risultati della prova.

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. I prezzi di una prova sono in linea con l'attuale modello di prezzi di BigQuery ML.

Domande frequenti

Questa sezione fornisce risposte ad alcune domande frequenti sulla ottimizzazione degli iperparametri.

Quante prove sono necessarie per ottimizzare un modello?

Ti consigliamo di utilizzare almeno 10 prove per un iperparametro, quindi il numero totale di prove deve essere almeno10 * num_hyperparameters. Se utilizzi lo spazio di ricerca predefinito, fai riferimento alla colonna Iperparametri nella tabella Iperparametri e scopi per il numero di iperparametri ottimizzati per impostazione predefinita per un determinato tipo di modello.

Che cosa succede se non vedo miglioramenti delle prestazioni utilizzando l'ottimizzazione degli iperparametri?

Assicurati di seguire le indicazioni riportate in questo documento per ottenere un confronto equo. Se non noti ancora miglioramenti del rendimento, è possibile che gli iperparametri predefiniti funzionino già bene per te. Ti consigliamo di concentrarti sulla progettazione di funzionalità o di provare altri tipi di modelli prima di provare 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 addestrare nuovamente il 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 addestrare nuovamente il modello.

  • Per i modelli di fattorizzazione della matrice, puoi addestrare nuovamente il 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, in genere non è necessario il ricoinvolgimento. Il servizio conserva già l'80% dei dati di input per l'addestramento durante la suddivisione dei dati casuale predefinita. Se il set di dati è piccolo, puoi comunque addestrare nuovamente il modello con più dati di addestramento e gli iperparametri selezionati, 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.