隨機梯度下降批尺寸的影響
隨機梯度下降批尺寸有什麼影響呢???
當資料量足夠大的時候可以適當的減小batch_size,由於資料量太大,記憶體不夠。但盲目減少會導致無法收斂,batch_size=1時為線上學習,
也是標準的SGD,這樣學習,如果資料量不大,noise資料存在時,模型容易被noise帶偏,如果資料量足夠大,noise的影響會被“沖淡”,對模型幾乎不影響。
Batch_Size(批尺寸)是機器學習中一個重要引數,涉及諸多矛盾,下面逐一展開。
首先,為什麼需要有 Batch_Size 這個引數?
Batch 的選擇,首先決定的是下降的方向。如果資料集比較小,完全可以採用全資料集 ( Full Batch Learning )的形式,這樣做至少有 2 個好處:
其一,由全資料集確定的方向能夠更好地代表樣本總體,從而更準確地朝向極值所在的方向。
其二,由於不同權重的梯度值差別巨大,因此選取一個全域性的學習率很困難。Full Batch Learning 可以使用 Rprop 只基於梯度符號並且針對性單獨
更新各權值。
對於更大的資料集,以上 2 個好處又變成了 2 個壞處:
其一,隨著資料集的海量增長和記憶體限制,一次性載入所有的資料進來變得越來越不可行。
其二,以 Rprop 的方式迭代,會由於各個 Batch 之間的取樣差異性,各次梯度修正值相互抵消,無法修正。這才有了後來 RMSProp 的妥協方案。
既然 Full Batch Learning 並不適用大資料集,那麼走向另一個極端怎麼樣?
所謂另一個極端,就是每次只訓練一個樣本,即 Batch_Size = 1。這就是線上學習(Online Learning)。
線性神經元在均方誤差代價函式的錯誤面是一個拋物面,橫截面是橢圓。對於多層神經元、非線性網路,在區域性依然近似是拋物面。
使用線上學習,每次修正方向以各自樣本的梯度方向修正,橫衝直撞各自為政,難以達到收斂。如圖所示:
可不可以選擇一個適中的 Batch_Size 值呢?
當然可以,這就是批梯度下降法(Mini-batches Learning)。因為如果資料集足夠充分,那麼用一半(甚至少得多)的資料訓練算出來的梯度與用全部資料訓練出來的梯度是幾乎一樣的。
在合理範圍內,增大 Batch_Size 有何好處?
- 記憶體利用率提高了,大矩陣乘法的並行化效率提高。
- 跑完一次 epoch(全資料集)所需的迭代次數減少,對於相同資料量的處理速度進一步加快。
- 在一定範圍內,一般來說 Batch_Size 越大,其確定的下降方向越準,引起訓練震盪越小。
盲目增大 Batch_Size 有何壞處?
- 記憶體利用率提高了,但是記憶體容量可能撐不住了。
- 跑完一次 epoch(全資料集)所需的迭代次數減少,要想達到相同的精度,其所花費的時間大大增加了,從而對引數的修正也就顯得更加緩慢。
- Batch_Size 增大到一定程度,其確定的下降方向已經基本不再變化。
調節 Batch_Size 對訓練效果影響到底如何?
執行結果如上圖所示,其中絕對時間做了標么化處理。執行結果與上文分析相印證:
- Batch_Size 太小,演算法在 200 epoches 內不收斂。
- 隨著 Batch_Size 增大,處理相同資料量的速度越快。
- 隨著 Batch_Size 增大,達到相同精度所需要的 epoch 數量越來越多。
- 由於上述兩種因素的矛盾, Batch_Size 增大到某個時候,達到時間上的最優。
- 由於最終收斂精度會陷入不同的區域性極值,因此 Batch_Size 增大到某些時候,達到最終收斂精度上的最優。
- 過大的batchsize的結果是網路很容易收斂到一些不好的區域性最優點。同樣太小的batch也存在一些問題,比如訓練速度很慢,訓練不容易收斂等。
- 具體的batch size的選取和訓練集的樣本數目相關。
---------------------
作者:ycheng_sjtu
來源:CSDN
原文:https://blog.csdn.net/ycheng_sjtu/article/details/49804041