吳恩達【深度學習工程師】學習筆記(七)

吳恩達【深度學習工程師】專項課程包含以下五門課程:

1、神經網絡和深度學習;
2、改善深層神經網絡:超參數調試、正則化以及優化;
3、結構化機器學習項目;
4、卷積神經網絡;
5、序列模型。

今天介紹《改善深層神經網絡:超參數調試、正則化以及優化》系列第二講:優化算法。

主要內容:

1、Mini-batch梯度下降法;

2、指數加權平均;

3、momentum、RMSProp、Adam優化算法;

4、學習率衰減.

1、 Mini-batch 梯度下降法

神經網絡訓練過程是對所有m個樣本,稱爲batch,通過向量化計算方式,同時進行運算。這種梯度下降算法被稱爲Batch Gradient Descent。

我們可以把m個訓練樣本分成若干個子集,稱爲mini-batch,這樣每個子集包含的數據量就小了,每次在單一子集上進行神經網絡訓練,網絡收斂的速度就會大大提高。這種梯度下降算法被稱爲Mini-batch Gradient Descent。

假設總的訓練樣本個數m=5 000 000,其維度爲(nx,m)。將其分成5000個子集,每個mini-batch含有1000個樣本。我們將每個mini-batch記爲X{t},其維度爲(nx,1000)。相應的每個mini-batch的輸出記爲Y{t},其維度爲(1,1000),且t=1,2,,5000

Mini-batch Gradient Descent的實現過程是:將訓練樣本分成 N 個 mini-batches,對每個mini-batch進行神經網絡訓練,經過N次循環之後,所有m個訓練樣本都進行了梯度下降計算,我們稱之爲經歷了一個epoch。使用Batch Gradient Descent時,一個epoch只進行一次梯度下降算法;而使用Mini-BatchGradient Descent時,一個epoch會進行 N 次梯度下降算法。

這裏寫圖片描述

使用Batch gradient descent,隨着迭代次數增加,cost是不斷減小的;使用Mini-batch gradient descent,隨着在不同的mini-batch上迭代訓練,由於不同的mini-batch之間是有差異,因此其cost不是單調下降,而是出現振盪,但整體趨勢是下降的。

mini-batch 大小參數通常設置爲 64, 128,  256, 512。

2、指數加權平均

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

這裏寫圖片描述

溫度數據抖動較大。如果我們希望看到半年內氣溫的整體變化趨勢,可以通過移動平均(moving average)的方法來對每天氣溫進行平滑處理。

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

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

V1=0.9V0+0.1θ1

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

V2===0.9V1+0.1θ20.9(0.9V0+0.1θ1)+0.1θ20.92V0+0.90.1θ1+0.1θ2

即第t天與第t-1天的氣溫迭代關係爲:

Vt==0.9Vt1+0.1θt0.9tV0+0.9t10.1θ1+0.9t20.1θ2++0.90.1θt1+0.1θt

經過移動平均處理得到的氣溫紅色曲線:

這裏寫圖片描述

這種滑動平均算法稱爲指數加權平均(exponentially weighted average)。其一般形式爲:

Vt=βVt1+(1β)θt

上面的例子中,β=0.9β值決定了指數加權平均的天數,近似表示爲:

11β

例如,當β=0.9,則11β=10,表示將前10天進行指數加權平均。當β=0.98,則11β=50,表示將前50天進行指數加權平均。β值越大,則指數加權平均的天數越多,平均後的趨勢線就越平緩,但是同時也會向右平移。

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

這裏寫圖片描述

其中,紫色曲線開始的時候相對較低一些。這是因爲開始時我們設置V0=0,所以初始值會相對小一些,直到後面受前面的影響漸漸變小,趨於正常。

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

Vt1βt

在剛開始的時候,t比較小,(1βt)<1,這樣就將Vt修正得更大一些,效果是把紫色曲線開始部分向上提升一些,與綠色曲線接近重合。隨着t增大,(1βt)1Vt基本不變,紫色曲線與綠色曲線依然重合。這樣就實現了簡單的偏移校正,得到我們希望的綠色曲線。

但是偏移校正並不總是必須的。因爲,在一次次迭代後,Vt受初始值影響越來越小,紫色曲線與綠色曲線基本重合。所以,在經過一段初始迭代過程後,再取值就不需要進行偏移校正了。

3、momentum

動量梯度下降算法,是指在每次訓練時,對梯度進行指數加權平均處理,然後用處理後的梯度值更新權重W和常數項b。

原始的梯度下降算法在梯度下降過程中,梯度下降的振盪較大。每一點處的梯度只與當前方向有關,產生類似折線的效果,前進緩慢。而如果對梯度進行指數加權平均,這樣使當前梯度不僅與當前方向有關,還與之前的方向有關,這樣處理讓梯度前進方向更加平滑,減少振盪,能夠更快地到達最小值處。

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

VdW=βVdW+(1β)dW

Vdb=βVdb+(1β)db

從動量的角度來看,以權重W爲例,VdW可以看成速度V,dW可以看成是加速度a。指數加權平均實際上是計算當前的速度,當前速度由之前的速度和現在的加速度共同影響。

初始時令VdW=0,Vdb=0β=0.9即指數加權平均前10天的數據。

關於偏移校正可以不使用。因爲經過10次迭代後,隨着滑動平均的過程,偏移情況會逐漸消失。

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

VdW=βVdW+dW

Vdb=βVdb+db

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

4、RMSprop

RMSprop梯度下降算法。每次迭代訓練過程中,權重W和常數項b的更新表達式爲:

SW=βSdW+(1β)dW2

Sb=βSdb+(1β)db2

W:=WαdWSW, b:=bαdbSb

在RMSprop算法中,如果梯度下降在垂直方向(b)上振盪較大,在水平方向(W)上振盪較小,表示在b方向上梯度較大,即

db較大,而在W方向上梯度較小,即dW較小。因此,上述表達式中Sb較大,而SW較小。在更新W和b的表達式中,變化值dWSW較大,而dbSb較小。也就使得W變化得多一些,b變化得少一些。也就是說,如果哪個方向振盪大,就減小該方向的更新速度,從而減小振盪。

爲了避免RMSprop算法中分母爲零,通常可以在分母增加一個極小的常數ε

W:=WαdWSW+ε, b:=bαdbSb+ε

其中,ε=108,或者其它較小值。

5、 Adam優化算法

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

VdW=0, SdW, Vdb=0, Sdb=0

On iteration t:

    Cimpute dW, db

    VdW=β1VdW+(1β1)dW, Vdb=β1Vdb+(1β1)db

    SdW=β2SdW+(1β2)dW2, Sdb=β2Sdb+(1β2)db2

    VcorrecteddW=VdW1βt1, Vcorrecteddb=Vdb1βt1

    ScorrecteddW=SdW1βt2, Scorrecteddb=Sdb1βt2

    W:=WαVcorrecteddWScorrecteddW+ε, b:=bαVcorrecteddbScorrecteddb+ε

Adam算法包含了幾個超參數,分別是:α,β1,β2,ε。其中,β1通常設置爲0.9,β2通常設置爲0.999,ε通常設置爲108。一般只需要對β1β2進行調試。

6、學習率衰減

學習率衰減 (learning rate decay)是一種隨着迭代次數的增加,逐步減小學習因子  α 的方法。

隨着訓練次數增加,α逐漸減小,步進長度減小,使得能夠在最優值處較小範圍內微弱振盪,不斷逼近最優值。相比較恆定的α來說,learning rate decay更接近最優值。

α=11+decay_rateepochα0

其中,deacy_rate是參數,epoch是訓練完所有樣本的次數。隨着epoch增加,α會不斷變小。

除了上面計算α的公式之外,還有其它可供選擇的計算公式:

α=0.95epochα0

α=kepochα0    or    ktα0

其中,k爲可調參數,t爲mini-bach number。

除此之外,還可以設置α爲關於t的離散值,隨着t增加,α呈階梯式減小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章