Moment tabanlı gradyan iniş ile Nesterov'un hızlandırılmış degrade iniş arasındaki fark nedir?


48

Moment tabanlı gradient iniş aşağıdaki gibi çalışır:

v=self.momentummlrg

burada önceki ağırlık güncellemesidir ve , parametrelerine göre mevcut gradyandır , öğrenme hızıdır ve bir sabittir.g p l r s e l f . m, O m e n t u mmgplrself.momentum

pnew=p+v=p+self.momentummlrg

ve Nesterov'un hızlandırılmış gradyan inişi şu şekilde çalışıyor:

pnew=p+self.momentumvlrg

hangi eşdeğerdir:

pnew=p+self.momentum(self.momentummlrg)lrg

veya

pnew=p+self.momentum2m(1+self.momentum)lrg

kaynak: https://github.com/fchollet/keras/blob/master/keras/optimizers.py

Bu yüzden bana göre Nesterov'un hızlandırılmış gradyan inişi sadece geçirgen ağırlık değişim terimi m (düz eski momentuma kıyasla) üzerinde lr * g terimine daha fazla ağırlık veriyor. Bu yorum doğru mu?


7
Misiniz yazmak için soran çok fazla soruyor? LATEX
Rodrigo de Azevedo,

Yanıtlar:


35

Arech'in Nesterov momentumu ile ilgili cevabı doğrudur, fakat kod aslında aynı şeyi yapar. Bu nedenle, Nesterov yöntemi, terimine daha fazla ağırlık verir ve terimine daha az ağırlık verir .vlrgv

Keras'ın uygulanmasının neden doğru olduğunu göstermek için Geoffrey Hinton'un örneğini ödünç alacağım .
görüntü tanımını buraya girin

Nesterov yöntemi "kumar-> düzeltme" yaklaşımını benimsemiştir. Kahverengi vektör (kumar / atlama), kırmızı vektör (düzeltme) ve yeşil vektör (gerçekte yerleştiğimiz yer). degrade işlevidir.
v=mvlr(w+mv)
w=w+v
mvlr(w+mv)mvlr(w+mv)()

Kod farklı görünür çünkü yeşil vektör yerine kahverengi vektörle hareket eder, çünkü Nesterov yöntemi yalnızca yerine değerlendirmesini gerektirir . Dolayısıyla her adımda istiyoruz(w+mv)=:g(w)

  1. bulunduğumuz yere geri dön(10)
  2. gereken yere yeşil vektörü takip edin(02)
  3. başka bir kumar(23)

Keras'ın kısaca yazdığı kod , ve bazı matematik işlemleri yaparızp=p+m(mvlrg)lrg

p=pmv+mv+m(mvlrg)lrg=pmv+mvlrg+m(mvlrg)=pmv+(mvlrg)+m(mvlrg)

ve bu tam olarak . Aslında orijinal kod daha kısa bir yol . 1 2 31023123

Gerçek tahmini değer (yeşil vektör) olmalıdır, yani yakınsakları öğrenirken yakın olmalıdır .ppmvp


2
@youkaichao bunu deneyin youtube.com/watch?v=LdkkZglLZ0Q
dontloo

13

Bana göre OP'nin sorusu zaten cevaplanmış, ancak momentum ve Klasik Momentum (CM) ile Nesterov'un Hızlandırılmış Gradyanı (NAG) arasındaki fark hakkında başka (umarım sezgisel) bir açıklama yapmaya çalışacağım.


tl; dr
Sonunda resme atlayın.
NAG_ball'un akıl yürütmesi başka bir önemli kısım, ancak geri kalan her şey olmadan anlaşılmasının kolay olacağından emin değilim.



θf(θ)

Öte yandan, son zamanlarda bu iki vahşi duyarlı top ortaya çıktı:
CM_ball NAG_ball

(Topların gözlemlenen davranışlarına göre ve kağıda göre Derin öğrenmede başlangıç ​​ve momentumun önemi ile ilgili olarak , 2. bölümde hem CM hem de NAG'yi açıklayan), her topun tam olarak bu yöntemlerden biri gibi davrandığı , ve onlara "CM_ball" ve "NAG_ball" diyoruz:
(NAG_ball gülümsüyor, çünkü son zamanlarda Ders 6c'nin sonunu izledi - Geoffrey Hinton'un momentum yöntemi, Nitish Srivastava ve Kevin Swersky ile birlikte , ve bu yüzden her zamankinden daha fazla inanıyor Davranışı daha az hızlı bulmaya yol açar.)

İşte topları nasıl davranır:


  • θttvttθt=θt1+vt
  • vt
    • vt1
      vt1
      μ0.9μ<1μvt1
      μ


    • ϵϵ>0
      ϵ
      gϵg
  • vt=μvt1ϵg

  • vt=μvt1ϵf(θt1)

  • vt=μvt1ϵf(θt1+μvt1)

    NAG_ball muhakeme

    • Hangi atlama önce gelirse, Momentum Jump aynı olacaktır.
      Bu yüzden durumu Momentum Jump'imi çoktan yapmış gibi düşünmeliyim ve Slope Jump'ımı yapmak üzereyim.
    • Şimdi, Eğim Atlayışım kavramsal olarak buradan başlayacak, ancak Eğim Atlamamın Momentum Atlamadan önce başlamış gibi veya burada başlamış gibi olacağını hesaplamayı seçebilirim.
    • θθθ



θ
f(θ)7

CM_ball vs NAG_ball örneği


Ek 1 - NAG_ball'un akıl yürütme gösterimi

Alec Radford'un bu büyüleyici gifinde NAG'in CM'den (gif'deki "Momentum") tartışmasız daha iyi performans gösterdiğini görebilirsiniz.
(Asgari yıldızın olduğu yer ve eğriler kontur çizgileridir . Kontur çizgileri ve neden eğime dik oldukları ile ilgili açıklama için , efsanevi 3Blue1'deki video 1 ve 2'ye bakınız .)

NAG, CM'den daha iyi (Momentum)

Belirli bir anın analizi, NAG_ball'un mantığını gösterir:

Belirli bir anda NAG vs CM

  • (Uzun) mor ok momentum alt basamağıdır.
  • Saydam kırmızı ok, momentum alt adımından önce başlıyorsa gradyan alt adımıdır.
  • Siyah ok, momentum alt adımından sonra başlıyorsa gradyan alt adımıdır.
  • CM koyu kırmızı okun hedefi ile sonuçlanır.
  • NAG siyah okun hedefi ile sonuçlanacak.

Ek 2 - Yaptığım şeyler / terimler (sezgi uğruna)

  • CM_ball
  • NAG_ball
  • Çift atlama
  • Momentum Atlama
  • Momentum hava sürtünmesi nedeniyle kaybedildi
  • Şev Atlama
  • Bir topun kargaşası
  • Dün topları gözlemleyerek

Ek 3 - Yapmadığım terimler


1
Parçayı, "Topların nasıl davrandığı: ..." 'dan "minimum ile minimum arasında (nispeten doğru büyüklükte) yönünde yönlendirmek için" buluyorum. " farkın bir açıklaması olarak mükemmel.
Poete Maudit

12

Sanmıyorum

Örneğin, Sutskever, Martens ve diğerleri, "Derin öğrenmede başlangıç ​​ve momentumun önemi üzerine" 2013'te Nesterov Momentum (aka Nesterov Accelerated Gradient) özelliklerinin iyi bir açıklaması vardır .

Temel fark, klasik momentumda ilk önce hızınızı düzeltir ve sonra o hıza göre büyük bir adım atarsınız (ve sonra tekrar eder), ancak Nesterov momentumunda ilk önce hız yönüne bir adım atarsınız ve sonra bir hız vektörüne göre bir düzeltme yaparsınız. yeni konumda (daha sonra tekrarlayın).

yani klasik momentum:

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) )
W(t+1) = W(t) + vW(t+1)

Nesterov momentumu şu şekilde iken:

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) + momentum.*vW(t) )
W(t+1) = W(t) + vW(t+1)

Aslında, bu pratikte büyük bir fark yaratıyor ...


5

Eklendi: sinir ağları üzerinde bir Stanford kursu, cs231n , adımların başka bir şeklini veriyor:

v = mu * v_prev - learning_rate * gradient(x)   # GD + momentum
v_nesterov = v + mu * (v - v_prev)              # keep going, extrapolate
x += v_nesterov

İşte vhız aka adım aka durum ve mutipik olarak 0.9 ya da öylesine bir momentum faktörüdür. ( v, xve learning_rateçok uzun vektörler olabilir; numpy ile kod aynıdır.)

vilk satırda momentum ile gradyan iniş; v_nesterovtahmin ediyor, devam ediyor. Örneğin, mu = 0.9 ile

v_prev  v   --> v_nesterov
---------------
 0  10  -->  19
10   0  -->  -9
10  10  -->  10
10  20  -->  29

Aşağıdaki tarifin 3 terimi vardır:
yalnız terim 1 düz gradyan iniş (GD),
1 + 2 GD + momentum verir,
1 + 2 + 3 Nesterov GD verir.

xtytytxt+1

yt=xt+m(xtxt1) - momentum, yordayıcı
xt+1=yt+h g(yt) - gradyan

gtf(yt)h

yt

yt+1=yt
+ h gt - gradyan
+ m (ytyt1) - adım momentumu
+ m h (gtgt1) - gradyan momentumu

Son terim, düz momentumlu GD ve Nesterov momentumlu GD arasındaki farktır.


mmgrad
+ m (ytyt1) - adım momentumu
+ mgrad h (gtgt1) - gradyan momentumu

mgrad=0mgrad=m
mgrad>0
mgrad.1

mtht



(x/[cond,1]100)+ripple×sin(πx)

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.