Adam optimizer dengan peluruhan eksponensial


53

Dalam sebagian besar kode Tensorflow yang saya lihat Adam Optimizer digunakan dengan Laju Pembelajaran konstan 1e-4(yaitu 0,0001). Kode biasanya terlihat sebagai berikut:

...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)

Saya bertanya-tanya, apakah berguna untuk menggunakan peluruhan eksponensial saat menggunakan pengoptimal adam, yaitu menggunakan Kode berikut:

...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)

Biasanya, orang menggunakan semacam tingkat pembusukan belajar, bagi Adam sepertinya tidak biasa. Apakah ada alasan teoretis untuk ini? Bisakah bermanfaat menggabungkan Adam optimizer dengan peluruhan?


Bagaimana Anda mendapatkan langkah Variabel untuk diperbarui dengan setiap iterasi?
perrohunter

@perrohunter: Gunakan global_stepparameter minimize. Lihat edit.
Charles Staats

9
Catatan: 1e-4= 0.0001, tidak 0.0004.
Cliff AB

Saya melihat Anda menetapkan "global_step = langkah" tetapi saya tidak melihat bagaimana variabel "langkah" sedang diperbarui ... bisakah Anda menjelaskannya?
Diego

@Diego: jawaban terlambat tetapi: melewatkan variabel langkah untuk meminimalkan karena itu parameter global_step membuat fungsi meminimalkan meningkatkan parameter global_step setiap kali meminimalkan disebut. Lihat dokumentasi untuk meminimalkan. Perhatikan bahwa ini berarti bahwa ketika melakukan mini-batch, variabel step diperbarui untuk setiap mini-batch, tidak hanya untuk setiap zaman.
dimpol

Jawaban:


37

Berbicara secara empiris: pasti mencobanya, Anda mungkin menemukan beberapa heuristik pelatihan yang sangat berguna, dalam hal ini, silakan berbagi!

Biasanya orang menggunakan semacam pembusukan, bagi Adam sepertinya tidak biasa. Apakah ada alasan teoretis untuk ini? Bisakah bermanfaat menggabungkan Adam optimizer dengan peluruhan?

Saya belum melihat cukup banyak kode orang menggunakan pengoptimal ADAM untuk mengatakan apakah ini benar atau tidak. Jika itu benar, mungkin itu karena ADAM relatif baru dan tingkat pembelajaran peluruhan "praktik terbaik" belum ditetapkan.

αt=α/t

Sederhananya: Saya tidak berpikir apa pun dalam teori ini mengecilkan menggunakan aturan peluruhan tingkat belajar dengan ADAM. Saya telah melihat orang melaporkan beberapa hasil yang baik menggunakan ADAM dan menemukan beberapa heuristik pelatihan yang baik akan sangat berharga.


12

Alasan mengapa kebanyakan orang tidak menggunakan peluruhan laju pembelajaran dengan Adam adalah bahwa algoritma itu sendiri melakukan peluruhan laju pembelajaran dengan cara berikut:

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

di mana t0catatan waktu awal, dan lr_ttingkat pembelajaran baru digunakan.


4
Saya tidak yakin apakah ini masalahnya. Faktornya sqrt(1 - beta2^t) / (1 - beta1^t)tidak membusuk. Tampaknya untuk mengimbangi inisialisasi estimasi momen pertama dan kedua.
Thijs

25
Jawaban ini salah. Faktor itu mendekati 1.0 ketika t menuju tak terhingga. Catatan tambahan: learning_rate here diperbaiki . Ini bukan tingkat belajar pada waktu t-1.
rd11

8

Adam menggunakan tingkat pembelajaran awal, atau ukuran langkah sesuai dengan terminologi makalah asli, sementara secara adaptif menghitung pembaruan. Ukuran langkah juga memberikan perkiraan batasan untuk pembaruan. Dalam hal ini, saya pikir itu adalah ide yang bagus untuk mengurangi ukuran langkah menjelang akhir pelatihan. Ini juga didukung oleh karya terbaru dari NIPS 2017: Nilai Marginal dari Metode Gradien Adaptif dalam Pembelajaran Mesin .

Baris terakhir di Bagian 4: Eksperimen Pembelajaran Jauh mengatakan

Meskipun kebijaksanaan konvensional menunjukkan bahwa Adam tidak memerlukan penyetelan, kami menemukan bahwa penyetelan laju pembelajaran awal dan skema peluruhan untuk Adam menghasilkan peningkatan yang signifikan atas pengaturan standarnya dalam semua kasus.

Terakhir, makalah ini menyarankan agar kita menggunakan SGD.


2

Saya setuju dengan pendapat @Indie AI, di sini saya memberikan beberapa informasi lain:

Dari CS231n :

... Banyak dari metode ini mungkin masih memerlukan pengaturan hiperparameter lainnya, tetapi argumennya adalah bahwa mereka berperilaku baik untuk rentang nilai hiperparameter yang lebih luas daripada tingkat pembelajaran mentah. ...

Dan Juga dari Kertas Memikirkan Kembali Arsitektur Inception untuk Computer Vision Bagian 8:

... sementara model terbaik kami dicapai menggunakan RMSProp [21] dengan penurunan 0,9 dan ε = 1,0. Kami menggunakan tingkat pembelajaran 0,045, membusuk setiap dua zaman menggunakan tingkat eksponensial 0,94. ...


2

Saya melatih dataset dengan data nyata yang mudah, jika seseorang dianggap gemuk atau tidak, tinggi dan berat badan - membuat data penghitungan bmi, dan jika lebih dari 27, orang tersebut gemuk. Jadi data dasar sangat mudah. Saat menggunakan Adam sebagai pengoptimal, dan tingkat pembelajaran pada 0,001, akurasi hanya akan membuat saya sekitar 85% untuk 5 epoc, maksimal pada 90% dengan lebih dari 100 epoc diuji.

Tetapi ketika memuat lagi mungkin 85%, dan melakukan 0,0001 tingkat belajar, akurasi akan lebih dari 3 epoc goto 95%, dan 10 epok lagi sekitar 98-99%. Tidak yakin apakah tingkat pembelajaran bisa di bawah 4 digit 0,0001, tetapi ketika memuat model lagi dan menggunakan 0,00001, akreditasi akan berkisar sekitar 99,20 - 100% dan tidak akan pergi di bawah. Sekali lagi, tidak yakin apakah tingkat pembelajaran akan dianggap 0, tetapi bagaimanapun, itulah yang saya dapatkan ...

Semua ini menggunakanategical_crossentropy, tetapi mean_square membuatnya menjadi 99-100% juga melakukan metode ini. AdaDelta, AdaGrad, Nesterov tidak dapat mencapai akurasi di atas 65%, hanya untuk catatan.


0

Peluruhan laju pembelajaran dalam Adam sama dengan yang ada di RSMProp (seperti yang Anda lihat dari jawaban ini ), dan itu sebagian besar didasarkan pada besarnya gradien sebelumnya untuk membuang osilasi . Jadi peluruhan eksponensial (untuk tingkat pembelajaran menurun sepanjang proses pelatihan) dapat diadopsi pada saat yang sama. Mereka semua membusuk tingkat belajar tetapi untuk tujuan yang berbeda .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.