Saya melatih jaringan saraf menggunakan i) SGD dan ii) Adam Optimizer. Saat menggunakan SGD normal, saya mendapatkan loss pelatihan yang mulus vs kurva iterasi seperti terlihat di bawah ini (yang merah) Namun, ketika saya menggunakan Adam Optimizer, kurva kehilangan pelatihan memiliki beberapa lonjakan. Apa penjelasan dari paku-paku ini?
Detail Model:
14 node input -> 2 lapisan tersembunyi (100 -> 40 unit) -> 4 unit output
Saya menggunakan parameter default untuk Adam beta_1 = 0.9
, beta_2 = 0.999
, epsilon = 1e-8
dan batch_size = 32
.
neural-networks
deep-learning
adam
Abdul Fatir
sumber
sumber
Jawaban:
Paku adalah konsekuensi yang tidak dapat dihindari dari Mini-Batch Gradient Descent di Adam (
batch_size=32
). Beberapa mini-batch memiliki data tidak beruntung 'kebetulan' untuk optimasi, mendorong lonjakan yang Anda lihat dalam fungsi biaya Anda menggunakan Adam. Jika Anda mencoba penurunan gradien stokastik (sama seperti menggunakanbatch_size=1
), Anda akan melihat bahwa ada lebih banyak lonjakan dalam fungsi biaya. Hal yang sama tidak terjadi pada (Penuh) Batch GD karena menggunakan semua data pelatihan (yaitu ukuran batch sama dengan kardinalitas set pelatihan Anda) setiap zaman optimasi. Seperti pada grafik pertama Anda biaya monoton berkurang dengan lancar sepertinya judul ( i) Dengan SGD ) salah dan Anda menggunakan (Penuh) Batch Gradient Descent, bukan SGD.Pada-Nya yang besar tentu saja Jauh Belajar di Coursera , Andrew Ng menjelaskan secara rinci besar ini menggunakan gambar di bawah ini:
sumber
Saya telah menghabiskan banyak waktu debugging meledak gradien dan perilaku serupa. Jawaban Anda akan tergantung pada fungsi kerugian, data, arsitektur, dll. Ada ratusan alasan. Saya akan menyebutkan beberapa.
log(0)
untuk prediksi / outlier yang buruk dalam dataset, menyebabkan meledaknya gradien. Sebagian besar paket (obor, tensorflow dll) mengimplementasikan kliping per default untuk kerugiannya.drop_last
. Batchsize kecil = varian tinggiSekarang mengapa Anda melihatnya dengan Adam dan bukan dengan SGD? Jelas Anda mencapai kerugian yang lebih rendah dengan Adam. Seperti disebutkan sebelumnya, Jika 99,9% dari dataset memiliki optima pada satu titik kecuali beberapa pengamatan, ini mungkin pengamatan yang berteriak "TIDAK" dan melompat keluar dari minimum lokal ketika dipilih secara acak ke batch. Jika Anda melihatnya setiap langkah
dataset_size//batch_size+1
, itu mungkin karena batchsize terakhir kecil. Saya yakin Anda akan melihat lonjakan SGD juga jika Anda membiarkannya mencapai kerugian yang lebih rendah.Bonus: Penurunan Anda yang sangat cepat dengan pengoptimal momentum (Adam) dapat berarti bahwa beberapa lapisan (lapisan input? Lapisan keluaran?) Diinisialisasi dengan cara keluar dari skala (ke bobot besar / kecil).
sumber