概念綜述:
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 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