batch size設置技巧

顯存佔用不是和batch size簡單成正比

增大batch size能減緩梯度震盪,需要更少的迭代優化次數,收斂的更快,但是每次迭代耗時更長。
https://zhuanlan.zhihu.com/p/31558973

要想收斂到同一個最優點,使用整個樣本集時,雖然迭代次數少,但是每次迭代的時間長,耗費的總時間是大於使用少量樣本多次迭代的情況的。
實際上,工程上在使用GPU訓練時,跑一個樣本花的時間與跑幾十個樣本甚至幾百個樣本的時間是一樣的!當然得益於GPU裏面超多的核,超強的並行計算能力啦。因此,在工程實際中,從收斂速度的角度來說,小批量的樣本集是最優的,也就是我們所說的mini-batch。這時的batch size往往從幾十到幾百不等,但一般不會超過幾千。

樣本量少的時候會帶來很大的方差,而這個大方差恰好會導致我們在梯度下降到很差的局部最優點(只是微微凸下去的最優點)和鞍點的時候不穩定,一不小心就因爲一個大噪聲的到來導致炸出了局部最優點。
與之相反的,當樣本量很多時,方差很小,對梯度的估計要準確和穩定的多,因此反而在差勁的局部最優點和鞍點時反而容易自信的呆着不走了,從而導致神經網絡收斂到很差的點上,跟出了bug一樣的差勁。

batch的size設置的不能太大也不能太小,因此實際工程中最常用的就是mini-batch,一般size設置爲幾十或者幾百。
對於二階優化算法,減小batch換來的收斂速度提升遠不如引入大量噪聲導致的性能下降,因此在使用二階優化算法時,往往要採用大batch哦。此時往往batch設置成幾千甚至一兩萬才能發揮出最佳性能。
GPU對2的冪次的batch可以發揮更佳的性能,因此設置成16、32、64、128...時往往要比設置爲整10、整100的倍數時表現更優
https://zhuanlan.zhihu.com/p/27763696

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