丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

0

10個(gè)梯度下降優(yōu)化算法+備忘單

本文作者: AI研習(xí)社-譯站 2019-07-16 17:15
導(dǎo)語:梯度下降是一種尋找函數(shù)極小值的優(yōu)化方法,在深度學(xué)習(xí)模型中常常用來在反向傳播過程中更新神經(jīng)網(wǎng)絡(luò)的權(quán)值。

10個(gè)梯度下降優(yōu)化算法+備忘單

原標(biāo)題 | 10 Gradient Descent Optimisation Algorithms + Cheat Sheet

作者 | Raimi Karim in Towards Data Science

譯者 | 斯蒂芬?二狗子(沈陽化工大學(xué))、intelLigenJ(算法工程師)、星期五、萊特?諾頓、滄海一升

本文編輯:王立魚

英語原文:https://towardsdatascience.com/10-gradient-descent-optimisation-algorithms-86989510b5e9

10個(gè)梯度下降優(yōu)化算法+備忘單

梯度下降是一種尋找函數(shù)極小值的優(yōu)化方法,在深度學(xué)習(xí)模型中常常用來在反向傳播過程中更新神經(jīng)網(wǎng)絡(luò)的權(quán)值。

在這篇文章中,我會(huì)總結(jié)應(yīng)用在目前較為流行深度學(xué)習(xí)框架中的常見梯度下降算法(如TensorFlow, Keras, PyTorch, Caffe)。本文之目的是為了方便理解和掌握這些內(nèi)容,因?yàn)槌酥饪偨Y(jié)并不多,而且它可以作為你從零基礎(chǔ)入門的“小抄”。

在一個(gè)線性回歸問題中,我已經(jīng)用梯度下降實(shí)現(xiàn)了SGD, momentum, Nesterov, RMSprop 以及Adam,獲取代碼(JavaScript)

  梯度下降優(yōu)化算法功能是什么?

通過梯度下降,優(yōu)化算法可以在如下三個(gè)主要方面起作用:

1、修改學(xué)習(xí)率成分,α, 或

2、修改梯度成分 ?L/?w

3、或二者兼有

且看如下方程1:

10個(gè)梯度下降優(yōu)化算法+備忘單

方程1:隨機(jī)梯度下降中的各種量

學(xué)習(xí)率調(diào)度器vs梯度下降優(yōu)化
主要的不同在于梯度下降優(yōu)化讓學(xué)習(xí)率乘以一個(gè)因子,該因子是梯度的函數(shù),以此來調(diào)整學(xué)習(xí)率成分,然而學(xué)習(xí)率調(diào)度器讓學(xué)習(xí)率乘以一個(gè)恒為常數(shù)或是關(guān)于時(shí)間步幅的函數(shù)的因子,以此來更新學(xué)習(xí)率。

第1種方法主要通過在學(xué)習(xí)率(learning rate)之上乘一個(gè)0到1之間的因子從而使得學(xué)習(xí)率降低(例如RMSprop)。第2種方法通常會(huì)使用梯度(Gradient)的滑動(dòng)平均(也可稱之為“動(dòng)量”)而不是純梯度來決定下降方向。第3種方法則是結(jié)合兩者,例如Adam和AMSGrad。

10個(gè)梯度下降優(yōu)化算法+備忘單

Fig.2:各類梯度下降優(yōu)化算法、其發(fā)表年份和用到的核心思路。

Fig.3 自上而下展示了這些優(yōu)化算法如何從最簡(jiǎn)單的純梯度下降(SGD)演化成Adam的各類變種的。SGD一開始分別往兩個(gè)方向演變,一類是AdaGrad,主要是調(diào)整學(xué)習(xí)率(learning rate)。另一類是Momentum,主要調(diào)整梯度(gradient)的構(gòu)成要素(譯注:原文此處寫反了)。隨著演化逐步推進(jìn),Momentum和RMSprop融為一體,“亞當(dāng)”(Adam)誕生了。你可能覺得我這樣的組織方式抱有異議,不過我目前一直是這樣理解的。

10個(gè)梯度下降優(yōu)化算法+備忘單

Fig.3:各類優(yōu)化算法的演化圖(gist)

  符號(hào)表示

  • t - 迭代步數(shù)

  • w - 我們需要更新的權(quán)重及參數(shù)

  • α - 學(xué)習(xí)率

  • ??L/?w - L(損失函數(shù))對(duì)于w的梯度

  • 我統(tǒng)一了論文中出現(xiàn)過的希臘字母及符號(hào)表示,這樣我們可以以統(tǒng)一的“演化”視角來看這些優(yōu)化算法

  1. 隨機(jī)梯度下降(Stochastic Gradient Descend)

最原始的隨機(jī)梯度下降算法主要依據(jù)當(dāng)前梯度?L/?w乘上一個(gè)系數(shù)學(xué)習(xí)率α來更新模型權(quán)重w的。

10個(gè)梯度下降優(yōu)化算法+備忘單

  2. 動(dòng)量算法(Momentum)

動(dòng)量算法使用帶有動(dòng)量的梯度(梯度的指數(shù)滑動(dòng)平均,Polyak, 1964)而不是當(dāng)前梯度來對(duì)w進(jìn)行更新。在后續(xù)的文章中你會(huì)看到,采用指數(shù)滑動(dòng)平均作為動(dòng)量更新的方式幾乎成為了一個(gè)業(yè)內(nèi)標(biāo)準(zhǔn)。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中

10個(gè)梯度下降優(yōu)化算法+備忘單

并且V初始化值為0。β一般會(huì)被設(shè)置為0.9。

值得注意的是,很多文章在引用Momemtum算法時(shí)會(huì)使用Ning Qian, 1999的文章。但這個(gè)算法的原出處為Sutskever et al。而經(jīng)典動(dòng)量算法在1964年就被Polyak提出了,所以上文也引用了Polyak的文章。(感謝James指出了這一點(diǎn))

  3.Nesterov加速梯度下降法(NAG)

在Polyak提出了動(dòng)量法之后(雙關(guān):Polyak勢(shì)頭正盛),一個(gè)使用Nesterov加速梯度下降法(Sutskever et al., 2013)的類似更新方法也被實(shí)現(xiàn)了。此更新方法使用V,即我稱之為投影梯度的指數(shù)移動(dòng)平均值。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中

10個(gè)梯度下降優(yōu)化算法+備忘單

且V 初始化為0。

第二個(gè)等式中的最后一項(xiàng)就是一個(gè)投影梯度。這個(gè)值可以通過使用先前的速度“前進(jìn)一步”獲得(等式4)。這意味著對(duì)于這個(gè)時(shí)間步驟t,我們必須在最終執(zhí)行反向傳播之前執(zhí)行另一個(gè)前向傳播。這是步驟:

1.使用先前的速度將當(dāng)前權(quán)重w更新為投影權(quán)重w* 

 10個(gè)梯度下降優(yōu)化算法+備忘單

(等式4)

2. 使用投影權(quán)重計(jì)算前向傳播

3.獲得投影梯度?L/?w* 

4.計(jì)算相應(yīng)的V和w

常見的默認(rèn)值:

  • β = 0.9

請(qǐng)注意,原始的Nesterov 加速梯度下降法論文( Nesterov, 1983  )并不是關(guān)于隨機(jī)梯度下降,也沒有明確使用梯度下降方程。因此,更合適的參考是上面提到的Sutskever等人的出版物。在2013年,它描述了NAG在隨機(jī)梯度下降中的應(yīng)用。(再一次,我要感謝James對(duì)HackerNews的評(píng)論中指出這一點(diǎn)。)

  4. 自適應(yīng)學(xué)習(xí)率算法(Adagrad)

自適應(yīng)梯度算法,也稱AdaGrad算法(Duchi等,2011),通過將學(xué)習(xí)率除以S的平方根來研究學(xué)習(xí)率分量,其中S為當(dāng)前和過去平方梯度的累積和(即直到時(shí)間t)。請(qǐng)注意,和SGD算法相同,自適應(yīng)學(xué)習(xí)率算法中的梯度分量也保持不變。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中,

10個(gè)梯度下降優(yōu)化算法+備忘單

并將S的初始值置0.

請(qǐng)注意,這里在分母中添加了ε。Keras稱之為模糊因子,它是一個(gè)小的浮點(diǎn)值,以確保我們永遠(yuǎn)不會(huì)遇到除零的情況。

默認(rèn)值(來自Keras):

  • α = 0.01

  • ε = 10??

  5. 均方根傳遞算法(RMSprop)

均方根傳遞算法,也稱RMSprop算法(Hinton等,2012),是在AdaGrad算法上進(jìn)行改進(jìn)的另一種自適應(yīng)學(xué)習(xí)率算法。 它使用指數(shù)加權(quán)平均計(jì)算,而不是使用累積平方梯度和。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中,

10個(gè)梯度下降優(yōu)化算法+備忘單

并將S的初始值置0.

默認(rèn)值(來自Keras):

  • α = 0.001

  • β = 0.9 (本文作者推薦)

  • ε = 10??

  6. 自適應(yīng)增量算法(Adadelta)

與RMSprop算法類似,Adadelta(Zeiler,2012)是在AdaGrad算法的基礎(chǔ)上針對(duì)學(xué)習(xí)率進(jìn)行改進(jìn)的一種自適應(yīng)算法。Adadelta應(yīng)該是是“自適應(yīng)增量”的縮寫,其中,delta表示當(dāng)前權(quán)重與新更新權(quán)重之間的差值。

Adadelta算法和RMSprop算法的區(qū)別,在于Adadelta算法中用delta的指數(shù)加權(quán)平均值D來替代原來在Adadelta算法中的學(xué)習(xí)率參數(shù)。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中,

10個(gè)梯度下降優(yōu)化算法+備忘單

并把D和S的初始值置0. 此外,

10個(gè)梯度下降優(yōu)化算法+備忘單

默認(rèn)值(來自Keras):

  • β = 0.95

  • ε = 10??

  7. 適應(yīng)性矩估計(jì)算法(Adam)

適應(yīng)矩估計(jì)算法,也稱Adam算法(Kingma&Ba,2014),是一種將動(dòng)量和RMSprop結(jié)合使用的算法。它通過
(i) 使用梯度分量V,梯度的指數(shù)移動(dòng)平均值(如動(dòng)量)和
(ii)將學(xué)習(xí)率α除以S的平方根,平方梯度的指數(shù)移動(dòng)平均值(如在RMSprop中)來學(xué)習(xí)率分量而起作用。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中

10個(gè)梯度下降優(yōu)化算法+備忘單

是偏差修正,并有

10個(gè)梯度下降優(yōu)化算法+備忘單

V和S的初始值置0.

作者推薦的默認(rèn)值:

  • α = 0.001

  • β? = 0.9

  • β? = 0.999

  • ε = 10??

  8.  AdaMax算法

AdaMax(Kingma&Ba,2015)是使用無限范圍(因此為'max')的由Adam算法的原作者們對(duì)其優(yōu)化器進(jìn)行改編的一種算法。V是梯度的指數(shù)加權(quán)平均值,S是過去p階梯度的指數(shù)加權(quán)平均值,類似于最大函數(shù),如下所示(參見論文收斂證明)。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中

10個(gè)梯度下降優(yōu)化算法+備忘單

是對(duì)V的偏差修正,并有

10個(gè)梯度下降優(yōu)化算法+備忘單

V和S的初始值置0.

作者推薦的默認(rèn)值:

  • α = 0.002

  • β? = 0.9

  • β? = 0.999

  9. Nadam算法

Nadam一詞由(Dozat,2015)是Nesterov和Adam優(yōu)化器的名稱拼接而成。Nesterov組件在Nadam算法中對(duì)學(xué)習(xí)率產(chǎn)生了更強(qiáng)的約束,同時(shí)對(duì)梯度的更新也有更直接的影響。一般而言,在想使用帶動(dòng)量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。 

Adam優(yōu)化器也可以寫成:

10個(gè)梯度下降優(yōu)化算法+備忘單

公式5:Adam優(yōu)化器的權(quán)重更新

Nadam利用Nesterov通過將上面等式中的前一時(shí)刻的V_hat替換為當(dāng)前時(shí)刻的V_hat,實(shí)現(xiàn)了提前一步更新梯度:

10個(gè)梯度下降優(yōu)化算法+備忘單

其中

10個(gè)梯度下降優(yōu)化算法+備忘單

并有

10個(gè)梯度下降優(yōu)化算法+備忘單

V和S初始值置0.

默認(rèn)值(取自Keras):

  • α = 0.002

  • β? = 0.9

  • β? = 0.999

  • ε = 10??

  10. AMSGrad算法

Adam算法的另一個(gè)變體是AMSGrad算法(Reddi等,2018)。該算法重新訪問Adam中的自適應(yīng)學(xué)習(xí)速率組件并對(duì)其進(jìn)行更改以確保當(dāng)前S始終大于前一時(shí)間步長(zhǎng)。

10個(gè)梯度下降優(yōu)化算法+備忘單

其中

10個(gè)梯度下降優(yōu)化算法+備忘單

此外

10個(gè)梯度下降優(yōu)化算法+備忘單

V和S初始值置0.

默認(rèn)值(取自Keras):

  • α = 0.001

  • β? = 0.9

  • β? = 0.999

  • ε = 10??

  直覺

我想和你們分享一些直觀的見解,為什么梯度下降法優(yōu)化器對(duì)梯度部分使用的是指數(shù)移動(dòng)平均值(EMA),對(duì)學(xué)習(xí)率部分使用均方根(RMS)。

為什么要對(duì)梯度取指數(shù)移動(dòng)平均? 

我們需要使用一些數(shù)值來更新權(quán)重。我們唯一有的數(shù)值呢就是當(dāng)前梯度,所以讓我們利用它來更新權(quán)重。

但僅取當(dāng)前梯度值是不夠好的。我們希望我們的更新是(對(duì)模型來說,是)“更好的指導(dǎo)”。讓我們考慮(每次更新中)包括之前的梯度值。

將當(dāng)前梯度值和過去梯度信息的結(jié)合起來一種方法是,我們可以對(duì)過去和現(xiàn)在的所有梯度進(jìn)行簡(jiǎn)單的平均。但這意味著每個(gè)梯度的權(quán)重是相等的。這樣做是反直覺的,因?yàn)樵诳臻g上,如果我們正在接近最小值,那么最近的梯度值可能會(huì)提供更有效的信息。

因此,最安全的方法是采用指數(shù)移動(dòng)平均法,其中最近的梯度值的權(quán)重(重要性)比前面的值高。

為什么要把學(xué)習(xí)速率除以梯度的均方根呢?

這個(gè)目的是為了調(diào)整學(xué)習(xí)的速率。調(diào)整為了適應(yīng)什么?答案是梯度。我們需要確保的是,當(dāng)梯度較大時(shí),我們希望更新適當(dāng)縮小(否則,一個(gè)巨大的值將減去當(dāng)前的權(quán)重!) 

為了到達(dá)這種效果,讓我們學(xué)習(xí)率α除以當(dāng)前梯度得到一個(gè)調(diào)整學(xué)習(xí)速率。  

請(qǐng)記住,學(xué)習(xí)率成分必須始終是正的(因?yàn)閷W(xué)習(xí)率成分,當(dāng)乘以梯度成分,后者應(yīng)該有相同的符號(hào))。為了確保它總是正的,我們可以取它的絕對(duì)值或者它的平方。當(dāng)我們?nèi)‘?dāng)前梯度的平方,可以再取平方根"取消"這個(gè)平方。

但是就像動(dòng)量的思路一樣,僅僅采用當(dāng)前的梯度值是不夠好的。我們希望我們的訓(xùn)練中的(每次)更新update都能更好的指導(dǎo)(模型)。因此,我們也需要使用之前的梯度值。正如上面所討論的,我們?nèi)∵^去梯度的指數(shù)移動(dòng)平均值('mean square') ,然后取其平方根('root') ,也就是'均方根'(RMS)。除了 AdaGrad (采用累積的平方梯度之和)之外,本文中所有的優(yōu)化器都會(huì)對(duì)學(xué)習(xí)速率部分進(jìn)行優(yōu)化。

  備忘單

10個(gè)梯度下降優(yōu)化算法+備忘單

(上述要點(diǎn))

如果有什么不妥之處,或者如果這篇文章中的內(nèi)容可以再改進(jìn),請(qǐng)與我聯(lián)系???

  參考

梯度下降優(yōu)化算法概述(ruder.io)

為什么Momentum真的有效
這是一個(gè)關(guān)于動(dòng)量的流行故事:梯度下降是一個(gè)人走在山上。 

感謝Ren Jie,Derek,William Tjhi,Chan Kai,Serene和James對(duì)本文的想法,建議和更正。

想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)

點(diǎn)擊【10個(gè)梯度下降優(yōu)化算法+備忘單】即可訪問:

免費(fèi)贈(zèng)送課程啦~「好玩的Python:從數(shù)據(jù)挖掘到深度學(xué)習(xí)」該課程涵蓋了從Python入門到CV、NLP實(shí)踐等內(nèi)容,是非常不錯(cuò)的深度學(xué)習(xí)入門課程,共計(jì)9節(jié)32課時(shí),總長(zhǎng)度約為13個(gè)小時(shí)。?,F(xiàn)AI研習(xí)社將此課程免費(fèi)開放給社區(qū)認(rèn)證用戶,只要您在認(rèn)證時(shí)在備注框里填寫「Python」,待認(rèn)證通過后,即可獲得該課程全部解鎖權(quán)限。心動(dòng)不如行動(dòng)噢~

課程頁面:https://ai.yanxishe.com/page/domesticCourse/37

認(rèn)證方式:https://ai.yanxishe.com/page/blogDetail/11609


雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

10個(gè)梯度下降優(yōu)化算法+備忘單

分享:
相關(guān)文章

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識(shí),讓語言不再成為學(xué)習(xí)知識(shí)的門檻。(原雷鋒字幕組)
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說