(標題不能再中二了)本文僅對一些常見的優化方法進行直觀介紹和簡單的比較,各種優化方法的詳細內容及公式只好去認真啃**了,在此我就不贅述了。
此處的sgd指mini-batch gradient descent,關於batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區別就不細說了。現在的sgd一般都指mini-batch gradient descent。
sgd就是每一次迭代計算mini-batch的梯度,然後對引數進行更新,是最常見的優化方法了。即: g
t=∇θ
t−1f
(θt−
1)
δθt=
−η∗g
t 其中,η
是學習率,gt
是梯度sgd完全依賴於當前batch的梯度,所以
η 可理解為允許當前batch的梯度多大程度影響引數更新
缺點:(正因為有這些缺點才讓這麼多大神發展出了後續的各種演算法)
momentum是模擬物理裡動量的概念,積累之前的動量來替代真正的梯度。公式如下: m
t=μ∗
mt−1
+gt
δθt=−η∗
mt
其中,μ
是動量因子
特點:
總而言之,momentum項能夠在相關方向加速sgd,抑制振盪,從而加快收斂
nesterov項在梯度更新時做乙個校正,避免前進太快,同時提高靈敏度。
將上一節中的公式展開可得: δ
θt=−
η∗μ∗
mt−1
−η∗g
t 可以看出,mt
−1並沒有直接改變當前梯度gt
,所以nesterov的改進就是讓之前的動量直接影響當前的動量。即: gt
=∇θt
−1f(
θt−1
−η∗μ
∗mt−
1)
mt=μ
∗mt−
1+gt
δθt=−η
∗mt
所以,加上nesterov項後,梯度在大的跳躍後,進行計算對當前梯度進行校正。如下圖:
momentum首先計算乙個梯度(短的藍色向量),然後在加速更新梯度的方向進行乙個大的跳躍(長的藍色向量),nesterov項首先在之前加速的梯度方向進行乙個大的跳躍(棕色向量),計算梯度然後進行校正(綠色梯向量)
其實,momentum項和nesterov項都是為了使梯度更新更加靈活,對不同情況有針對性。但是,人工設定一些學習率總還是有些生硬,接下來介紹幾種自適應學習率的方法
adagrad其實是對學習率進行了乙個約束。即: n
t=nt
−1+g
2t
δθt=
−ηnt
+ϵ−−
−−−√
∗gt
此處,對gt
從1 到t
進行乙個遞推形成乙個約束項regularizer,−1
∑tr=
1(gr
)2+ϵ
√ ,ϵ
用來保證分母非0
特點:
缺點:adadelta是對adagrad的擴充套件,最初方案依然是對學習率進行自適應約束,但是進行了計算上的簡化。
adagrad會累加之前所有的梯度平方,而adadelta只累加固定大小的項,並且也不直接儲存這些項,僅僅是近似計算對應的平均值。即: n
t=ν∗
nt−1
+(1−
ν)∗g
2t
δθt=
−ηnt
+ϵ−−
−−−√
∗gt
在此處adadelta其實還是依賴於全域性學習率的,但是作者做了一定處理,經過近似牛頓迭代法之後: e
|g2|
t=ρ∗
e|g2
|t−1
+(1−
ρ)∗g
2t
δxt=
−∑t−
1r=1
δxr−
−−−−
−−−√
e|g2
|t+ϵ
−−−−
−−−−
√ 其中,e
代表求期望。
此時,可以看出adadelta已經不用依賴於全域性學習率了。
特點:
rmsprop可以算作adadelta的乙個特例:當ρ
=0.5
時,e|
g2|t
=ρ∗e
|g2|
t−1+
(1−ρ
)∗g2
t 就變為了求梯度平方和的平均數。
如果再求根的話,就變成了rms(均方根): r
ms|g
|t=e
|g2|
t+ϵ−
−−−−
−−−√
此時,這個rms就可以作為學習率η
的乙個約束: δx
t=−η
rms|
g|t∗
gt
特點:
adam(adaptive moment estimation)本質上是帶有動量項的rmsprop,它利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。adam的優點主要在於經過偏置校正後,每一次迭代學習率都有個確定範圍,使得引數比較平穩。公式如下: m
t=μ∗
mt−1
+(1−
μ)∗g
t n
t=ν∗
nt−1
+(1−
ν)∗g
2t
mt^=
mt1−
μt
nt^=
nt1−
νt
δθt=
−mt^
nt^−
−√+ϵ
∗η
其中,mt
,nt
分別是對梯度的一階矩估計和二階矩估計,可以看作對期望e|
gt|
,e|g
2t|
的估計;mt
^ ,n
t^ 是對
mt ,
nt的校正,這樣可以近似為對期望的無偏估計。
可以看出,直接對梯度的矩估計對記憶體沒有額外的要求,而且可以根據梯度進行動態調整,而−m
t^nt
^√+ϵ
對學習率形成乙個動態約束,而且有明確的範圍。
特點:
adamax是adam的一種變體,此方法對學習率的上限提供了乙個更簡單的範圍。公式上的變化如下: n
t=ma
x(ν∗
nt−1
,|gt
|)
δx=−
mt^n
t+ϵ∗
η 可以看出,adamax學習率的邊界範圍更簡單
nadam類似於帶有nesterov動量項的adam。公式如下: g
t^=g
t1−π
ti=1
μi
mt=μ
t∗mt
−1+(
1−μt
)∗gt
mt^=mt
1−πt
+1i=
1μi
nt=ν∗nt
−1+(
1−ν)
∗g2t
nt^=nt
1−νt
mt¯=(1
−μt)
∗gt^
+μt+
1∗mt
^ δ
θt=−
η∗mt
¯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 結構風險 對於偏應用層面的可以直接看基本演算法...
深度學習常用優化方法
以下方法都是總結吳恩達深度學習課程的方法。1 梯度下降 batch gd size m 速度比較慢,但每一次都是最優方向 隨機梯度下降 size 1 不能用向量加速,相對來說速度慢,而且最後只會在最優值附近徘徊 mini batch size 16,32,64,128 速度較快,雖然也會在最優值之間...
各種深度學習框架
在我看來,機器學習這個領域,從業者 特指技術類從業者,不包括資本類玩家 一定會分成三個不同的群體 1.學術研究者 他們的工作是從理論上詮釋機器學習的各個方面,試圖找出 這樣設計模型 引數為什麼效果更好 並且為其他從業者提供更優秀的模型,甚至將理論研究向前推進一步。能夠做到這一步的人,可以說鳳毛麟角,...