2-2 理解 mini-batch 梯度下降法


理解 mini-batch 梯度下降法( Understanding mini-batch gradient descent)

使用 batch 梯度下降法時,每次迭代你都需要歷遍整個訓練集,可以預期每次迭代成本都會下降,所以如果成本函數J是迭代次數的一個函數,它應該會隨着每次迭代而減少,如果在某次迭代中增加了,那肯定出了問題,也許你的學習率太大。

使用 mini-batch 梯度下降法,如果你作出成本函數在整個過程中的圖,則並不是每次迭代都是下降的,特別是在每次迭代中,你要處理的是${{\rm{X}}^{\{ t\} }}$和${Y^{\{ t\} }}$如果要作出成本函數${J^{\{ t\} }}$的圖,很可能會看到這樣的結果,走向朝下,但有更多的噪聲。沒有每次迭代都下降是不要緊的,但走勢應該向下,噪聲產生的原因在於也許${{\rm{X}}^{\{ 1\} }}$,${{\rm{Y}}^{\{ 1\} }}$是比較容易計算的 mini-batch,因此成本會低一些。不過也許出於偶然,${{\rm{X}}^{\{ 2\} }}$,${{\rm{Y}}^{\{ 2\} }}$是比較難運算的 mini-batch,或許你需要一些殘缺的樣本,這樣一來,成本會更高一些,所以才會出現這些擺動, 因為你是在運行 mini-batch 梯度下降法作出成本函數圖。

你需要決定的變量之一是 mini-batch 的大小,m就是訓練集的大小,極端情況下:

如果 mini-batch 的大小等於m,其實就是 batch 梯度下降法,在這種極端情況下,你就有了 mini-batch${{\rm{X}}^{\{ 1\} }}$和${{\rm{Y}}^{\{ 1\} }}$,並且該 mini-batch 等於整個訓練集,所以把 mini-batch 大小設為m可以得到 batch 梯度下降法。

另一個極端情況,假設 mini-batch 大小為 1,就有了新的算法,叫做隨機梯度下降法,每個樣本都是獨立的 mini-batch,當你看第一個 mini-batch,也就是mini-batch${{\rm{X}}^{\{ 1\} }}$和${{\rm{Y}}^{\{ 1\} }}$,如果 mini-batch 大小為 1,它就是你的第一個訓練樣本,這就是你的第一個訓練樣本。接着再看第二個 mini-batch,也就是第二個訓練樣本,采取梯度下降步驟,然后是第三個訓練樣本,以此類推,一次只處理一個。

如果這是你想要最小化的成本函數的輪廓,最小值在那里,在兩種極端下成本函數的優化情況:

batch 梯度下降法從某處開始,相對噪聲低些,幅度也大一些,你可以繼續找最小值。

在隨機梯度下降法中,從某一點開始,我們重新選取一個起始點,每次迭代,只對一個樣本進行梯度下降,大部分時候你向着全局最小值靠近,有時候你會遠離最小值,因為那個樣本恰好給你指的方向不對,因此隨機梯度下降法是有很多噪聲的,平均來看,它最終會靠近最小值,不過有時候也會方向錯誤,因為隨機梯度下降法永遠不會收斂,而是會一直在最小值附近波動,但它並不會在達到最小值並停留在此。

實際上你選擇的 mini-batch 大小在二者之間,大小在 1 和m之間,而 1 太小了,m太大了,原因在於如果使用 batch 梯度下降法, mini-batch 的大小為m,每個迭代需要處理大量訓練樣本,該算法的主要弊端在於特別是在訓練樣本數量巨大的時候,單次迭代耗時太長。如果訓練樣本不大, batch 梯度下降法運行地很好。

相反,如果使用隨機梯度下降法,如果你只要處理一個樣本,那這個方法很好,這樣做沒有問題,通過減小學習率,噪聲會被改善或有所減小,但隨機梯度下降法的一大缺點是,你會失去所有向量化帶給你的加速,因為一次性只處理了一個訓練樣本,這樣效率過於低下,所以實踐中最好選擇不大不小的 mini-batch 尺寸,實際上學習率達到最快。你會發現兩個好處,一方面,你得到了大量向量化,上個視頻中我們用過的例子中,如果 mini-batch 大小為1000 個樣本,你就可以對 1000 個樣本向量化,比你一次性處理多個樣本快得多。另一方面,你不需要等待整個訓練集被處理完就可以開始進行后續工作,再用一下上個視頻的數字,每次訓練集允許我們采取 5000 個梯度下降步驟,所以實際上一些位於中間的 mini-batch 大小效果最好。

用 mini-batch 梯度下降法,我們從這里開始,一次迭代這樣做,兩次,三次,四次,它不會總朝向最小值靠近,但它比隨機梯度下降要更持續地靠近最小值的方向,它也不一定在很小的范圍內收斂或者波動,如果出現這個問題,可以慢慢減少學習率。

首先,如果訓練集較小,直接使用 batch 梯度下降法,樣本集較小就沒必要使用 mini batch 梯度下降法,你可以快速處理整個訓練集,所以使用 batch 梯度下降法也很好,這里的少是說小於 2000 個樣本,這樣比較適合使用 batch 梯度下降法。不然,樣本數目較大的話,一般的 mini-batch 大小為 64 到 512,考慮到電腦內存設置和使用的方式,如果 mini batch 大小是 2 的次方,代碼會運行地快一些, 64 就是 2 的 6 次方,以此類推, 128 是 2 的7 次方, 256 是 2 的 8 次方, 512 是 2 的 9 次方。所以我經常把 mini-batch 大小設成 2 的次方。在上一個視頻里,我的 mini-batch 大小設為了 1000,建議你可以試一下 1024,也就是2 的 10 次方。也有 mini-batch 的大小為 1024,不過比較少見, 64 到 512 的 mini-batch 比較常見。

最后需要注意的是在你的 mini-batch 中,要確保${{\rm{X}}^{\{ 1\} }}$和${{\rm{Y}}^{\{ 1\} }}$要符合 CPU/GPU 內存,取決於你的應用方向以及訓練集的大小。如果你處理的 mini-batch 和 CPU/GPU 內存不相符,不管你用什么方法處理數據,你會注意到算法的表現急轉直下變得慘不忍睹,所以我希望你對一般人們使用的 mini-batch 大小有一個直觀了解。事實上 mini-batch 大小是另一個重要的變量,你需要做一個快速嘗試,才能找到能夠最有效地減少成本函數的那個,我一般會嘗試幾個不同的值,幾個不同的 2 次方,然后看能否找到一個讓梯度下降優化算法最高效的大小。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM