收藏 | 各種 Optimizer 梯度下降優(yōu)化算法回顧和總結(jié)
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
本文轉(zhuǎn)自|深度學習這件小事
論文標題:An overview of gradient descent optimization algorithms
原文鏈接:https://arxiv.org/pdf/1609.04747.pdfGithub:NLP相關Paper筆記和代碼復現(xiàn)(https://github.com/DengBoCong/nlp-paper)
說明:閱讀論文時進行相關思想、結(jié)構(gòu)、優(yōu)缺點,內(nèi)容進行提煉和記錄,論文和相關引用會標明出處,引用之處如有侵權,煩請告知刪除。
寫在前面
-
計算目標函數(shù)關于當前參數(shù)的梯度: -
根據(jù)歷史梯度計算一階動量和二階動量: -
計算當前時刻的下降梯度: -
根據(jù)下降梯度進行更新:
-
鞍點:一個光滑函數(shù)的鞍點鄰域的曲線,曲面,或超曲面,都位于這點的切線的不同邊。例如這個二維圖形,像個馬鞍:在x-軸方向往上曲,在y-軸方向往下曲,鞍點就是(0,0)。
-
指數(shù)加權平均、偏差修正:可參見這篇文章
Gradient Descent(GD)
-
訓練速度慢:在應用于大型數(shù)據(jù)集中,每輸入一個樣本都要更新一次參數(shù),且每次迭代都要遍歷所有的樣本,會使得訓練過程及其緩慢,需要花費很長時間才能得到收斂解。 -
容易陷入局部最優(yōu)解:由于是在有限視距內(nèi)尋找下山的反向,當陷入平坦的洼地,會誤以為到達了山地的最低點,從而不會繼續(xù)往下走。所謂的局部最優(yōu)解就是鞍點,落入鞍點,梯度為0,使得模型參數(shù)不在繼續(xù)更新。
Batch Gradient Descent(BGD)
Stochastic Gradient Descent(SGD)
-
雖然看起來SGD波動非常大,會走很多彎路,但是對梯度的要求很低(計算梯度快),而且對于引入噪聲,大量的理論和實踐工作證明,只要噪聲不是特別大,SGD都能很好地收斂。 -
應用大型數(shù)據(jù)集時,訓練速度很快。比如每次從百萬數(shù)據(jù)樣本中,取幾百個數(shù)據(jù)點,算一個SGD梯度,更新一下模型參數(shù)。相比于標準梯度下降法的遍歷全部樣本,每輸入一個樣本更新一次參數(shù),要快得多。
-
SGD在隨機選擇梯度的同時會引入噪聲,使得權值更新的方向不一定正確(次要)。 -
SGD也沒能單獨克服局部最優(yōu)解的問題(主要)。
Mini-batch Gradient Descent(MBGD,也叫作SGD)
-
Mini-batch gradient descent 不能保證很好的收斂性,learning rate 如果選擇的太小,收斂速度會很慢,如果太大,loss function 就會在極小值處不停地震蕩甚至偏離(有一種措施是先設定大一點的學習率,當兩次迭代之間的變化低于某個閾值后,就減小 learning rate,不過這個閾值的設定需要提前寫好,這樣的話就不能夠適應數(shù)據(jù)集的特點)。對于非凸函數(shù),還要避免陷于局部極小值處,或者鞍點處,因為鞍點所有維度的梯度都接近于0,SGD 很容易被困在這里(會在鞍點或者局部最小點震蕩跳動,因為在此點處,如果是BGD的訓練集全集帶入,則優(yōu)化會停止不動,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就會發(fā)生震蕩,來回跳動)。 -
SGD對所有參數(shù)更新時應用同樣的 learning rate,如果我們的數(shù)據(jù)是稀疏的,我們更希望對出現(xiàn)頻率低的特征進行大一點的更新, 且learning rate會隨著更新的次數(shù)逐漸變小。
Momentum
-
隨機梯度的方法(引入的噪聲) -
Hessian矩陣病態(tài)問題(可以理解為SGD在收斂過程中和正確梯度相比來回擺動比較大的問題)。
Nesterov Accelerated Gradient
Adagrad
-
仍需要手工設置一個全局學習率 , 如果 設置過大的話,會使regularizer過于敏感,對梯度的調(diào)節(jié)太大 -
中后期,分母上梯度累加的平方和會越來越大,使得參數(shù)更新量趨近于0,使得訓練提前結(jié)束,無法學習
Adadelta
-
訓練初中期,加速效果不錯,很快 -
訓練后期,反復在局部最小值附近抖動
RMSprop
-
其實RMSprop依然依賴于全局學習率 -
RMSprop算是Adagrad的一種發(fā)展,和Adadelta的變體,效果趨于二者之間 -
適合處理非平穩(wěn)目標(包括季節(jié)性和周期性)——對于RNN效果很好
Adaptive Moment Estimation(Adam)
-
Adam梯度經(jīng)過偏置校正后,每一次迭代學習率都有一個固定范圍,使得參數(shù)比較平穩(wěn)。 -
結(jié)合了Adagrad善于處理稀疏梯度和RMSprop善于處理非平穩(wěn)目標的優(yōu)點 -
為不同的參數(shù)計算不同的自適應學習率 -
也適用于大多非凸優(yōu)化問題——適用于大數(shù)據(jù)集和高維空間。
AdaMax
Nadam
-
下圖描述了在一個曲面上,6種優(yōu)化器的表現(xiàn):

-
下圖在一個存在鞍點的曲面,比較6中優(yōu)化器的性能表現(xiàn):

-
下圖圖比較了6種優(yōu)化器收斂到目標點(五角星)的運行過程

總結(jié)
-
對于稀疏數(shù)據(jù),盡量使用學習率可自適應的優(yōu)化方法,不用手動調(diào)節(jié),而且最好采用默認值 -
SGD通常訓練時間更長,但是在好的初始化和學習率調(diào)度方案的情況下,結(jié)果更可靠 -
如果在意更快的收斂,并且需要訓練較深較復雜的網(wǎng)絡時,推薦使用學習率自適應的優(yōu)化方法。 -
Adadelta,RMSprop,Adam是比較相近的算法,在相似的情況下表現(xiàn)差不多。 -
在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果 -
如果驗證損失較長時間沒有得到改善,可以停止訓練。 -
添加梯度噪聲(高斯分布 )到參數(shù)更新,可使網(wǎng)絡對不良初始化更加健壯,并有助于訓練特別深而復雜的網(wǎng)絡。
-
An overview of gradient descent optimization algorithms(https://ruder.io/optimizing-gradient-descent/) -
深度學習最全優(yōu)化方法總結(jié)比較(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)(https://zhuanlan.zhihu.com/p/22252270) -
visualize_optimizers(https://github.com/snnclsr/visualize_optimizers) -
lossfunctions(https://lossfunctions.tumblr.com/) -
優(yōu)化算法Optimizer比較和總結(jié)(https://zhuanlan.zhihu.com/p/55150256) -
一個框架看懂優(yōu)化算法之異同 SGD/AdaGrad/Adam(https://zhuanlan.zhihu.com/p/32230623) -
深度學習——優(yōu)化器算法Optimizer詳解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)(https://www.cnblogs.com/guoyaohua/p/8542554.html) -
機器學習:各種優(yōu)化器Optimizer的總結(jié)與比較(https://blog.csdn.net/weixin_40170902/article/details/80092628) -
optimizer優(yōu)化算法總結(jié)(https://blog.csdn.net/muyu709287760/article/details/62531509#%E4%B8%89%E7%A7%8Dgradient-descent%E5%AF%B9%E6%AF%94)
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
評論
圖片
表情

