【論文閱讀】Bag of Tricks for Image Classification with Convolutional Neural Networks
Bag of Tricks for Image Classification with Convolutional Neural Networks
論文:https://arxiv.org/pdf/1812.01187.pdf
本文作者總結了模型訓練過程中可以提高準確率的方法,如題,作者說 bag of tricks,閱讀了一遍文章,有用的內容挺多,為了比賽上分,可以一試,總結如下。文中提到的方法在GLuonCV 0.3中有實現,可以參考這個原始碼。
文中提到技巧不僅可以應用於影象分類任務中,還可以應用於影象識別和語義分割任務中。
有效訓練
利用更大的batch size 進行訓練,但利用更大的batch size使得驗證集上的準確率降低,為解決這個問題,文中提出了四種解決方法,分別為:Linear scaling learning rate, Learning rate warmup, Zero ,No bias decay。具體可參考文中說明,實驗結果如下,對準確率幾乎無提升。
利用16位進行訓練可有效的減少模型的訓練時間,結果如下:
模型優化
在ResNet的結構基礎上調整了模型中間部分結構,下圖為ResNet-50網路結構:
修改上圖中的Down Sampling結構為下圖中的ResNet-D,其中下圖中的(a)是之前修改使用的模型,(b)是將輸入部分的7x7卷積核換成了3x3卷積核,Inception-v2網路中有使用。
實驗結果為下表,從表中可以看出修改模型後的準確率有較明顯的提升。
訓練過程優化
1) cos學習率衰減
常用的學習率衰減方法為“step decay”,如每過30個epochs,學習率乘以0.1,cos學習率衰減公式如下:
其中,
為總的batches數,t為第幾個batch,
為初始學習率,實驗過程學習率變化如下圖,cos學習率衰減方法在起始階段,學習率衰減較慢,中間階段趨於線性衰減,後序階段衰減較快,認為該衰減方法有效的原因是cos衰減在訓練沒過多久學習率很大,而step方法的學習率降低很多,而起始階段的高學習率可以加速訓練過程。
2) label 平滑
這個label平滑大致意思就是正常情況下真值是1,非真值是0,平滑處理後真值不等於1,變換方法如下:
3) 知識蒸餾
利用教師模型來指導學生模型訓練,教師模型是指對同一個任務準確率高的模型,例如,利用ResNet-152作為教師模型,ResNet-50作為學生模型,引入蒸餾損失函式來進行優化,公式如下:
表示真實值,
表示學生模型預測輸出,
表示老師模型預測輸出,
為超引數,
表示交叉熵損失函式;
4) 混合訓練
混合的意思是給定兩個值,根據給定的兩個值獲得一個新的值,利用如下公式:
上述4個方法的實驗結果如下,提到的方法對模型的準確率提升都有影響,而知識蒸餾方法對Inception-V3和MobileNet沒有提升,文中的解釋是使用Resnet-152作為教師模型,而和後兩個模型屬於不同的模型家族,預測結果的分佈也不同,因此對後兩個模型到來的負面的影響。
總結
本文從模型優化,學習率衰減,label平滑,知識蒸餾,混合訓練等方面總結了一些模型訓練技巧,對準確率提升有較好的作用。
參考
https://github.com/kmkolasinski/deep-learning-notes/tree/master/seminars/2018-12-Improving-DL-with-tricks
https://zhuanlan.zhihu.com/p/51870052