1. 程式人生 > 其它 >Batch、Mini-batch和隨機梯度下降的區別和Python示例

Batch、Mini-batch和隨機梯度下降的區別和Python示例

原文地址:https://baijiahao.baidu.com/s?id=1665861710638558010&wfr=spider&for=pc

在研究機器學習和深度學習時出現的主要問題之一是梯度下降的幾種型別。在梯度下降的三種類型(Batch梯度下降、Mini-batch梯度下降和隨機梯度下降)中,我應該使用哪一種呢?在這篇文章中,我們將瞭解這些概念之間的區別,並從梯度下降的程式碼實現來闡明這些方法。

梯度下降

梯度下降是幫助神經網路獲得正確的權重值和偏差值的最常見演算法之一。梯度下降法(GD)是在每一步中最小化成本函式J(W,b)的一種演算法。它迭代地更新權重和偏差,以嘗試在成本函式中達到全域性最小值。

 

 

在我們計算GD之前,首先獲取輸入並通過神經網路的所有節點,然後計算輸入、權重和偏差的加權和。這是計算梯度下降的主要步驟之一,稱為正向傳播。一旦我們有了一個輸出,我們將這個輸出與預期的輸出進行比較,並計算出它們之間的差異,即誤差。有了這個誤差,我們現在可以反向傳播它,更新每個權重和偏差,並嘗試最小化這個誤差。正如你所預料的,這部分被稱為反向傳播。反向傳播步驟是使用導數計算得出的,並返回“梯度”,這個值告訴我們應遵循哪個方向以最小化成本函式。

現在我們準備更新權重矩陣W和偏差向量b了。梯度下降規則如下:

 

 

換句話說,新的權重/偏差值將是最後一個權重/偏差值減去梯度的值,使其接近成本函式的全域性最小值。我們還將這個梯度乘以一個學習率,它控制著步長。

這種經典的梯度下降法也稱為Batch梯度下降法。在這種方法中,每個epoch遍歷所有訓練資料,然後計算損失並更新W和b值。該方法雖然具有穩定的收斂性和穩定的誤差,但是該方法使用了整個機器學習訓練集,因此,對於大型機器學習資料集會非常慢。

Mini-batch梯度下降

想象一下,將您的資料集分成幾個batches。這樣,它就不必等到演算法遍歷整個資料集後才更新權重和偏差,而是在每個所謂的Mini-batch結束時進行更新。這使得我們能夠快速將成本函式移至全域性最小值,並在每個epoch中多次更新權重和偏差。最常見的Mini-batch大小是16、32、64、128、256和512。大多數專案使用Mini-batch梯度下降,因為它在較大的機器學習資料集中速度更快。

 

 

Batch梯度下降

如前所述,在此梯度下降中,每個Batch等於整個資料集。那是:

 

 

其中{1}表示Mini-batch中的第一批次。缺點是每次迭代花費的時間太長。此方法可用於訓練少於2000個樣本的機器學習資料集。

 

 

隨機梯度下降

在這種方法中,每個batch等於訓練集中的一個例項。

 

 其中(1)表示第一個訓練例項。這裡的缺點是它失去了向量化的優勢,有更多的振盪但收斂得更快。

 

 

最後

理解這些優化演算法之間的區別是很重要的,因為它們構成了神經網路的關鍵功能。綜上所述,Batch梯度下降雖然比隨機梯度下降具有更高的準確度,但是隨機梯度下降的速度更快。Mini-batch梯度下降很好地結合了兩者,從而提供了良好的準確性和效能。

 

 可以僅使用Mini-batch梯度下降程式碼來實現所有版本的梯度下降,對於隨機梯度下降可以將mini_batch_size設定為1,對於Batch梯度下降可以將mini_batch_size設定為資料集中的例項數。因此,Batch、Mini-batch和隨機梯度下降之間的主要區別是每個epoch使用的例項數以及達到成本函式的全域性最小值所需的時間。