Batch_size對於深度學習訓練過程的影響?

 

    batch_size的大小決定了深度學習訓練過程中完成每個epoch所需的時間和每個迭代(epoch)之間梯度的平滑程度

  1. 對於每個epoch所需時間的解釋:

   對於一個大小爲N的訓練集,如果每個epoch中mini-batch的採樣方式採用最常規的(N個樣本每個樣本都採樣一次)方式,設mini-batch大小爲b,那麼每個epoch所需要的迭代次數爲 N/b ,因此完成每個epoch所需要的時間大致也隨着迭代次數的增加而增加。

  1. 每個迭代(epoch)之間梯度的平滑程度的解釋:

   一般深度學習框架在處理mini-batch的反向傳播時,默認都是先將每個mini-batch中的每個樣本得到的loss平均化之後再反求梯度,也就是說每次反向傳播的梯度是對mini-batch中每個樣本的梯度平均之後的結果,所以b的大小決定了相鄰迭代之間的梯度平滑程度;

b太小,相鄰mini-batch間的差異相對過大,那麼相鄰兩次迭代的梯度震盪情況會比較嚴重,不利於收斂;

b越大,相鄰mini-batch間的差異相對越小,雖然梯度震盪情況會比較小,一定程度上利於模型收斂,但是如果b極端大,相鄰mini-batch間的差異過小,相鄰兩個mini-batch的梯度沒有區別了,整個訓練過程中就是沿着一個方向快速往下,很容易陷入到局部最小值。

總結:batch size過小,計算時間較長,同時震盪嚴重,不利於收斂;batch_size過大,不同batch的梯度方向沒有任何變化,容易陷入局部極小值。

問題總結:

在合理範圍內,增大batch_size有何好處?

內存利用率提高了,大矩陣乘法的並行化效率提高;

跑完一次epoch(全數據集)所需的迭代次數減少,對於相同數據量的處理速度進一步加快。

在一定範圍內,一般來說batch_size越大,其確定的下降方向越準,引起訓練震盪越小。

 

盲目增大batch__size有何壞處?

內存利用率提高了,但是內存會出現內存溢出的問題。

跑完一次epoch所需的迭代次數減少,要想達到相同的精度,其所花費的時間大大增加,從而對參數的修正也就顯得更加緩慢。

Batch_size增大到一定程度,其確定的下降方向已經基本不再變化。

 

綜上所述,我們再設置batch_size的大小時,必須通過實驗來不斷調整。首先需要設定最大限度,這裏設置的初始值最好是2的冪次方,然後採用折半查找的方法找到滿足我們要求的值。

https://www.zhihu.com/question/32673260/answer/71137399

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章