Panoramica dell'ottimizzazione degli iperparametri

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

L'ottimizzazione degli iperparametri usa l'infrastruttura di elaborazione di Google Cloud per testare diverse configurazioni per l'addestramento del modello. Può fornire valori ottimizzati per gli iperparametri, massimizzando 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 tuoi dati di input (chiamati anche dati di addestramento) sono una raccolta di singoli record (istanze) contenenti le funzionalità importanti per il tuo problema di machine learning. Questi dati vengono utilizzati durante l'addestramento per configurare il modello in modo da fare previsioni accurate sulle nuove istanze di dati simili. Tuttavia, i valori nei dati di input non vengono mai inseriti direttamente nel modello.

  • I parametri del modello sono le variabili utilizzate dalla tecnica del machine learning scelta per adattare i dati. Ad esempio, una rete neurale profonda (DNN) è composta da nodi di elaborazione (neuroni), ciascuno con un'operazione eseguita sui dati mentre viaggia attraverso la rete. Quando il DNN viene addestrato, ogni nodo ha un valore di peso che indica al modello l'impatto che ha sulla previsione finale. Le ponderazioni sono un esempio dei parametri del modello. Sotto molti aspetti, i parametri del modello sono il modello che distingue il modello specifico dagli altri modelli dello stesso tipo che utilizzano dati simili.

  • Gli iperparametri sono le variabili che regolano il processo di addestramento stesso. Ad esempio, una parte della progettazione di un DNN sta determinando quanti livelli nascosti di nodi utilizzare tra i livelli di input e di output e quanti nodi ogni livello nascosto dovrebbe utilizzare. 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 di solito sono costanti durante un job.

I parametri del tuo modello sono ottimizzati (potresti dire "tuned") dal processo di addestramento: esegui i dati attraverso le operazioni del modello, confronti la previsione risultante con il valore effettivo per ogni istanza di dati, valuta l'accuratezza e apporta modifiche fino a trovare i valori migliori. Gli iperparametri vengono ottimizzati eseguendo il tuo intero job di addestramento, esaminando l'accuratezza aggregata e regolando. In entrambi i casi, stai modificando la composizione del modello per trovare la combinazione migliore per gestire il tuo problema.

Senza una tecnologia automatizzata come l'ottimizzazione degli iperparametri di Vertex AI, dovrai apportare regolazioni manuali agli iperparametri nel corso di molte esecuzioni di addestramento per ottenere i valori ottimali. L'ottimizzazione degli iperparametri rende il processo di determinazione delle migliori impostazioni per gli iperparametri più facili e meno noiose.

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 specificati. Vertex AI tiene traccia dei risultati di ogni prova e apporta modifiche per le prove successive. Al termine del job, potrai ottenere un riepilogo di tutte le prove insieme alla configurazione dei valori più efficace 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 al modello. Puoi definire gli iperparametri (variabili) da modificare e 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 stai eseguendo un'ottimizzazione degli iperparametri rispetto a modelli simili, modificando solo la funzione dell'obiettivo o aggiungendo una nuova colonna di input, Vertex AI è in grado di migliorare nel tempo e rendere più efficiente l'ottimizzazione degli iperparametri.

Ottimizzazione degli iperparametri ottimizzata

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

Quando configuri un job di ottimizzazione degli iperparametri, definisci 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 acquisisce le metriche

Utilizza il pacchetto Python cloudml-hypertune per passare le metriche a Vertex AI. Questa libreria fornisce funzioni di supporto per la creazione di report sulle metriche per Vertex AI.

Scopri di più sulla generazione di report sulle metriche degli iperparametri.

Il flusso dei valori degli iperparametri

Senza l'ottimizzazione degli iperparametri, puoi impostare gli iperparametri in base alle tue preferenze nell'applicazione di addestramento. Ad esempio, puoi configurare gli iperparametri passando gli argomenti della riga di comando al modulo della tua applicazione principale o inserirli nella tua applicazione in un file di configurazione.

Quando utilizzi l'ottimizzazione degli iperparametri, devi utilizzare la procedura seguente per impostare i valori degli iperparametri utilizzati per l'ottimizzazione:

  • Definisci un argomento della riga di comando nel modulo di addestramento principale per ogni iperparametro sintonizzato.

  • Utilizza il valore passato in questi argomenti per impostare l'iperparametro corrispondente nel codice della tua applicazione.

Quando configuri un job di ottimizzazione degli iperparametri, definisci ogni iperparametro per ottimizzarlo, il relativo tipo di dati e l'intervallo di valori da provare. Puoi identificare ogni iperparametro utilizzando lo stesso nome dell'argomento corrispondente 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 analizzare gli argomenti della riga di comando.

Seleziona iperparametri da regolare

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

A prescindere dalla tua scelta, è importante comprendere le implicazioni. Ogni iperparametro che scegli di regolare ha il potenziale di aumentare il numero di prove necessarie per un job di ottimizzazione riuscito. Quando esegui un job di ottimizzazione degli iperparametri su Vertex AI, l'importo che ti viene addebitato si basa sulla durata delle prove avviate dal job di ottimizzazione degli iperparametri. Un'accurata scelta degli iperparametri da regolare può ridurre i tempi e i costi del job di ottimizzazione degli iperparametri.

Tipi di dati iperparametri

In un oggetto ParameterSpec, specifichi il tipo di dati iperparametro come istanza di una specifica del valore parametro. La seguente tabella elenca le specifiche dei valori dei parametri supportati.

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

Scalabilità degli iperparametri

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

  • SCALE_TYPE_UNSPECIFIED: a questo iperparametro non viene applicata la scalabilità.
  • UNIT_LINEAR_SCALE: ridimensiona lo spazio fattibile in modo lineare da 0 a 1.
  • UNIT_LOG_SCALE: ridimensiona lo spazio fattibile in modo logaritmico da 0 a 1. L'intero spazio fattibile deve essere strettamente positivo.
  • UNIT_REVERSE_LOG_SCALE: ridimensiona lo spazio fattibile "inverti" in modo logaritmico da 0 a 1. Il risultato è che i valori vicino alla parte superiore dello spazio fattibile sono più numerosi dei punti nella parte inferiore. L'intero spazio fattibile deve essere strettamente positivo.

Iperparametri condizionali

L'oggetto ConditionalParameterSpec ti consente di aggiungere iperparametri a una prova quando il valore dell'iperparametro principale 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 di categoria denominato training_method con le seguenti opzioni: LINEAR_REGRESSION e DNN. Quando training_method è LINEAR_REGRESSION, il tuo job di ottimizzazione deve specificare un iperparametro per la frequenza di apprendimento. Quando training_method è impostato su DNN, il tuo job di ottimizzazione deve specificare parametri per la percentuale di apprendimento e il numero di livelli nascosti.

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

Poiché la percentuale di apprendimento viene utilizzata 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, è più logico avere tariffe di apprendimento separate per ogni training_method, poiché la tariffa di apprendimento per l'addestramento di un modello che utilizza LINEAR_REGRESSION non dovrebbe influire sulla tariffa di apprendimento per l'addestramento di un modello che utilizza 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 ti consentono di definire gli iperparametri per il job di ottimizzazione come grafico. Ciò consente di ottimizzare il processo di addestramento utilizzando diverse tecniche, ciascuna con le proprie dipendenze gli iperparametri.

Algoritmi di ricerca

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

I valori disponibili sono:

  • ALGORITHM_UNSPECIFIED: equivale a non specificare un algoritmo. Vertex AI sceglie il miglior algoritmo di ricerca tra i banditi di processo gaussiani, la ricerca di combinazioni lineari o le loro varianti.

  • GRID_SEARCH: una semplice ricerca a griglia all'interno dello spazio fattibile. Questa opzione è particolarmente utile se vuoi specificare una quantità di prove superiore al numero di punti nello spazio fattibile. In questi casi, se non specifichi una ricerca nella griglia, l'algoritmo predefinito di Vertex AI potrebbe generare suggerimenti duplicati. Per utilizzare la ricerca 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