之前轉載過他人對於Batch Size對訓練的影響的研究。但是其實描述的還不是很完善,最近剛好有空,寫一篇我在深度學習過程中Batch Size對訓練過程的影響。

在實際深度學習專案中,一般有三種抽取資料的方式,第一種是取全量的資料進行梯度的更新;第二種是取1條樣本進行每次迭代更新,即線上學習batch size=1;第三種是取部分樣本資料也就是mini batch size進行梯度更新。三種方式對梯度更新也很容易想到,第一種因為是全量資料,所以梯度總能朝正確的方向進行下降;第二種為one by one,梯度的遊走路徑波動顯然會很大;第三種是一種折中的方式,而我們需要做的就是找到第三種方式最優值。

所以我們要明白Batch Size到底影響的是什麼?顯而易見的是它會影響目標函式的收斂速度,一般來說,增大Batch_Size,所帶來的訓練時的標準差並不是線性增長的,比如訓練一個樣本的標準差為σ,那麼取Batch_Size=n所帶來的標準差為

σ/\sqrt{n}

,而非

σ/n

。因此,如果採用多個訓練樣本來算梯度的話,其計算量是線性增長的,但標準差並不能線性降低。所以Batch_Size越大,其收斂所需的迭代次數會減少,但每次迭代的計算時間也會增多,總體來看的話,耗費的總時間反而比使用少量樣本來訓練要多。但是,由於我們跑網路的時候可以用GPU平行計算,所以在一定範圍內增大Batch_size,跑一次iteration的時間其實是差不多的,因此適當增加Batch_size大小,能讓網路更快收斂。

另一方面,Batch Size也會影響目標函式的最優解,我們知道訓練目標是網路最終收斂的時候得到目標函式的最優解,而在實際的訓練過程中我們並不總是能找到絕對最小值區域,很多時候是陷入了局部最優解。這時候,如果將Batch Size調整的較小,其每次的迭代下降方向就不是最準確的,loss小範圍震盪下降反而會跳出區域性最優解,從而尋找loss更低的區域。還有一種說法是,何凱明的論文

Rethinking ImageNet pre-training【1】

提到過,如果你的網路中使用了BN層的話,而BN層的計算在batch size較小時受batch size引數影響較大,batch size越小,引數的統計資訊越不可靠,也會影響最終的效果。因此調小Batch_size可以有效防止陷入區域性最小值,但是由於BN層的存在也會影響最終的效果,同時Batch_size調得過小也容易導致網路不收斂。所以在實際跑程式碼的過程中你就會發現,調Batch_size是個很玄學的過程。

這時候在看兩個問題?

(1)深度學習中batch size的大小對訓練過程的影響是什麼樣的?

詳細以上的內容已經給出了答案。

(2)有些時候不可避免地要用超大batch,比如人臉識別,可能每個batch要有幾萬甚至幾十萬張人臉影象,訓練過程中超大batch有什麼優缺點,如何儘可能地避免超大batch帶來的負面影響?

在不考慮Batch Normalization的情況下(這種情況我們之後會在bn的文章裡專門探討),先給個自己當時回答的答案吧(相對來說學究一點):

(1) 不考慮bn的情況下,batch size的大小決定了深度學習訓練過程中的完成每個epoch所需的時間和每次迭代(iteration)之間梯度的平滑程度。batch size只能說影響完成每個epoch所需要的時間,決定也算不上吧。根本原因還是CPU,GPU算力吧。瓶頸如果在CPU,例如隨機資料增強,batch size越大有時候計算的越慢。

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

由於目前主流深度學習框架處理mini-batch的反向傳播時,預設都是先將每個mini-batch中每個instance得到的loss平均化之後再反求梯度,也就是說每次反向傳播的梯度是對mini-batch中每個instance的梯度平均之後的結果,所以b的大小決定了相鄰迭代之間的梯度平滑程度,b太小,相鄰mini-batch間的差異相對過大,那麼相鄰兩次迭代的梯度震盪情況會比較嚴重,不利於收斂;b越大,相鄰mini-batch間的差異相對越小,雖然梯度震盪情況會比較小,一定程度上利於模型收斂,但如果b極端大,相鄰mini-batch間的差異過小,相鄰兩個mini-batch的梯度沒有區別了,整個訓練過程就是沿著一個方向蹭蹭蹭往下走,很容易陷入到區域性最小值出不來。

總結下來:batch size過小,花費時間多,同時梯度震盪嚴重,不利於收斂;batch size過大,不同batch的梯度方向沒有任何變化,容易陷入區域性極小值。

深度學習 | Batch Size對訓練的影響(二)

參考連結:

【1】He K , Girshick R , Dollár, Piotr。 Rethinking ImageNet Pre-training[J]。 2018。