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。筆記參考了黃海廣博士的內(nèi)容,在此表示感謝。?
深度學習難以在大數(shù)據(jù)領(lǐng)域發(fā)揮最佳效果的一個原因是:在巨大的數(shù)據(jù)集上進行訓練速度很慢。而優(yōu)化算法能夠幫助快速訓練模型,大大提高效率。本周,我們將討論深度神經(jīng)網(wǎng)絡(luò)中的一些優(yōu)化算法,通過使用這些技巧和方法來提高神經(jīng)網(wǎng)絡(luò)的訓練速度。?
1)Mini-batch gradient descent(重點)
我們之前一直使用的梯度下降算法是同時處理整個訓練集,在更新參數(shù)的時候使用所有樣本來進行更新;即每一步梯度下降需要對整個訓練集進行一次處理,如果訓練數(shù)據(jù)集很大的時候,處理速度就會比較慢。這種梯度下降算法被稱為?Batch Gradient Descent。
為了解決批量梯度下降算法處理慢的問題,我們可以把訓練樣本劃分為若干個子集,即 mini-batchs。然后在單一子集上進行神經(jīng)網(wǎng)絡(luò)訓練,速度就會大大提升,這種梯度下降算法稱為?Mini-batch Gradient Descent。
吳恩達老師在課程里介紹:假設(shè)我們有 m=5000000 個訓練樣本,維度為?,將其分成 5000 個子集,每個子集含有 1000 個樣本。我們將每個 mini-batch 記為,維度為?;相應(yīng)的每個mini-batch的輸出為?,維度為?。
針對每一個 Mini-batch,神經(jīng)網(wǎng)絡(luò)進行一次訓練,包含前向傳播,計算代價函數(shù),反向傳播。經(jīng)過多次訓練之后,所有m個訓練樣本都進行了梯度下降計算。對所有訓練樣本進行一次梯度下降計算,稱為一個 epoch。
2)Understanding mini-batch gradient descent
我們先來看一下批量梯度下降和小批量梯度下降的成本曲線圖:
可以看出,對于Batch梯度下降而言,Mini-batch梯度下降隨著迭代次數(shù)增加,cost不是單調(diào)下降,而是存在噪聲,出現(xiàn)噪聲的原因可能是不同的Mini-batch之間存在差異。
我們來看看不同的Mini-batch大小帶來的影響。下圖為:Batch,Mini-batch,SGD梯度下降的影響:
batch 梯度下降法:
- 對所有 m 個訓練樣本執(zhí)行一次梯度下降,每一次迭代時間較長,訓練過程慢;
- 相對噪聲低一些,幅度也大一些;
- 成本函數(shù)總是向減小的方向下降。
隨機梯度下降法:
- 對每一個訓練樣本執(zhí)行一次梯度下降,訓練速度快,但丟失了向量化帶來的計算加速;
- 有很多噪聲,減小學習率可以適當;
- 成本函數(shù)總體趨勢向全局最小值靠近,但永遠不會收斂,而是一直在最小值附近波
不同的Mini-batch大小對梯度下降的影響是不同的,一般Mini-batch大小的選擇建議是這樣的:
- 如果訓練樣本的大小比較小,如 m ? 2000 時,選擇 batch 梯度下降法;
- 如果訓練樣本的大小比較大,選擇 Mini-Batch 梯度下降法。為了和計算機的信息存儲方式相適應(yīng),代碼在 mini-batch 大小為 2 的冪次時運行要快一些。典型的大小為?;
- mini-batch 的大小要符合 CPU/GPU 內(nèi)存。
3)Exponentially weighted averages
這一節(jié)我們介紹指數(shù)加權(quán)平均的概念。
如圖所示,為倫敦城市的氣溫變化:
看上去,溫度變化噪聲很大,如果想看到氣溫的整體變化趨勢,可以通過移動平均的方法對氣溫進行平滑處理。
設(shè)第t天與第t-1天的氣溫變化關(guān)系為:,經(jīng)過處理后得到的氣溫如下圖紅色曲線所示:
這種方法稱為指數(shù)加權(quán)平均法,一般形式為:,其中??決定了指數(shù)加權(quán)平均的天數(shù),近似表示為:
,當??為0.9時,表示將前10天的數(shù)據(jù)進行指數(shù)加權(quán)平均,為0.98是,表示將前50天的數(shù)據(jù)進行指數(shù)加權(quán)平均。下圖黃色和綠色曲線分別標識了??和? 的指數(shù)加權(quán)平均結(jié)果。
4)Understanding exponetially weighted averages
指數(shù)加權(quán)平均公式的一般形式為:
由公式可得,?為原始數(shù)據(jù),??類似于指數(shù)曲線,的值就是這兩個式子的點乘。
指數(shù)平均加權(quán)并不是最精準的計算平均數(shù)的方法,你可以直接計算過去 10 天或 50 天的平均值來得到更好的估計,但缺點是保存數(shù)據(jù)需要占用更多內(nèi)存,執(zhí)行更加復(fù)雜,計算成本更加高昂。
指數(shù)加權(quán)平均數(shù)公式的好處之一在于它只需要一行代碼,且占用極少內(nèi)存,因此效率極高,且節(jié)省成本。
5)Bias correction in exponentially weighted average
上文中提到當β=0.98時,指數(shù)加權(quán)平均結(jié)果如下圖綠色曲線所示。但是實際上,真實曲線如紫色曲線所示。
我們注意到,紫色曲線與綠色曲線的區(qū)別是,紫色曲線開始的時候相對較低一些。這是因為開始時我們設(shè)置,所以初始值會相對小一些,直到后面受前面的影響漸漸變小,趨于正常。
修正這種問題的方法是進行偏移校正(bias correction),即在每次計算完后,進行下式處理:。隨著 t 的增大,β 的 t 次方趨近于 0。因此當 t 很大的時候,偏差修正幾乎沒有作用,但是在前期學習可以幫助更好的預(yù)測數(shù)據(jù)。在實際過程中,一般會忽略前期偏差的影響。
6)Gradient descent with momentum(重點)
動量梯度下降(Gradient Descent with Momentum)是計算梯度的指數(shù)加權(quán)平均數(shù),并利用該值來更新參數(shù)值。具體過程為:
其中,將動量衰減參數(shù) β 設(shè)置為 0.9 是超參數(shù)的一個常見且效果不錯的選擇。當 β 被設(shè)置為 0 時,顯然就成了 batch 梯度下降法。
7)RMSprop(重點)
RMSprop是另外一種優(yōu)化梯度下降速度的算法。每次迭代訓練過程中,其權(quán)重W和常數(shù)項b的更新表達式為:
,
下面簡單解釋一下RMSprop算法的原理,仍然以下圖為例,為了便于分析,令水平方向為W的方向,垂直方向為b的方向。
RMSProp 有助于減少抵達最小值路徑上的擺動,并允許使用一個更大的學習率 α,從而加快算法學習速度。并且,它和 Adam 優(yōu)化算法已被證明適用于不同的深度學習網(wǎng)絡(luò)結(jié)構(gòu)。注意,β 也是一個超參數(shù)。
還有一點需要注意的是為了避免RMSprop算法中分母為零,通常可以在分母增加一個極小的常數(shù)ε:
其中,ε,或者其它較小值。
8)Adam optimization algorithm(重點)
Adam 優(yōu)化算法(Adaptive Moment Estimation,自適應(yīng)矩估計)基本上就是將 Momentum 和 RMSProp 算法結(jié)合在一起,
算法流程為,初始化:
用每一個 mini-batch 計算 dW、db,第 t 次迭代時:
一般使用 Adam 算法時需要計算偏差修正:
,;
所以,更新 W、b 時有:
,
Adam 優(yōu)化算法有很多的超參數(shù),其中
學習率 α:需要嘗試一系列的值,來尋找比較合適的;
:常用的缺省值為 0.9;
:Adam 算法的作者建議為 0.999;
?:不重要,不會影響算法表現(xiàn),Adam 算法的作者建議為 $10^{-8}$;
β1、β2、? 通常不需要調(diào)試
9)Learning rate decay
如果設(shè)置一個固定的學習率 α,在最小值點附近,由于不同的 Mini-batch 中存在一定的噪聲,因此不會精確收斂,而是始終在最小值周圍一個較大的范圍內(nèi)波動。
而如果隨著時間慢慢減少學習率 α 的大小,在初期 α 較大時,下降的步長較大,能以較快的速度進行梯度下降;而后期逐步減小 α 的值,即減小步長,有助于算法的收斂,更容易接近最優(yōu)解。
最常用的學習率衰減方法:
其中,為衰減率(超參數(shù)),為將所有的訓練樣本完整過一遍的次數(shù)。 .
指數(shù)衰減方法:
其它方法:
除此之外,還可以設(shè)置α為關(guān)于t的離散值,隨著t增加,α呈階梯式減小。當然,也可以根據(jù)訓練情況靈活調(diào)整當前的α值,但會比較耗時間。
10)The problem of local optima
在使用梯度下降算法不斷減小cost function時,可能會得到局部最優(yōu)解(local optima)而不是全局最優(yōu)解(global optima)。之前我們對局部最優(yōu)解的理解是形如碗狀的凹槽,如下圖左邊所示。但是在神經(jīng)網(wǎng)絡(luò)中,local optima的概念發(fā)生了變化。準確地來說,大部分梯度為零的“最優(yōu)點”并不是這些凹槽處,而是形如右邊所示的馬鞍狀,稱為saddle point。也就是說,梯度為零并不能保證都是convex(極小值),也有可能是concave(極大值)。特別是在神經(jīng)網(wǎng)絡(luò)中參數(shù)很多的情況下,所有參數(shù)梯度為零的點很可能都是右邊所示的馬鞍狀的saddle point,而不是左邊那樣的local optimum。
-
鞍點(saddle)是函數(shù)上的導數(shù)為零,但不是軸上局部極值的點。當我們建立一個神經(jīng)網(wǎng)絡(luò)時,通常梯度為零的點是上圖所示的鞍點,而非局部最小值。減少損失的難度也來自誤差曲面中的鞍點,而不是局部最低點。因為在一個具有高維度空間的成本函數(shù)中,如果梯度為 0,那么在每個方向,成本函數(shù)或是凸函數(shù),或是凹函數(shù)。而所有維度均需要是凹函數(shù)的概率極小,因此在低維度的局部最優(yōu)點的情況并不適用于高維度。
結(jié)論:
- 在訓練較大的神經(jīng)網(wǎng)絡(luò)、存在大量參數(shù),并且成本函數(shù)被定義在較高的維度空間時,困在極差的局部最優(yōu)中是不大可能的;
- 鞍點附近的平穩(wěn)段會使得學習非常緩慢,而這也是動量梯度下降法、RMSProp 以及 Adam 優(yōu)化算法能夠加速學習的原因,它們能幫助盡早走出平穩(wěn)段。
值得一提的是,上文介紹的動量梯度下降,RMSprop,Adam算法都能有效解決plateaus下降過慢的問題,大大提高神經(jīng)網(wǎng)絡(luò)的學習速度。
11)Summary
本周我們學習深度學習中的優(yōu)化算法:
- Mini-batch梯度下降算法,動量梯度下降算法,RMSprop算法和Adam算法;
- 還介紹了學習率衰減和局部最優(yōu)等問題。
總結(jié)
以上是生活随笔為你收集整理的2.2)深度学习笔记:优化算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apollo进阶课程 ③ | 开源模块讲
- 下一篇: PointNet:3D点集分类与分割深度