Blog.

How to set Learning Rate Deep Learning Neural Networks


Autore
Andrea Provino
Data
Tempo di lettura
7 minuti
Categoria
AI, machine-learning

deep-learning-machine-learning-learning-rate-how-to-set-learning-rate-guida-italiano

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.

Taggeddata sciencedeep learningmachine learning


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum