机器学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
SGD:
此處的SGD指mini-batch gradient descent,關(guān)于batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區(qū)別就不細(xì)說(shuō)了。現(xiàn)在的SGD一般都指mini-batch gradient descent。
SGD就是每一次迭代計(jì)算mini-batch的梯度,然后對(duì)參數(shù)進(jìn)行更新,是最常見(jiàn)的優(yōu)化方法了。即:
其中,是學(xué)習(xí)率,是梯度。 SGD完全依賴于當(dāng)前batch的梯度,所以可理解為允許當(dāng)前batch的梯度多大程度影響參數(shù)更新
缺點(diǎn):
- 選擇合適的learning rate比較困難 - 對(duì)所有的參數(shù)更新使用同樣的learning rate。對(duì)于稀疏數(shù)據(jù)或者特征,有時(shí)對(duì)于不經(jīng)常出現(xiàn)的特征我們可能想更新快一些,對(duì)于常出現(xiàn)的特征更新慢一些,這時(shí)候SGD就不太能滿足要求了
- SGD容易收斂到局部最優(yōu),并且在某些情況下可能被困在鞍點(diǎn)
梯度下降(其他的line search、trust region也一樣)只有在原問(wèn)題是凸問(wèn)題的情況下,才能保證以任意精度(因?yàn)楫吘故菙?shù)值方法)取得最優(yōu)解。
非凸情況下,當(dāng)有多個(gè)極大值或極小值時(shí),需要對(duì)梯度下降進(jìn)行優(yōu)化,比如動(dòng)量,NAG,Adagrad,RMSprop等,可以減少陷入極大值極小值的可能性,設(shè)置得當(dāng)可以得到全局最優(yōu)解,但并不能100%保證獲得全局最優(yōu)解。Momentum:
momentum是模擬物理里動(dòng)量的概念,更新的時(shí)候在一定程度上保留之前更新的方向,同時(shí)利用當(dāng)前batch的梯度微調(diào)最終的更新方向,可以在一定程度上增加穩(wěn)定性,從而學(xué)習(xí)更快,并且還有擺脫局部最優(yōu)的能力。公式如下:
?
其中,是動(dòng)量因子
特點(diǎn):
- 下降初期時(shí),使用上一次參數(shù)更新,下降方向一致,乘上較大的能夠進(jìn)行很好的加速
- 下降中后期時(shí),在局部最小值來(lái)回震蕩的時(shí)候,,使得更新幅度增大,跳出陷阱
- 在梯度改變方向的時(shí)候,能夠減少更新 總而言之,momentum項(xiàng)能夠在相關(guān)方向加速SGD,抑制振蕩,從而加快收斂
Adagrad:
同一個(gè)更新速率不一定適合所有參數(shù),比如有的參數(shù)可能已經(jīng)到了僅需要微調(diào)的階段,但又有些參數(shù)由于對(duì)應(yīng)樣本少等原因,還需要較大幅度的調(diào)動(dòng)。Adagrad其實(shí)是對(duì)學(xué)習(xí)率進(jìn)行了一個(gè)約束,每次迭代過(guò)程中,每個(gè)參數(shù)優(yōu)化時(shí)使用不同的學(xué)習(xí)率。即:
此處,對(duì)從1到進(jìn)行一個(gè)遞推形成一個(gè)約束項(xiàng)regularizer,,用來(lái)保證分母非0
特點(diǎn):
- 前期較小的時(shí)候, regularizer較大,能夠放大梯度
- 后期較大的時(shí)候,regularizer較小,能夠約束梯度
- 適合處理稀疏梯度
缺點(diǎn):
- 由公式可以看出,仍依賴于人工設(shè)置一個(gè)全局學(xué)習(xí)率
- 設(shè)置過(guò)大的話,會(huì)使regularizer過(guò)于敏感,對(duì)梯度的調(diào)節(jié)太大
- 中后期,分母上梯度平方的累加將會(huì)越來(lái)越大,使,使得訓(xùn)練提前結(jié)束
Adadelta:
Adadelta是對(duì)Adagrad的擴(kuò)展,最初方案依然是對(duì)學(xué)習(xí)率進(jìn)行自適應(yīng)約束,但是進(jìn)行了計(jì)算上的簡(jiǎn)化。 Adagrad會(huì)累加之前所有的梯度平方,Adadelta只使用adagrad的分母中的累計(jì)項(xiàng)離當(dāng)前時(shí)間點(diǎn)比較近的項(xiàng)。即:
在此處Adadelta其實(shí)還是依賴于全局學(xué)習(xí)率的,但是作者做了一定處理,經(jīng)過(guò)近似牛頓迭代法之后:
?
其中,代表求期望。
此時(shí),可以看出Adadelta已經(jīng)不用依賴于全局學(xué)習(xí)率了。
Adam:
Adam(Adaptive Moment Estimation)是一種不同參數(shù)自適應(yīng)不同學(xué)習(xí)速率方法,它利用梯度的一階矩估計(jì)和二階矩估計(jì)動(dòng)態(tài)調(diào)整每個(gè)參數(shù)的學(xué)習(xí)率。Adam的優(yōu)點(diǎn)主要在于經(jīng)過(guò)偏置校正后,每一次迭代學(xué)習(xí)率都有個(gè)確定范圍,使得參數(shù)比較平穩(wěn)。公式如下:
?
$m_t, n_t$分別是梯度的帶權(quán)平均和帶權(quán)有偏方差,初始為0向量,Adam的作者發(fā)現(xiàn)他們傾向于0向量(接近于0向量),特別是在衰減因子(衰減率)$\mu , ?\nu$接近于1時(shí),所以要進(jìn)行偏差修正,,是對(duì),的校正。
論文中建議:$\mu = 0.9, \nu = 0.999, \epsilon = 10^{-8}$
特點(diǎn):
- 結(jié)合了Adagrad善于處理稀疏梯度和RMSprop善于處理非平穩(wěn)目標(biāo)的優(yōu)點(diǎn)
- 對(duì)內(nèi)存需求較小
- 為不同的參數(shù)計(jì)算不同的自適應(yīng)學(xué)習(xí)率
- 也適用于大多非凸優(yōu)化 - 適用于大數(shù)據(jù)集和高維空間
經(jīng)驗(yàn)之談
- 對(duì)于稀疏數(shù)據(jù),盡量使用學(xué)習(xí)率可自適應(yīng)的優(yōu)化方法,不用手動(dòng)調(diào)節(jié),而且最好采用默認(rèn)值
- SGD通常訓(xùn)練時(shí)間更長(zhǎng),但是在好的初始化和學(xué)習(xí)率調(diào)度方案的情況下,結(jié)果更可靠
- 如果在意更快的收斂,并且需要訓(xùn)練較深較復(fù)雜的網(wǎng)絡(luò)時(shí),推薦使用學(xué)習(xí)率自適應(yīng)的優(yōu)化方法。
?
?
?
http://blog.csdn.net/heyongluoyao8/article/details/52478715
https://zhuanlan.zhihu.com/p/22252270
?
?
牛頓法 ?擬牛頓法的實(shí)現(xiàn)
http://blog.csdn.net/golden1314521/article/details/46225289
https://arxiv.org/pdf/1706.10207.pdf
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/7294671.html
總結(jié)
以上是生活随笔為你收集整理的机器学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 八大排序算法的python实现(四)快速
- 下一篇: Oracle数据库基础知识点汇总