logo
Loading...

深度學習中調整的 batch_size 大小,為何會影響accuracy rate? - Cupoy

您好:我試著嘗試自己使用Keras去建模,但遇到了一些問題,想請教專家。1. 為何調整 batch_...

深度學習中調整的 batch_size 大小,為何會影響accuracy rate?

2020/10/15 上午 10:57
機器學習共學討論版
Riley
觀看數:49
回答數:2
收藏數:0

您好:

我試著嘗試自己使用Keras去建模,但遇到了一些問題,想請教專家。

1. 為何調整 batch_size 會影響 accuracy rate?

我自己用白話文的解讀,是不是有點像是,當batch_size 為1,而epoch 為 1000, 則所有的參數皆會被update 1000次。

反觀,當batch_size 為 100,而 epoch 為10,這表示將training data set 分成 10等分,然後每一等分只會被update 10次的意思嗎?

所以,當被 update的次數越少,則training 出來的 model效果可能就會很差,但是因為平行運算的關係,可以增加運算的速度。

以上是我的理解,不曉得這樣是正確的嗎?


如果是的話,我有第二的問題。

我的預期是,當batch_size 越大,accuracy rate 會一直逐步遞減。不過我自己試玩了一下,圖像中的結果與我的預期不太一致。

這樣的情況是正常的嗎? 即震幅很大。

如果是正常的情況,這樣要怎麼解釋batch_size 增加,會導致accuracy rate 下降的說法。因為,圖形呈現出來的結果是,accuracy rate 會上上下下,並沒有任何一個點可以去指出,在某個batch_size下,得到的結果最佳,所以就用這個batch_size來train model。


回答列表

  • 2020/10/16 上午 00:35
    劉冠宏
    贊同數:2
    不贊同數:0
    留言數:2

    Hello 您好一般而言在做mini-batch training的時候,在反向傳播階段會將mini-batch中得到的loss做平均來計算梯度進行參數更新,因此batch size的大小其實決定了訓練時梯度的平滑程度。當batch size越大時相鄰的batch差異就越小,在做訓練時梯度較平滑(loss震盪也會較小),反之batch size較小時,梯度震盪較大。 而對於模型來說大的batch size因為梯度較平滑穩定,較利於模型收斂,但相對的在訓練時迭代的隨機性也會叫小而影響模型的泛化能力。 相對的小的batch size因訓練讀取資料有較豐富的隨機性,模型訓練出來的泛化能力也會較好。


    因此當調整不同batch size (其他條件不動的情況下),因為每次iteration所求出的loss平均(梯度)的不同,會影響到模型參數的更新造成最後的accuracy也不同。 (當然最後accuracy不同的原因很多,像是模型參數的初始化、每次iteration sample的batch資料等等)


    並沒有特別一種說法是多少的batch size是最好的,batch size的設定跟你所訓練的資料,模型參數的設定或learning rate的大小都有關係。當然,一般而言batch size不會設到太小(ex: 1)也不會設到跟訓練數據數量一樣的大小。


    這裡有篇討論batch szie不錯的文章給您參考: https://zhuanlan.zhihu.com/p/86529347

  • 2020/10/18 上午 01:21
    張維元 (WeiYuan)
    贊同數:0
    不贊同數:0
    留言數:0

    嗨,


    理論上是「batchsize 增加,有助於模型收斂,但泛化能力會下降」,所以你的第一點是對的。但模型本身還是會受到資料怎麼切的影響,準確度是介於「training」跟「testing」的 trade-off ,所以這樣只用一份資料來看的話一定會有這樣的現象,建議可以試試改成用 cv 的結果來看看,不然就是資料本身的影響(如同冠宏專家講的)。


    很高興可以在這次問答進行討論,如果還有不懂或是模糊的部分也歡迎持續追問。期待你的互動與鼓勵創造出不同更深度的討論。歡迎加入我自己經營的Line 群組社群,會有不定時舉辦的分享活動,一起來玩玩吧!