上節課我們主要介紹了如何建立一個實用的深度學習神經網絡。包括Train/Dev/Test sets的比例選擇,Bias和Variance的概念和差別:Bias對應欠拟合,Variance對應過拟合。接着,我們介紹了防止過拟合的兩種方法:L2 regularization和Dropout。然後,介紹了如何進行規範化輸入,以加快梯度下降速度和精度。然後,我們介紹了梯度消失和梯度爆炸的概念和危害,并提出了如何使用梯度初始化來降低這種風險。最後,我們介紹了梯度檢查,來驗證梯度下降算法是否正确。
本節課,我們将繼續讨論深度神經網絡中的一些優化算法,通過使用這些技巧和方法來提高神經網絡的訓練速度和精度。
1Mini-batch Gradient Descent
之前我們介紹的神經網絡訓練過程是對所有m個樣本,稱為batch,通過向量化計算方式,同時進行的。如果m很大,例如達到百萬數量級,訓練速度往往會很慢,因為每次疊代都要對所有樣本進行進行求和運算和矩陣運算。我們将這種梯度下降算法稱為Batch Gradient Descent。
為了解決這一問題,我們可以把m個訓練樣本分成若幹個子集,稱為mini-batches,這樣每個子集包含的資料量就小了,例如隻有1000,然後每次在單一子集上進行神經網絡訓練,速度就會大大提高。這種梯度下降算法叫做Mini-batch Gradient Descent。

Mini-batches Gradient Descent的實作過程是先将總的訓練樣本分成T個子集(mini-batches),然後對每個mini-batch進行神經網絡訓練,包括Forward Propagation,Compute Cost Function,Backward Propagation,循環至T個mini-batch都訓練完畢。
for t=1,⋯,T {
Forward Propagation
ComputeCostFunction
BackwardPropagation
W:=W−α⋅dW
b:=b−α⋅db
}
經過T次循環之後,所有m個訓練樣本都進行了梯度下降計算。這個過程,我們稱之為經曆了一個epoch。對于Batch Gradient Descent而言,一個epoch隻進行一次梯度下降算法;而Mini-Batches Gradient Descent,一個epoch會進行T次梯度下降算法。
值得一提的是,對于Mini-Batches Gradient Descent,可以進行多次epoch訓練。而且,每次epoch,最好是将總體訓練資料重新打亂、重新分成T組mini-batches,這樣有利于訓練出最佳的神經網絡模型。
2Understanding Mini-batch Gradient Descent
Batch gradient descent和Mini-batch gradient descent的cost曲線如下圖所示:
一般來說,如果總體樣本數量m不太大時,例如m≤2000m≤2000,建議直接使用Batch gradient descent。如果總體樣本數量m很大時,建議将樣本分成許多mini-batches。推薦常用的mini-batch size為64,128,256,512。這些都是2的幂。之是以這樣設定的原因是計算機存儲資料一般是2的幂,這樣設定可以提高運算速度。
3Exponentially Weighted Averages
該部分我們将介紹指數權重平均(Exponentially weighted averages)的概念。
舉個例子,記錄半年内倫敦市的氣溫變化,并在二維平面上繪制出來,如下圖所示:
看上去,溫度資料似乎有noise,而且抖動較大。如果我們希望看到半年内氣溫的整體變化趨勢,可以通過移動平均(moving average)的方法來對每天氣溫進行平滑處理。
例如我們可以設V0=0,當成第0天的氣溫值。
第一天的氣溫與第0天的氣溫有關:
顯然,當N>>0時,上述等式是近似成立的。
至此,簡單解釋了為什麼指數權重平均的天數的計算公式為1/(1−β)。
4Understanding Exponetially Weighted Averages
我們将指數權重平均公式的一般形式寫下來:
我們已經知道了指數權重平均的遞推公式。實際應用中,為了減少記憶體的使用,我們可以使用這樣的語句來實作指數權重平均算法:
Vθ=0
Repeat {
Get next θt
Vθ:=βVθ+(1−β)θt
5Bias Correction in Exponentially Weighted Average
上文中提到當β=0.98時,指數權重平均結果如下圖綠色曲線所示。但是實際上,真實曲線如紫色曲線所示。
我們注意到,紫色曲線與綠色曲線的差別是,紫色曲線開始的時候相對較低一些。這是因為開始時我們設定V0=0,是以初始值會相對小一些,直到後面受前面的影響漸漸變小,趨于正常。
修正這種問題的方法是進行偏移校正(bias correction),即在每次計算完Vt後,對Vt進行下式處理:
值得一提的是,機器學習中,偏移校正并不是必須的。因為,在疊代一次次數後(t較大),Vt受初始值影響微乎其微,紫色曲線與綠色曲線基本重合。是以,一般可以忽略初始疊代過程,等到一定疊代之後再取值,這樣就不需要進行偏移校正了。
6
Gradient Descent with Momentum
該部分将介紹動量梯度下降算法,其速度要比傳統的梯度下降算法快很多。做法是在每次訓練時,對梯度進行指數權重平均處理,然後用得到的梯度值更新權重W和常數項b。下面介紹具體的實作過程。
原始的梯度下降算法如上圖藍色折線所示。在梯度下降過程中,梯度下降的振蕩較大,尤其對于W、b之間數值範圍差别較大的情況。此時每一點處的梯度隻與目前方向有關,産生類似折線的效果,前進緩慢。而如果對梯度進行指數權重平均,這樣使目前梯度不僅與目前方向有關,還與之前的方向有關,這樣處理讓梯度前進方向更加平滑,減少振蕩,能夠更快地到達最小值處。
權重W和常數項b的指數權重平均表達式如下:
從動量的角度來看,以權重W為例,Vdw可以成速度V,dW可以看成是加速度a。指數權重平均實際上是計算目前的速度,目前速度由之前的速度和現在的加速度共同影響。而β<1,又能限制速度Vdw過大。也就是說,目前的速度是漸變的,而不是瞬變的,是動量的過程。這保證了梯度下降的平穩性和準确性,減少振蕩,較快地達到最小值處。
動量梯度下降算法的過程如下:
On iteration t:
Compute dW, db on the current mini−batch
VdW=βVdw+(1−β)dW
Vdb=βVdb+(1−β)db
W=W−αVdw, b=b−αVdb
初始時,令Vdw=0,Vdb=0。一般設定β=0.9,即指數權重平均前10天的資料,實際應用效果較好。
另外,關于偏移校正,可以不使用。因為經過10次疊代後,随着滑動平均的過程,偏移情況會逐漸消失。
補充一下,在其它文獻資料中,動量梯度下降還有另外一種寫法:
即消去了dW和db前的系數(1−β)。這樣簡化了表達式,但是學習因子α相當于變成了α/(1−β),表示α也受β的影響。從效果上來說,這種寫法也是可以的,但是不夠直覺,且調參涉及到α,不夠友善。是以,實際應用中,推薦第一種動量梯度下降的表達式。
7RMSprop
RMSprop是另外一種優化梯度下降速度的算法。每次疊代訓練過程中,其權重W和常數項b的更新表達式為:
其中,ε=10^−8,或者其它較小值。
8Adam Optimization Algorithm
Adam(Adaptive Moment Estimation)算法結合了動量梯度下降算法和RMSprop算法。其算法流程為:
實際應用中,Adam算法結合了動量梯度下降和RMSprop各自的優點,使得神經網絡訓練速度大大提高。
9
Learning Rate Decay
減國小習因子α也能有效提高神經網絡訓練速度,這種方法被稱為learning rate decay。
Learning rate decay就是随着疊代次數增加,學習因子α逐漸減小。下面用圖示的方式來解釋這樣做的好處。下圖中,藍色折線表示使用恒定的學習因子α,由于每次訓練α相同,步進長度不變,在接近最優值處的振蕩也大,在最優值附近較大範圍内振蕩,與最優值距離就比較遠。綠色折線表示使用不斷減小的α,随着訓練次數增加,α逐漸減小,步進長度減小,使得能夠在最優值處較小範圍内微弱振蕩,不斷逼近最優值。相比較恒定的αα來說,learning rate decay更接近最優值。
其中,k為可調參數,t為mini-bach number。
除此之外,還可以設定α為關于t的離散值,随着t增加,α呈階梯式減小。當然,也可以根據訓練情況靈活調整目前的α值,但會比較耗時間。
10
The Problem of Local Optima
在使用梯度下降算法不斷減小cost function時,可能會得到局部最優解(local optima)而不是全局最優解(global optima)。之前我們對局部最優解的了解是形如碗狀的凹槽,如下圖左邊所示。但是在神經網絡中,local optima的概念發生了變化。準确地來說,大部分梯度為零的“最優點”并不是這些凹槽處,而是形如右邊所示的馬鞍狀,稱為saddle point。也就是說,梯度為零并不能保證都是convex(極小值),也有可能是concave(極大值)。特别是在神經網絡中參數很多的情況下,所有參數梯度為零的點很可能都是右邊所示的馬鞍狀的saddle point,而不是左邊那樣的local optimum。
- 隻要選擇合理的強大的神經網絡,一般不太可能陷入local optima
- Plateaus可能會使梯度下降變慢,降低學習速度
值得一提的是,上文介紹的動量梯度下降,RMSprop,Adam算法都能有效解決plateaus下降過慢的問題,大大提高神經網絡的學習速度。