梯度下降法改進過程:從 SGD 到 Adam算法

1. SGD 梯度下降法

1.1 梯度下降(Gradient Descent)

梯度g指函數(shù)的某處的偏導(dǎo)數(shù),指向函數(shù)上升方向。因此梯度下降法是指用梯度的負數(shù)-g更新參數(shù),從而使下一次計算的結(jié)果向函數(shù)下降方向逼近,從而得到最小值。其中更新時乘的系數(shù)稱為學(xué)習(xí)率。
w^*=w-\alpha \Delta w = w-\alpha \frac{\partial}{\partial w}L

1.2 批次梯度下降(Batch Gradient Descent)

以所有m個數(shù)據(jù)作為一個批次,每次計算損失loss值和梯度g(偏導(dǎo))時為所有數(shù)據(jù)的累加和,更新每個參數(shù)時也都是以所有數(shù)據(jù)的梯度累加和進行計算更新。
優(yōu)點:下降方向為全局最優(yōu)值 缺點:計算所有數(shù)據(jù)的梯度非常耗時

1.3 隨機梯度下降(Stochastic Gradient Desent, SGD)

雖然m個數(shù)據(jù)為一個批次,但是更新參數(shù)時僅使用隨機一個數(shù)據(jù)的梯度進行更新。
優(yōu)點:很快 缺點:隨機性高,噪聲影響嚴重,不一定向整體最優(yōu)點下降。

1.4 小批次梯度下降 Mini-batch GD(MBGD)

把所有樣本分為n個batch(一般是隨機的),每次計算損失和梯度時用一個batch的數(shù)據(jù)進行計算,并更新參數(shù),從而避免了唯一隨機性和全局計算的耗時性。
優(yōu)點:得到的梯度下降方向是局部最優(yōu)的,整體速度快。

1.6 一般說的 SGD 其實就指的是 Mini-batch GD

參考:知乎專欄-SGD

2. 動量梯度下降 Gradient Dscent with Momentum

梯度下降法可能會停滯到 平原、鞍點和局部最優(yōu)點(在這三個點梯度均為0),因此帶動量的梯度下降法能依靠之前的梯度值,“沖過平原、鞍點和局部最優(yōu)點”,提高泛化性。

bc7fe07a-2474-4d64-a74f-8a760d09a52f.jpg

v 表示歷史參數(shù)的更新值的大小,相當于現(xiàn)在和過去的梯度的一個加權(quán),可以視為當前的一個動量(勢能),每次計算新一次的更新值時考慮當前梯度和歷史更新值,其實就是用一階梯度的指數(shù)移動平均代替梯度值進行參數(shù)更新如下:
0.01932704729109903.png

參考:知乎專欄-動量,簡述動量csdn

3. 自適應(yīng)梯度算法 Adagard(Adaptive gradient)

Adagard 針對不同的變量提供不同的學(xué)習(xí)率。 當一些變量被優(yōu)化到最優(yōu)點,但另外一些變量沒到最優(yōu)點,使用統(tǒng)一的學(xué)習(xí)率就會影響優(yōu)化過程,太大或太小都不合適。太大不容易收斂,太小收斂緩慢。
解決方式:為每一參數(shù)建立歷史累計梯度值,利用歷史累計梯度作為分母,從而使各個參數(shù)在訓(xùn)練后期被給予不同的除數(shù),得到自適應(yīng)參數(shù)值。

0.5914419086812237.png
c7aa0f68-f3cb-422f-a562-f8eae27ce702.jpg

參考:知乎專欄

4. RMSprop自適應(yīng)學(xué)習(xí)率算法(root mean square propagation)

Adagard 暴力累加參數(shù)之前的所有梯度平方作為分母進行自適應(yīng)(二階梯度的梯度下降?),而RMSprop進行歷史梯度平方和的加權(quán);
\gamma來控制衰減程度(通常為0.9),每次不再直接累加,而是一個指數(shù)移動平均,即是用二階梯度的移動平均代替當前梯度進行更新參數(shù)

0.28517240324563975.png

394cce37-af16-4ec6-a9e6-b3796610091f.png

參考:知乎專欄-RMSprop

5. Adam優(yōu)化器 (Adaptive moment estimation)

Adam 可以看做 RMSprop 與 Momentum 的結(jié)合,使用了一階梯度的指數(shù)移動平均(Momentum)和二階梯度的指數(shù)移動平均(RMSprop)。
優(yōu)點:每一次迭代學(xué)習(xí)率都有一個明確的范圍,使得參數(shù)變化很平穩(wěn).
注意到,在迭代初始階段,m_tv_t 有一個向初值的偏移(過多的偏向了 0)。因此,可以對一階和二階動量做偏置校正 (bias correction),

b7dc0c6d-eea0-486e-ab62-ffa009bdd2dc.png

參考:博客-常見的優(yōu)化器,從SGD到Adam優(yōu)化器

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容