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?
global_step
parameterminimize
. Lihat edit.1e-4
=0.0001
, tidak0.0004
.Jawaban:
Berbicara secara empiris: pasti mencobanya, Anda mungkin menemukan beberapa heuristik pelatihan yang sangat berguna, dalam hal ini, silakan berbagi!
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.
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.
sumber
Alasan mengapa kebanyakan orang tidak menggunakan peluruhan laju pembelajaran dengan Adam adalah bahwa algoritma itu sendiri melakukan peluruhan laju pembelajaran dengan cara berikut:
di mana
t0
catatan waktu awal, danlr_t
tingkat pembelajaran baru digunakan.sumber
sqrt(1 - beta2^t) / (1 - beta1^t)
tidak membusuk. Tampaknya untuk mengimbangi inisialisasi estimasi momen pertama dan kedua.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
Terakhir, makalah ini menyarankan agar kita menggunakan SGD.
sumber
Saya setuju dengan pendapat @Indie AI, di sini saya memberikan beberapa informasi lain:
Dari CS231n :
Dan Juga dari Kertas Memikirkan Kembali Arsitektur Inception untuk Computer Vision Bagian 8:
sumber
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.
sumber
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 .
sumber