Panoramica dell'ottimizzazione degli iperparametri

L'ottimizzazione degli iperparametri sfrutta l'infrastruttura di elaborazione di Google Cloud per testare diverse configurazioni degli iperparametri durante l'addestramento del modello. Può fornire valori ottimizzati per gli iperparametri, che massimizzano l'accuratezza predittiva del modello.

Cos'è un iperparametro?

Gli iperparametri contengono i dati che regolano il processo di addestramento stesso.

L'applicazione di addestramento gestisce tre categorie di dati durante l'addestramento del modello:

  • I dati di input (detti anche dati di addestramento) sono una raccolta di singoli record (istanze) contenenti le funzionalità importanti per il problema di machine learning. Questi dati vengono utilizzati durante l'addestramento per configurare il modello e fare previsioni con precisione su nuove istanze di dati simili. Tuttavia, i valori nei dati di input non diventano mai direttamente parte del modello.

  • I parametri del modello sono le variabili utilizzate dalla tecnica di machine learning scelta per adattarsi ai tuoi dati. Ad esempio, una rete neurale profonda (DNN) è composta da nodi di elaborazione (neuroni), ciascuno con un'operazione eseguita sui dati mentre questi attraversano la rete. Quando il DNN viene addestrato, ogni nodo ha un valore di ponderazione che indica al modello l'impatto che ha sulla previsione finale. Queste ponderazioni sono un esempio dei parametri del modello. Per molti versi, i parametri del modello sono il modello, ossia ciò che distingue il modello specifico da altri modelli dello stesso tipo che utilizzano dati simili.

  • Gli iperparametri sono le variabili che regolano il processo di addestramento. Ad esempio, parte della progettazione di un DNN sta nel decidere quanti livelli nascosti di nodi utilizzare tra i livelli di input e di output e quanti nodi dovrebbe utilizzare ogni livello nascosto. Queste variabili non sono direttamente correlate ai dati di addestramento. Sono variabili di configurazione. Tieni presente che i parametri cambiano durante un job di addestramento, mentre gli iperparametri sono in genere costanti durante un job.

I parametri del modello sono ottimizzati (potresti dire "ottimizzati") in base al processo di addestramento: esegui i dati attraverso le operazioni del modello, confronti la previsione risultante con il valore effettivo di ogni istanza dati, valuti la precisione e apporti modifiche finché non trovi i valori migliori. Gli iperparametri sono ottimizzati eseguendo l'intero job di addestramento, esaminando l'accuratezza aggregata e effettuando aggiustamenti. In entrambi i casi, modifichi la composizione del modello per trovare la combinazione migliore per gestire il problema.

Senza una tecnologia automatizzata come l'ottimizzazione degli iperparametri di Vertex AI, devi apportare modifiche manuali agli iperparametri nel corso di molte esecuzioni di addestramento per arrivare ai valori ottimali. L'ottimizzazione degli iperparametri semplifica e rende meno noioso il processo di determinazione delle impostazioni degli iperparametri migliori.

Come funziona l'ottimizzazione degli iperparametri

L'ottimizzazione degli iperparametri funziona eseguendo più prove della tua applicazione di addestramento con valori per gli iperparametri scelti, impostati entro i limiti da te specificati. Vertex AI tiene traccia dei risultati di ogni prova e apporta aggiustamenti per le prove successive. Al termine del job, puoi ottenere un riepilogo di tutte le prove insieme alla configurazione più efficace dei valori in base ai criteri specificati.

L'ottimizzazione degli iperparametri richiede una comunicazione esplicita tra Vertex AI e la tua applicazione di addestramento. L'applicazione di addestramento definisce tutte le informazioni necessarie per il modello. Sei tu a definire gli iperparametri (variabili) da regolare e a scegliere come target le variabili utilizzate per valutare ogni prova.

Scopri di più sull'ottimizzazione bayesiana per l'ottimizzazione degli iperparametri.

Oltre all'ottimizzazione bayesiana, Vertex AI ottimizza i job di ottimizzazione degli iperparametri. Se esegui l'ottimizzazione degli iperparametri in base a modelli simili, modificando solo la funzione obiettivo o aggiungendo una nuova colonna di input, Vertex AI è in grado di migliorare nel tempo e rendere più efficiente l'ottimizzazione degli iperparametri.

Cosa ottimizza l'ottimizzazione degli iperparametri

L'ottimizzazione degli iperparametri ottimizza le variabili di destinazione specificate da te, chiamate metriche iperparametri. L'accuratezza del modello, calcolata da un superamento della valutazione, è una metrica comune. Le metriche devono essere numeriche.

Quando configuri un job di ottimizzazione degli iperparametri, devi definire il nome e l'obiettivo di ogni metrica. L'obiettivo specifica se vuoi ottimizzare il modello per massimizzare o ridurre al minimo il valore di questa metrica.

In che modo Vertex AI ottiene le tue metriche

Utilizza il pacchetto Python cloudml-hypertune per passare le metriche a Vertex AI. che fornisce funzioni helper per segnalare le metriche a Vertex AI.

Scopri di più sui report sulle metriche degli iperparametri.

Il flusso dei valori degli iperparametri

Senza la regolazione degli iperparametri, puoi impostare gli iperparametri in base al significato che preferisci nell'applicazione di addestramento. Ad esempio, puoi configurare gli iperparametri passando gli argomenti della riga di comando al modulo dell'applicazione principale o inviarli all'applicazione in un file di configurazione.

Quando utilizzi l'ottimizzazione degli iperparametri, utilizza la seguente procedura per impostare i valori degli iperparametri che utilizzi per l'ottimizzazione:

  • Definisci un argomento della riga di comando nel modulo di formazione principale per ogni iperparametro ottimizzato.

  • Utilizza il valore trasmesso in questi argomenti per impostare l'iperparametro corrispondente nel codice dell'applicazione.

Quando configuri un job di ottimizzazione degli iperparametri, definisci ogni iperparametro da ottimizzare, il tipo di dati e l'intervallo di valori da provare. Puoi identificare ogni iperparametro utilizzando lo stesso nome dell'argomento corrispondente che hai definito nel modulo principale. Il servizio di addestramento include argomenti della riga di comando che utilizzano questi nomi quando esegue l'applicazione.

Scopri di più sui requisiti per l'analisi degli argomenti della riga di comando.

Seleziona gli iperparametri da ottimizzare

Non c'è un consiglio universale da dare su come scegliere gli iperparametri da ottimizzare. Se hai esperienza con la tecnica di machine learning che utilizzi, potresti avere informazioni approfondite sul comportamento dei suoi iperparametri. Potresti anche ricevere consigli dalle community di machine learning.

Qualunque sia la scelta, è importante comprenderne le implicazioni. Ogni iperparametro che scegli di ottimizzare può potenzialmente aumentare il numero di prove richieste per un job di ottimizzazione riuscito. Quando esegui un job di ottimizzazione degli iperparametri su Vertex AI, l'importo addebitato si basa sulla durata delle prove avviate dal job di ottimizzazione degli iperparametri. Un'attenta scelta degli iperparametri da ottimizzare può ridurre i tempi e i costi del job di ottimizzazione degli iperparametri.

Tipi di dati degli iperparametri

In un oggetto ParameterSpec, specifichi il tipo di dati iperparametro come istanza della specifica del valore parametro. La seguente tabella elenca le specifiche valore parametro supportate.

Tipo Tipo di dati Intervalli di valori Dati valore
DoubleValueSpec DOUBLE minValue e maxValue Valori con virgola mobile
IntegerValueSpec INTEGER minValue e maxValue Valori interi
CategoricalValueSpec CATEGORICAL categoricalValues Elenco di stringhe di categorie
DiscreteValueSpec DISCRETE discreteValues Elenco di valori in ordine crescente

Iperparametri di scalabilità

In un oggetto ParameterSpec, puoi specificare che deve essere eseguita la scalabilità su questo iperparametro. La scalabilità è consigliata per i tipi di dati DOUBLE e INTEGER. I tipi di scalabilità disponibili sono:

  • SCALE_TYPE_UNSPECIFIED: all'iperparametro non viene applicato alcun ridimensionamento.
  • UNIT_LINEAR_SCALE: riduce in modo lineare lo spazio accettabile da 0 a 1.
  • UNIT_LOG_SCALE: ridimensiona lo spazio logaritmico da 0 a 1. L'intero spazio ammissibile deve essere rigorosamente positivo.
  • UNIT_REVERSE_LOG_SCALE: scala lo spazio fattibile "invertire" logaritmicamente da 0 a 1. Il risultato è che i valori vicini alla parte superiore dello spazio consentito sono distribuiti più di punti nella parte inferiore. L'intero spazio fattibile deve essere rigorosamente positivo.

Iperparametri condizionali

L'oggetto ConditionalParameterSpec consente di aggiungere iperparametri a una prova quando il valore del relativo iperparametro padre corrisponde a una condizione da te specificata.

Ad esempio, puoi definire un job di ottimizzazione degli iperparametri con l'obiettivo di trovare un modello ottimale utilizzando la regressione lineare o una rete neurale profonda (DNN). Per consentire al job di ottimizzazione di specificare il metodo di addestramento, definisci un iperparametro categorico denominato training_method con le seguenti opzioni: LINEAR_REGRESSION e DNN. Quando training_method è LINEAR_REGRESSION, il job di ottimizzazione deve specificare un iperparametro per il tasso di apprendimento. Quando training_method è DNN, il job di ottimizzazione deve specificare i parametri per il tasso di apprendimento e il numero di livelli nascosti.

Poiché il numero di livelli nascosti è applicabile solo quando il valore training_method di una prova è DNN, devi definire un parametro condizionale che aggiunge un iperparametro denominato num_hidden_layers quando training_method è DNN.

Poiché il tasso di apprendimento viene utilizzato da entrambe le opzioni training_method, devi decidere se questo iperparametro condizionale deve essere condiviso. Se l'iperparametro è condiviso, il job di ottimizzazione utilizza ciò che ha appreso dalle prove LINEAR_REGRESSION e DNN per ottimizzare il tasso di apprendimento. In questo caso, ha più senso avere tassi di apprendimento separati per ogni training_method, poiché il tasso di apprendimento per l'addestramento di un modello utilizzando LINEAR_REGRESSION non dovrebbe influire sul tasso di apprendimento per l'addestramento di un modello utilizzando DNN. Quindi definisci i seguenti iperparametri condizionali:

  • Un iperparametro denominato learning_rate che viene aggiunto quando training_method è LINEAR_REGRESSION.
  • Un iperparametro denominato learning_rate che viene aggiunto quando training_method è DNN.

Gli iperparametri condizionali consentono di definire gli iperparametri per il job di ottimizzazione come grafico. Questo consente di ottimizzare il processo di addestramento utilizzando tecniche di addestramento diverse, ognuna con le proprie dipendenze iperparametri.

Algoritmi di ricerca

Puoi specificare un algoritmo di ricerca nell'oggetto StudySpec. Se non specifichi un algoritmo, il job utilizza l'algoritmo predefinito di Vertex AI. L'algoritmo predefinito applica l'ottimizzazione bayesiana per arrivare alla soluzione ottimale con una ricerca più efficace nello spazio dei parametri.

I valori disponibili sono:

  • ALGORITHM_UNSPECIFIED: equivale a non specificare un algoritmo. Vertex AI sceglie il miglior algoritmo di ricerca tra i bandit di processo gaussiano, la ricerca a combinazione lineare o le loro varianti.

  • GRID_SEARCH: una semplice ricerca nella griglia all'interno dello spazio possibile. Questa opzione è particolarmente utile se vuoi specificare una quantità di prove maggiore del numero di punti nello spazio fattibile. In questi casi, se non specifichi una ricerca a griglia, l'algoritmo predefinito di Vertex AI potrebbe generare suggerimenti duplicati. Per utilizzare la ricerca a griglia, tutti i parametri devono essere di tipo INTEGER, CATEGORICAL o DISCRETE.

  • RANDOM_SEARCH: una semplice ricerca casuale all'interno dello spazio fattibile.

Passaggi successivi