batch-size 深度学习笔记
batch_size、epoch、iteration是深度學習中常見的幾個超參數:
(1)batchsize:每批數據量的大小。DL通常用SGD的優化算法進行訓練,也就是一次(1 個iteration)一起訓練batchsize個樣本,計算它們的平均損失函數值,來更新參數。
(2)iteration:1個iteration即迭代一次,也就是用batchsize個樣本訓練一次。
(3)epoch:1個epoch指用訓練集中的全部樣本訓練一次,此時相當于batchsize 等于訓練集的樣本數。
最初訓練DNN采用一次對全體訓練集中的樣本進行訓練(即使用1個epoch),并計算一次損失函數值,來更新一次權值。當時數據集較小,該方法尚可。后來隨著數據集迅速增大,導致這種方法一次開銷大進而占用內存過大,速度過慢。
后來產生了一次只訓練一個樣本的方法(batchsize=1),稱作在線學習。該方法根據每一個樣本的情況更新一次權值,開銷小速度快,但收到單個樣本的巨大隨機性,全局來看優化性能較差,收斂速度很慢,產生局部震蕩,有限迭代次數內很可能無法收斂。
目前常用隨機梯度下降SGD來訓練,相當于上述兩個“極端”方法的折中:將訓練集分成多個mini_batch(即常說的batch),一次迭代訓練一個minibatch(即batchsize個樣本),根據該batch數據的loss更新權值。這相比于全數據集訓練,相當于是在尋找最優時人為增加了一些隨機噪聲,來修正由局部數據得到的梯度,盡量避免因batchsize過大陷入局部最優。
這種方法存在兩對矛盾。由于一次只分析的一小部分數據,因此整體優化效果與batchsize有關:
batchsize越小,一個batch中的隨機性越大,越不易收斂。然而batchsize越小,速度越快,權值更新越頻繁;且具有隨機性,對于非凸損失函數來講,更便于尋找全局最優。從這個角度看,收斂更快,更容易達到全局最優。
batchsize越大,越能夠表征全體數據的特征,其確定的梯度下降方向越準確,(因此收斂越快),且迭代次數少,總體速度更快。然而大的batchsize相對來講缺乏隨機性,容易使梯度始終向單一方向下降,陷入局部最優;而且當batchsize增大到一定程度,再增大batchsize,一次batch產生的權值更新(即梯度下降方向)基本不變。因此理論上存在一個最合適的batchsize值,使得訓練能夠收斂最快或者收斂效果最好(全局最優點)。
根據現有的調參經驗,加入正則化項BN后,在內存容量允許的情況下,一般來說設置一個較大的batchsize值更好,通常從128開始調整。
當然,包括超參數對網絡優化的影響在內的許多關于的DL理論尚不成熟,大多處在依靠實驗嘗試、觀察、歸納總結的階段。?
?
關于深度學習中的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 深度学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成对抗网络 : LSGAN, WGAN
- 下一篇: DualGan 学习笔记