神經(jīng)網(wǎng)絡(luò)中的優(yōu)化算法

姓名:張志文 學(xué)號:19021210649
【嵌牛導(dǎo)讀】
神經(jīng)網(wǎng)絡(luò)中有很多的優(yōu)化算法
【嵌牛鼻子】
神經(jīng)網(wǎng)絡(luò);優(yōu)化算法
【嵌牛提問】
神經(jīng)網(wǎng)絡(luò)中的優(yōu)化算法有哪些?
【嵌牛正文】

首先,我們慣用的方法是“梯度下降法”,稱為Gradient Decent,就是把所有的訓(xùn)練樣本丟進(jìn)去訓(xùn)練一次之后,把W和b更新一次,然后重復(fù)這個(gè)過程,具體重復(fù)多少次就看我們的“迭代次數(shù)”是多少。

【為了下面敘述的方便,我們稱“把所有訓(xùn)練樣本過一遍”為一個(gè)epoch,另外 gradient decent也就是梯度下降我們就簡稱為GD?!?/p>

我們傳統(tǒng)的GD,也可以稱為Batch GD,這個(gè)batch就是指一整批,就是指我們所有樣本。

今天主要介紹的有如下方法,均是對傳統(tǒng)batch gradient decent的改進(jìn):

  1. Mini-batch GD(小批量梯度下降法)
  2. GD with Momentum(動(dòng)量法)
  3. Adam算法(Momentum與RMSprop算法結(jié)合)

一、Mini-batch GD

mini-batch是相對于batch來說的,后者我們前面說過,是走完一個(gè)epoch才把參數(shù)更新一次,這樣其實(shí)很慢

樣本數(shù)量不多還好,但是樣本多了就會(huì)明顯耗費(fèi)大量時(shí)間,比如5百萬樣本,這在深度學(xué)習(xí)里面是很平常的事情,但是使用傳統(tǒng)的方法,即batch GD,意味著我們需要把5,000,000個(gè)樣本跑一遍才能更新一次W和b。

mini-batch就是為了解決這個(gè)問題的,我們可以把5百萬的樣本分成一塊一塊的,比如1000個(gè)樣本一塊,稱為一個(gè)mini-batch,這樣我們就有5000個(gè)mini-batch。我們訓(xùn)練的時(shí)候,跑完一個(gè)mini-batch就把W和b更新一次,這樣的的話,在一個(gè)epoch中,我們就已經(jīng)把參數(shù)更新了5000次了!雖然每一步?jīng)]有batch GD的一步走的準(zhǔn),但是我5000步加起來,怎么樣也比你走一步的效果好的多,因此可以加快訓(xùn)練速度,更快到達(dá)最值點(diǎn)。

這就是mini-batch GD方法。

對于不同的mini-batch的大?。╯ize),也有不一樣的效果:

  • size=樣本數(shù) —> Batch GD
  • size=1 —> Stochastic GD(隨機(jī)梯度下降)

有人可能會(huì)問,那size=1的時(shí)候,也就是來一個(gè)樣本就更新一次,豈不是會(huì)更快?

不是的,它會(huì)有兩個(gè)問題:

  1. 震動(dòng)太劇烈,誤差會(huì)灰常大,可能根本無法到達(dá)最低點(diǎn)
  2. 每次只計(jì)算一個(gè)樣本,就失去了我們前面提到的“Vectorization(矢量化)”的優(yōu)勢,因此計(jì)算效率反而不高

因此,我們通常取一個(gè)中間的值,這樣,既利用了Vectorization來加速計(jì)算,又可以在一個(gè)epoch中多次更新,速度就可以最快。

有意思的是,據(jù)吳恩達(dá)說,mini-batch size 通常取2的指數(shù),主要是16,32,64,128,256,512,1024這幾個(gè)值,因?yàn)橛?jì)算機(jī)是二進(jìn)制,這樣的數(shù)字計(jì)算起來效率會(huì)更高一些。

口說無憑,現(xiàn)在我做個(gè)實(shí)驗(yàn)驗(yàn)證一下是不是mini-batch 更好:

實(shí)驗(yàn)條件:

三層神經(jīng)網(wǎng)絡(luò),learning-rate=0.0007,batch size=300,mini-batch size=64,迭代次數(shù)=40000

數(shù)據(jù)集形狀如下:

image

猜想:

①mini-batch GD效果要比batch GD更好

②mini-batch GD的cost曲線會(huì)比batch波動(dòng)更大,但是最終cost卻更低

實(shí)驗(yàn)代碼和過程就不放了,直接看我們運(yùn)行的結(jié)果

batch GD:

image
image

耗時(shí)105s,準(zhǔn)確率只有0.76,看圖明顯就知道還沒訓(xùn)練好。

再看mini-batch GD:

image
image

哇塞,效果不錯(cuò)!準(zhǔn)確率提高到了91.7%,而且從cost曲線上看,確實(shí)如我所料有很大的波動(dòng),但是最終的cost顯著低于batch GD,因此學(xué)習(xí)的模型就更好。

出乎我意料的是,時(shí)間居然縮短了一半以上!一開始我估計(jì)時(shí)間應(yīng)該差不多,因?yàn)槲覀兊?0000次相當(dāng)于40000個(gè)epoch,我前面只是說一個(gè)epoch中mini-batch更新的次數(shù)更多,沒想到居然也更快(因?yàn)槲矣X得一個(gè)epoch中的操作變多了,可能會(huì)變慢一點(diǎn))。

想了想,覺得應(yīng)該是這樣:因?yàn)閙ini-batch在一個(gè)epoch中走的步子多,因此可以迅速地找到“最佳下坡路”,找到了之后,就跟坐滑滑梯一樣,越溜越快,因此比batch GD更快。

二、Momentum 動(dòng)量法

上面的mini-batch GD給了我們一些驚喜了,但是似乎還可以更好,畢竟還有不少點(diǎn)都分類錯(cuò)誤。

主要的原因就是因?yàn)椋?strong>使用mini-batch之后,穩(wěn)定性降低了,在梯度下降的時(shí)候會(huì)有較為劇烈的振動(dòng),這樣可能導(dǎo)致在最低點(diǎn)附近瞎晃悠,因此效果會(huì)受影響。

動(dòng)量法就是解決mini-batch的這個(gè)問題的,它讓梯度下降不那么抖動(dòng)。

看看Momentum的參數(shù)更新過程:

image

如果你熟悉神經(jīng)網(wǎng)絡(luò)梯度下降的過程,就知道,我們一般的梯度下降的更新過程(以W為例)是:W = W -αdW。

動(dòng)量法相當(dāng)于多了一個(gè)V_dW,它考慮了前面若干個(gè)dW,(實(shí)際上,V_dW約等于前1/(1-β)個(gè)dW的平均值,數(shù)學(xué)上稱為“指數(shù)加權(quán)平均”)這樣,dW的方向就會(huì)受到前面若干個(gè)dW的沖擊,于是整體就變得更平緩。

可能畫個(gè)示意圖才能更好地說明吧:

image

mini-batch是上下起伏不定的箭頭,但是把若干個(gè)的方向平均一下,就變得平緩多了,相當(dāng)于抵消掉了很多的方向相反的誤差。

我們也在做實(shí)驗(yàn)驗(yàn)證一下,實(shí)驗(yàn)條件跟上面一樣,我們在mini-batch size=64的基礎(chǔ)上,使用Momentum方法來更新參數(shù),得到的效果如下:

image

這個(gè)超參數(shù)β調(diào)了我半天,最開始0.9,然后0.95,再0.99,再0.999,終于有了上面的這么一點(diǎn)點(diǎn)的提升,準(zhǔn)確率到了92%??梢妋omentum有一些效果,但是此處還不太明顯。

三、Adam算法

這個(gè)方法,對momentum再進(jìn)一步改進(jìn),結(jié)合了RMSprop算法(是另一種減小梯度下降振動(dòng)的方法),更新過程如下:

image

不僅有了我們剛剛的V_dW, 還有一個(gè)S_dW(就把它理解為跟V_dW的原理類似就行了),然后,再對這兩個(gè)玩意兒都進(jìn)行了一個(gè)修正(corrected),最后參數(shù)更新是綜合了這二者,結(jié)果效果就出奇的好:

image
image

準(zhǔn)確率有了明顯提升,達(dá)到94%,擬合的形狀明顯是那么一回事了。

對于Momentum的效果不那么明顯的現(xiàn)在,吳恩達(dá)的解釋是在learning-rate太小以及數(shù)據(jù)集比較簡單的情況下,momentum發(fā)揮不了太大的作用,因此本實(shí)驗(yàn)中我們看不出驚人的效果。但在其他場景下也許就有很好的改善了。
當(dāng)然,既然有了Adam算法,我們自然會(huì)使用Adam這個(gè)最佳實(shí)踐了。

總結(jié)一下:

  • Mini-batch GD比傳統(tǒng)GD效果更好,訓(xùn)練更快

  • Momentum動(dòng)量法可以減小Mini-batch帶來的振動(dòng)

  • 梯度下降的最佳優(yōu)化方法是Adam算法

  • Adam算法中的超參數(shù)β1和β2以及l(fā)earning-rate也會(huì)顯著影響模型,因此需要我們反復(fù)調(diào)試

本文內(nèi)容為轉(zhuǎn)載,版權(quán)歸作者所有

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

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

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