優化演算法總結
優化演算法主要分為兩大陣營:梯度下降學派和牛頓法學派。
關於兩者的區別,我們引用下@金秉文 的回答:
比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。
批量梯度下降法
批量梯度下降法(Batch Gradient Descent)是梯度下降法最原始的形式,它在每次參數更新時都會使用上所有樣本的信息:
可想而知,當樣本很大時,其訓練過程會很慢,但迭代次數會比較少。
隨機梯度下降法
隨機梯度下降法每次只使用一個樣本的信息來更新參數,在樣本很大的情況下,可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了,相比於批量梯度下降來說就快了很多了。
但是,因為每次只利用一個樣本的信息,不能保證每次迭代都向著整體最優化方向,也就是會曲折著前行。
這樣做雖然會加快訓練速度,但其準度會有所降低。
那麼有沒有演算法能夠兼具這兩種方法的優點呢?
隨機梯度下降其收斂是有理論保證,具體可參見:為什麼隨機梯度下降方法能夠收斂? - 數學
Mini-batch gradient descent
通用的做法是,我們可以將整體樣本劃分為多個Batch,其中每個Batch包含一定數量的樣本(一般50到256之間),每一次我們只使用一個Batch來更新參數,這也是我們目前所普遍採用的方法。
但是變化到現在,我們依然還有一些沒有解決的問題:
- 如何選擇合適的學習速率?太大會阻礙收斂,太小會使得收斂過慢。
- 自適應調整學習速率?
[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:機器學習 |