天天看點

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

上節課我們主要介紹了如何建立一個實用的深度學習神經網絡。包括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。

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

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曲線如下圖所示:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
對于一般的神經網絡模型,使用Batch gradient descent,随着疊代次數增加,cost是不斷減小的。然而,使用Mini-batch gradient descent,随着在不同的mini-batch上疊代訓練,其cost不是單調下降,而是受類似noise的影響,出現振蕩。但整體的趨勢是下降的,最終也能得到較低的cost值。
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
我們來比較一下Batch gradient descent和Stachastic gradient descent的梯度下降曲線。如下圖所示,藍色的線代表Batch gradient descent,紫色的線代表Stachastic gradient descent。Batch gradient descent會比較平穩地接近全局最小值,但是因為使用了所有m個樣本,每次前進的速度有些慢。Stachastic gradient descent每次前進速度很快,但是路線曲折,有較大的振蕩,最終會在最小值附近來回波動,難以真正達到最小值處。而且在數值處理上就不能使用向量化的方法來提高運算速度。
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
實際使用中,mini-batch size不能設定得太大(Batch gradient descent),也不能設定得太小(Stachastic gradient descent)。這樣,相當于結合了Batch gradient descent和Stachastic gradient descent各自的優點,既能使用向量化優化算法,又能叫快速地找到最小值。mini-batch gradient descent的梯度下降曲線如下圖綠色所示,每次前進速度較快,且振蕩較小,基本能接近全局最小值。
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

一般來說,如果總體樣本數量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)的概念。

舉個例子,記錄半年内倫敦市的氣溫變化,并在二維平面上繪制出來,如下圖所示:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

看上去,溫度資料似乎有noise,而且抖動較大。如果我們希望看到半年内氣溫的整體變化趨勢,可以通過移動平均(moving average)的方法來對每天氣溫進行平滑處理。

例如我們可以設V0=0,當成第0天的氣溫值。

第一天的氣溫與第0天的氣溫有關:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
上面的例子中,β=0.9。ββ值決定了指數權重平均的天數,近似表示為:
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
這裡簡單解釋一下公式1/(1−β)是怎麼來的。準确來說,指數權重平均算法跟之前所有天的數值都有關系,根據之前的推導公式就能看出。但是指數是衰減的,一般認為衰減到1/e就可以忽略不計了。是以,根據之前的推導公式,我們隻要證明:
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

顯然,當N>>0時,上述等式是近似成立的。

至此,簡單解釋了為什麼指數權重平均的天數的計算公式為1/(1−β)。

4Understanding Exponetially Weighted Averages

我們将指數權重平均公式的一般形式寫下來:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

我們已經知道了指數權重平均的遞推公式。實際應用中,為了減少記憶體的使用,我們可以使用這樣的語句來實作指數權重平均算法:

Vθ=0

Repeat {

    Get next θt

    Vθ:=βVθ+(1−β)θt

5Bias Correction in Exponentially Weighted Average

上文中提到當β=0.98時,指數權重平均結果如下圖綠色曲線所示。但是實際上,真實曲線如紫色曲線所示。

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

我們注意到,紫色曲線與綠色曲線的差別是,紫色曲線開始的時候相對較低一些。這是因為開始時我們設定V0=0,是以初始值會相對小一些,直到後面受前面的影響漸漸變小,趨于正常。

修正這種問題的方法是進行偏移校正(bias correction),即在每次計算完Vt後,對Vt進行下式處理:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

值得一提的是,機器學習中,偏移校正并不是必須的。因為,在疊代一次次數後(t較大),Vt受初始值影響微乎其微,紫色曲線與綠色曲線基本重合。是以,一般可以忽略初始疊代過程,等到一定疊代之後再取值,這樣就不需要進行偏移校正了。

6

Gradient Descent with Momentum

該部分将介紹動量梯度下降算法,其速度要比傳統的梯度下降算法快很多。做法是在每次訓練時,對梯度進行指數權重平均處理,然後用得到的梯度值更新權重W和常數項b。下面介紹具體的實作過程。

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

原始的梯度下降算法如上圖藍色折線所示。在梯度下降過程中,梯度下降的振蕩較大,尤其對于W、b之間數值範圍差别較大的情況。此時每一點處的梯度隻與目前方向有關,産生類似折線的效果,前進緩慢。而如果對梯度進行指數權重平均,這樣使目前梯度不僅與目前方向有關,還與之前的方向有關,這樣處理讓梯度前進方向更加平滑,減少振蕩,能夠更快地到達最小值處。

權重W和常數項b的指數權重平均表達式如下:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

從動量的角度來看,以權重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次疊代後,随着滑動平均的過程,偏移情況會逐漸消失。

補充一下,在其它文獻資料中,動量梯度下降還有另外一種寫法:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

即消去了dW和db前的系數(1−β)。這樣簡化了表達式,但是學習因子α相當于變成了α/(1−β),表示α也受β的影響。從效果上來說,這種寫法也是可以的,但是不夠直覺,且調參涉及到α,不夠友善。是以,實際應用中,推薦第一種動量梯度下降的表達式。

7RMSprop

RMSprop是另外一種優化梯度下降速度的算法。每次疊代訓練過程中,其權重W和常數項b的更新表達式為:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
下面簡單解釋一下RMSprop算法的原理,仍然以下圖為例,為了便于分析,令水準方向為W的方向,垂直方向為b的方向。
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
還有一點需要注意的是為了避免RMSprop算法中分母為零,通常可以在分母增加一個極小的常數ε:
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

其中,ε=10^−8,或者其它較小值。

8Adam Optimization Algorithm

Adam(Adaptive Moment Estimation)算法結合了動量梯度下降算法和RMSprop算法。其算法流程為:

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

實際應用中,Adam算法結合了動量梯度下降和RMSprop各自的優點,使得神經網絡訓練速度大大提高。

9

Learning Rate Decay

減國小習因子α也能有效提高神經網絡訓練速度,這種方法被稱為learning rate decay。

Learning rate decay就是随着疊代次數增加,學習因子α逐漸減小。下面用圖示的方式來解釋這樣做的好處。下圖中,藍色折線表示使用恒定的學習因子α,由于每次訓練α相同,步進長度不變,在接近最優值處的振蕩也大,在最優值附近較大範圍内振蕩,與最優值距離就比較遠。綠色折線表示使用不斷減小的α,随着訓練次數增加,α逐漸減小,步進長度減小,使得能夠在最優值處較小範圍内微弱振蕩,不斷逼近最優值。相比較恒定的αα來說,learning rate decay更接近最優值。

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法

其中,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。

吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
類似馬鞍狀的plateaus會降低神經網絡學習速度。Plateaus是梯度接近于零的平緩區域,如下圖所示。在plateaus上梯度很小,前進緩慢,到達saddle point需要很長時間。到達saddle point後,由于随機擾動,梯度一般能夠沿着圖中綠色箭頭,離開saddle point,繼續前進,隻是在plateaus上花費了太多時間。
吳恩達《優化深度神經網絡》精煉筆記(2)-- 優化算法
總的來說,關于local optima,有兩點總結:

  • 隻要選擇合理的強大的神經網絡,一般不太可能陷入local optima
  • Plateaus可能會使梯度下降變慢,降低學習速度

值得一提的是,上文介紹的動量梯度下降,RMSprop,Adam算法都能有效解決plateaus下降過慢的問題,大大提高神經網絡的學習速度。

繼續閱讀