深度學習DL中優化方法總結

2021-08-14 18:59:16 字數 4232 閱讀 4730

(本文僅對一些常見的優化方法進行直觀介紹和簡單的比較,各種優化方法的詳細內容及公式只好去認真啃**了,在此我就不贅述了。

此處的sgd指mini-batch gradient descent,關於batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區別就不細說了。現在的sgd一般都指mini-batch gradient descent。

sgd就是每一次迭代計算mini-batch的梯度,然後對引數進行更新,是最常見的優化方法了。即:

gt=∇

θt−1

f(θt

−1)

其中,

η是梯度

sgd完全依賴於當前batch的梯度,所以

η可理解為允許當前batch的梯度多大程度影響引數更新

缺點:(正因為有這些缺點才讓這麼多大神發展出了後續的各種演算法)

momentum是模擬物理裡動量的概念,積累之前的動量來替代真正的梯度。公式如下:

mt=μ

∗mt−

1+gt

δθt=−η

∗mt

其中, μ

是動量因子

特點:

總而言之,momentum項能夠在相關方向加速sgd,抑制振盪,從而加快收斂

δθt=

−η∗μ

∗mt−

1−η∗

gt

可以看出, m

t−1,所以nesterov的改進就是讓之前的動量直接影響當前的動量。即: g

t=∇θ

t−1f

(θt−

1−η∗

μ∗mt

−1)

mt=μ

∗mt−

1+gt

δθt=−η

∗mt

所以,加上nesterov項後,梯度在大的跳躍後,進行計算對當前梯度進行校正。如下圖:

momentum首先計算乙個梯度(短的藍色向量),然後在加速更新梯度的方向進行乙個大的跳躍(長的藍色向量),nesterov項首先在之前加速的梯度方向進行乙個大的跳躍(棕色向量),計算梯度然後進行校正(綠色梯向量)

其實,momentum項和nesterov項都是為了使梯度更新更加靈活,對不同情況有針對性。但是,人工設定一些學習率總還是有些生硬,接下來介紹幾種自適應學習率的方法

adagrad其實是對學習率進行了乙個約束。即:

nt=n

t−1+

g2t

δθt=−ηn

t+ϵ−−−−−√∗g

t 此處,對 g

t用來保證分母非0

特點:

缺點

adadelta是對adagrad的擴充套件,最初方案依然是對學習率進行自適應約束,但是進行了計算上的簡化。

adagrad會累加之前所有的梯度平方,而adadelta只累加固定大小的項,並且也不直接儲存這些項,僅僅是近似計算對應的平均值。即:

nt=ν

∗nt−

1+(1

−ν)∗

g2t

δθt=−ηn

t+ϵ−−−−−√∗g

t 在此處adadelta其實還是依賴於全域性學習率的,但是作者做了一定處理,經過近似牛頓迭代法之後:

e|g2

|t=ρ

∗e|g

2|t−

1+(1

−ρ)∗

g2t

δxt=−∑t

−1r=

1δxr

−−−−−−−−√e|

g2|t

+ϵ−−−−−−−−√

其中,

e代表求期望。

此時,可以看出adadelta已經不用依賴於全域性學習率了。

特點:

rmsprop可以算作adadelta的乙個特例:當ρ

=0.5

就變為了求梯度平方和的平均數。

如果再求根的話,就變成了rms(均方根):

rms|

g|t=

e|g2

|t+ϵ

−−−−−−−−√

此時,這個rms就可以作為學習率 η

的乙個約束: δ

xt=−

ηrms

|g|t

∗gt

特點:

adam(adaptive moment estimation)本質上是帶有動量項的rmsprop,它利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。adam的優點主要在於經過偏置校正後,每一次迭代學習率都有個確定範圍,使得引數比較平穩。公式如下:

mt=μ

∗mt−

1+(1

−μ)∗

gt

nt=ν

∗nt−

1+(1

−ν)∗

g2t

mt^=mt1

−μt

nt^=nt1

−νt

δθt=−mt

^nt^

−−√+ϵ∗

η 其中, mt

的校正,這樣可以近似為對期望的無偏估計。

可以看出,直接對梯度的矩估計對記憶體沒有額外的要求,而且可以根據梯度進行動態調整,而 −

mt^n

t^√+

ϵ對學習率形成乙個動態約束,而且有明確的範圍。

特點:

adamax是adam的一種變體,此方法對學習率的上限提供了乙個更簡單的範圍。公式上的變化如下:

nt=m

ax(ν

∗nt−

1,|g

t|)

δx=−

mt^n

t+ϵ∗

η 可以看出,adamax學習率的邊界範圍更簡單

nadam類似於帶有nesterov動量項的adam。公式如下:

gt^=

gt1−

πti=

1μi

mt=μt∗m

t−1+

(1−μ

t)∗g

t m

t^=m

t1−π

t+1i

=1μi

nt=ν∗n

t−1+

(1−ν

)∗g2

t n

t^=n

t1−ν

t m

t¯=(

1−μt

)∗gt

^+μt

+1∗m

t^

δθt=

−η∗m

t¯nt

^−−√+ϵ

可以看出,nadam對學習率有了更強的約束,同時對梯度的更新也有更直接的影響。一般而言,在想使用帶動量的rmsprop,或者adam的地方,大多可以使用nadam取得更好的效果。

最後展示兩張可厲害的圖,一切盡在圖中啊,上面的都沒啥用了… …

損失平面等高線

在鞍點處的比較

[1]adagrad

[2]rmsprop[lecture 6e]

[3]adadelta

[4]adam

[5]nadam

[6]on the importance of initialization and momentum in deep learning

[7]keras

中文文件

[8]alec radford(圖)

[9]an overview of gradient descent optimization algorithms

[10]gradient descent only converges to minimizers

[11]deep learning:nature

深度學習 優化方法

仍然是讀完deep learning之後的筆記和知識梳理,這些內容其實是偏理論層面的,後續的話可以結合 進行講解。dl關注的優化問題 尋找神經網路上的一組引數 顯著降低代價函式j j 通常包括整個訓練集上效能評估 er 經驗風險 和額外的正則化項 sr 結構風險 對於偏應用層面的可以直接看基本演算法...

DL 01 深度學習 揭開DL的神秘面紗

什麼是深度學習 深度學習 深度神經網路 機器學習 人工智慧 機器學習 表示學習 深度學習 神經元模型 輸入訊號 加權求和 加偏置 啟用函式 輸出 全連線層 輸入訊號 輸入層 隱層 多個神經元 輸出層 多個輸出,每個對應乙個分類 目標函式 交叉熵 待求的引數 連線矩陣w 偏置b 訓練方法 隨機梯度下降...

深度學習常用優化方法

以下方法都是總結吳恩達深度學習課程的方法。1 梯度下降 batch gd size m 速度比較慢,但每一次都是最優方向 隨機梯度下降 size 1 不能用向量加速,相對來說速度慢,而且最後只會在最優值附近徘徊 mini batch size 16,32,64,128 速度較快,雖然也會在最優值之間...