在研究機器學習和深度學習時出現的主要問題之一是梯度下降的幾種類型。在梯度下降的三種類型(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使用的實例數以及達到成本函數的全局最小值所需的時間。