1.Mini-batch梯度下降法
????????機(jī)器學(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)化算法,大大提高個人和團(tuán)隊的效率。

????????之前介紹過,向量化能有效地同時對m個例子進(jìn)行計算,允許同時去處理整個訓(xùn)練集,而不需要不斷for循環(huán)很緩慢去計算。即是把訓(xùn)練樣本放入一個大矩陣中X=[…
],把標(biāo)簽也放入一個大矩陣Y=[
…
]。
????????向量化能夠相對較快的去處理所有的m個樣本,但是m很大的話,處理速度仍然緩慢。比如有500萬個樣本,你需要處理完500萬個樣本后才能進(jìn)行下一步梯度下降。
????????我們可以先向量化處理部分樣本,到下一步梯度下降再向量化處理另外部分樣本,這樣梯度下降算法收斂速度就會很快。
????????把訓(xùn)練集分割成小一點的訓(xùn)練集,這些子集就是mini-batch。假設(shè)每個子集大小是1000個樣本,則=[
…
]為第一個子集,
= [
…
]為第二個子集等,維數(shù)為(
,1000);標(biāo)簽也類似分割,
=[
…
],
=[
…
],維數(shù)為(1,1000)。
????????統(tǒng)一符號:表示第i個樣本,
表示第l層的z值,
表示第t個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梯度下降法

????????在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,先說兩個極端,
????????當(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)練集很?。?lt;2000樣本),就直接使用batch梯度下降;對于大的訓(xùn)練集則根據(jù)計算機(jī)內(nèi)存選擇mini-batch尺寸64()、128(
)、256(
)、512(
)。
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ù)。

????????指數(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è)=0,則第一天指數(shù)加權(quán)平均為
=0.9
+0.1
,第二天指數(shù)加權(quán)平均為
=0.9
+0.1
…第t天指數(shù)加權(quán)平均為
=0.9
+0.1
,0.9和0.1是人為設(shè)定的權(quán)值,連線
,
,…,
就是倫敦的一年的溫度趨勢(紅線),可通過該趨勢預(yù)測明年溫度變化。

????????如圖6.5,把上面的權(quán)值0.9用β表示,則=β
-1+(1-β)
,
約等于最近1/(1-β)天的溫度指數(shù)加權(quán)平均值,
????????當(dāng)β=0.9時,約等于最近10天的溫度平均值,趨勢線為紅色;
????????當(dāng)β=0.98時,約等于最近50天的溫度平均值,趨勢線為綠色,此時的趨勢線比較緩和平滑,但會右移,出現(xiàn)一定延遲;
????????當(dāng)β=0.5時,約等于最近2天的溫度平均值,趨勢線為黃色,此時趨勢線波動非常大,算的平均值很可能出現(xiàn)異常值,但該趨勢線能更快適應(yīng)溫度變化。
????????β是非常重要的參數(shù),往往中間某個值效果更好,比如β=0.9時的紅線相對更好平均了溫度。
4.理解指數(shù)加權(quán)平均

????????如圖6.7,設(shè)β=0.9,展開指數(shù)加權(quán)平均=0.1
+ 0.1*0.9
+0.1*(0.9)2
+…,可以看出權(quán)重成指數(shù)級遞減,
約等于
<1/e即最近1/(1-β)天指數(shù)加權(quán)平均。
????????比如當(dāng)β=0.9,≈1/e,
約等于最近10天1/(1-β)=10 指數(shù)加權(quán)平均;
????????當(dāng)β=0.98,≈1/e,
約等于最近50天1/(1-β)=50 指數(shù)加權(quán)平均。

????????如圖6.7,在實際應(yīng)用中,計算指數(shù)加權(quán)平均步驟為:先設(shè)定=0,然后計算
,
,
,…,只占一行代碼節(jié)約內(nèi)存運算快,當(dāng)然結(jié)果沒有算數(shù)平均那么精準(zhǔn),但是從計算和內(nèi)存效率來說這是個很好的方法。
5.指數(shù)加權(quán)平均的偏差修正

????????為了使指數(shù)加權(quán)平均計算結(jié)果更加精確,我們需要加入偏差修正。如圖6.9,實際上當(dāng)β=0.98時得到的不是綠線,而是紫線,起點偏低。為了得到綠線,應(yīng)使/(1-
),t越小對
影響越大,t越大對
影響越小,最終得到的是綠線。
6.動量(Momentum)梯度下降
????????有一種方法叫動量梯度下降,收斂速度快于一般梯度下降。該方法一句話說明就是:先計算梯度的指數(shù)加權(quán)平均數(shù),并利用該指數(shù)加權(quán)平均數(shù)更新權(quán)重。

????????如圖6.10,假設(shè)紅點是最低點,無論是batch還是mini-batch,下降過程中都是像藍(lán)線一樣不斷擺動,從而無法使用過大學(xué)習(xí)率。而動量梯度下降能都很大程度減少擺動,收斂路線為紅線,動量梯度下降過程為:
????????先計算出dw、db,
????????然后計算指數(shù)加權(quán)平均=β
-(1-β)dw,
=β
-(1-β)db,
????????最后w=w-α,b=b-α
。
????????其他步驟和一般梯度下降一樣,梯度下降過程中每一步不再是獨立的,而是受前面梯度的制約,
????????在縱軸(擺動方向)通過指數(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,也可以加速梯度下降。

????????RMSprop梯度下降過程為:
????????先計算出dw、db,
????????然后計算平方項指數(shù)加權(quán)平均=β
-(1-β)
,
=β
-(1-β)
,平方是為了避免出現(xiàn)負(fù)數(shù),
只是為了增大或減小α,不改變正負(fù),
????????最后w=w-(α/√(+ε))*dw,b=b-(α/√(
+ε))*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)化算法。

????????Adam梯度下降過程為:
????????先初始化=0,
=0,
=0,
=0,
????????接著計算出dw,db,
????????接著計算=
-(1-
)dw,
=
-(1-
)db,
????????=
-(1-
)
,
=
-(1-
)
,
????????接著偏差修正=
/(1-
),
=
/(1-
),
????????=
/(1-
),
=
/(1-
),
????????最后w=w-(α/√(+ε))*
,b=b-(α/√(
+ε))*
。
????????上面過程涉及到的超參數(shù)有:
????????學(xué)習(xí)率α,需要不斷嘗試不同值找到最適合的值;
????????Momentum的β1,一般設(shè)置為0.9,
????????RMSProp的β2,一般設(shè)置為0.999,
????????ε就無所謂了,給個即可。
9.學(xué)習(xí)率衰減
????????加快學(xué)習(xí)還有一個辦法就是,隨著時間慢慢減少學(xué)習(xí)率,稱之為學(xué)習(xí)率衰減。

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

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

?????????還有其他學(xué)習(xí)率衰減方法,比如讓學(xué)習(xí)率呈指數(shù)下降的α=*
;比如某常數(shù)除于代數(shù)的平方根α= (K /√epoch-num) *
,或者某常數(shù)除于mini-batch的次數(shù)t的平方根α= (K /√t) *
;比如學(xué)習(xí)率離散下降;比如手動調(diào)整學(xué)習(xí)率,訓(xùn)練過程中每隔段時間就手動調(diào)整一次學(xué)習(xí)率。
10.局部最優(yōu)的問題

????????如圖6.16左圖所示,在深度學(xué)習(xí)初期,總會擔(dān)心算法會有局部最優(yōu)問題,算法會在困在某個局部最優(yōu),而無法到達(dá)全局最優(yōu)。
????????實際上這種情況是不用擔(dān)心的,在高維空間上比如有20000個參數(shù),那么形成局部最低點的情況是每個參數(shù)的圖像都是U形狀,即可能性是,這顯然微乎其微。大多數(shù)遇到的是鞍點,即該點有參數(shù)是U形狀,有的是∩形狀。

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