2.2 理解 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 2.1 Mini-batch 梯度下降 | 回到目錄 | 2.3 指數(shù)加權(quán)平均 |
理解 Mini-batch 梯度下降 (Understanding Mini-batch Gradient Descent)
在上周視頻中,你知道了如何利用mini-batch梯度下降法來開始處理訓(xùn)練集和開始梯度下降,即使你只處理了部分訓(xùn)練集,即使你是第一次處理,本視頻中,我們將進(jìn)一步學(xué)習(xí)如何執(zhí)行梯度下降法,更好地理解其作用和原理。
使用batch梯度下降法時(shí),每次迭代你都需要?dú)v遍整個(gè)訓(xùn)練集,可以預(yù)期每次迭代成本都會(huì)下降,所以如果成本函數(shù) JJJ 是迭代次數(shù)的一個(gè)函數(shù),它應(yīng)該會(huì)隨著每次迭代而減少,如果 JJJ 在某次迭代中增加了,那肯定出了問題,也許你的學(xué)習(xí)率太大。
使用mini-batch梯度下降法,如果你作出成本函數(shù)在整個(gè)過程中的圖,則并不是每次迭代都是下降的,特別是在每次迭代中,你要處理的是 X{t}X^{\{t\}}X{t} 和 Y{t}Y^{\{t\}}Y{t} ,如果要作出成本函數(shù) J{t}J^{\{t\}}J{t} 的圖,而 J{t}J^{\{t\}}J{t} 只和 X{t}X^{\{t\}}X{t} , Y{t}Y^{\{t\}}Y{t} 有關(guān),也就是每次迭代下你都在訓(xùn)練不同的樣本集或者說訓(xùn)練不同的mini-batch,如果你要作出成本函數(shù) JJJ 的圖,你很可能會(huì)看到這樣的結(jié)果,走向朝下,但有更多的噪聲,所以如果你作出 J{t}J^{\{t\}}J{t} 的圖,因?yàn)樵谟?xùn)練mini-batch梯度下降法時(shí),會(huì)經(jīng)過多代,你可能會(huì)看到這樣的曲線。沒有每次迭代都下降是不要緊的,但走勢(shì)應(yīng)該向下,噪聲產(chǎn)生的原因在于也許 X{1}X^{\{1\}}X{1} 和 Y{1}Y^{\{1\}}Y{1} 是比較容易計(jì)算的mini-batch,因此成本會(huì)低一些。不過也許出于偶然, X{2}X^{\{2\}}X{2} 和 Y{2}Y^{\{2\}}Y{2} 是比較難運(yùn)算的mini-batch,或許你需要一些殘缺的樣本,這樣一來,成本會(huì)更高一些,所以才會(huì)出現(xiàn)這些擺動(dòng),因?yàn)槟闶窃谶\(yùn)行mini-batch梯度下降法作出成本函數(shù)圖。
你需要決定的變量之一是mini-batch的大小, mmm 就是訓(xùn)練集的大小,極端情況下,如果mini-batch的大小等于 mmm ,其實(shí)就是batch梯度下降法,在這種極端情況下,你就有了mini-batch X{1}X^{\{1\}}X{1} 和 Y{1}Y^{\{1\}}Y{1} ,并且該mini-batch等于整個(gè)訓(xùn)練集,所以把mini-batch大小設(shè)為 mmm 可以得到batch梯度下降法。
另一個(gè)極端情況,假設(shè)mini-batch大小為1,就有了新的算法,叫做隨機(jī)梯度下降法,每個(gè)樣本都是獨(dú)立的mini-batch,當(dāng)你看第一個(gè)mini-batch,也就是 X{1}X^{\{1\}}X{1} 和 Y{1}Y^{\{1\}}Y{1} ,如果mini-batch大小為1,它就是你的第一個(gè)訓(xùn)練樣本,這就是你的第一個(gè)訓(xùn)練樣本。接著再看第二個(gè)mini-batch,也就是第二個(gè)訓(xùn)練樣本,采取梯度下降步驟,然后是第三個(gè)訓(xùn)練樣本,以此類推,一次只處理一個(gè)。
看在兩種極端下成本函數(shù)的優(yōu)化情況,如果這是你想要最小化的成本函數(shù)的輪廓,最小值在那里,batch梯度下降法從某處開始,相對(duì)噪聲低些,幅度也大一些,你可以繼續(xù)找最小值。
相反,在隨機(jī)梯度下降法中,從某一點(diǎn)開始,我們重新選取一個(gè)起始點(diǎn),每次迭代,你只對(duì)一個(gè)樣本進(jìn)行梯度下降,大部分時(shí)候你向著全局最小值靠近,有時(shí)候你會(huì)遠(yuǎn)離最小值,因?yàn)槟莻€(gè)樣本恰好給你指的方向不對(duì),因此隨機(jī)梯度下降法是有很多噪聲的,平均來看,它最終會(huì)靠近最小值,不過有時(shí)候也會(huì)方向錯(cuò)誤,因?yàn)殡S機(jī)梯度下降法永遠(yuǎn)不會(huì)收斂,而是會(huì)一直在最小值附近波動(dòng),但它并不會(huì)在達(dá)到最小值并停留在此。
實(shí)際上你選擇的mini-batch大小在二者之間,大小在1和 mmm 之間,而1太小了, mmm 太大了,原因在于如果使用batch梯度下降法,mini-batch的大小為 mmm ,每個(gè)迭代需要處理大量訓(xùn)練樣本,該算法的主要弊端在于特別是在訓(xùn)練樣本數(shù)量巨大的時(shí)候,單次迭代耗時(shí)太長(zhǎng)。如果訓(xùn)練樣本不大,batch梯度下降法運(yùn)行地很好。
相反,如果使用隨機(jī)梯度下降法,如果你只要處理一個(gè)樣本,那這個(gè)方法很好,這樣做沒有問題,通過減小學(xué)習(xí)率,噪聲會(huì)被改善或有所減小,但隨機(jī)梯度下降法的一大缺點(diǎn)是,你會(huì)失去所有向量化帶給你的加速,因?yàn)橐淮涡灾惶幚砹艘粋€(gè)訓(xùn)練樣本,這樣效率過于低下,所以實(shí)踐中最好選擇不大不小的mini-batch尺寸,實(shí)際上學(xué)習(xí)率達(dá)到最快。你會(huì)發(fā)現(xiàn)兩個(gè)好處,一方面,你得到了大量向量化,上個(gè)視頻中我們用過的例子中,如果mini-batch大小為1000個(gè)樣本,你就可以對(duì)1000個(gè)樣本向量化,比你一次性處理多個(gè)樣本快得多。另一方面,你不需要等待整個(gè)訓(xùn)練集被處理完就可以開始進(jìn)行后續(xù)工作,再用一下上個(gè)視頻的數(shù)字,每次訓(xùn)練集允許我們采取5000個(gè)梯度下降步驟,所以實(shí)際上一些位于中間的mini-batch大小效果最好。
用mini-batch梯度下降法,我們從這里開始,一次迭代這樣做,兩次,三次,四次,它不會(huì)總朝向最小值靠近,但它比隨機(jī)梯度下降要更持續(xù)地靠近最小值的方向,它也不一定在很小的范圍內(nèi)收斂或者波動(dòng),如果出現(xiàn)這個(gè)問題,可以慢慢減少學(xué)習(xí)率,我們?cè)谙聜€(gè)視頻會(huì)講到學(xué)習(xí)率衰減,也就是如何減小學(xué)習(xí)率。
如果mini-batch大小既不是1也不是 mmm ,應(yīng)該取中間值,那應(yīng)該怎么選擇呢?其實(shí)是有指導(dǎo)原則的。
首先,如果訓(xùn)練集較小,直接使用batch梯度下降法,樣本集較小就沒必要使用mini-batch梯度下降法,你可以快速處理整個(gè)訓(xùn)練集,所以使用batch梯度下降法也很好,這里的少是說小于2000個(gè)樣本,這樣比較適合使用batch梯度下降法。不然,樣本數(shù)目較大的話,一般的b大小為64到512,考慮到電腦內(nèi)存設(shè)置和使用的方式,如果mini-batch大小是2的 nnn 次方,代碼會(huì)運(yùn)行地快一些,64就是2的6次方,以此類推,128是2的7次方,256是2的8次方,512是2的9次方。所以我經(jīng)常把mini-batch大小設(shè)成2的次方。在上一個(gè)視頻里,我的mini-batch大小設(shè)為了1000,建議你可以試一下1024,也就是2的10次方。也有mini-batch的大小為1024,不過比較少見,64到512的mini-batch比較常見。
最后需要注意的是在你的mini-batch中,要確保 X{t}X^{\{t\}}X{t} 和 Y{t}Y^{\{t\}}Y{t} 要符合CPU/GPU內(nèi)存,取決于你的應(yīng)用方向以及訓(xùn)練集的大小。如果你處理的mini-batch和CPU/GPU內(nèi)存不相符,不管你用什么方法處理數(shù)據(jù),你會(huì)注意到算法的表現(xiàn)急轉(zhuǎn)直下變得慘不忍睹,所以我希望你對(duì)一般人們使用的mini-batch大小有一個(gè)直觀了解。事實(shí)上mini-batch大小是另一個(gè)重要的變量,你需要做一個(gè)快速嘗試,才能找到能夠最有效地減少成本函數(shù)的那個(gè),我一般會(huì)嘗試幾個(gè)不同的值,幾個(gè)不同的2次方,然后看能否找到一個(gè)讓梯度下降優(yōu)化算法最高效的大小。希望這些能夠指導(dǎo)你如何開始找到這一數(shù)值。
你學(xué)會(huì)了如何執(zhí)行mini-batch梯度下降,令算法運(yùn)行得更快,特別是在訓(xùn)練樣本數(shù)目較大的情況下。不過還有個(gè)更高效的算法,比梯度下降法和mini-batch梯度下降法都要高效的多,我們?cè)诮酉聛淼囊曨l中將為大家一一講解。
課程PPT
| 2.1 Mini-batch 梯度下降 | 回到目錄 | 2.3 指數(shù)加權(quán)平均 |
總結(jié)
以上是生活随笔為你收集整理的2.2 理解 Mini-batch 梯度下降-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.1 Mini-batch 梯度下降-
- 下一篇: 2.3 指数加权平均-深度学习第二课《改