- 深度學習的優(yōu)化器有許多種類,同損失函數(shù)一樣壮池,我們只有清楚了它們的原理才能更好地選擇粥庄。鑒于優(yōu)化器的重要性以及難度狮杨,本文將不定時更新最新理解思路亦或最新優(yōu)化器……
Batch Gradient Descent (BGD) 批梯度下降
- 梯度更新規(guī)則:每次更新參數(shù)時使用全部訓練樣本半沽。
- 優(yōu)點:理想狀態(tài)下經(jīng)過足夠多的迭代后可以達到全局最優(yōu)。( 對于凸函數(shù)可以收斂到全局極小值吴菠,對于非凸函數(shù)可以收斂到局部極小值者填。)
- 缺點:一次更新中,需要對整個數(shù)據(jù)集計算梯度做葵,所以計算起來非常慢占哟,遇到很大量的數(shù)據(jù)集也會非常棘手。
Stochastic Gradient Descent (SGD) 隨機梯度下降
- 優(yōu)化方式:每次更新參數(shù)時隨機選用一個樣本酿矢。
- 優(yōu)點:相比于 BGD 訓練速度更快榨乎,更快收斂。
- 缺點:隨機梯度下降會帶來一定的問題棠涮,因為計算得到的并不是準確的一個梯度谬哀,SGD 的噪音較 BGD 要多,使得 SGD 并不是每次迭代都向著整體最優(yōu)化方向严肪。 但是大的整體的方向是向全局最優(yōu)解的史煎,最終的結(jié)果往往是在全局最優(yōu)解附近。SGD 因為更新比較頻繁驳糯,會造成 cost function 有嚴重的震蕩篇梭。BGD 可以收斂到局部極小值,當然 SGD 的震蕩可能會跳到更好的局部極小值處酝枢。當我們稍微減小 learning rate恬偷,SGD 和 BGD 的收斂性是一樣的。
Mini-batch Gradient Descent (MBGD) 小批次梯度下降
- 優(yōu)化方式:每次更新參數(shù)時利用一小批樣本帘睦。
- 優(yōu)點:相比于 BGD 訓練速度更快袍患,相比于 SGD 更加穩(wěn)定。
- 缺點:當我們采用小的學習率的時候竣付,會導致網(wǎng)絡在訓練的時候收斂太慢诡延;當我們采用大的學習率的時候,會導致在訓練過程中優(yōu)化的幅度跳過函數(shù)的范圍古胆,也就是可能跳過最優(yōu)點肆良。對于非凸函數(shù),還要避免陷于局部極小值處逸绎,或者鞍點處惹恃。
通過前面的 SGD 算法我們知道,我們的學習速率太大棺牧、太小都會影響到我們模型的迭代巫糙,所以我們期望可以有更加科學的方法幫助我們自動的改變 learning rate 的大小。
Momentum
- 優(yōu)化方式:計算在梯度下降的方向上颊乘,計算一個指數(shù)加權(quán)平均曲秉,利用這個來代替權(quán)重更新的方法采蚀。通俗一點的理解就是“如果梯度下降顯示,我們在一直朝著某一個方向在下降的話承二,我讓這個方向的的學習速率快一點榆鼠,如果梯度下降在某一個方向上一直是擺來擺去的,那么就讓這個方向的學習速率慢一點”亥鸠。
-
優(yōu)點:加速了橫軸下降的速度妆够,并減緩了縱軸的擺動的頻率,在最終的訓練過程中负蚊,步伐邁的更大神妹,同時更加更準確。
image.png
AdaGrad
-
優(yōu)化方式:它根據(jù)自變量在每個維度的梯度值的大小來調(diào)整各個維度上的學習率家妆,從而避免統(tǒng)一的學習率難以適應所有維度的問題 鸵荠。在梯度下降的方向上,我們會有一個變量 grad_squared 存儲在該方向上的變化的平方的累積伤极。單個維度更新方式如下:
image.png
image.png
其實這里有個問題可以探討:我們從上面更新公式可以發(fā)現(xiàn)蛹找,當前微分值越大,參數(shù)變化值越大哨坪。當前微分值越大庸疾,分母項越大,參數(shù)變化值越小当编。如何解釋矛盾分母項的意義或者這樣做的目的届慈?
解釋:首先,我們要知道忿偷,最優(yōu)的步長不僅和當前函數(shù)的一次微分值成正比金顿,而且還和當前函數(shù)的二次微分值成反比。由于計算二次微分代價較高鲤桥,我們這里其實就是想用分母項來預估我們當前函數(shù)的二次微分值串绩。
image.png
image.png
- 優(yōu)點:每個維度有各自的 learning rate , 避免統(tǒng)一的學習率難以適應所有維度的問題。
- 缺點:grad_squared 是一個一直累積的過程芜壁,那么積少成多,哪怕是在一些方向上高氮,它的波動一直很小慧妄,但是由于是不停的迭代增加, grad_squared 最終也會變得很大剪芍,導致在訓練的后期塞淹,任意一個方向上,梯度下降就走不下去了罪裹。
RMSProp
- 優(yōu)化方式:RMSProp 基于 AdaGrad饱普,進行了一些小小的改動运挫,也解決了我們上面提出來的,在隨著訓練時間增長套耕,AdaGrad 的步伐會變得很小的問題谁帕。RMSProp 在計算 grad_squared 的時候,加上了一個 decay (衰減率)的東西冯袍,這樣造成的效果即是匈挖,既保留了 AdaGrad 的特性,又不會一直過分增加 grad_squared 導致最后阻力過大康愤。
Adam
- 優(yōu)化方式:我們看到儡循,Momentum 在 SGD 基礎(chǔ)上增加了一階動量,RMSProp 在 SGD 基礎(chǔ)上增加了二階動量征冷。把一階動量和二階動量都用起來择膝,就是Adam了——Adaptive + Momentum。當然 Adam 在兩者的基礎(chǔ)之上還對 mean 和 variance 做了修正检激。具體算法細節(jié)肴捉,后補……
總結(jié)
自適應學習率方法中,RMSprop 是 AdaGrad 的延伸呵扛,它解決了其學習速度急劇下降的問題每庆,Adam 最后為 RMSprop 增加了偏差修正和動力。就此而言今穿,RMSprop 和 Adam 是非常相似的算法缤灵,在相似的情況下,偏差修正有助于 Adam 在優(yōu)化結(jié)束時略微優(yōu)于 RMSprop 蓝晒,因為梯度變得更加稀疏腮出。就目前而言,Adam 可能是最好的整體選擇芝薇。