這個需要翻墻的外國網(wǎng)站寫的很好:
http://ruder.io/optimizing-gradient-descent/index.html#momentum
SGD遇到的問題
當兩個方向上的梯度相差過大的時候會出現(xiàn)劇烈的震蕩删掀,如圖:
在這個圖中,垂直方向的梯度要遠大于水平方向的梯度,這個時候在保證正確迭代的情況下深啤,水平方向逐漸減小寄疏,而垂直方向開始劇烈震動危纫,使得收斂的很慢笛厦。為了解決這個問題铆铆,提出了許多梯度下降的方法窝撵,有很好的效果傀顾。
Momentum
Momentum是為了解決劇烈震動提出的一種方法,效果如圖所示:
它主要是通過添加一個參數(shù)γ在上一步的更新方向上碌奉。實現(xiàn)的方法是下面的式子:
η是學習速率短曾,γ取值一般為0.9.
對于這種方法我們可以理解為我們對于前一步的變化進行了衰減,衰減率為γ赐劣,而且計算了現(xiàn)在的梯度嫉拐,如果當前的梯度和上一次的方向一致,那么久增大這種變化魁兼,而如果方向相反則減小這種變化婉徘,參照上面的圖的垂直方向,我們可以認為在垂直方向上第一次更新方向是往上的咐汞,假設(shè)變化了10盖呼,而第二次的梯度是往下的與第一次相反,在衰減后在進行調(diào)整可以認為向下移動只有5化撕,從而減小了垂直方向的變化几晤,達到減小震動效果。
Nestrov Momentum
Nestrov是根據(jù)Momentum進行的改進植阴,它使得更新更加的智能更加具有前瞻性蟹瘾,通過公式我們可以與Momentum進行以下比較:
兩者主要的區(qū)別在于梯度的計算章钾,Momentum計算的參數(shù)在當前位置的梯度,而Nestrov首先估計了參數(shù)在更新后的大致位置热芹,那就是參數(shù)在向上一步的方向繼續(xù)運動贱傀,也就是θ-γvt-1然后計算該位置的梯度作為對更新方向的糾正,一張很形象的圖是:
其中較長的藍色的線是前一步的梯度伊脓,而棕色線是先向該方向進行移動府寒,我認為可以理解為γvt-1,而紅色的就是在更新后的位置計算的梯度,對原先的移動進行修正报腔,最后得到當前的v也就是綠色的向量株搔,從而對參數(shù)進行更新。
http://www.360doc.com/content/16/1010/08/36492363_597225745.shtml
這篇文章通過對原來公式的變形纯蛾,可以看出該算法實際上是考慮了二階導(dǎo)信息纤房,類似于牛頓迭代法從而使得迭代更加快速。
Adagrad
一種自適應(yīng)學習速率的迭代算法翻诉,主體的更新過程就是最基礎(chǔ)的
而主要的改變在于學習速率炮姨,Adagrad的更新冊率如下:
其中η為初始學習速率gt為第t次的梯度,而ε是一個防止除數(shù)為0的很小的數(shù)碰煌,一般是1*10-8,隨著逐漸的更新梯度的平方和逐漸在增大舒岸,而學習速率在減小。
缺點
1.學習速率單調(diào)遞減芦圾,后期學習速率很小趨近于0蛾派。
2.需要手工設(shè)置初始學習率。
Adadelta和RMSprop
兩者是相同的个少,都是為了解決Adagrad的缺點洪乍,在Adadelta中我們通過衰減來使用最近的梯度的平方,通過使用期望來保證它不會過大而是學習率降為0.而期望的更新是帶權(quán)的夜焦,這個權(quán)就是衰減系數(shù)壳澳,具體的公式如下:
ρ是衰減系數(shù),可以理解為通過每一次的衰減只使用附近的梯度平方糊探,較長時間之前的梯度隨著衰減逐漸消失钾埂。到這一步是RMSprop,但是仍然存在超參數(shù)初始學習速率科平,Hinton建議學習速率為0.001γ定為0.9
Adadelta的推導(dǎo)
Adadelta解決了超參學習速率的問題褥紫,證明來自于:
http://www.cnblogs.com/neopenx/p/4768388.html
特點
1.訓練初中期,加速效果不錯瞪慧,很快
2.訓練后期髓考,反復(fù)在局部最小值附近抖動
Adam
目前最好的更新方法,一般就用它弃酌。
來自:https://zhuanlan.zhihu.com/p/22252270
矩估計就是數(shù)學期望氨菇。儡炼。。查蓉。
特點:
1.結(jié)合了Adagrad善于處理稀疏梯度和RMSprop善于處理非平穩(wěn)目標的優(yōu)點
2.對內(nèi)存需求較小
3.為不同的參數(shù)計算不同的自適應(yīng)學習率
4.也適用于大多非凸優(yōu)化 - 適用于大數(shù)據(jù)集和高維空間
Nadam
類似帶有Nesterov動量項的Adam乌询,公式:
能用Adam的用Nadam效果更好一點。