Jadi penurunan gradien berbasis momentum bekerja sebagai berikut:
di mana adalah pembaruan berat sebelumnya, dan adalah gradien saat ini sehubungan dengan parameter , adalah tingkat pembelajaran, dan adalah konstanta.g p l r s e l f . m o m e n t u m
dan percepatan gradient descent Nesterov bekerja sebagai berikut:
yang setara dengan:
atau
sumber: https://github.com/fchollet/keras/blob/master/keras/optimizers.py
Jadi bagi saya tampaknya penurunan gradien dipercepat Nesterov hanya memberikan bobot lebih untuk lr * g istilah selama periode perubahan berat badan sebelumnya m (dibandingkan dengan momentum lama polos). Apakah interpretasi ini benar?
optimization
gradient-descent
Sari apel
sumber
sumber
Jawaban:
Jawaban Arech tentang momentum Nesterov benar, tetapi kode dasarnya melakukan hal yang sama. Jadi dalam hal ini metode Nesterov memang memberikan bobot lebih untuk istilah , dan lebih sedikit bobot untuk istilah .vlr⋅g v
Untuk menggambarkan mengapa penerapan Keras benar, saya akan meminjam contoh Geoffrey Hinton .
Metode Nesterov mengambil pendekatan "koreksi-judi". Vektor coklat adalah (taruhan / lompatan), vektor merahnya adalah (koreksi), dan vektor hijau adalah (di mana kita seharusnya benar-benar pindah ke). adalah fungsi gradien.v′=m⋅v−lr⋅∇(w+m⋅v)
w′=w+v′
m⋅v −lr⋅∇(w+m⋅v) m⋅v−lr⋅∇(w+m⋅v) ∇(⋅)
w ′ = w + v ′ m ⋅ v - l r ⋅ ∇ ( w + m ⋅ v ) m ⋅ v - l r ⋅ ∇ ( w + m ⋅ v ) ∇ ( ⋅ )
Kode terlihat berbeda karena bergerak dengan vektor cokelat dan bukan vektor hijau , karena metode Nesterov hanya memerlukan evaluasi bukan . Karena itu di setiap langkah kami ingin∇ ( w )∇(w+m⋅v)=:g ∇(w)
Kode keras 'ditulis untuk singkat adalah , dan kami melakukan beberapa matematikap′=p+m⋅(m⋅v−lr⋅g)−lr⋅g
dan itu persis . Sebenarnya kode asli mengambil jalur yang lebih pendek .1→0→2→3 1→2→3
Nilai estimasi aktual (vektor hijau) harus , yang harus dekat dengan ketika belajar menyatu.p−m⋅v p
sumber
Tampaknya bagi saya bahwa pertanyaan OP sudah dijawab, tetapi saya akan mencoba memberikan penjelasan (semoga intuitif) lain tentang momentum dan perbedaan antara Momentum Klasik (CM) dan Gradien Akselerasi Gradien (NAG) Nesterov.
tl; dr Langsung
saja ke gambar di bagian akhir.
Alasan NAG_ball adalah bagian penting lainnya, tetapi saya tidak yakin itu akan mudah dipahami tanpa sisanya.
CM dan NAG keduanya metode untuk memilih vektor berikutnya dalam ruang parameter, untuk menemukan minimum fungsi .θ f(θ)
Dalam berita lain, akhir-akhir ini kedua bola liar ini muncul:
Ternyata (sesuai dengan perilaku bola yang diamati, dan menurut makalah tentang pentingnya inisialisasi dan momentum dalam pembelajaran yang mendalam , yang menggambarkan CM dan NAG di bagian 2) bahwa setiap bola berperilaku persis seperti salah satu metode ini , dan jadi kami akan memanggil mereka "CM_ball" dan "NAG_ball":
(NAG_ball sedang tersenyum, karena ia baru-baru ini menyaksikan akhir Kuliah 6c - Metode momentum, oleh Geoffrey Hinton dengan Nitish Srivastava dan Kevin Swersky , dan dengan demikian percaya lebih dari sebelumnya bahwa perilakunya mengarah pada penemuan minimum yang lebih cepat.)
Beginilah perilaku bola:
Biarkan menjadi lokasi ke- bola di ruang parameter, dan biarkan menjadi lompat ke- bola . Kemudian melompat di antara titik-titik dalam ruang parameter dapat dijelaskan dengan .
Demikian pula, Lompatan Lompat ke arah kemiringan paling curam ke bawah (arah yang berlawanan dengan gradien), dan semakin besar gradien, semakin jauh lompatan.
Slope Jump juga tergantung pada , tingkat semangat bola (tentu saja, ): Semakin bersemangat bola, semakin jauh Slope Jump akan mengambilnya. (Dalam CM dan NAG, adalah hiperparameter yang disebut "tingkat pembelajaran".) Mari
Jadi, Double Jump CM_ball adalah:
Sebaliknya, NAG_ball memikirkannya selama beberapa waktu, dan kemudian memutuskan untuk selalu memulai dengan Momentum Jump.vt=μvt−1−ϵ∇f(θt−1+μvt−1)
Oleh karena itu, Lompat Ganda NAG_ball adalah:
Alasan NAG_ball
Jadi saya harus mempertimbangkan situasinya seolah-olah saya sudah membuat Momentum Jump saya, dan saya akan membuat Slope Jump saya.
Akhirnya, kemarin saya cukup beruntung untuk mengamati setiap bola yang melompat-lompat dalam ruang parameter 1 dimensi.θ f ( θ ) 7
f(θ) 7
Saya pikir bahwa melihat posisi mereka yang berubah di ruang parameter tidak akan banyak membantu dalam mendapatkan intuisi, karena ruang parameter ini adalah sebuah garis.
Jadi sebagai gantinya, untuk setiap bola saya membuat sketsa grafik 2 dimensi di mana sumbu horizontal adalah . Kemudian saya menggambar menggunakan kuas hitam, dan juga menggambar setiap bola di posisi pertamanya, bersama dengan angka untuk menunjukkan urutan kronologis dari posisi tersebut. Terakhir, saya menggambar panah hijau untuk menunjukkan jarak dalam ruang parameter (yaitu jarak horizontal dalam grafik) dari setiap Momentum Jump dan Slope Jump.
Lampiran 1 - Demonstrasi alasan NAG_ball
Dalam gif yang memukau ini oleh Alec Radford , Anda dapat melihat NAG tampil lebih baik daripada CM ("Momentum" di gif).
(Minimum adalah di mana bintang berada, dan kurva adalah garis kontur . Untuk penjelasan tentang garis kontur dan mengapa mereka tegak lurus terhadap gradien, lihat video 1 dan 2 oleh 3Blue1Brown yang legendaris .)
Analisis momen tertentu menunjukkan alasan NAG_ball:
Lampiran 2 - hal / istilah yang saya buat (demi intuisi)
Lampiran 3 - istilah yang saya tidak pakai
sumber
Saya kira tidak.
Ada deskripsi yang bagus tentang properti Nesterov Momentum (alias Nesterov Accelerated Gradient) di, misalnya, Sutskever, Martens dkk. "Tentang pentingnya inisialisasi dan momentum dalam pembelajaran mendalam" 2013 .
Perbedaan utama adalah dalam momentum klasik, Anda pertama-tama mengoreksi kecepatan Anda dan kemudian membuat langkah besar sesuai dengan kecepatan itu (dan kemudian mengulangi), tetapi dalam momentum Nesterov Anda pertama-tama membuat langkah ke arah kecepatan dan kemudian membuat koreksi terhadap vektor kecepatan berdasarkan di lokasi baru (lalu ulangi).
yaitu momentum Klasik:
Sementara momentum Nesterov adalah ini:
Sebenarnya, ini membuat perbedaan besar dalam latihan ...
sumber
Ditambahkan: kursus Stanford pada jaringan saraf, cs231n , memberikan bentuk lain dari langkah-langkah:
Inilah
v
kecepatan alias langkah alias keadaan, danmu
merupakan faktor momentum, biasanya 0,9 atau lebih. (v
,x
danlearning_rate
bisa jadi vektor yang sangat panjang; dengan numpy, kodenya sama.)v
pada baris pertama adalah gradient descent dengan momentum;v_nesterov
ekstrapolasi, terus berjalan. Misalnya, dengan mu = 0,9,Deskripsi berikut memiliki 3 istilah:
istilah 1 saja adalah keturunan gradien polos (GD),
1 + 2 memberi momentum GD +,
1 + 2 + 3 memberi Nesterov GD.
Nesterov GD biasanya digambarkan sebagai langkah momentum bergantian dan langkah gradien :xt→yt yt→xt+1
di mana adalah gradien negatif, dan adalah stepsize alias tingkat pembelajaran.gt≡−∇f(yt) h
Gabungkan dua persamaan ini menjadi satu dalam saja, titik di mana gradien dievaluasi, dengan memasukkan persamaan kedua ke yang pertama, dan mengatur ulang istilah:yt
Istilah terakhir adalah perbedaan antara GD dengan momentum biasa, dan GD dengan momentum Nesterov.
Seseorang dapat menggunakan istilah momentum terpisah, misal dan : - momentum langkah - momentum gradienm mgrad
+ m (yt−yt−1)
+ mgrad h (gt−gt−1)
Kemudian memberikan momentum yang jelas, Nesterov. menguatkan noise (gradien bisa sangat bising), adalah filter smoothing IIR.m g r a d = m m g r a d > 0 m g r a d ∼ - .1mgrad=0 mgrad=m
mgrad>0
mgrad∼−.1
By the way, momentum dan stepsize dapat bervariasi dengan waktu, dan , atau per komponen (ADA * berkoordinasi keturunan), atau keduanya - lebih metode dari uji kasus.h tmt ht
Plot yang membandingkan momentum polos dengan momentum Nesterov pada test case 2d sederhana, :
sumber