1. 程式人生 > >深度學習優化函式詳解(5)-- Nesterov accelerated gradient (NAG)

深度學習優化函式詳解(5)-- Nesterov accelerated gradient (NAG)

深度學習優化函式詳解系列目錄

上一篇文章講解了猶如小球自動滾動下山的動量法(momentum)這篇文章將介紹一種更加“聰明”的滾動下山的方式。動量法每下降一步都是由前面下降方向的一個累積和當前點的梯度方向組合而成。於是一位大神(Nesterov)就開始思考,既然每一步都要將兩個梯度方向(歷史梯度、當前梯度)做一個合併再下降,那為什麼不先按照歷史梯度往前走那麼一小步,按照前面一小步位置的“超前梯度”來做梯度合併呢?如此一來,小球就可以先不管三七二十一先往前走一步,在靠前一點的位置看到梯度,然後按照那個位置再來修正這一步的梯度方向。如此一來,有了超前的眼光,小球就會更加”聰明“, 這種方法被命名為Nesterov accelerated gradient 簡稱 NAG。

這裡寫圖片描述

↑這是momentum下降法示意圖
這裡寫圖片描述
↑這是NAG下降法示意圖
看上面一張圖仔細想一下就可以明白,Nesterov動量法和經典動量法的差別就在B點和C點梯度的不同。

公式推導

上圖直觀的解釋了NAG的全部內容。
第一次看到NAG的梯度下降公式的時候我是懵的,梯度下降的流程比較明白,公式上不太理解。後來推導了好半天才得到NAG的公式,下面就把我推導的過程寫出來。我推導公式的過程完全符合上面NAG的示意圖,可以對比參考。
vtv_t 為第t次迭代梯度的累積
v0=0v_0=0
v1=ηθJ(θ)v_1=\eta \nabla_{\theta}J(\theta)


v2=γv1+ηθJ(θγv1)v_2=\gamma v_1+\eta \nabla_{\theta}J(\theta-\gamma v_1)
\downarrow
vt=γvt1+ηθJ(θγvt1)v_t=\gamma v_{t-1}+\eta \nabla_{\theta}J(\theta-\gamma v_{t-1})
引數更新公式
θnew=θvt\theta_{new} = \theta - v_t

公式裡的γvt1-\gamma v_{t-1}

就是圖中B到C的那一段向量, θγvt1\theta-\gamma v_{t-1} 就是C點的座標(引數)
γ\gamma 代表衰減率,η\eta 代表學習率。

實驗

實驗選擇了學習率 η=0.01\eta=0.01, 衰減率 γ=0.9\gamma = 0.9
這裡寫圖片描述
↑ 這是Nesterov方法

↑ 這是動量法(momentum)

沒有對比就沒有傷害,NAG方法收斂速度明顯加快。波動也小了很多。實際上NAG方法用到了二階資訊,所以才會有這麼好的結果。