Bag of Tricks for Image Classification
轉(zhuǎn)自https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247486778&idx=2&sn=23582d015eff1d0d5ba0c6f71ca86296&chksm=ec1fe0c3db6869d588af077e6041377193cee8c8eeb069f283bdf6b9a2613bb7dc6b4c7b365a&mpshare=1&scene=1&srcid=0318W4ZKu3BiCVeuKx6lLMrc#rd
?
一、加快模型訓(xùn)練的部分(采用更大的batch和采用16位浮點型數(shù)據(jù)進行訓(xùn)練)
1. 增大學(xué)習率,因為更大的batch size 意味著基于每個batch數(shù)據(jù)計算得到的梯度更加接近整個數(shù)據(jù)集,因此當更新方向更加準確后,邁的步子也可以更大,一般來說,batch size為原來的多少倍,初始的學(xué)習率也是原來的多少倍。
2.用一個小的學(xué)習率先訓(xùn)練幾個epoch,因為網(wǎng)絡(luò)的參數(shù)是隨機初始化的,加入一開始較大的學(xué)習率容易出現(xiàn)數(shù)值不穩(wěn)定,這是使用warmup的原因。作者在實現(xiàn)warmup的過程中采用線性增加的策略,舉例而言,假設(shè)warmup階段的初始學(xué)習率是0,warmup階段共需要訓(xùn)練m個batch的數(shù)據(jù)(實現(xiàn)中m個batch共5個epoch),假設(shè)訓(xùn)練階段的初始學(xué)習率是L,那么在batch i的學(xué)習率就設(shè)置為i*L/m。
3. 每個殘差塊的最后一個BN層的gama參數(shù)初始化為0,我們知道BN層的γ、β參數(shù)是用來對標準化后的輸入做線性變換的,也就是γx^+β,一般γ參數(shù)都會初始化為1,作者認為初始化為0更有利于模型的訓(xùn)練。
4. 不對bias參數(shù)執(zhí)行weight decay操作,weight decay 主要的作用就是通過對網(wǎng)絡(luò)層的參數(shù)(包括weight 和bias)做約束(L2正則化會使得網(wǎng)絡(luò)層的參數(shù)更加平滑)達到減少模型過擬合的效果。
?
二、優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)部分
resnet50結(jié)構(gòu):
關(guān)于residual block的改進見下圖(包括3點)
1. resNet-B
?改進部分就是將stage中做downsample的residual block的downsample操作從第一個11卷積層換成第二個33卷積層,如果downsample操作放在stride為2的11卷積層,那么就會丟失較多特征信息(默認是縮減為1/4),可以理解為有3/4的特征點都沒有參與計算,而將downsample操作放在33卷積層則能夠減少這種損失,因為即便stride設(shè)置為2,但是卷積核尺寸夠大,因此可以覆蓋特征圖上幾乎所有的位置。
2.resnet-C
?改進部分就是將Figure1中input stem部分的77卷積層用3個33卷積層替換。這部分借鑒了Inception v2的思想,主要的考慮是計算量,畢竟大尺寸卷積核帶來的計算量要比小尺寸卷積核多不少,不過讀者如果仔細計算下會發(fā)現(xiàn)ResNet-C中3個33卷積層的計算量并不比原來的少,這也是Table5中ResNet-C的FLOPs反而增加的原因。
3. resNet-D
?改進部分是將stage部分做downsample的residual block的支路從stride為2的11卷積層換成stride為1的卷積層,并在前面添加一個池化層用來做downsample。這部分我個人理解是雖然池化層也會丟失信息,但至少是經(jīng)過選擇(比如這里是均值操作)后再丟失冗余信息,相比stride設(shè)置為2的1*1卷積層要好一些。
三、模型訓(xùn)練調(diào)優(yōu)部分
這部分作者提到了4個調(diào)優(yōu)技巧:
1、學(xué)習率衰減策略采用cosine函數(shù),這部分的實驗結(jié)果對比可以參考Figure3,其中(a)是cosine decay和step decay的示意圖,step decay是目前比較常用的學(xué)習率衰減方式,表示訓(xùn)練到指定epoch時才衰減學(xué)習率。(b)是2種學(xué)習率衰減策略在效果上的對比。
?
?
?
2、采用label smoothing,這部分是將原來常用的one-hot類型標簽做軟化,這樣在計算損失值時能夠在一定程度上減少過擬合。從交叉熵損失函數(shù)可以看出,只有真實標簽對應(yīng)的類別概率才會對損失值計算有所幫助,因此label smoothing相當于減少真實標簽的類別概率在計算損失值時的權(quán)重,同時增加其他類別的預(yù)測概率在最終損失函數(shù)中的權(quán)重。這樣真實類別概率和其他類別的概率均值之間的gap(倍數(shù))就會下降一些,如下圖所示。
?
?
?
?
3、知識蒸餾(knowledge distillation),這部分其實是模型加速壓縮領(lǐng)域的一個重要分支,表示用一個效果更好的teacher model訓(xùn)練student model,使得student model在模型結(jié)構(gòu)不改變的情況下提升效果。作者采用ResNet-152作為teacher model,用ResNet-50作為student model,代碼上通過在ResNet網(wǎng)絡(luò)后添加一個蒸餾損失函數(shù)實現(xiàn),這個損失函數(shù)用來評價teacher model輸出和student model輸出的差異,因此整體的損失函數(shù)原損失函數(shù)和蒸餾損失函數(shù)的結(jié)合:
?
?
?
其中p表示真實標簽,z表示student model的全連接層輸出,r表示teacher model的全連接層輸出,T是超參數(shù),用來平滑softmax函數(shù)的輸出。
?
4、引入mixup,mixup其實也是一種數(shù)據(jù)增強方式,假如采用mixup訓(xùn)練方式,那么每次讀取2張輸入圖像,假設(shè)用(xi,yi)和(xj,yj)表示,那么通過下面這兩個式子就可以合成得到一張新的圖像(x,y),然后用這張新圖像進行訓(xùn)練,需要注意的是采用這種方式訓(xùn)練模型時要訓(xùn)更多epoch。式子中的λ是一個超參數(shù),用來調(diào)節(jié)合成的比重,取值范圍是[0,1]。
?
?
最終這4個調(diào)優(yōu)技巧的實驗結(jié)果對比如Table6所示。
轉(zhuǎn)載于:https://www.cnblogs.com/ahuzcl/p/11073352.html
總結(jié)
以上是生活随笔為你收集整理的Bag of Tricks for Image Classification的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios开发之UIView和UIViewC
- 下一篇: 线段树优化建图