Come funziona il metodo Adamo di discesa gradiente stocastica?


45

Ho familiarità con gli algoritmi di base per la discesa del gradiente per l'addestramento delle reti neurali. Ho letto l'articolo che propone Adam: ADAM: UN METODO PER L'OTTIMIZZAZIONE STOCASTICA .

Anche se ho sicuramente avuto alcune intuizioni (almeno), il documento sembra essere di livello troppo alto per me nel complesso. Ad esempio, una funzione di costo è spesso una somma di molte funzioni diverse, pertanto è necessario effettuare una grande quantità di calcoli per ottimizzare il suo valore; le discese stocastiche del gradiente - per quanto ho capito l'argomento - calcolano l'ottimizzazione solo per un sottoinsieme di queste funzioni. Per me non è chiaro come Adamo faccia questo e perché questo si traduca in un errore di allenamento ridotto per l'intero J ( θ ) .J(θ)J(θ)

Penso che Adam aggiorni il suo gradiente tenendo conto del gradiente precedente. Lo chiamano qualcosa come usare lo slancio? Cos'è esattamente questo slancio? Secondo l'algoritmo a pagina due del documento, si tratta di una sorta di media mobile, come alcune stime del primo e del secondo momento del gradiente "normale"?

In pratica, sospetterei che Adam permetta di utilizzare passi di dimensioni effettive maggiori per ridurre il gradiente e quindi l'errore di allenamento in combinazione con l'approssimazione stocastica. Pertanto, il vettore di aggiornamento risultante dovrebbe "saltare" di più nelle dimensioni spaziali, descrivendo piuttosto alcune curve come farebbero i normali algoritmi di discesa del gradiente.

Qualcuno può demistificare come funziona Adam? Soprattutto come converge, in particolare perché il metodo di Adam funziona e quali sono esattamente i vantaggi?


1
dovresti fornire un titolo migliore per la tua domanda. Che cosa vuoi dire esattamente di Adam? Anche se è in generale, cerca di renderlo un po 'più ricercabile.
Charlie Parker,

Risposte:


40

Il documento di Adam afferma che "... molte funzioni oggettive sono composte da una somma di sottofunzioni valutate in diversi sottocampioni di dati; in questo caso l'ottimizzazione può essere resa più efficiente prendendo gradini rispetto a singole sottofunzioni ..." Qui, semplicemente significa che la funzione obiettivo è una somma di errori rispetto agli esempi di allenamento e che la formazione può essere eseguita su singoli esempi o minibatch. Questo è lo stesso della discesa gradiente stocastica (SGD), che è più efficiente per problemi su larga scala rispetto all'allenamento in batch poiché gli aggiornamenti dei parametri sono più frequenti.

Per quanto riguarda il motivo per cui Adam funziona, utilizza alcuni trucchi.

Uno di questi trucchi è lo slancio, che può dare una convergenza più rapida. Immagina una funzione oggettiva che ha la forma di un canyon lungo e stretto che degrada gradualmente verso il minimo. Supponiamo di voler ridurre al minimo questa funzione usando la discesa gradiente. Se partiamo da qualche punto sulla parete del canyon, il gradiente negativo punterà nella direzione della discesa più ripida, cioè principalmente verso il fondo del canyon. Questo perché le pareti del canyon sono molto più ripide della pendenza graduale del canyon verso il minimo. Se il tasso di apprendimento (cioè la dimensione del gradino) è piccolo, potremmo scendere al fondo del canyon, quindi seguirlo verso il minimo. Ma i progressi sarebbero lenti. Potremmo aumentare il tasso di apprendimento, ma ciò non cambierebbe la direzione dei passaggi. In questo caso, sorpasseremmo il pavimento del canyon e finiremmo sulla parete opposta. Vorremmo quindi ripetere questo schema, oscillando da una parete all'altra facendo progressi lenti verso il minimo. Il momento può aiutare in questa situazione.

Momentum significa semplicemente che una parte dell'aggiornamento precedente viene aggiunta all'aggiornamento corrente, in modo che gli aggiornamenti ripetuti in un particolare composto direzione; accumuliamo slancio, muovendoci sempre più velocemente in quella direzione. Nel caso del canyon, creeremmo slancio nella direzione del minimo, poiché tutti gli aggiornamenti hanno un componente in quella direzione. Al contrario, spostarsi avanti e indietro attraverso le pareti del canyon implica invertire costantemente la direzione, quindi lo slancio aiuterebbe a smorzare le oscillazioni in quelle direzioni.

Un altro trucco utilizzato da Adam è selezionare in modo adattivo una frequenza di apprendimento separata per ciascun parametro. I parametri che normalmente ricevono aggiornamenti più piccoli o meno frequenti ricevono aggiornamenti più grandi con Adam (è vero anche il contrario). Ciò accelera l'apprendimento nei casi in cui i tassi di apprendimento appropriati variano tra i parametri. Ad esempio, nelle reti profonde, i gradienti possono diventare piccoli agli strati iniziali e ha senso aumentare i tassi di apprendimento per i parametri corrispondenti. Un altro vantaggio di questo approccio è che, poiché i tassi di apprendimento vengono regolati automaticamente, la sintonizzazione manuale diventa meno importante. SGD standard richiede un'attenta messa a punto (e possibilmente regolazione online) dei tassi di apprendimento, ma questo è meno vero con Adam e i metodi correlati. È ancora necessario selezionare iperparametri,

Metodi correlati :

Il momento è spesso usato con SGD standard. Una versione migliorata si chiama momentum di Nesterov o gradiente accelerato di Nesterov. Altri metodi che utilizzano frequenze di apprendimento ottimizzate automaticamente per ciascun parametro includono: Adagrad, RMSprop e Adadelta. RMSprop e Adadelta risolvono un problema con Adagrad che potrebbe causare l'interruzione dell'apprendimento. Adam è simile a RMSprop con slancio. Nadam modifica Adam per usare lo slancio di Nesterov invece dello slancio classico.

Riferimenti :

Kingma and Ba (2014) . Adam: un metodo per l'ottimizzazione stocastica.

Goodfellow et al. (2016) . Apprendimento profondo, capitolo 8.

Diapositive dal corso di Geoff Hinton

Dozat (2016) . Incorporando Nesterov Momentum in Adam.


2
(+1) La community trarrebbe grande vantaggio se potessi aggiornare la tua risposta per includere ulteriori informazioni sulle prove delle convergenze di Adam e le loro correzioni, come "Sulla convergenza di Adam e oltre" openreview.net/forum?id=ryQu7f- RZ
Ripristina Monica il

2
Grazie @Sycorax, proverò ad aggiornare quando avrò del tempo
user20160

1
w

Continuando il mio ultimo commento, questa risposta spiega le differenze tra Adam e rmsprop con lo slancio, mentre ci si concentra su come il comportamento simile a quello di Adam sia diverso dal solito comportamento simile al momento. (Questa risposta include anche il codice Python per simulare e mostrare graficamente come si comportano i diversi metodi.)
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.