【QA】Batch Size 是甚麼? 會對訓練有何影響?
Batch Size是甚麼? 我想,Batch Size是一個機器學習裡面一個很基本卻也很重要的的知識點,之前就有提過這樣的概念,但這次是想用文字,來對Batch Size做一個較完整的總結。
回答列表
-
2021/11/10 下午 01:43Kevin Luo贊同數:0不贊同數:0留言數:0
Batch Size指的是一次訓練所抓的訓練樣本數。Batch Size的大小影響模型的最佳化程度和速度。在了解Batch Size之前,我們先來區分一下Epoch和Batch和Iteration這三個概念的差異。 (1) Epoch使用訓練集全部資料模型進行"一次性"的完整訓練。所以也被稱為"一代訓練"。 (2) Batch是用訓練集中的一小部分樣本對模型權重進行一次反向傳播的參數更新,這一小部分的訓練樣本被稱為"一批次量"。 (3) Iteration 是使用一個Batch資料模型進行一次參數更新的過程,被稱為"一次訓練"。 為什麼需要Batch Size?: 在沒有使用Batch Size時,網路在訓練時會一次性把所有的資料登錄網路中,計算獲得的梯度方向更為準確,但與此同時,計算獲得不同的梯度值差別極大,難以使用一個全域(global region)的學習率,並且對記憶體來說是非常大的挑戰,會引起記憶體的爆炸。 如何選擇Batch Size?: Batch Size的選擇,會影響梯度下降的方向。 如果資料比較小,可以採取全資料集的形式,好處如下。 (1)由全資料集確定的方向能夠更進一步地代表樣本整體(整體性),進一步更準確地朝向極值(Gradient為0)的方向走。 (2)由於不同權重的梯度值差別極大,因此選取一個全域的學習率非常困難。 對於較大的資料極一樣採取全資料的形式訓練,壞處如下。 (1)由於記憶體的限制,隨著資料的巨量增長,一次性載入所有的資料變得越來越不可行。 (2)若以彈性反向傳播(Rprop)的方式迭代,會由於各個Batch Size之間的採樣差異性,各次梯度修正值相互抵消,無法修正。 這才有了後來的均方根反向傳播(RMSprop)的妥協方案。 以下是深度學習關於Batch Size值得選擇的一些建議: 假如每次只訓練一個樣本,即Batch Size=1。 線性神經元在均方誤差代價函數的錯誤面是一個拋物面,橫截面是橢圓。對於多層神經元, 非線性網路,在局部依然近似一個拋物面。此時,每次修正以各自樣本的梯度方向修正,橫衝直撞各自為政,難以達到收斂的效果。 那既然Batch Size為全資料數或Batch Size = 1 都各有缺點,可不可以選擇一個適中的Batch Size呢? 此時,其實採用小批次梯度下降學習(mini-batches learning)是一個很好的選擇。因為如果在資料充足的情況下,那麼用一半(甚至少得多)的資料訓練算出來的梯度與用完全資料訓練出來的梯度幾乎是一樣的。 調節Batch Size對訓練效果的影響: 當Batch Size太小時,模型表現效果極其糟糕,誤差飆升。隨著Batch Size不斷的增大,處理相同資料量的速度將會變快。但是達到相同精度的Epoch數量變更多。 由於上述兩種因素的矛盾,當Batch Size變大到某個程度時,會達到訓練時間上的最佳。最後收斂精度會陷入不同的局部極值,因此當Batch Size增大到某種程度時,會達到最後收斂精度上的最佳。 在合理範圍內增加Batch Size的優點: 在合理範圍內增大Batch Size有以下好處: (1) 記憶體使用率增強,大矩陣乘法的平行運算效率加強! (2) 跑完一次Epoch所需的迭代次數減少,對於相同資料量的處理速度進一步加快。 (3)在一定範圍內,一般來說Bathc Size越大,其確定的下降方向越準確,引起的訓練震盪會越小。 也別盲目增大Batch Size其壞處是: 剛剛提到,在合理的範圍內增加Batch Size有好處的,但一定不能盲目增加。原因如下: (1) 記憶體使用率增加,但如果記憶體因此爆掉怎麼辦? (2) 跑完一次Epoch的迭代次數減少,要想達到相同的精度,其所花費的時間的時間大幅增加了,進一步對參數的修正也就顯得更加緩慢。 (3) Batch Size增大到某種程度,其確定的下降方向基本上就不會再改變。 這次的Batch Size 歸納整理就先到這裡。