1. 程式人生 > >關於深度學習中的batch_size

關於深度學習中的batch_size

line question 代價函數 online 由於 數據 減少 使用 矛盾

5.4.1 關於深度學習中的batch_size

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

小批量訓練網絡的優點:

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

小批量訓練網絡的缺點:

  • 批次越小,梯度的估值就越不準確,在下圖中,我們可以看到,與完整批次漸變(藍色)方向相比,小批量漸變(綠色)的方向波動更大。
  • 極端特例batch_size = 1,也成為在線學習(online learning);線性神經元在均方誤差代價函數的錯誤面是一個拋物面,橫截面是橢圓,對於多層神經元、非線性網絡,在局部依然近似是拋物面,使用online learning,每次修正方向以各自樣本的梯度方向修正,這就造成了波動較大,難以達到收斂效果。

如下圖所示
stochastic(紅色)表示在線學習,batch_size = 1;

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

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

技術分享圖片

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

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

如何選擇合適的batch_size值:

  • 采用批梯度下降法mini batch learning時,如果數據集足夠充分,用一半(甚至少的多)的數據訓練算出來的梯度與全數據集訓練full batch learning出來的梯度幾乎一樣。

  • 在合理的範圍內,增大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 增大到某些時候,達到最終收斂精度上的最優。

深度學習:batch_size的設置與影響

什麽是神經網絡中的批量大小?

Chapter 8Optimization for Training DeepModels

關於深度學習中的batch_size