1. 程式人生 > >batch size設定技巧

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