batch-size 深度学习笔记
batch_size、epoch、iteration是深度學習中常見的幾個超參數(shù):
(1)batchsize:每批數(shù)據(jù)量的大小。DL通常用SGD的優(yōu)化算法進行訓練,也就是一次(1 個iteration)一起訓練batchsize個樣本,計算它們的平均損失函數(shù)值,來更新參數(shù)。
(2)iteration:1個iteration即迭代一次,也就是用batchsize個樣本訓練一次。
(3)epoch:1個epoch指用訓練集中的全部樣本訓練一次,此時相當于batchsize 等于訓練集的樣本數(shù)。
最初訓練DNN采用一次對全體訓練集中的樣本進行訓練(即使用1個epoch),并計算一次損失函數(shù)值,來更新一次權值。當時數(shù)據(jù)集較小,該方法尚可。后來隨著數(shù)據(jù)集迅速增大,導致這種方法一次開銷大進而占用內(nèi)存過大,速度過慢。
后來產(chǎn)生了一次只訓練一個樣本的方法(batchsize=1),稱作在線學習。該方法根據(jù)每一個樣本的情況更新一次權值,開銷小速度快,但收到單個樣本的巨大隨機性,全局來看優(yōu)化性能較差,收斂速度很慢,產(chǎn)生局部震蕩,有限迭代次數(shù)內(nèi)很可能無法收斂。
目前常用隨機梯度下降SGD來訓練,相當于上述兩個“極端”方法的折中:將訓練集分成多個mini_batch(即常說的batch),一次迭代訓練一個minibatch(即batchsize個樣本),根據(jù)該batch數(shù)據(jù)的loss更新權值。這相比于全數(shù)據(jù)集訓練,相當于是在尋找最優(yōu)時人為增加了一些隨機噪聲,來修正由局部數(shù)據(jù)得到的梯度,盡量避免因batchsize過大陷入局部最優(yōu)。
這種方法存在兩對矛盾。由于一次只分析的一小部分數(shù)據(jù),因此整體優(yōu)化效果與batchsize有關:
batchsize越小,一個batch中的隨機性越大,越不易收斂。然而batchsize越小,速度越快,權值更新越頻繁;且具有隨機性,對于非凸損失函數(shù)來講,更便于尋找全局最優(yōu)。從這個角度看,收斂更快,更容易達到全局最優(yōu)。
batchsize越大,越能夠表征全體數(shù)據(jù)的特征,其確定的梯度下降方向越準確,(因此收斂越快),且迭代次數(shù)少,總體速度更快。然而大的batchsize相對來講缺乏隨機性,容易使梯度始終向單一方向下降,陷入局部最優(yōu);而且當batchsize增大到一定程度,再增大batchsize,一次batch產(chǎn)生的權值更新(即梯度下降方向)基本不變。因此理論上存在一個最合適的batchsize值,使得訓練能夠收斂最快或者收斂效果最好(全局最優(yōu)點)。
根據(jù)現(xiàn)有的調(diào)參經(jīng)驗,加入正則化項BN后,在內(nèi)存容量允許的情況下,一般來說設置一個較大的batchsize值更好,通常從128開始調(diào)整。
當然,包括超參數(shù)對網(wǎng)絡優(yōu)化的影響在內(nèi)的許多關于的DL理論尚不成熟,大多處在依靠實驗嘗試、觀察、歸納總結(jié)的階段。?
?
關于深度學習中的batch_size
batch_size可以理解為批處理參數(shù),它的極限值為訓練集樣本總數(shù),當數(shù)據(jù)量比較少時,可以將batch_size值設置為全數(shù)據(jù)集(Full batch cearning)。
實際上,在深度學習中所涉及到的數(shù)據(jù)都是比較多的,一般都采用小批量數(shù)據(jù)處理原則。
小批量訓練網(wǎng)絡的優(yōu)點:
- 相對海量的的數(shù)據(jù)集和內(nèi)存容量,小批量處理需要更少的內(nèi)存就可以訓練網(wǎng)絡。
- 通常小批量訓練網(wǎng)絡速度更快,例如我們將一個大樣本分成11小樣本(每個樣本100個數(shù)據(jù)),采用小批量訓練網(wǎng)絡時,每次傳播后更新權重,就傳播了11批,在每批次后我們均更新了網(wǎng)絡的(權重)參數(shù);如果在傳播過程中使用了一個大樣本,我們只會對訓練網(wǎng)絡的權重參數(shù)進行1次更新。
- 全數(shù)據(jù)集確定的方向能夠更好地代表樣本總體,從而能夠更準確地朝著極值所在的方向;但是不同權值的梯度值差別較大,因此選取一個全局的學習率很困難。
小批量訓練網(wǎng)絡的缺點:
- 批次越小,梯度的估值就越不準確,在下圖中,我們可以看到,與完整批次漸變(藍色)方向相比,小批量漸變(綠色)的方向波動更大。
- 極端特例batch_size = 1,也成為在線學習(online learning);線性神經(jīng)元在均方誤差代價函數(shù)的錯誤面是一個拋物面,橫截面是橢圓,對于多層神經(jīng)元、非線性網(wǎng)絡,在局部依然近似是拋物面,使用online learning,每次修正方向以各自樣本的梯度方向修正,這就造成了波動較大,難以達到收斂效果。
如下圖所示
stochastic(紅色)表示在線學習,batch_size = 1;
mini_batch(綠色)表示批梯度下降法,batch_size = 100;
batch(藍色)表示全數(shù)據(jù)集梯度下降法,batch_size = 1100;
從圖上可以發(fā)現(xiàn),batch_szie=1 較 batch_size=100 的波動性更大。
設置mini_batch大小是一種藝術,太小時可能會使學習過于隨機,雖然訓練速率很快,但會收斂到不可靠的模型;mini_batch過小時,網(wǎng)絡訓練需要很長時間,更重要的是它不適合記憶。
如何選擇合適的batch_size值:
-
采用批梯度下降法mini batch learning時,如果數(shù)據(jù)集足夠充分,用一半(甚至少的多)的數(shù)據(jù)訓練算出來的梯度與全數(shù)據(jù)集訓練full batch learning出來的梯度幾乎一樣。
- 在合理的范圍內(nèi),增大batch_size可以提高內(nèi)存利用率,大矩陣乘法的并行化效率提高;跑完一次epoch(全數(shù)據(jù)集)所需的迭代次數(shù)減少,對于相同數(shù)據(jù)量的處理速度進一步加快;在適當?shù)姆秶鷥?nèi),batch_size越大,其確定的下降方向越準,引起訓練波動越小。注意,當batch_size增大到一定程度,其確定的下降方向基本不會變化。
-
batch_size值增大到超過合理范圍時,和全數(shù)據(jù)訓練full batch learning就會表現(xiàn)出相近的癥候;內(nèi)存容量占有率增加,跑完一次epoch(全數(shù)據(jù)集)所需的迭代次數(shù)減少,達到相同的精度所耗損的時間增加,從而對參數(shù)的修正也就顯得更加緩慢。
調(diào)節(jié) Batch_Size 對訓練效果影響到底如何?
這里跑一個 LeNet 在 MNIST 數(shù)據(jù)集上的效果。MNIST 是一個手寫體標準庫
運行結(jié)果如上圖所示,其中絕對時間做了標準化處理。運行結(jié)果與上文分析相印證:
- batch_size 太小,算法在 200 epoches 內(nèi)不收斂。
- 隨著 batch_size 增大,處理相同數(shù)據(jù)量的速度越快。
- 隨著 batch_size 增大,達到相同精度所需要的 epoch 數(shù)量越來越多。
- 由于上述兩種因素的矛盾,batch_size 增大到某個時候,達到時間上的最優(yōu)。
- 由于最終收斂精度會陷入不同的局部極值,因此batch_size 增大到某些時候,達到最終收斂精度上的最優(yōu)。
總結(jié)
以上是生活随笔為你收集整理的batch-size 深度学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成对抗网络 : LSGAN, WGAN
- 下一篇: 李宏毅老师机器学习和深度学习