Perché il tasso di apprendimento sta facendo salire alle stelle i pesi della mia rete neurale?


9

Sto usando tensorflow per scrivere semplici reti neurali per un po 'di ricerca e ho avuto molti problemi con i pesi' nan 'durante l'allenamento. Ho provato molte soluzioni diverse come cambiare l'ottimizzatore, cambiare la perdita, la dimensione dei dati, ecc. Ma senza alcun risultato. Infine, ho notato che un cambiamento nel tasso di apprendimento ha fatto un'incredibile differenza nei miei pesi.

Usando un tasso di apprendimento di 0,001 (che pensavo fosse piuttosto conservativo), la funzione di minimizzazione avrebbe effettivamente aumentato esponenzialmente la perdita. Dopo un'epoca la perdita potrebbe passare da un numero di migliaia a un trilione e poi all'infinito ('nan'). Quando ho abbassato il tasso di apprendimento a 0,0001, tutto ha funzionato bene.

1) Perché un singolo ordine di grandezza ha un tale effetto?

2) Perché la funzione di minimizzazione esegue letteralmente l'opposto della sua funzione e massimizza la perdita? Mi sembra che ciò non dovrebbe accadere, indipendentemente dal tasso di apprendimento.


Puoi per favore dire come hai inizializzato i tuoi pesi?
Himanshu Rai,

Suggerisco di provare il risolutore Adam. Sembra avere un comportamento migliore e un valore predefinito migliore e potresti essere in grado di utilizzare i tassi di apprendimento predefiniti per questo.
DW

Risposte:


9

Potresti trovare utile il capitolo 8 di Deep Learning . In esso, gli autori discutono della formazione dei modelli di reti neurali. È molto intricato, quindi non mi sorprende che tu abbia difficoltà.

Una possibilità (oltre all'errore dell'utente) è che il tuo problema è altamente mal condizionato. I metodi di discesa del gradiente utilizzano solo le prime informazioni derivate (gradiente) quando si calcola un aggiornamento. Ciò può causare problemi quando il secondo derivato (l'Assia) è mal condizionato.

Citando gli autori:

H

Si ritiene generalmente che il problema del mal condizionamento sia presente nei problemi di allenamento della rete neurale. Il mal condizionamento può manifestarsi facendo sì che SGD rimanga "bloccato", nel senso che anche passi molto piccoli aumentano la funzione di costo. [la mia enfasi è stata aggiunta]

Gli autori forniscono una semplice derivazione per dimostrare che questo può essere il caso. Usando la discesa gradiente, la funzione di costo dovrebbe cambiare (al secondo ordine) di

ε22gTHg-εgTg

gHεεε


2
Mi sembra che questa risposta alla quora offra una spiegazione abbastanza intuitiva al mal condizionamento dell'Assia.
Oren Milman,

3

1) Perché un singolo ordine di grandezza ha un tale effetto?

2) Perché la funzione di minimizzazione esegue letteralmente l'opposto della sua funzione e massimizza la perdita? Mi sembra che ciò non dovrebbe accadere, indipendentemente dal tasso di apprendimento.

Ci sono due ragioni principali. Il primo non si utilizzano gli stessi dati nel primo passaggio rispetto al secondo. Se nella prima fase il modello apprende quei valori e rientra nel minimo locale, è molto probabile che si verifichi una perdita maggiore per i nuovi valori.

Il secondo motivo è la forma della funzione di costo. Si tenta di minimizzare il valore con piccoli passi, la lunghezza di questi passi è data da due fattori: il gradiente e il tasso di apprendimento. Immagine la tua funzione è come x ^ 2. Se i tuoi valori sono vicini a 0, il gradiente sarà più piccolo che se ulteriormente, ma se il tuo tasso di apprendimento è grande allora, invece di avvicinarti a 0, aumenti effettivamente l'errore perché il tuo nuovo punto si basa sulla classificazione e il il tasso di apprendimento è superiore a 0 rispetto al passaggio precedente. E questo può succedere più volte.

Dai un'occhiata a questo link: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html

Se vedi le cifre con alpha 0.01 e alpha 0.12, vedrai come nella prima cifra il tasso di apprendimento è piccolo e quindi il gradiente si avvicina al minimo ma nel secondo caso il tasso di apprendimento è così grande che il gradiente si sposta più avanti in ogni passaggio.


1
Per quanto riguarda il secondo motivo, questa risposta dimostra (usando semplici funzioni) quando la discesa del gradiente potrebbe divergere. Questa risposta ha anche il codice Python in modo da poter sperimentare e vedere come si comporta la discesa del gradiente in diversi scenari ..
Oren Milman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.