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