# Problema della scomparsa del gradiente

Il problema della scomparsa del gradiente (in lingua inglese vanishing gradient problem) è un fenomeno che crea difficoltà nell'addestramento delle reti neurali profonde tramite retropropagazione dell'errore mediante discesa stocastica del gradiente. In tale metodo, ogni parametro del modello riceve a ogni iterazione un aggiornamento proporzionale alla derivata parziale della funzione di costo rispetto al parametro stesso. Una delle principali cause è la presenza di funzioni di attivazione non lineari classiche, come la tangente iperbolica o la funzione logistica, che hanno gradiente a valori nell'intervallo $(0,1)$. Poiché nell'algoritmo di retropropagazione i gradienti ai vari livelli vengono moltiplicati tramite la regola della catena, il prodotto di $n$ numeri in $(0,1)$ decresce esponenzialmente rispetto alla profondità $n$ della rete. Quando invece il gradiente delle funzioni di attivazione può assumere valori elevati, un problema analogo che può manifestarsi è quello dell'esplosione del gradiente.
La retropropagazione dell'errore permise di addestrare le reti neurali tramite apprendimento supervisionato, ma i primi tentativi ebbero limitato successo e nel 1991, nella sua tesi di laurea, Sepp Hochreiter attribuì questa difficoltà al problema da lui chiamato "scomparsa del gradiente", che affligge sia le reti neurali feed-forward profonde che quelle ricorsive, che dal punto di vista dell'apprendimento sono equivalenti a reti profonde in quanto vengono "srotolate" rispetto alla direzione temporale con un livello per ogni intervallo di tempo.

## Illustrazione semplificata nelle reti neurali ricorrenti

In una rete neurale ricorrente dopo $n$ passaggi si ripetono moltiplicazioni di una matrice con un vettore per gli stati nascosti: il vettore di output nascosto $h_{i}$ del livello $i$ dipende dall'output nascosto del livello precedente ${\vec {h}}_{i}=f(W{\vec {h}}_{i-1}+{\vec {b}})$.
Possiamo semplificare la discussione trascurando estremamente la funzione non lineare $f$, bias ${\vec {b}}$ e notando che la matrice dei pesi ($W$) è sempre lo stesso. In questo caso, l'output finale è solo: ${\vec {h}}_{n}=W^{n}{\vec {h}}_{0},$
dove ${\vec {h}}_{0}$ è l'input iniziale alla rete. Se $W=Q\lambda Q^{T}$ può essere diagonalizzato, allora (a causa di $W^{n}=Q\lambda ^{n}Q^{T}$) è chiaro che gli autovalori minori di 1 decadono esponenzialmente con profondità n mentre gli autovalori maggiori di 1 esplodono in modo esponenziale con profondità n.

## Soluzioni

Il problema può essere affrontato usando differenti funzioni di attivazione, ad esempio funzioni rettificate come ReLU, usando differenti algoritmi di addestramento, ad esempio Rprop, che dipende solo dal segno del gradiente e non dalla sua norma, oppure usando metodi che non dipendono dal gradiente per l'ottimizzazione dei parametri, come algoritmi genetici e particle swarm optimization, il cui costo può diventare tuttavia proibitivo nel caso di reti con un numero molto elevato di parametri.
Rispetto al periodo in cui il problema è stato scoperto, la scomparsa del gradiente è stata parzialmente mitigata con il passare del tempo grazie all'incremento significativo della potenza di calcolo a disposizione, specialmente grazie alla transizione da CPU a GPGPU per l'addestramento dei modelli, anche se ciò non rappresenta di per sé un'effettiva soluzione del problema.
Un metodo proposto per contrastare la cancellazione del gradiente nelle reti profonde è quello di eseguire l'addestramento con un approccio multilivello, addestrando i singoli livelli separatamente e poi assemblandoli, e usando la retropropagazione sull'intera rete per rifinire l'addestramento. Jürgen Schmidhuber propose di addestrare i singoli livelli in maniera non supervisionata, in modo che apprendano una rappresentazione compressa del proprio input. Geoffrey Hinton propose nel 2006 le reti deep belief, che modellano l'apprendimento della distribuzione di una rappresentazione ad alto livello tramite più livelli di variabili latenti. Ciascun livello è modellato da una macchina di Boltzmann ristretta e, se addestrato correttamente, garantisce un aumento del limite inferiore della log-verosimiglianza. Quando un numero sufficiente di livelli è stato addestrato, la rete può essere anche usata come modello generativo, ottenendo un nuovo campione a partire dai valori delle funzioni di attivazione del livello più alto. Tale modello è utile per l'estrazione di caratteristiche da dati strutturati ad alta dimensionalità.
Per quanto riguarda le reti neurali ricorsive, anch'esse affette dalla scomparsa del gradiente, che ne riduce la capacità di apprendere relazioni a lungo termine, il settore venne rivoluzionato nel 1997 con l'introduzione, da parte di Sepp Hochreiter e Jürgen Schmidhuber, dell'architettura long-short term memory (LSTM). Nelle reti LSTM lo stato del modello si propaga nel tempo senza attraversare funzioni non lineari, prevenendo la cancellazione o esplosione del gradiente. Le reti LSTM hanno ottenuto notevoli risultati in molti problemi inerenti sequenze temporali, come il riconoscimento della scrittura o l'elaborazione del linguaggio naturale.
Le reti neurali residuali permettono di contrastare la scomparsa del gradiente in reti molto profonde, grazie all'aggiunta di connessioni scorciatoia che permettono a una breve sequenza di livelli di imparare non semplicemente la funzione obiettivo, ma il suo residuo ottenuto sottraendo la funzione identità.