Il learning rate indica lo step size di modifica dei pesi (weights) di una rete neurale profonda (Deep Neural Network) e costituisce uno degli hyperparameters più delicati e importanti da regolare (tune) per raggiungere ottime performance sul nostro problema.
Facciamo un breve salto indietro.
Per comprendere l’importanza del learning rate, dobbiamo ricordare che in una rete neurale è rappresentata da un set di parametri chiamati weights il cui valore, inizializzato casualmente, deve essere opportunamente calcolato al fine di minimizzare una funzione costo o cost function (chiamate anche objective function).
Devi sapere una cosa.
I weights non possono essere calcolati analiticamente e devono invece essere determinati usando una procedura di ottimizzazione empirica chiamata discesa stocastica del gradiente (stochastic gradient descent).
Questo nasconde alcune insidie.
Il problema di ottimizzazione che la discesa stocastica del gradiente tenta di risolvere in una deep neural network ha uno spazio di soluzioni (set of weights) che possono essere:
- ottime, sono i punti di minimo globale (global optima)
- pessime, più facili da trovare ma di rilevanza minore (local optima)
Il learning rate determina quindi di quanto aggiornare i pesi della rete al fine di ottenere le performance migliori.
Ecco cosa imparerai.
Al termine di questo post:
- capirai come il learning rate controlli quanto velocemente o lentamente un neural network model risolva un problema;
- come configurare questo iperparametro ragionevolmente, diagnosticarne il comportamento e sviluppare un’analisi analitica
Cos’è il Learning Rate
Ripassiamo i concetti chiave.
So cosa stai pensando: è ripetitivo e noioso.
Hai ragione, anche se sedimentare questi elementi è fondamentale per evitare fraintendimenti futuri e avere chiaro in testa il meccanismo di funzionamento di deep neural network.
Dicevamo? Ah si!
Una rete neurale profonda è allenata usando un algoritmo di discesa stocastica del gradiente.
Cos’è?
Come abbiamo visto in passato, è un algoritmo di ottimizzazione che stima il gradiente dell’errore per lo stato corrente del modello.
Si tratta di un metodo empirico, poiché usa i dati del training set per il calcolo, e aggiorna poi i pesi attraverso un algoritmo di retropropagazione dell’errore: il nostro amato backpropagation.
Chi stabilisce di quanto debbano essere aggiornati i pesi (weights)?
Esattamente: il learning rate!
Più nello specifico, questo iperparametro ha un valore scalare positivo, spesso compreso tra 0.0 e 1.0, indicato dalla lettera greca minuscola eta, η.
Durante l’apprendimento, l’algoritmo di retropropagazione dell’errore calcola di quanto ciscun nodo della rete sia responsabile dell’errore sulla previsione.
Ecco il trucco.
Invece di aggiornare i pesi con il valore totale dell’errore, questo è scalato dal learning rate.
Ad esempio, significa che con un valore di 0.1 i pesi sono aggiornati di un ammontare pari al 10% dell’errore calcolato.
Quali sono dunque gli effetti del learning rate sul modello?
Questi!
Effetti
Una rete neurale profonda impara o approssima una funzione per meglio rappresentare gli output presenti del dataset di training.
Questo è chiaro.
Il learning rate controlla la velocità di apprendimento. Più nel dettaglio, stabilisce l’errore ripartito sui nodi per l’aggiornamento dei rispettivi weights.
Se questo iperparametro fosse perfettamente configurato allora il modello apprenderebbe attraverso tutte le risorse disponibili, come il numero di nodi per livello, in un particolare numero di epoche.
Ti svelo un segreto.
Un grande learning rate permette al modello di apprendere velocemente al costo di calcolare un set di weights subottimali (sub-optimal).
Ma devi anche sapere una cosa.
Un più piccolo learning rate permette al modello di apprendere un set di wieghts ottimale ma potrebbe risultare in una dilatazione dei tempi di allenamento.
Infine, ricorda anche questo.
Un grandissimo learning rate genererebbe un problema noto come oscillating performance, tale per cui le performance del modello (come il loss sul training dataset) inizierebbero a oscillare.
Il problema?
I weights divergono (divergent weights), e questo non ci piace.
Lo definiamo un problema di exploding gradient: gli aggiornamenti dei weights sono così grandi da determinare un overflow delle cifre.
D’altro canto, un piccolissimo learning rate non farebbe convergere l’algoritmo di ottimizzazione o lo farebbe bloccare in un punto non ottimale (local optima).
Lo definiamo un problema di vanishing gradient
Come troviamo dunque il giusto valore in questo delicato trade-off?
Configurazione
Come detto inizialmente, il LR è tra i parametri più importanti da impostare e regolare.
In una pubblicazione intitolata Practical Recommendations for Gradient-Based Training of Deep Architectures, i ricercatori consigliano persino di concentrarsi unicamente su questo iperparametro se avessimo tempo di regolarne uno solo e usassimo come algoritmo di ottimizzazione ill gradient descent.
Anche in questo caso, non possiamo calcolare in modo analitico il valore ottimale per uno specifico modello su un dato dataset. Invece, è necessario calcolarlo usando il trial and error, in via empirica.
Da questo libro leggiamo:
in general, it is not possible to calculate the best learning rate a priori.
Un altra cosa.
Tracciando un grafico del loss siamo in grado di visualizzare diversi elementi:
- rate di apprendimento sulle epoche di training (fast or slow)
- diagnosticare la velocità di apprendimento (veloce, con picchi e plateau; lenta, cambiamenti piccoli o assenti)
- misurare l’oscillazione nella perdita e determinare la magnitudine dell’iperparametro.
Configurare propriamente il learning rate è un’operazione lunga.
Solitamente si impiegano tecniche come il grid search per trovare il miglior valore.
L’iperparametro interagisce con molti aspetti del processo di ottimizzazione e le interazioni possono non essere lineari.
Valori standard sono 0.1 e 0.01, e costituiscono un buon punto di partenza.
Misurando le performance del modello su un dato set di valori è possibile concludere un’analisi di sensibilità (sensitivity analysis), la cui curva spesso mostra una forma a U: loss scende (performance crescono) e il learning rate diminuisce con un numero fisso di epoche.
Poi, il loss improvvisamente sale poiché il modello fallisce la convergenza.
Momentum: History
L’allenamento di una rete neurale artificiale può essere facilitato dall’aggiunta di uno storico, che tenga traccia dei wieght update.
Più nello specifico una media mobile esponenziale (Exponential Moving Average, EMA), conosciuta anche come exponentially weighted average, degli aggiornamenti precedenti è usata per l’aggiornamento dei nuovi parametri.
Questo cambiamento nell‘algoritmo di discesa stocastica del gradiente è chiamato momentum e aggiunge inerzia alla procedura di aggiornamento, forzata a procedere in una direzione analoga ai cambiamenti precedenti.
The momentum algorithm accumulates an exponentially decaying moving average of past gradients and continues to move in their direction.
Deep Learning, Page 296
Momentum è capace di accelerare il training nei problemi in cui lo spazio n-dimensionale dei weight inganna il gradient descent con regioni piatte e curvature ben lungi dall’essere global optima.
L’inerzia del mmentum è gestita da un nuovo iperparametro, generalmente chiamato momentum o velocity (v) e indicato dalla lettera greca minuscola alpha, a.
In questo modo lo spiacevole andamento oscillatorio dell’aggiornamento dei parametri è evitato con un processo ben più regolare e continuo, che procede nella stessa direzione degli update precedenti.
Il valore di momentum è inferiore a 1 e superiore a 0. I valori comuni sono .5, .9 e .99.
Ricorda una cosa.
Il momentum non facilità il calcolo del learning rate, poiché lo step size di ogni aggiornamento è indipendente.
Attenzione.
Può tuttavia aumentare la velocità di ottimizzazione e la possibilità che la combinazione ottimale di wieght sia calcolata in un numero minore di training epochs.
Quindi. Fissiamo un learning rate costante, aggiungiamo momentum e siamo al completo.
Non proprio.
Seguimi alla scoperta del learning rate schedule.
Learning Rate Schedule
Devi sapere che possiamo usare un learning rate dinamico.
La modalità in cui questo valore cambia durante le epoche di training è definita learning rate schedule o learning rate decay.
Un metodo tanto banale quanto rudimentale consiste nel ridurre linearmente il learning rate da un grande valore iniziale a un piccolo finale.
In questo modo compiamo un minuzioso processo di fine-tuning verso la fine del learning process.
Adaptive Learning Rate
Una seconda modalità di correzione del learning rate è affidata invece al modello steso.
Le performance possono essere monitorate aggiustando il valore di conseguenza.
Questo è ciò che chiamiamo adaptive learning rate.
L’uso di un learning rate adattivo produce performance superiori rispetto alla scelta di un mediocre valore fisso.
Esistono, a questo proposito, diversi metodi per gestire il processo. Tre di questi sono diventati comuni per la loro robustezza e versatilità con differenti reti neurali e architetture.
Sono:
- AdaGrad
- RMSProp
- Adam
Ognuno di loro può adattare il learning rate durante ogni epoca.
L’Adam, costruito sul RMSProp con l’aggiunta del momentum e probabilmente il più diffuso.
Un sistema comunemente impiegato per la scelta del metodo migliore è quello di partire optando per una versione moderna dell’algoritmo di discesa stocastica del gradiente con un learning rate adattivo (Adam) e fissare il risultato come base.
Avrebbe dunque senso, tempo permettendo, una comparazione di performance con un modello avente un learning rate schedule o selezionando attentamente un valore ottimale del parametro.
Per il momento è tutto.
Un caldo abbraccio, Andrea.