2.2)深度學習筆記:優化算法

目錄

1)Mini-batch gradient descent(重點)

2)Understanding mini-batch gradient descent

3)Exponentially weighted averages

4)Understanding exponetially weighted averages

5)Bias correction in exponentially weighted average

6)Gradient descent with momentum(重點)

7)RMSprop(重點)

8)Adam optimization algorithm(重點)

9)Learning rate decay

10)The problem of local optima

11)Summary


以下筆記是吳恩達老師深度學習課程第二門課第二週的的學習筆記:Optimization algorithms。筆記參考了黃海廣博士的內容,在此表示感謝。 


深度學習難以在大數據領域發揮最佳效果的一個原因是:在巨大的數據集上進行訓練速度很慢。而優化算法能夠幫助快速訓練模型,大大提高效率。本週,我們將討論深度神經網絡中的一些優化算法,通過使用這些技巧和方法來提高神經網絡的訓練速度。 

1)Mini-batch gradient descent(重點)

我們之前一直使用的梯度下降算法是同時處理整個訓練集,在更新參數的時候使用所有樣本來進行更新;即每一步梯度下降需要對整個訓練集進行一次處理,如果訓練數據集很大的時候,處理速度就會比較慢。這種梯度下降算法被稱爲Batch Gradient Descent

爲了解決批量梯度下降算法處理慢的問題,我們可以把訓練樣本劃分爲若干個子集,即mini-batchs。然後在單一子集上進行神經網絡訓練,速度就會大大提升,這種梯度下降算法稱爲Mini-batch Gradient Descent

吳恩達老師在課程裏介紹:假設我們有m=5000000個訓練樣本,維度爲$\left(n_{x}, m\right)$,將其分成5000個子集,每個子集含有1000個樣本。我們將每個mini-batch記爲$X^{\{t\}}$,維度爲$\left(n_{x}, 1000\right)$;相應的每個mini-batch的輸出爲$Y^{\{t\}}$,維度爲$(1,1000)$

針對每一個Mini-batch,神經網絡進行一次訓練,包含前向傳播,計算代價函數,反向傳播。經過多次訓練之後,所有m個訓練樣本都進行了梯度下降計算。對所有訓練樣本進行一次梯度下降計算,稱爲一個epoch。


2)Understanding mini-batch gradient descent

我們先來看一下批量梯度下降和小批量梯度下降的成本曲線圖:

可以看出,對於Batch梯度下降而言,Mini-batch梯度下降隨着迭代次數增加,cost不是單調下降,而是存在噪聲,出現噪聲的原因可能是不同的Mini-batch之間存在差異。

我們來看看不同的Mini-batch大小帶來的影響。下圖爲:Batch,Mini-batch,SGD梯度下降的影響:

batch 梯度下降法:

  • 對所有 m 個訓練樣本執行一次梯度下降,每一次迭代時間較長,訓練過程慢
  • 相對噪聲低一些,幅度也大一些;
  • 成本函數總是向減小的方向下降。

隨機梯度下降法:

  • 對每一個訓練樣本執行一次梯度下降,訓練速度快,但丟失了向量化帶來的計算加速
  • 有很多噪聲,減小學習率可以適當;
  • 成本函數總體趨勢向全局最小值靠近,但永遠不會收斂,而是一直在最小值附近波

不同的Mini-batch大小對梯度下降的影響是不同的,一般Mini-batch大小的選擇建議是這樣的:

  • 如果訓練樣本的大小比較小,如 m ⩽ 2000 時,選擇 batch 梯度下降法;
  • 如果訓練樣本的大小比較大,選擇 Mini-Batch 梯度下降法。爲了和計算機的信息存儲方式相適應,代碼在 mini-batch 大小爲 2 的冪次時運行要快一些。典型的大小爲$2^6$,$2^7,...,$2^9$
  • mini-batch 的大小要符合 CPU/GPU 內存。

3)Exponentially weighted averages

這一節我們介紹指數加權平均的概念。

如圖所示,爲倫敦城市的氣溫變化:

看上去,溫度變化噪聲很大,如果想看到氣溫的整體變化趨勢,可以通過移動平均的方法對氣溫進行平滑處理。

設第t天與第t-1天的氣溫變化關係爲:$V_{t}=0.9 V_{t-1}+0.1 \theta_{t}$,經過處理後得到的氣溫如下圖紅色曲線所示:

這種方法稱爲指數加權平均法,一般形式爲:$V_{t}=\beta V_{t-1}+(1-\beta) \theta_{t}$,其中$\beta$決定了指數加權平均的天數,近似表示爲:

\frac{1}{1-\beta},當$\beta$爲0.9時,表示將前10天的數據進行指數加權平均,爲0.98是,表示將前50天的數據進行指數加權平均。下圖黃色和綠色曲線分別標識了$\beta$=0.95$\beta$=0.5的指數加權平均結果。


4)Understanding exponetially weighted averages

指數加權平均公式的一般形式爲:

                                                           $\begin{aligned} V_{t}=& \beta V_{t-1}+(1-\beta) \theta_{t} \\=&(1-\beta) \theta_{t}+(1-\beta) \cdot \beta \cdot \theta_{t-1}+(1-\beta) \cdot \beta^{2} \cdot \theta_{t-2}+\cdots \\ &+(1-\beta) \cdot \beta^{t-1} \cdot \theta_{1}+\beta^{t} \cdot V_{0} \end{aligned}$

由公式可得,$\theta_{t},\theta_{t-1}, \theta_{t-2}, \cdots, \theta_{1}$爲原始數據,$(1-\beta),(1-\beta) \beta,(1-\beta) \beta^{2}, \cdots,(1-\beta) \beta^{t-1}$類似於指數曲線,V_t的值就是這兩個式子的點乘。

指數平均加權並不是最精準的計算平均數的方法,你可以直接計算過去 10 天或 50 天的平均值來得到更好的估計,但缺點是保存數據需要佔用更多內存,執行更加複雜,計算成本更加高昂。

指數加權平均數公式的好處之一在於它只需要一行代碼,且佔用極少內存,因此效率極高,且節省成本


5)Bias correction in exponentially weighted average

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

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

修正這種問題的方法是進行偏移校正(bias correction),即在每次計算完後,進行下式處理:\frac{v_{t}}{1-\beta^{t}}。隨着 t 的增大,β 的 t 次方趨近於 0。因此當 t 很大的時候,偏差修正幾乎沒有作用,但是在前期學習可以幫助更好的預測數據。在實際過程中,一般會忽略前期偏差的影響。


6)Gradient descent with momentum(重點)

動量梯度下降(Gradient Descent with Momentum)計算梯度的指數加權平均數,並利用該值來更新參數值。具體過程爲:

                     V_{dW} = \beta V_{dW} + (1 - \beta) dW^}

                       $V_{d b}=\beta V_{d b}+(1-\beta) d b$

                       $W=W-\alpha V_{d W}, b=b-\alpha V_{d b}$

其中,將動量衰減參數 β 設置爲 0.9 是超參數的一個常見且效果不錯的選擇。當 β 被設置爲 0 時,顯然就成了 batch 梯度下降法。



7)RMSprop(重點)

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

S_{dW} = \beta S_{dW} + (1 - \beta)(dW)^2$$

$$S_{db} = \beta S_{db} + (1 - \beta)(db)^2$$

$$W := W - \alpha \frac{dW}{\sqrt{S_{dW}}}$$b :=b-\alpha \frac{db}{\sqrt{S_{db}}}$

下面簡單解釋一下RMSprop算法的原理,仍然以下圖爲例,爲了便於分析,令水平方向爲W的方向,垂直方向爲b的方向。

RMSProp 有助於減少抵達最小值路徑上的擺動,並允許使用一個更大的學習率 α,從而加快算法學習速度。並且,它和 Adam 優化算法已被證明適用於不同的深度學習網絡結構。注意,β 也是一個超參數。

還有一點需要注意的是爲了避免RMSprop算法中分母爲零,通常可以在分母增加一個極小的常數ε:

W :=W-\alpha \frac{dw}{\sqrt{S_{dw}}+\varepsilon}, b :=b-\alpha \frac{d b}{\sqrt{S_d{b}}+\varepsilon}$

其中,ε=10^{-8},或者其它較小值。


8)Adam optimization algorithm(重點)

Adam 優化算法(Adaptive Moment Estimation,自適應矩估計)基本上就是將 Momentum 和 RMSProp 算法結合在一起,

算法流程爲,初始化:$$V_{dW} = 0, S_{dW} = 0, V_{db} = 0, S_{db} = 0$$

用每一個 mini-batch 計算 dW、db,第 t 次迭代時:

$V_{d W}=\beta_{1} V_{d W}+\left(1-\beta_{1}\right) d W, V_{d b}=\beta_{1} V_{d b}+\left(1-\beta_{1}\right) d b$

$S_{d W}=\beta_{2} S_{d W}+\left(1-\beta_{2}\right) d W^{2}, S_{d b}=\beta_{2} S_{d b}+\left(1-\beta_{2}\right) d b^{2}$

一般使用 Adam 算法時需要計算偏差修正:

$$V^{corrected}_{dW} = \frac{V_{dW}}{1-{\beta_1}^t}$$$$V^{corrected}_{db} = \frac{V_{db}}{1-{\beta_1}^t}$$;

$$S^{corrected}_{dW} = \frac{S_{dW}}{1-{\beta_2}^t}$$ $$S^{corrected}_{db} = \frac{S_{db}}{1-{\beta_2}^t}$$

所以,更新 W、b 時有:

$$W := W - \alpha \frac{V^{corrected}_{dW}}{{\sqrt{S^{corrected}_{dW}} + \epsilon}}$$$$b := b - \alpha \frac{V^{corrected}_{db}}{{\sqrt{S^{corrected}_{db}} + \epsilon}}$$

Adam 優化算法有很多的超參數,其中

學習率 α:需要嘗試一系列的值,來尋找比較合適的;

\beta_1:常用的缺省值爲 0.9;

\beta_2:Adam 算法的作者建議爲 0.999;

ϵ:不重要,不會影響算法表現,Adam 算法的作者建議爲 $10^{-8}$;

β1、β2、ϵ 通常不需要調試


9)Learning rate decay

如果設置一個固定的學習率 α,在最小值點附近,由於不同的 Mini-batch 中存在一定的噪聲,因此不會精確收斂,而是始終在最小值周圍一個較大的範圍內波動。

而如果隨着時間慢慢減少學習率 α 的大小,在初期 α 較大時,下降的步長較大,能以較快的速度進行梯度下降;而後期逐步減小 α 的值,即減小步長,有助於算法的收斂,更容易接近最優解。

最常用的學習率衰減方法:

$$\alpha = \frac{1}{1 + decay\\\_rate * epoch\\\_num} \* \alpha_0$$

其中,decay\_rate爲衰減率(超參數),epoch\_num爲將所有的訓練樣本完整過一遍的次數。 .

指數衰減方法:

$$\alpha = 0.95^{epoch\\\_num} \* \alpha_0$$

其它方法:

$$\alpha = \frac{k}{\sqrt{epoch\_num}} * \alpha_0$$

 

除此之外,還可以設置α爲關於t的離散值,隨着t增加,α呈階梯式減小。當然,也可以根據訓練情況靈活調整當前的α值,但會比較耗時間。


10)The problem of local optima

在使用梯度下降算法不斷減小cost function時,可能會得到局部最優解(local optima)而不是全局最優解(global optima)。之前我們對局部最優解的理解是形如碗狀的凹槽,如下圖左邊所示。但是在神經網絡中,local optima的概念發生了變化。準確地來說,大部分梯度爲零的“最優點”並不是這些凹槽處,而是形如右邊所示的馬鞍狀,稱爲saddle point。也就是說,梯度爲零並不能保證都是convex(極小值),也有可能是concave(極大值)。特別是在神經網絡中參數很多的情況下,所有參數梯度爲零的點很可能都是右邊所示的馬鞍狀的saddle point,而不是左邊那樣的local optimum。


-

鞍點(saddle)是函數上的導數爲零,但不是軸上局部極值的點。當我們建立一個神經網絡時,通常梯度爲零的點是上圖所示的鞍點,而非局部最小值。減少損失的難度也來自誤差曲面中的鞍點,而不是局部最低點。因爲在一個具有高維度空間的成本函數中,如果梯度爲 0,那麼在每個方向,成本函數或是凸函數,或是凹函數。而所有維度均需要是凹函數的概率極小,因此在低維度的局部最優點的情況並不適用於高維度。

結論:

  • 在訓練較大的神經網絡、存在大量參數,並且成本函數被定義在較高的維度空間時,困在極差的局部最優中是不大可能的;
  • 鞍點附近的平穩段會使得學習非常緩慢,而這也是動量梯度下降法、RMSProp 以及 Adam 優化算法能夠加速學習的原因,它們能幫助儘早走出平穩段。

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



11)Summary

本週我們學習深度學習中的優化算法

  • Mini-batch梯度下降算法,動量梯度下降算法,RMSprop算法和Adam算法
  • 還介紹了學習率衰減局部最優等問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章