Ottimizzatore Adam con decadimento esponenziale


53

Nella maggior parte del codice Tensorflow ho visto Adam Optimizer utilizzato con un tasso di apprendimento costante di 1e-4(cioè 0,0001). Il codice di solito ha il seguente aspetto:

...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Mi chiedo se sia utile utilizzare il decadimento esponenziale quando si utilizza Adam Optimizer, ovvero utilizzare il seguente codice:

...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Di solito, le persone usano un qualche tipo di decadimento del tasso di apprendimento, per Adam sembra raro. C'è qualche motivo teorico per questo? Può essere utile combinare l'ottimizzatore Adam con il decadimento?


Come si ottiene l'aggiornamento del passaggio Variabile con ogni iterazione?
perrohunter,

@perrohunter: utilizzare il global_stepparametro di minimize. Vedi modifica.
Charles Staats,

9
Nota: 1e-4= 0.0001, no 0.0004.
Cliff AB,

Vedo che assegni "global_step = step" ma non vedo come viene aggiornata la variabile "step" ... puoi chiarire per favore?
Diego,

@Diego: risposta tardiva ma: passare la variabile step per minimizzare poiché è il parametro global_step fa sì che la funzione minimizza aumenti il ​​parametro global_step ogni volta che viene chiamato minimizza. Vedi la documentazione per minimizzare. Si noti che ciò significa che quando si eseguono mini-batch, la variabile step viene aggiornata per ciascun mini-batch, non solo per ogni epoca.
dimpol

Risposte:


37

Empiricamente parlando: sicuramente provalo, potresti trovare alcune euristiche di allenamento molto utili, nel qual caso, per favore, condividi!

Di solito le persone usano un qualche tipo di decadimento, per Adam sembra insolito. C'è qualche motivo teorico per questo? Può essere utile combinare l'ottimizzatore Adam con il decadimento?

Non ho visto abbastanza codice di persone utilizzando l'ottimizzatore ADAM per dire se questo è vero o no. Se è vero, forse è perché ADAM è relativamente nuovo e le "migliori pratiche" di decadimento del tasso di apprendimento non sono ancora state stabilite.

Voglio sottolineare, tuttavia, che il decadimento del tasso di apprendimento fa effettivamente parte della garanzia teorica di ADAM. In particolare nel Teorema 4.1 del loro articolo ICLR , una delle loro ipotesi è che il tasso di apprendimento ha un decadimento della radice quadrata, . Inoltre, per i loro esperimenti di regressione logistica usano anche il decadimento della radice quadrata.αt=α/t

In poche parole: non credo che nulla nella teoria scoraggi l'uso delle regole di decadimento del tasso di apprendimento con ADAM. Ho visto persone riportare dei buoni risultati usando ADAM e trovare una buona euristica di addestramento sarebbe incredibilmente prezioso.


12

Il motivo per cui la maggior parte delle persone non usa il decadimento del tasso di apprendimento con Adam è che l'algoritmo stesso fa un decadimento del tasso di apprendimento nel modo seguente:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

dove t0è il timestep iniziale ed lr_tè il nuovo tasso di apprendimento utilizzato.


4
Non sono sicuro che sia così. Il fattore sqrt(1 - beta2^t) / (1 - beta1^t)non decade. Sembra compensare l'inizializzazione delle stime del primo e del secondo momento.
Thijs,

25
Questa risposta non è corretta Questo fattore si avvicina a 1.0 quando t va all'infinito. Nota a margine: learning_rate qui è stato risolto . Non è il tasso di apprendimento al momento t-1.
rd11,

8

Adam utilizza il tasso di apprendimento iniziale o la dimensione del passo in base alla terminologia del documento originale, calcolando in modo adattivo gli aggiornamenti. La dimensione del passo fornisce anche un limite approssimativo per gli aggiornamenti. A questo proposito, penso che sia una buona idea ridurre la dimensione del passo verso la fine dell'allenamento. Ciò è supportato anche da un recente lavoro di NIPS 2017: Il valore marginale dei metodi di gradiente adattivo nell'apprendimento automatico .

L'ultima riga nella sezione 4: afferma Deep Learning Experiments

Sebbene la saggezza convenzionale suggerisca che Adam non richiede l'ottimizzazione, scopriamo che l'ottimizzazione del tasso di apprendimento iniziale e dello schema di decadimento per Adam produce miglioramenti significativi rispetto alle sue impostazioni predefinite in tutti i casi.

Ultimo ma non meno importante, l'articolo suggerisce che usiamo SGD comunque.


2

Sono d'accordo con l'opinione di @Indie AI, qui fornisco alcune altre informazioni:

Da CS231n :

... Molti di questi metodi possono ancora richiedere altre impostazioni dell'iperparametro, ma l'argomento è che sono ben educati per una gamma più ampia di valori di iperparametro rispetto al tasso di apprendimento grezzo. ...

E anche dal documento Ripensare l'architettura di Inception per Computer Vision Sezione 8:

... mentre i nostri migliori modelli sono stati raggiunti usando RMSProp [21] con un ritardo di 0,9 e ε = 1,0. Abbiamo usato un tasso di apprendimento di 0,045, decaduto ogni due epoche usando un tasso esponenziale di 0,94. ...


2

Ho addestrato un set di dati con dati davvero semplici, se una persona è considerata grassa o no, altezza e peso - creando dati che calcolano il bmi e se oltre 27, la persona è grassa. Dati di base molto facili. Quando si utilizza Adam come ottimizzatore e il tasso di apprendimento a 0,001, l'accuratezza mi porterà all'85% circa per 5 epoc, raggiungendo il massimo al 90% con oltre 100 epoc testati.

Ma quando si carica di nuovo all'85%, e si fa una velocità di apprendimento di 0,0001, l'accuratezza supererà 3 epocò fino al 95% e 10 epoc in più sono circa il 98-99%. Non sono sicuro che il tasso di apprendimento possa scendere al di sotto di 4 cifre 0,0001, ma quando si carica di nuovo il modello e si utilizza 0,00001, l'accucary si posiziona intorno al 99,20 - 100% e non scenderà al di sotto. Ancora una volta, non sono sicuro se il tasso di apprendimento sarebbe considerato 0, ma comunque, questo è quello che ho ...

Tutto questo usando categorical_crossentropy, ma mean_square lo porta anche al 99-100% facendo questo metodo. AdaDelta, AdaGrad, Nesterov non hanno potuto ottenere una precisione superiore al 65%, solo per una nota.


0

Il decadimento del tasso di apprendimento nell'Adam è lo stesso di quello di RSMProp (come si può vedere da questa risposta ), e questo è in gran parte basato sulla grandezza dei gradienti precedenti per scaricare le oscillazioni . Quindi il decadimento esponenziale (per un tasso di apprendimento decrescente lungo il processo di formazione) può essere adottato contemporaneamente. Tutti decadere il tasso di apprendimento, ma per scopi diversi .

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.