回覆列表
-
1 # 北航秦曾昌
-
2 # AI深度學習求索
不是,我也是最近才在實驗中遇到的。
一般而言,batchsize越大,佔記憶體越多,訓練得越快,一般而言,效率上講是越大越好。
但是如果資料集比較小,而又將batchsize設定得比較大,將會導致梯度更新不夠(批處理其實過程中平均了loss),進而影響模型效能。
如果資料集比較大的話,影響小一些。
其實,從大了講,batchsize應該在效率和效能上權衡,哈哈!
從實際中來看,這個問題並沒有統一的正確答案,需要具體問題具體分析。但是這裡可以分享一些實際訓練訓練中的經驗。
Batch size,批大小也就是模型在每次訓練時,餵給他多少的資料量。通常我們最佳化模型所使用的損失函式公式如下,最佳化的目標往往是非凸函式,因此存在諸多的區域性最優點。
其中M就是全部的訓練資料大小,f(x)是單個數據的損失函式。而在我們每次更新模型引數時,所用的計算公式如下:
這裡的Bk就是批大小,Bk是小於等於M的。而按照選取的Bk大小,我們可以將其分成三類:
1. Bk=1,即隨機梯度下降,即每次針對單個數據進行引數更新。這種方法的優勢在於佔用的記憶體很小,能夠實現線上學習。弊端也很明顯,就是很容易由於梯度方向的隨機而導致模型無法收斂,而且無法充分平行計算,訓練時間過長。
2. Bk=M,即每次都使用全部資料來進行模型引數的更新,這種方式在每次更新時,得到的更新梯度方向更加準確,使得模型收斂的更加穩定。但是缺點在於,當資料量非常大的時候,由於記憶體的限制,往往無法實現,同時所需要訓練的epoch數也會大大增加;
3. 1<Bk<M,即小批次的梯度下降,這種方法權衡了隨機梯度下降和全批次梯度下降的優缺點,往往在實際使用中能取得更好的效果。
另外根據2017年的一篇論文,過大的batch往往會降低模型的效能和泛化能力,那是因為多大的batch會使得在模型陷入到尖銳的區域性最優處(Sharp Minimum)時,無法跳出來。而小一點的batch則可以由於梯度方向的變化大,而容易收斂一個平坦的最優處(Flat Minimum)。而往往在平坦的最優處能夠在測試集上獲得更好的泛化效果。
參考內容:On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima