標籤:

優化演算法總結

優化演算法主要分為兩大陣營:梯度下降學派和牛頓法學派。

關於兩者的區別,我們引用下@金秉文 的回答:

比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。

批量梯度下降法

批量梯度下降法(Batch Gradient Descent)是梯度下降法最原始的形式,它在每次參數更新時都會使用上所有樣本的信息:

	heta = 	heta - eta cdot 
abla_	heta J( 	heta)

可想而知,當樣本很大時,其訓練過程會很慢,但迭代次數會比較少。

隨機梯度下降法

隨機梯度下降法每次只使用一個樣本的信息來更新參數,在樣本很大的情況下,可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了,相比於批量梯度下降來說就快了很多了。

	heta = 	heta - eta cdot 
abla_	heta J( 	heta; x^{(i)}; y^{(i)})

但是,因為每次只利用一個樣本的信息,不能保證每次迭代都向著整體最優化方向,也就是會曲折著前行。

這樣做雖然會加快訓練速度,但其準度會有所降低。

那麼有沒有演算法能夠兼具這兩種方法的優點呢?

隨機梯度下降其收斂是有理論保證,具體可參見:為什麼隨機梯度下降方法能夠收斂? - 數學

Mini-batch gradient descent

通用的做法是,我們可以將整體樣本劃分為多個Batch,其中每個Batch包含一定數量的樣本(一般50到256之間),每一次我們只使用一個Batch來更新參數,這也是我們目前所普遍採用的方法。

但是變化到現在,我們依然還有一些沒有解決的問題:

  1. 如何選擇合適的學習速率?太大會阻礙收斂,太小會使得收斂過慢。

  2. 自適應調整學習速率?

[1]: An overview of gradient descent optimization algorithms

[2]: [Machine Learning] 梯度下降法的三種形式BGD、SGD以及MBGD

[3]: Whats the difference between gradient descent and stochastic gradient descent?


推薦閱讀:

機器學習基石筆記14:正則化(Regularization)
想成為機器學習工程師?這份自學指南你值得收藏(自用)
Paper Reading | 讓深度學習更高效運行的兩個視角
樸素貝葉斯
DL 學習 - 認識 RNN

TAG:機器學習 |