各種優化算法詳解


1、BGD(Batch Gradient Descent)(批量梯度下降)

參考鏈接:https://zhuanlan.zhihu.com/p/25765735

拿所有樣本來計算梯度,接着更新參數。對於凸函數可以達到全局最小,非凸函數可以達到局部最小。

需要的先驗參數有迭代次數(停止更新的條件)、學習率。

優點:每次更新都朝着全局最優的方向前進。

缺點:每次都需要拿全部樣本來計算梯度,速度很慢。

 

2、SGD(Stochastic Gradient Descent)(隨機梯度下降)

參考鏈接同BGD。

每次只拿全部樣本中的某一個來計算梯度,接着更新參數,直到達到停止更新的條件。

需要的先驗參數有迭代次數(停止更新的條件)、學習率。

優點:每次只需要取全部樣本中的某一個樣本來計算梯度,速度很快。

缺點:①每次更新參數,不一定是朝着全局最優的方向更新,造成了參數的來回震盪,收斂比較慢。從期望上來看,SGD和BGD朝着相同的方向去更新參數。

      ②收斂速度慢,會來回震盪。雖然SGD可能因為來回震盪,能夠達到更好的局部最優。

 

3、MBGD(Mini-Batch Gradient Descent)(小批量梯度下降)

參考鏈接同BGD。

為了在SGD和BGD中間取得平衡,既不希望每次都要取全部樣本來算梯度導致時間過長,也不希望每次只取一個樣本來算梯度導致參數更新來回震盪、收斂較慢,於是每次去一定量的樣本來就算梯度。

需要的先驗參數有迭代次數(停止更新的條件)、學習率、每輪的樣本個數

優點:比SGD收斂速度加快,比BGD計算時間少

缺點:①會在局部最優值點附近左右徘徊

      ②學習率是固定的。參數更新的時候,每個參數的梯度是不一樣的,有的參數的梯度總是比較小,有的參數的梯度總是比較大。我們有時候希望梯度總是很小的參數,應該步長大一點,梯度總是很大的參數,步長要小一些,這樣收斂會快一些。

 

到目前為止,我們已經有了三種方法了,但是仍然面臨收斂速度慢和學習率固定的問題,因此有了以下更多的方法。

 

4、Momentum(動量法)

參考鏈接:https://blog.csdn.net/tsyccnh/article/details/76270707

梯度下降,梯度不僅僅是當前點的梯度,還考慮了歷史上的梯度,兩者加權求和作為當前點的新梯度。更新參數使用新的梯度計算方法。

需要的先驗參數有迭代次數(停止更新的條件)、學習率、衰減率(歷史梯度),如果使用小批量的方法還有每輪的樣本個數。

優點:①考慮了歷史梯度之后,如果歷史梯度和當前梯度是同方向的,那么加速到達局部最優。

   ②歷史梯度和當前梯度方向不一樣,如果歷史梯度的值還是大於當前梯度的值,那么有時候可以越過局部最優點(但不保證必定能達到更好的局部最優)。

   ③歷史梯度和當前梯度方向不一樣,如果歷史梯度的值小於當前梯度的值,那么可以加快收斂、減小震盪。

缺點:收斂速度還不是最快。

 

5、NAG(Nesterov Accelerated Gradient)

參考鏈接:https://blog.csdn.net/tsyccnh/article/details/76673073

假設我們在點A,有點A的歷史梯度,那為什么不先按歷史梯度到達前面的點B,知道點B的梯度,再把點B的梯度和點A的歷史梯度加權在一起得到點A的梯度。

也就是說,我們得到點A的梯度,不是用點A的歷史梯度和點A的當前梯度加權求和,而是用點A的歷史梯度和點A前面的點B的當前梯度加權求和。

這樣子,相當於我們提前知道了未來的信息。

需要的先驗參數有迭代次數(停止更新的條件)、學習率、衰減率(歷史梯度),如果使用小批量的方法還有每輪的樣本個數。

優點:比起Momentum的方法,收斂速度快了很多。

缺點:學習率仍然是固定的。

 

6、Adagrad(Adaptive gradient algorithm)

參考鏈接:https://zh.d2l.ai/chapter_optimization/adagrad.html

當兩個梯度值有比較大的差異時,需要選擇比較小的學習率來乘以比較大的梯度值,使得參數的更新不會過於猛烈。但這樣子話,梯度小的參數更新得就會很慢。

所以我們需要為不同的參數分配不同的學習率。

需要的先驗參數有迭代次數(停止更新的條件)、學習率、一個很小的常數用來確保分母不為0,如果使用小批量的方法還有每輪的樣本個數。

優點:可以保證不同的參數(梯度不同)擁有不一樣的學習率。

缺點:學習率一直在顯著降低,如果沒有找到比較好的解,那么在后期會由於學習率過小而難以到達局部最優。

 

7、RMSProp

參考鏈接:https://zh.d2l.ai/chapter_optimization/rmsprop.html

為了解決Adagrad的學習率一直在降低的問題,RMSProp方法的分母不再是一直在增加的梯度,而是換成了歷史梯度和當前梯度的加權平均。

這樣可以解決Adagrad的學習率過小的尷尬情況。

需要的先驗參數有迭代次數(停止更新的條件)、學習率、一個很小的常數用來確保分母不為0,衰減率(歷史梯度的平方),如果使用小批量的方法還有每輪的樣本個數。

優點:可以解決Adagrad學習率過小的情況,同時保證不同的參數(不同梯度)擁有不一樣的學習率。

缺點:目前沒發現。

 

8、Adadelta

參考鏈接:https://zh.d2l.ai/chapter_optimization/adadelta.html

同樣為了解決Adagrad的學習率一直在降低的問題,但不需要學習率這個先驗參數。

需要的先驗參數有迭代次數(停止更新的條件)、一個很小的常數用來確保分母不為0,衰減率(歷史梯度的平方),如果使用小批量的方法還有每輪的樣本個數。

優點:可以解決Adagrad學習率過小的情況,同時保證不同的參數(不同梯度)擁有不一樣的學習率,且不需要一個先驗的學習率參數。

缺點:目前沒發現。

 

9、Adam

參考鏈接:https://zh.d2l.ai/chapter_optimization/adam.html

把RMSProp的方法和Momentum的方法融合在一起,既能確保不同梯度的參數擁有不一樣的學習率,又能添加上一個動量來加速收斂。

同時做了偏差修正,避免剛開始的時候的梯度過小的情況。

需要的先驗參數有迭代次數(停止更新的條件)、學習率、一個很小的常數用來確保分母不為0,衰減率β1(歷史梯度,又稱動量),衰減率β2(歷史梯度的平方),如果使用小批量的方法還有每輪的樣本個數。

優點:①不同梯度的參數擁有不一樣的學習率

   ②添加上一個動量加速收斂。

   ③做了偏差修正。

缺點:目前沒發現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM