計算機視覺面試考點(4)batch size

計算機視覺工程師在面試過程中主要考察三個內容:圖像處理、機器學習、深度學習。然而,各類資料紛繁複雜,或是簡單的知識點羅列,或是有着詳細數學推導令人望而生畏的大部頭。爲了督促自己學習,也爲了方便後人,決心將常考必會的知識點以通俗易懂的方式設立專欄進行講解,努力做到長期更新。此專欄不求甚解,只追求應付一般面試。希望該專欄羽翼漸豐之日,可以爲大家免去尋找資料的勞累。每篇介紹一個知識點,沒有先後順序。想了解什麼知識點可以私信或者評論,如果重要而且恰巧我也能學會,會盡快更新。最後,每一個知識點我會參考很多資料。考慮到簡潔性,就不引用了。如有冒犯之處,聯繫我進行刪除或者補加引用。在此先提前致歉了!

在訓練的過程中,先明確幾個概念

batch size: 批大小,更新一次參數,用到的樣本數量。
epoch: 週期數,將所有樣本均使用一遍是1個epoch。
iteration: 迭代次數,在1個epoch內,更新參數的次數。

舉個例子:
5000個樣本,batch size是50,iteration就是100。

原理

訓練過程有正向傳播和反向傳播。
正向傳播計算損失,反向傳播更新參數。

根據batch size大小分爲三類:

  1. batch size = 1 (隨機梯度下降) 在每次iteration中,正向傳播1次,反向傳播1次。
  2. batch size = 總樣本量N (批梯度下降) 在每次iteration中,正向傳播N次,反向傳播1次。
  3. batch size = n (mini batch梯度下降) 在每次iteration中,正向傳播n次,反向傳播1次。

正向傳播和反向傳播次數不同,怎麼做的?
比如batch size = 5
正向傳播5次得到5個損失,5個損失取平均,計算1個梯度,反向傳播1次。

優缺點

因爲batch size大小的優缺點比較複雜,甚至有時候是矛盾的。瞭解以下原理,能夠自己分析,纔是最好的。

訓練過程中,數據需要被讀取到顯卡(gpu)中。

batch size越大,佔用的gpu顯存越大。
batch size太小,比如11GB的顯存只用了3GB,如果gpu沒有其它任務,那麼對gpu的利用顯然是不充分的,從這個角度來講,不利於效率的提升。
batch size過大,超過了gpu的顯存容量,那麼數據無法讀取,無法訓練。

n個樣本正向傳播的梯度相加取平均,n越大,每個iteration的梯度方向越穩定。

batch size變大,梯度方向越穩定,會向一個方向穩定地更新。
但是一直向相似方向前進,容易陷入局部最優。
batch size變小,梯度方向不穩定,訓練過程不穩定,容易受到一些極端樣本的影響。不過,也不容易陷入局部最優。

討論不同batch size下訓練得到的準確性沒有太大的意義。
batch size小,梯度不穩定,需要採用小的學習率,防止受到某一批樣本過大的影響。反之,batch size大,梯度穩定,就可以採用相對較大的學習率。
相同epoch,batch size大,iteration少,也就是參數更新次數少。所以針對不同的batch size,epoch的設置也是不同的。
綜上,不同的batch size都有其合適的超參數選擇,所以直接比較使用不同batch size訓練的準確率,沒有太大意義。

不同batch size的iteration的時間幾乎相同。

理論上,每個iteration都是1次反向傳播,batch size越大,正向傳播次數越多,1次iteration的時間越長。
但是,和反向傳播的時間比,正向傳播的時間幾乎可以忽略不計。
所以,不同batch size的iteration的時間幾乎相同。
具體到1個epoch,因爲大batch size的iteration次數少,所以大batch size的每個epoch的時間短。

如果,非要下一個通用的結論:
在一定範圍內,大batch size注重效率,小batch size注重精度。

討論

batch size通常是2的冪函數,比如32,64,128…
一問原因都說是因爲計算機是2進制運算,具體又說不出來。
我能想到的一個強行解釋是:
在求損失的平均值時,除以32這類數可以直接移位。但是這個差距我覺得可以忽略不計了吧。
所以很多人也通常不會遵守這一潛規則。
如果有大佬瞭解具體原因,懇請多多指教!


歡迎討論 歡迎吐槽

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