之前的一片博文寫了Batch Size的作用和應該如何設置比較合適,同時還有Batch Size大小,與學習率lrlr、訓練次數epochepoch之間的關系。里面提及Batch Size越大,梯度的方向越准確。
上述的說法是沒錯的,梯度方向准確,最后網絡收斂情況好,但是收斂情況好並不意味網絡的性能就好,網絡收斂好意味着對訓練數據作出了較好的擬合,但是並不意味着就會對測試數據作出很好的擬合。這存在的一個“泛化”的問題。
ON LARGE-BATCH TRAINING FOR DEEP LEARNING:GENERALIZATION GAP AND SHARP MINIMA 論文發現了使用large-batch訓練得到的網絡具有較差的泛化能力。使用large-batch的情況下容易收斂成“sharp minimizers”,使其的泛化能力差。而相對使用“small-batch”訓練的最終會收斂到“flat minimizers”,這是因為在“small-batch”中在梯度計算中固有噪聲的存在,使得網絡的最終收斂成“flat minimizers”
論文中提及了使用“large-batch”造成泛化能力差的原因可能是網絡直接收斂到初始值附近。同時,論文嘗試提出幾種方法,如數據增強,“conservative training”和“robust optimization”,但好像也沒什么效果。另一種補救方法包括使用動態抽樣,在這種情況下,隨着迭代的進行,批大小逐漸增大。
https://blog.csdn.net/qq_34886403/article/details/82597558
感想:batch size從64下降到6,發現平均准確率提升0.4%左右。我的ResNet最佳層數為6.