《An overview of gradient descent optimization algorithms》
本文包含的主要內容:
- gradient descent基本形式:BGD,SGD,MBGD。
- 幾種啟發式優化演算法:momentum,NAG,Adagrad等。
- 可視化與一些tricks。
===========================正文開始====================================
Gradient descent variants(BGD,SGD,MBGD)
BGD code:
SGD&MBGD code:
嗯,手寫公式很方便。就醬。Q:想想看,為什麼後兩者都要shuffle?
Challenges
Q:如何設計learning rate?過大會在目標的附近波動;過小會收斂很慢。
Q:採用動態調整的方式?例如退火等方式,那有些參數也要事先define好....對吧。。。
Q:所有參數都依賴一個learning rate來更新?在什麼樣的場景下,這種缺點會放大?
Q:當是非凸函數時,追求梯度為零向量還不夠,如何避免鞍點?
- Momentum([物]動量)
這是一種啟發式演算法。形式是這樣的:
既然是啟發式方法,那麼就試圖從啟發的角度去理解它~即物體的動能 = 上一個時刻的動能 + 上一時刻的勢能差。由於有阻力和轉換時的損失,所以兩者都乘以一個係數。就像一個小球從坡上向下滾,當前的速度取決於上一個時刻的速度和勢能的改變數。
這樣在更新參數時,除了考慮到梯度以外,還考慮了上一個時刻參數的歷史變更幅度。例如,參數上一次更新幅度較大,並且梯度還不小,那麼再更新時是不是得更猛烈些了~
這樣啟發式演算法,確實從邏輯感知上有它的道理。原文認為其faster convergence and reduced oscillation,前者同意,但後者持保留意見(因為最終結果是一個多維向量綜合作用的結果,還真不好下這個結論)。Accelerate SGD倒是真的。。。
- Nesterov accelerated gradient(NAG)
還是以上面小球的例子來看,momentum方式下小球完全是一種盲目被動的方式滾下的。這樣有個缺點就是在臨近最優點附近是控制不住速度。我們希望小球很smart,它可以預判後面的"地形",要是後面地形還是很陡,那就繼續堅定不移的大膽走下去;不然的話咱就收斂點~
當然,小球自己也不知道真正要走到哪裡,這裡以
作為近似下一位置,就有:相比於之前momentum方式是考慮上一時刻的動能和當前點的梯度,而NAG考慮的是上一時刻的動能和近似下一點的梯度。這使得它可以先看看自己的"前途",然後慎重一些。Hinton的slides是這樣給出的:
感覺還有必要試著解釋一下:
兩個blue vectors分別理解為梯度和動能,兩個向量和即為momentum方式的作用結果。
而靠左邊的brown vector是動能,可以看出它那條blue vector是平行的,但是它預測了下一階段的梯度是red vector,因此向量和就是green vector,即NAG方式的作用結果。
- Adagrad
"It adapts the learning rate to the parameters, performing larger updates for infrequent and smaller updates for frequent parameters."因此,Adagrad對於稀疏數據上有著良好的表現。
之前所講的方法中所有參數在更新時均使用同一個learning rate,而在Adagrad的每一個參數的每一次更新中都使用不同的learning rate。這樣的話,令第t步更新時對第i個參數的梯度為:
參數的更新的一般形式為:如上所述,Adagrad的差異之處正是在於learning rate不同於其他,將learning rate改為如下:這裡的Gt是一個d*d維對角矩陣,對角線上的元素(i,i)表示在第t步更新時,歷史上θi梯度平方和的積累。?只是一個值很小的防止分母為0的平滑項。
Q:若是這樣的話,為什麼在step t用對角矩陣保存中間信息呢?使用一維數組不就可以了么,是為了某些方便計算么?(哪位了解,望指點。)
Q:為何帶上平方根符號?據說這樣的效果更好。
個人感覺,巨大多數自適應的learning rate都是有根據變化幅度而更改,並且具有逐漸收斂的特性。所以這種啟發式方法僅是一種可行性方式,並不是唯一的,也絕不是最好的。把握其本質即可。
可視化
Alec Radford這位大哥做了兩張動態圖(知乎上貌似目前還有bug,動態圖需要點擊一下才會動),SGD optimization on loss surface contours:
SGD optimization on saddle point:
一些tricks
- 為避免bias,做shuffle。但有時在某種背景下,也可刻意地事先order training examples。
- Batch normalization。
- Early stopping。若指標趨近平穩,及時終止。
- Gradient noise。引入一個符合高斯分布的noise項,使得在poor initialization時具有更好的魯棒性。形式如下:
參考:
[1] http://sebastianruder.com/optimizing-gradient-descent/
[2] http://www.cnblogs.com/maybe2030/p/5089753.html
[3] http://www.csdn.net/article/2016-04-07/2826616
[4] http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf
歡迎關注與討論,謝謝。
推薦閱讀:
TAG:机器学习 |