天天看點

關于深度學習中的batch_size

概念綜述:

batch_size可以了解為批處理參數,它的極限值為訓練集樣本總數,當資料量比較少時,可以将batch_size值設定為全資料集(Full batch cearning)。實際上,在深度學習中所涉及到的資料都是比較多的,一般都采用小批量資料處理原則。

小批量訓練網絡的優點:

  1. 相對海量的的資料集和記憶體容量,小批量處理需要更少的記憶體就可以訓練網絡。
  2. 通常小批量訓練網絡速度更快,例如我們将一個大樣本分成11小樣本(每個樣本100個資料),采用小批量訓練網絡時,每次傳播後更新權重,就傳播了11批,在每批次後我們均更新了網絡的(權重)參數;如果在傳播過程中使用了一個大樣本,我們隻會對訓練網絡的權重參數進行1次更新。
  3. 全資料集确定的方向能夠更好地代表樣本總體,進而能夠更準确地朝着極值所在的方向;但是不同權值的梯度值差别較大,是以選取一個全局的學習率很困難

小批量訓練網絡的缺點:

  1. 批次越小,梯度的估值就越不準确,在下圖中,我們可以看到,與完整批次漸變(藍色)方向相比,小批量漸變(綠色)的方向波動更大。
  2. 極端特例batch_size = 1,也成為線上學習(online learning);線性神經元在均方誤差代價函數的錯誤面是一個抛物面,橫截面是橢圓,對于多層神經元、非線性網絡,在局部依然近似是抛物面,使用online

    learning,每次修正方向以各自樣本的梯度方向修正,這就造成了波動較大,難以達到收斂效果。

如下圖所示

stochastic(紅色)表示線上學習,batch_size = 1;

mini_batch(綠色)表示批梯度下降法,batch_size = 100;

batch(藍色)表示全資料集梯度下降法,batch_size = 1100;

關于深度學習中的batch_size

從圖上可以發現,batch_szie=1 較 batch_size=100 的波動性更大。

設定mini_batch大小是一種藝術,太小時可能會使學習過于随機,雖然訓練速率很快,但會收斂到不可靠的模型;mini_batch過小時,網絡訓練需要很長時間,更重要的是它不适合記憶。

如何選擇合适的batch_size值:

  • 采用批梯度下降法mini batch learning時,如果資料集足夠充分,用一半(甚至少的多)的資料訓練算出來的梯度與全資料集訓練full batchlearning出來的梯度幾乎一樣。
  • 在合理的範圍内,增大batch_size可以提高記憶體使用率,大矩陣乘法的并行化效率提高;跑完一次epoch(全資料集)所需的疊代次數減少,對于相同資料量的處理速度進一步加快;在适當的範圍内,batch_size越大,其确定的下降方向越準,引起訓練波動越小。注意,當batch_size增大到一定程度,其确定的下降方向基本不會變化。
  • batch_size值增大到超過合理範圍時,和全資料訓練full batch learning就會表現出相近的症候;記憶體容量占有率增加,跑完一次epoch(全資料集)所需的疊代次數減少,達到相同的精度所耗損的時間增加,進而對參數的修正也就顯得更加緩慢。

    調節 Batch_Size 對訓練效果影響到底如何?

    這裡跑一個 LeNet 在 MNIST 資料集上的效果。MNIST 是一個手寫體标準庫

    運作結果如上圖所示,其中絕對時間做了标準化處理。運作結果與上文分析相印證:

  • batch_size 太小,算法在 200 epoches 内不收斂。 随着 batch_size 增大,處理相同資料量的速度越快。
  • 随着 batch_size 增大,達到相同精度所需要的 epoch 數量越來越多。
  • 由于上述兩種因素的沖突,batch_size 增大到某個時候,達到時間上的最優。
  • 由于最終收斂精度會陷入不同的局部極值,是以batch_size增大到某些時候,達到最終收斂精度上的最優。

轉載自:https://www.cnblogs.com/gengyi/p/9853664.html

繼續閱讀