第六章 優(yōu)化算法

1.Mini-batch梯度下降法

????????機器學(xué)習(xí)的應(yīng)用是高度依賴經(jīng)驗的過程,伴隨著大量迭代的過程窒百,你需要訓(xùn)練諸多模型黍判,才能找到合適的那一個。優(yōu)化算法能夠幫助你快速訓(xùn)練模型篙梢。

????????深度學(xué)習(xí)沒有在大數(shù)據(jù)領(lǐng)域發(fā)揮最大的效果顷帖,現(xiàn)在很容易去獲取大數(shù)據(jù)集,但在大數(shù)據(jù)集基礎(chǔ)上訓(xùn)練速度很慢渤滞,需要使用快速的優(yōu)化算法贬墩,大大提高個人和團隊的效率。

圖6.1 batch和mini-batch對比? ? ??

????????之前介紹過妄呕,向量化能有效地同時對m個例子進(jìn)行計算陶舞,允許同時去處理整個訓(xùn)練集,而不需要不斷for循環(huán)很緩慢去計算绪励。即是把訓(xùn)練樣本放入一個大矩陣中X=[x^{(1)}x^{(2)}x^{(m)}]肿孵,把標(biāo)簽也放入一個大矩陣Y=[y^{(1)}y^{(2)}y^{(m)}]论咏。

????????向量化能夠相對較快的去處理所有的m個樣本,但是m很大的話颁井,處理速度仍然緩慢厅贪。比如有500萬個樣本,你需要處理完500萬個樣本后才能進(jìn)行下一步梯度下降雅宾。

????????我們可以先向量化處理部分樣本养涮,到下一步梯度下降再向量化處理另外部分樣本,這樣梯度下降算法收斂速度就會很快眉抬。

????????把訓(xùn)練集分割成小一點的訓(xùn)練集贯吓,這些子集就是mini-batch。假設(shè)每個子集大小是1000個樣本蜀变,則X^{\{1 \}}=[x^{(1)}x^{(2)}x^{(1000)}]為第一個子集悄谐,X^{\{2\}}= [x^{(1001)}x^{(1002)}x^{(2000)}]為第二個子集等,維數(shù)為(n_x,1000)库北;標(biāo)簽也類似分割爬舰,Y^{\{1 \}}=[Y^{(1)}Y^{(2)}Y^{(1000)}],Y^\{{2 \}}=[Y^{(1001)}Y^{(1002)}Y^{(2000)}]寒瓦,維數(shù)為(1,1000)情屹。

????????統(tǒng)一符號:x^{(i)}表示第i個樣本,z^{[l]}表示第l層的z值杂腰,X{\{t \}}表示第t個mini-batch垃你。

圖6.2 mini-batch完整過程? ? ??

????????如圖6.2,mini-batch完整過程為:

????????假設(shè)5000萬樣本喂很,每個mini-batch為1000惜颇,總迭代數(shù)為50,

????????for in?range(0,50):

??????? ????for j?in?range(0,5000):????

???????????????? 步驟1:是向量化梯度下降

???????????????? 步驟2:是計算成本函數(shù)

???????????????? 步驟3:是反向計算

????????其實少辣,mini-batch比batch多了for j?in?range(0,5000):這一步而已凌摄,每一次迭代batch就一次梯度下降,而mini-batch有5000次梯度下降毒坛。

2.理解Mini-batch梯度下降法

圖6.3 batch和mini-batch成本函數(shù)坐標(biāo)對比

????????在batch中望伦,每次梯度下降都對應(yīng)全部訓(xùn)練集林说,成本函數(shù)值肯定是伴隨著迭代逐漸減少煎殷,如果出現(xiàn)增大那么算法肯定有問題,比如設(shè)置學(xué)習(xí)率過大腿箩。而在mini-batch中豪直,每次梯度下降不是對應(yīng)全部訓(xùn)練集,每個子集都不一樣從而計算出的成本函數(shù)結(jié)果會不同珠移,即會產(chǎn)生噪聲弓乙,成本函數(shù)值會出現(xiàn)忽高忽低末融,波動下降,但總體走勢是向下的暇韧。

圖6.4 設(shè)置mini-batch大小

????????如圖6.4勾习,先說兩個極端,

????????當(dāng)mini-batch尺寸為m時懈玻,那么mini-batch就變成batch巧婶,梯度下降線路基本是順滑往前的(藍(lán)色);

????????當(dāng)mini-batch尺寸為1時涂乌,每個樣本就是一個子集艺栈,這樣會有很大噪聲(可以減少學(xué)習(xí)率減少噪聲),梯度下降線路就會曲曲折折很難收斂(紫色)湾盒,這樣做就失去了向量化帶來的加速湿右,效率過于低下;

????????在實踐中應(yīng)該選擇不大不小的mini-batch尺寸罚勾,這樣既可以得到向量化的加速毅人,還不用每次迭代都計算全部訓(xùn)練集。

????????關(guān)于mini-batch尺寸的選擇:

????????如果訓(xùn)練集很屑庋辍(<2000樣本)堰塌,就直接使用batch梯度下降;對于大的訓(xùn)練集則根據(jù)計算機內(nèi)存選擇mini-batch尺寸64(2^6)分衫、128(2^7)场刑、256(2^8)、512(2^9)蚪战。

3.指數(shù)加權(quán)平均

????????還有幾種可以加快訓(xùn)練模型的優(yōu)化方法牵现,在這之前,先介紹下指數(shù)加權(quán)平均(統(tǒng)計學(xué)中叫指數(shù)加權(quán)移動平均)邀桑。

????????加權(quán)移動平均就是根據(jù)同一個移動段內(nèi)不同時間的數(shù)據(jù)對預(yù)測值的影響程度瞎疼,分別給予不同的權(quán)數(shù),然后再進(jìn)行平均移動以預(yù)測未來值壁畸。

????????加權(quán)移動平均不像簡單移動平均法那樣贼急,在計算平均值時對移動期內(nèi)的數(shù)據(jù)同等看待,而是根據(jù)愈是近期數(shù)據(jù)對預(yù)測值影響愈大這一特點捏萍,不同地對待移動期內(nèi)的各個數(shù)據(jù)太抓。對近期數(shù)據(jù)給予較大的權(quán)數(shù),對較遠(yuǎn)的數(shù)據(jù)給予較小的權(quán)數(shù)令杈。

圖6.5 使用加權(quán)平均計算倫敦一年的溫度趨勢

????????指數(shù)加權(quán)移動平均類似加權(quán)移動平均走敌,不過在指數(shù)加權(quán)移動平均的計算方法中,包括的不是一段數(shù)據(jù)逗噩,而是所有歷史數(shù)據(jù)掉丽,對全部歷史價格數(shù)據(jù)分配了逐步減少的權(quán)重跌榔。每一個數(shù)據(jù)的權(quán)重都對后來的一個數(shù)據(jù)的權(quán)重按照指數(shù)形式遞減,因此捶障,這種方法就得到了所謂指數(shù)加權(quán)移動平均的名稱僧须。

????????如圖6.5,設(shè)v_0=0项炼,則第一天指數(shù)加權(quán)平均為v_1=0.9 v_0+0.1θ_1皆辽,第二天指數(shù)加權(quán)平均為v_2=0.9 v_1+0.1θ_2 …第t天指數(shù)加權(quán)平均為v_t=0.9 v_{t-1}+0.1θ_t,0.9和0.1是人為設(shè)定的權(quán)值芥挣,連線v_0驱闷,v_1,…空免,v_t就是倫敦的一年的溫度趨勢(紅線)空另,可通過該趨勢預(yù)測明年溫度變化。

圖6.6 指數(shù)加權(quán)平均

????????如圖6.5蹋砚,把上面的權(quán)值0.9用β表示扼菠,則v_tv_t-1+(1-β)θ_tv_t約等于最近1/(1-β)天的溫度指數(shù)加權(quán)平均值坝咐,

????????當(dāng)β=0.9時循榆,v_t約等于最近10天的溫度平均值,趨勢線為紅色墨坚;

????????當(dāng)β=0.98時秧饮,v_t約等于最近50天的溫度平均值,趨勢線為綠色泽篮,此時的趨勢線比較緩和平滑盗尸,但會右移,出現(xiàn)一定延遲帽撑;

????????當(dāng)β=0.5時泼各,v_t約等于最近2天的溫度平均值,趨勢線為黃色亏拉,此時趨勢線波動非常大扣蜻,算的平均值很可能出現(xiàn)異常值,但該趨勢線能更快適應(yīng)溫度變化及塘。

????????β是非常重要的參數(shù)莽使,往往中間某個值效果更好,比如β=0.9時的紅線相對更好平均了溫度磷蛹。

4.理解指數(shù)加權(quán)平均

圖6.7 理解指數(shù)加權(quán)平均

????????如圖6.7吮旅,設(shè)β=0.9溪烤,展開指數(shù)加權(quán)平均v_{100}=0.1θ_{100} + 0.1*0.9θ_{99}+0.1*(0.9)2θ_{98}+…味咳,可以看出權(quán)重成指數(shù)級遞減庇勃,v_t約等于(β)^i<1/e即最近1/(1-β)天指數(shù)加權(quán)平均。

????????比如當(dāng)β=0.9槽驶,(0.9)^{10}≈1/e,v_t約等于最近10天1/(1-β)=10 指數(shù)加權(quán)平均责嚷;

????????當(dāng)β=0.98,(0.98)^{50}≈1/e,v_t約等于最近50天1/(1-β)=50 指數(shù)加權(quán)平均掂铐。

圖6.8 實施指數(shù)加權(quán)平均

????????如圖6.7罕拂,在實際應(yīng)用中,計算指數(shù)加權(quán)平均步驟為:先設(shè)定v_0=0,然后計算v_1全陨,v_2爆班,v_3,…辱姨,只占一行代碼節(jié)約內(nèi)存運算快柿菩,當(dāng)然結(jié)果沒有算數(shù)平均那么精準(zhǔn),但是從計算和內(nèi)存效率來說這是個很好的方法雨涛。

5.指數(shù)加權(quán)平均的偏差修正


圖6.9 偏差修正

????????為了使指數(shù)加權(quán)平均計算結(jié)果更加精確枢舶,我們需要加入偏差修正。如圖6.9替久,實際上當(dāng)β=0.98時得到的不是綠線凉泄,而是紫線,起點偏低蚯根。為了得到綠線后众,應(yīng)使v_t/(1-β^t),t越小對v_t影響越大,t越大對v_t影響越小颅拦,最終得到的是綠線吼具。

6.動量(Momentum)梯度下降

????????有一種方法叫動量梯度下降,收斂速度快于一般梯度下降矩距。該方法一句話說明就是:先計算梯度的指數(shù)加權(quán)平均數(shù)拗盒,并利用該指數(shù)加權(quán)平均數(shù)更新權(quán)重。

圖6.10 動量梯度下降

????????如圖6.10锥债,假設(shè)紅點是最低點陡蝇,無論是batch還是mini-batch,下降過程中都是像藍(lán)線一樣不斷擺動,從而無法使用過大學(xué)習(xí)率哮肚。而動量梯度下降能都很大程度減少擺動登夫,收斂路線為紅線,動量梯度下降過程為:

????????先計算出dw允趟、db,

????????然后計算指數(shù)加權(quán)平均v_{dw}v_{dw}-(1-β)dw,v_{db}v_{db}-(1-β)db,

????????最后w=w-αv_{dw},b=b-αv_{db}恼策。

????????其他步驟和一般梯度下降一樣,梯度下降過程中每一步不再是獨立的,而是受前面梯度的制約涣楷,

????????在縱軸(擺動方向)通過指數(shù)加權(quán)平均后接近零分唾,

????????而在橫軸(收斂方向)由于dw、db總是和橫軸方向一致狮斗,所以通過指數(shù)加權(quán)平均后依舊很大绽乔,相當(dāng)于給橫軸方向增加了動量,從而快速地收斂碳褒。

????????在實際應(yīng)用中折砸,可以不使用指數(shù)加權(quán)平均的偏差修正,因為經(jīng)過十次左右的指數(shù)加權(quán)平均后沙峻,計算的結(jié)果就會恢復(fù)正常值睦授。

7.RMSprop

????????還有一種方法叫RMSprop,全稱是root mean square prop摔寨,也可以加速梯度下降睹逃。

圖6.11 RMSprop梯度下降

????????RMSprop梯度下降過程為:

????????先計算出dw、db,

????????然后計算平方項指數(shù)加權(quán)平均s_{dw}s_{dw}-(1-β)dw^2,s_{db}s_{db}-(1-β)db^2,平方是為了避免出現(xiàn)負(fù)數(shù)祷肯,s_{dw}只是為了增大或減小α沉填,不改變正負(fù),

????????最后w=w-(α/√(s_{dw}+ε))*dw,b=b-(α/√(s_{db}+ε))*db,為防止s_{dw}佑笋、s_{db}為零翼闹,一般會加上值為10^{-8}的ε,

????????其他步驟和一般梯度下降一樣,從α/√(s_{dw}+ε)蒋纬、α/√(s_{db}+ε)可以看出猎荠,RMSprop梯度下降原理是梯度大則讓學(xué)習(xí)率小,梯度小則讓學(xué)習(xí)率大蜀备,從而讓收斂過程的擺動減小关摇。

8.Adam優(yōu)化算法

????????Adam優(yōu)化算法是由Momentum和RMSprop結(jié)合而成,適合各種類型神經(jīng)網(wǎng)絡(luò)碾阁,是圈內(nèi)普遍認(rèn)可的優(yōu)化算法输虱。

圖6.12 Adam梯度下降

????????Adam梯度下降過程為:

????????先初始化v_{dw}=0,s_{dw}=0,v_{db}=0,s_{db}=0脂凶,

????????接著計算出dw,db,

????????接著計算v_{dw}=β_1v_{dw}-(1-β_1)dw,v_{db}=β_1v_{db}-(1-β_1)db,

????????s_{dw}=β_2s_{dw}-(1-β_2)dw^2,s_{db}=β_2s_{db}-(1-β_2)db^2,

????????接著偏差修正v_{dw}^{correct}=v_{dw}/(1-β_1^t),v_{db}^{correct}=v_{db}/(1-β_1^t),

????????s_{dw}^{correct}=s_{dw}/(1-β_2^t),s_{db}^{correct}=s_{db}/(1-β_2^t),

????????最后w=w-(α/√(s_{dw}^{correct}+ε))*v_{dw}^{correct},b=b-(α/√(s_{db}^{correct}+ε))*v_{db}^{correct}宪睹。

????????上面過程涉及到的超參數(shù)有:

????????學(xué)習(xí)率α,需要不斷嘗試不同值找到最適合的值蚕钦;

????????Momentum的β1亭病,一般設(shè)置為0.9尊搬,

????????RMSProp的β2往产,一般設(shè)置為0.999板乙,

????????ε就無所謂了捺弦,給個10^{-8}即可胳施。

9.學(xué)習(xí)率衰減

????????加快學(xué)習(xí)還有一個辦法就是立磁,隨著時間慢慢減少學(xué)習(xí)率挽拂,稱之為學(xué)習(xí)率衰減渠抹。

圖6.13 學(xué)習(xí)率衰減

?????????如圖6.13,如果學(xué)習(xí)率一直不變并且一直很大葬项,那么神經(jīng)網(wǎng)絡(luò)就會在最低點附近大步跨越很難收斂到最低點泞当,如圖中藍(lán)線迹蛤;正確做法是一開始設(shè)置較大學(xué)習(xí)率民珍,然后慢慢減小,那么久很容易找到最低點盗飒,如圖中綠線嚷量。

圖6.14 學(xué)習(xí)率衰減方法

對于學(xué)習(xí)率衰減的方法可以使用公式α=(1 / (1 + decay-rate * epoch-num)) * α_0。其中decay-rate是衰減率逆趣,epoch-num是迭代代數(shù)蝶溶,α_0是一開始設(shè)定的學(xué)習(xí)率。

圖6.15 其他學(xué)習(xí)率衰減方法

?????????還有其他學(xué)習(xí)率衰減方法宣渗,比如讓學(xué)習(xí)率呈指數(shù)下降的α=0.95^{epoch-num}*α_0抖所;比如某常數(shù)除于代數(shù)的平方根α= (K /√epoch-num) * α_0,或者某常數(shù)除于mini-batch的次數(shù)t的平方根α= (K /√t) * α_0;比如學(xué)習(xí)率離散下降痕囱;比如手動調(diào)整學(xué)習(xí)率田轧,訓(xùn)練過程中每隔段時間就手動調(diào)整一次學(xué)習(xí)率。

10.局部最優(yōu)的問題

圖6.16 描述局部最優(yōu)問題

????????如圖6.16左圖所示鞍恢,在深度學(xué)習(xí)初期傻粘,總會擔(dān)心算法會有局部最優(yōu)問題,算法會在困在某個局部最優(yōu)帮掉,而無法到達(dá)全局最優(yōu)弦悉。

????????實際上這種情況是不用擔(dān)心的,在高維空間上比如有20000個參數(shù)蟆炊,那么形成局部最低點的情況是每個參數(shù)的圖像都是U形狀稽莉,即可能性是2^{-20000},這顯然微乎其微涩搓。大多數(shù)遇到的是鞍點肩祥,即該點有參數(shù)是U形狀,有的是∩形狀缩膝。

圖6.17 鞍點的問題

????????鞍點是不會導(dǎo)致局部最優(yōu)問題的混狠,當(dāng)算法走到鞍點時,會朝∩形狀方向走疾层。鞍點也不會使學(xué)習(xí)變慢将饺,因為會有Adam等優(yōu)化算法在平緩階段加速前進(jìn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市予弧,隨后出現(xiàn)的幾起案子刮吧,更是在濱河造成了極大的恐慌,老刑警劉巖掖蛤,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杀捻,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚓庭,警方通過查閱死者的電腦和手機致讥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來器赞,“玉大人垢袱,你說我怎么就攤上這事「酃瘢” “怎么了请契?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夏醉。 經(jīng)常有香客問我爽锥,道長,這世上最難降的妖魔是什么畔柔? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任氯夷,我火速辦了婚禮,結(jié)果婚禮上释树,老公的妹妹穿的比我還像新娘肠槽。我一直安慰自己,他們只是感情好奢啥,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布秸仙。 她就那樣靜靜地躺著,像睡著了一般桩盲。 火紅的嫁衣襯著肌膚如雪寂纪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天赌结,我揣著相機與錄音捞蛋,去河邊找鬼。 笑死柬姚,一個胖子當(dāng)著我的面吹牛拟杉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播量承,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼搬设,長吁一口氣:“原來是場噩夢啊……” “哼穴店!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拿穴,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泣洞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后默色,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體球凰,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年腿宰,在試婚紗的時候發(fā)現(xiàn)自己被綠了呕诉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡酗失,死狀恐怖义钉,靈堂內(nèi)的尸體忽然破棺而出昧绣,到底是詐尸還是另有隱情规肴,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布夜畴,位于F島的核電站拖刃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贪绘。R本人自食惡果不足惜兑牡,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望税灌。 院中可真熱鬧均函,春花似錦、人聲如沸菱涤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粘秆。三九已至如迟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攻走,已是汗流浹背殷勘。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昔搂,地道東北人玲销。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像摘符,于是被迫代替她去往敵國和親贤斜。 傳聞我的和親對象是個殘疾皇子淳附,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容