Guida all'avvio di un nuovo progetto

Questa sezione spiega come scegliere le seguenti opzioni all'inizio di un progetto ML:

  • l'architettura del modello
  • l'ottimizzatore
  • le dimensioni del batch
  • la configurazione iniziale

Ipotesi

I consigli in questa sezione presuppongono quanto segue:

  • Hai già formulato il problema e preparato i dati di addestramento in una certa misura.
  • Hai già configurato una pipeline di addestramento e test.
  • Hai già selezionato e implementato metriche che siano il più possibile rappresentative di ciò che prevedi di misurare nell'ambiente di cui hai eseguito il deployment.

Supponendo che tu abbia soddisfatto tutti i prerequisiti precedenti, ora puoi dedicare del tempo all'architettura del modello e alla configurazione dell'addestramento.

Scegli l'architettura del modello

Iniziamo con le seguenti definizioni:

  • Un'architettura del modello è un sistema per generare previsioni. Un'architettura del modello contiene il framework per la conversione dei dati di input in previsioni, ma non contiene valori di parameter. Ad esempio, una rete neurale con tre livelli nascosti, rispettivamente, di 10, 5 e 3 nodi, è un'architettura modello.
  • Un model è un'architettura del modello con valori specifici per tutti i parametri. Ad esempio, un modello è costituito dalla rete neurale descritta nella definizione dell'architettura del modello e da valori specifici per ponderazioni e bias di ciascun nodo.
  • Una famiglia di modelli è un modello per creare un'architettura di modelli in base a un set di iperparametri.

Scegliere l'architettura del modello significa in realtà scegliere un insieme di modelli diversi (uno per ogni impostazione degli iperparametri del modello).

Se possibile, cerca di trovare un codebase documentato che risolva il più possibile il problema. Quindi, riproduci il modello come punto di partenza.

Scegli l'ottimizzatore

Nessun ottimizzatore è il "migliore" per tutti i tipi di problemi di machine learning e di architetture dei modelli. Anche solo confrontare le prestazioni degli ottimizzatori è difficile. 🤖Consigliamo di usare ottimizzatori consolidati e popolari, soprattutto quando avvii un nuovo progetto.

Ti consigliamo di scegliere l'ottimizzatore più usato per il tipo di problema su cui stai lavorando. Consigliamo i seguenti ottimizzatori consolidati:

Presta attenzione a tutti gli argomenti dell'ottimizzatore scelto. Gli ottimizzatori con più iperparametri richiedono in genere uno sforzo di ottimizzazione maggiore. Questo aspetto è particolarmente spiacevole nelle fasi iniziali di un progetto quando cerchi di trovare i valori migliori di vari altri iperparametri (ad esempio, tasso di apprendimento), mentre consideri gli argomenti dell'ottimizzatore come seccature. Pertanto, consigliamo il seguente approccio:

  1. All'inizio del progetto, scegli un ottimizzatore senza molti iperparametri ottimizzabili. Ecco due esempi:
    • SGD con quantità di moto fissa.
    • Adam con Epsilon, Beta1 e Beta2 corretti.
  2. Nelle fasi successive del progetto, passa a un ottimizzatore più generale che ottimizza più iperparametri anziché correggerli sui valori predefiniti.

Scegli le dimensioni del batch

Riepilogo: le dimensioni del batch regolano la velocità di addestramento; non utilizzare le dimensioni del batch per ottimizzare direttamente le prestazioni del set di convalida.

La dimensione del batch determina in modo significativo il tempo di addestramento e il consumo di risorse di calcolo. L'aumento delle dimensioni del batch spesso riduce il tempo di addestramento, che:

  • Consente di ottimizzare gli iperparametri in modo più approfondito in un intervallo di tempo fisso, producendo potenzialmente un modello finale migliore.
  • Riduce la latenza del ciclo di sviluppo, consentendo di testare più spesso nuove idee.

L'aumento delle dimensioni del batch può diminuire o aumentare il consumo di risorse o lasciare invariato il consumo.

Non trattare le dimensioni del batch come un iperparametro sintonizzabile per le prestazioni del set di convalida. Se vengono soddisfatte tutte le seguenti condizioni, le prestazioni del modello non devono dipendere dalle dimensioni del batch:

  • Tutti gli iperparametri di ottimizzazione sono ottimizzati.
  • La regolarizzazione è sufficiente e ben perfezionata.
  • Il numero di passaggi di addestramento è sufficiente.

Le stesse prestazioni finali dovrebbero essere raggiungibili utilizzando qualsiasi dimensione del batch (vedi Shallue et al. 2018 e Perché le dimensioni del batch non devono essere ottimizzate per migliorare direttamente le prestazioni del set di convalida?.

Determina le dimensioni dei batch idonee e stima la velocità effettiva di addestramento

Per un determinato modello e ottimizzatore, l'hardware disponibile in genere supporta una serie di dimensioni batch. Il fattore limitante è di solito la memoria dell'acceleratore. Sfortunatamente, può essere difficile calcolare le dimensioni dei batch che verranno inserite in memoria senza eseguire o almeno compilare il programma di addestramento completo. La soluzione più semplice è in genere eseguire job di addestramento in batch di dimensioni diverse (ad esempio aumentando il numero di potenze di 2) per un numero ridotto di passaggi finché uno dei job non supera la memoria disponibile. Per ogni dimensione del batch, addestra abbastanza a lungo da ottenere una stima affidabile della velocità di addestramento:

velocità effettiva di addestramento = il numero di esempi elaborati al secondo

o, equivalentemente, dal tempo per passaggio:

tempo per passaggio = dimensione batch / velocità effettiva di addestramento

Quando gli acceleratori non sono ancora saturi, se la dimensione del batch raddoppia, anche la velocità effettiva di addestramento dovrebbe raddoppiare (o almeno quasi). In modo equivalente, il tempo per passaggio dovrebbe essere costante (o almeno quasi costante) man mano che le dimensioni del batch aumentano. In caso contrario, la pipeline di addestramento ha un collo di bottiglia, come l'I/O o la sincronizzazione tra nodi di computing. Valutate la possibilità di diagnosticare e correggere il collo di bottiglia prima di procedere.

Se la velocità effettiva di addestramento aumenta solo fino a una certa dimensione massima del batch, considera solo dimensioni del batch fino alla dimensione massima del batch, anche se l'hardware supporta una dimensione batch più grande. Tutti i vantaggi derivanti dall'utilizzo di un batch di dimensioni maggiori presuppongono un aumento della velocità effettiva di addestramento. In caso contrario, risolvi il collo di bottiglia o utilizza un batch di dimensioni inferiori.

L'accumulo di gradienti simula una dimensione batch più grande di quella supportata dall'hardware e pertanto non offre alcun vantaggio in termini di velocità effettiva. Generalmente dovresti evitare l'accumulo di gradienti nel lavoro applicato.

Potrebbe essere necessario ripetere questi passaggi ogni volta che si modifica il modello o l'ottimizzatore. Ad esempio, una diversa architettura del modello potrebbe consentire di inserire un batch di dimensioni maggiori in memoria.

Scegli le dimensioni del batch per ridurre al minimo il tempo di addestramento

Ecco la nostra definizione di tempo di addestramento:

  • tempo di addestramento = (tempo per passo) x (numero totale di passaggi)

Spesso puoi considerare il tempo per passaggio pressoché costante per tutte le dimensioni dei batch idonei. Ciò si verifica quando:

  • Non è previsto alcun overhead per i calcoli paralleli.
  • Tutti i colli di bottiglia nell'addestramento sono stati diagnosticati e corretti. Consulta la sezione precedente per informazioni su come identificare i colli di bottiglia nell'addestramento. In pratica, l'aumento delle dimensioni del batch comporta almeno un overhead.

Con l'aumento delle dimensioni del batch, in genere il numero totale di passaggi necessari per raggiungere un obiettivo di prestazioni fisso diminuisce, a condizione che vengano risintonizzati tutti gli iperparametri pertinenti quando si modifica la dimensione del batch. (vedi Shallue et al. 2018). Ad esempio, raddoppiando le dimensioni del batch potresti dimezzare il numero totale di passaggi richiesti. Questa relazione è chiamata scalabilità perfetta e deve essere valida per tutte le dimensioni del batch fino a una dimensione del batch critica.

Al di là delle dimensioni critiche del batch, l'aumento delle dimensioni del batch produce ritorni diminuiti. Ciò significa che l'aumento delle dimensioni del batch non riduce mai il numero di passaggi di addestramento, ma non lo aumenta mai. Di conseguenza, la dimensione del batch che riduce al minimo il tempo di addestramento è in genere la dimensione del batch più grande che riduce comunque il numero di passaggi di addestramento richiesti. La dimensione del batch dipende dal set di dati, dal modello e dall'ottimizzatore e il metodo di calcolo non è complicato, oltre a trovarle sperimentalmente per ogni nuovo problema. 🤖

Quando confronti le dimensioni dei batch, fai attenzione alla differenza tra quanto segue:

  • Un budget di esempio o un budget di periodo, in cui vengono eseguiti tutti gli esperimenti e correzione del numero di presentazioni di esempio per l'addestramento.
  • Un budget per i passaggi: l'esecuzione di tutti gli esperimenti con un numero fisso di passaggi di addestramento.

Il confronto delle dimensioni dei batch con un budget epocale verifica solo il regime di scalabilità perfetta, anche quando le dimensioni dei batch più grandi potrebbero comunque fornire un aumento significativo della velocità riducendo il numero di passaggi di addestramento richiesti. Spesso, la dimensione del batch più grande supportata dall'hardware disponibile è inferiore alle dimensioni critiche del batch. Pertanto, una buona regola generale (senza eseguire esperimenti) è utilizzare la dimensione batch più grande possibile.Non ha senso utilizzare un batch di dimensioni maggiori se aumenta il tempo di addestramento.

Scegli le dimensioni del batch per ridurre al minimo il consumo di risorse

Esistono due tipi di costi delle risorse associati all'aumento delle dimensioni del batch:

  • Costi anticipati. Ad esempio, l'acquisto di nuovo hardware o la riscrittura della pipeline di addestramento per implementare l'addestramento multi-GPU / multi-TPU.
  • Costi di utilizzo. Ad esempio, fatturazione basata sui budget delle risorse del team, fatturazione tramite un cloud provider, costi di elettricità / manutenzione.

Se sono previsti costi iniziali significativi per l'aumento delle dimensioni del batch, potrebbe essere meglio rinviare l'aumento delle dimensioni del batch fino a quando il progetto non è maturato ed è più facile valutare il compromesso in termini di costi-benefici. L'implementazione di programmi di addestramento parallelo multi-host può introdurre bugs e problemi delicati, quindi probabilmente è meglio iniziare comunque con una pipeline più semplice. D'altra parte, una grande accelerazione del tempo di addestramento potrebbe essere molto utile all'inizio del processo, quando sono necessari molti esperimenti di ottimizzazione.

Il costo di utilizzo totale (che può includere più tipi di costi diversi) viene definito consumo delle risorse, calcolato come segue:

consumo di risorse = consumo di risorse per passaggio x numero totale di passaggi

Generalmente, aumentando le dimensioni del batch viene ridotto il numero totale di passaggi. L'aumento o la diminuzione del consumo di risorse dipende da come cambia il consumo per passaggio, che dipende dalle dimensioni del batch, come indicato di seguito:

  • Aumentando le dimensioni del batch, potresti diminuire il consumo di risorse. Ad esempio, se ogni passaggio con la dimensione batch più grande può essere eseguito sullo stesso hardware delle dimensioni batch più piccole (con un piccolo aumento del tempo per passaggio), qualsiasi aumento del consumo di risorse per passaggio potrebbe essere controbilanciato dalla diminuzione del numero di passaggi.
  • L'aumento delle dimensioni del batch potrebbe non modificare il consumo delle risorse. Ad esempio, se il raddoppio delle dimensioni del batch dimezza il numero di passaggi necessari e raddoppia il numero di GPU utilizzate, il consumo totale (in termini di ore GPU) non cambia.
  • L'aumento delle dimensioni del batch potrebbe aumentare il consumo di risorse. Ad esempio, se l'aumento della dimensione del batch richiede un hardware aggiornato, l'aumento del consumo per passaggio potrebbe superare la riduzione del numero di passaggi.

La modifica delle dimensioni del batch richiede la riottimizzazione della maggior parte degli iperparametri

I valori ottimali della maggior parte degli iperparametri sono sensibili alle dimensioni del batch. Pertanto, la modifica delle dimensioni del batch richiede in genere di riavviare il processo di ottimizzazione. Di seguito sono riportati gli iperparametri che interagiscono maggiormente con le dimensioni del batch, quindi più importanti da ottimizzare separatamente per ogni dimensione del batch:

  • Gli iperparametri dell'ottimizzatore (ad esempio tasso di apprendimento e momentum)
  • Gli iperparametri di regolarizzazione

Tienilo presente quando scegli le dimensioni del batch all'inizio di un progetto. Se in un secondo momento vorrai passare a una dimensione batch diversa, potrebbe essere difficile, richiedere molto tempo ed essere costoso ridefinire gli altri iperparametri per la nuova dimensione batch.

Come la norma batch interagisce con le dimensioni del batch

La norma batch è complicata e, in generale, per calcolare le statistiche, dovrebbe utilizzare una dimensione batch diversa rispetto al calcolo del gradiente. Per una discussione dettagliata, consulta Dettagli sull'implementazione della normalizzazione dei batch.

Scegli la configurazione iniziale

La prima fase dell'ottimizzazione degli iperparametri determina i punti di partenza per:

  • la configurazione del modello (ad es. il numero di livelli)
  • gli iperparametri dell'ottimizzatore (ad es. tasso di apprendimento)
  • il numero di passaggi di addestramento

La determinazione di questa configurazione iniziale richiede alcune esecuzioni di addestramento e prove ed errori configurate manualmente.

Il nostro principio guida è il seguente:

Trova una configurazione semplice, relativamente veloce e con un consumo di risorse relativamente basso che garantisca prestazioni ragionevoli.

dove:

  • Semplice significa evitare funzionalità delle pipeline non necessarie, come regolarizzazioni speciali o trucchi relativi all'architettura. Ad esempio, una pipeline senza regolarizzazione degli abbandoni (o con la regolarizzazione dell'interruzione disabilitata) è più semplice di una con regolarizzazione degli abbandoni.
  • Prestazioni ragionevoli dipendono dal problema, ma, come minimo, un modello addestrato ragionevole funziona molto meglio del caso casuale nel set di convalida.

La scelta di una configurazione iniziale rapida e che richiede risorse minime rende l'ottimizzazione degli iperparametri molto più efficiente. Ad esempio, inizia con un modello più piccolo.

La scelta del numero di passaggi di addestramento implica il bilanciamento delle seguenti tensioni:

  • L'addestramento per più passaggi può migliorare le prestazioni e semplificare l'ottimizzazione degli iperparametri. Per ulteriori dettagli, consulta Shallue et al. 2018.
  • Al contrario, un addestramento con meno passaggi significa che ogni esecuzione di addestramento è più veloce e utilizza meno risorse, aumentando l'efficienza dell'ottimizzazione riducendo il tempo tra i cicli e consentendoti di eseguire più esperimenti in parallelo. Inoltre, se scegli un budget di passaggi inutilmente elevato all'inizio del progetto, potrebbe essere difficile modificarlo nel corso del progetto, ad esempio dopo aver ottimizzato la pianificazione del tasso di apprendimento per quel numero di passaggi.