tictoc正方形网络模型_Trick | 分类网络Trick大汇总
本文介紹了訓練分類網(wǎng)絡的各個階段可以用來提升性能的Trick,也就是俗稱的調(diào)參術。結(jié)果頂級調(diào)參術的調(diào)教,ResNet- 50的top-1驗證精度在ImageNet上從75.3%提高到79.29%。這個結(jié)果比直接設計全新的網(wǎng)絡效果都要好。
1.baseline
現(xiàn)有的深度學習分類網(wǎng)絡,其主要整體框架如下圖所示:首先對數(shù)據(jù)進行預處理,并利用小批量隨機梯度下降的訓練模板,在每次迭代中,通過隨機抽取batch大小的預處理后圖像計算梯度并更新網(wǎng)絡參數(shù),并經(jīng)過K個epoch之后停止迭代。
1.預處理階段
訓練階段: - 對于每幅圖像,將其解碼成32位浮點原始像素值[0,255]。 - 對圖像進行隨機裁剪,裁剪后的長寬比范圍為[3/ 4,4 /3]和面積大小范圍為[8%,100%]的矩形區(qū)域,然后將裁剪后的區(qū)域調(diào)整為224 * 224的正方形圖像,分類網(wǎng)絡多用正方形輸入是為了使得網(wǎng)絡能夠?qū)δ繕吮壤哂懈鼜姷姆夯芰Α?- 利用0.5的概率進行隨機翻轉(zhuǎn)。 - 在色調(diào),飽和度和亮度三個方面進行均勻增強,比例可以從[0.6,1.4]均勻獲取。 - 為輸入圖像加入正太分布的白噪聲,用于提升分類網(wǎng)絡的魯棒性。 - 將RGB通道歸一化,分別減去123.68、116.779、103.939,再除以58.393、57.12、57.375。
測試驗證階段: 將每個圖像的短邊調(diào)整為256像素,同時保持其高寬比。接下來,在中心裁剪出224×224的區(qū)域,并對類似于訓練的RGB通道進行歸一化處理。且不執(zhí)行任何隨機擴展。
權(quán)值初始化:
卷積層和全連接層:Xavier算法進行初始化,所有的偏置初始化為0。對于BN層,伽馬參數(shù)都初始化為1,β參數(shù)初始化為0。
3.訓練階段
利用大batch進行模型的訓練,會增加模型的并行性且降低通信成本,在訓練過程中,煉丹師的直觀感受更多的是大batch訓練的網(wǎng)絡會更加的穩(wěn)定,主要原因是batch越大整個隨機梯度的方差就越小,噪聲越小,因為batch越大越能表征樣本空間。因此若是你使用大batch就可以按比例的增加學習率。然而有很多論文證明直接增大batch會導致訓練的收斂變慢,并且最終網(wǎng)絡的性能也會下降,table4中的第一行實驗結(jié)果也驗證了這一點。為了提升大batch的訓練性能,提出了以下三個訓練trick。
LR warmup
若你的訓練并沒有預訓練權(quán)重,而是使用隨機初始化權(quán)重的方式,那么在訓練的開始階段,由于初始化權(quán)重的隨機性若直接使用過大的學習率可能導致訓練前期的震蕩,因此我們可以使用warmup的方式,直白來說就是剛開始不要太劇烈,讓學習率在初始的N個epoch中通過預熱的方式緩慢上升到預先設定的初始值。
Zero γ BN層的可學習參數(shù)初始化。BN層的兩個科學系參數(shù)γ和β。最終經(jīng)過BN層的輸出會在歸一化之后通過γ*x+β的方式重新學習到原始分布。而在初始化這兩個參數(shù)時,通常將γ初始化為1,β初始化為0。而如下圖所示是Resnet中常見的一個跳躍連接的子模塊,該子模塊的輸出分別為block(x)+x,分別來自于輸入的跳躍和block的輸出。而通常情況下每個block的最后一層都是BN層,用于歸一化。在這個過程中,我們將該BN層的γ參數(shù)也初始化為0,此時整個跳躍鏈接在初始階段就變成了恒等連接,這將使得網(wǎng)絡的初始深度變淺,收斂更快更穩(wěn)定。
No bias decay 不要對bias參數(shù)利用衰減系數(shù)。通常在訓練網(wǎng)絡時會對每個可學習參數(shù)設置一個權(quán)重衰減系數(shù),用于抑制過擬合。然而我們只對卷積權(quán)重和全連接層的參數(shù)進行衰減,對bias和BN層中的可學習參數(shù)不進行衰減。
所有啟發(fā)式的消融研究如表4所示。僅通過線性擴展學習率將批量大小從256個增加到1024個,導致前1名的準確率下降0.9%,而將上述3個Trick算法疊加在一起則彌補了這一差距。
4.網(wǎng)絡結(jié)構(gòu)
模型調(diào)整是對網(wǎng)絡架構(gòu)的一個小調(diào)整,比如改變特定卷積層的步長。這樣的調(diào)整通常幾乎不會改變計算復雜度,但可能會對模型精度產(chǎn)生不可忽視的影響。在本節(jié)中,我們將以ResNet為例研究模型調(diào)整的影響。
ResNet基礎結(jié)構(gòu): ResNet網(wǎng)絡由一個輸入主干、四個stage階段和一個最終輸出層組成,如圖所示。在輸入主干中,通過一個stride為2的卷積和stride為2的pooling將輸入圖降采樣四倍,并將通道增加到64個。從stage2開始每個stage都包含有stride為2的降采樣模塊,每個stage是由一個降采樣模塊和N個殘差塊構(gòu)成。降采樣模塊如圖所示,由兩條并行的通道構(gòu)成,實現(xiàn)了跳躍鏈接。殘差塊和降采樣模型的結(jié)構(gòu)一樣,只是沒有stride為2的卷積。不同的resnet網(wǎng)絡結(jié)構(gòu)上是相似的,就是每個stage中的殘差塊的個數(shù)不同。
然而殘差塊和降采樣塊在構(gòu)建的時候存在一些小問題,本文提出了三種改進策略,有效提升了resnet網(wǎng)絡的性能。分別稱為resnet-B,resnet-C,resnet-D。
ResNet-B 它改變了ResNet的降采樣塊。觀察發(fā)現(xiàn),在降采樣模塊中,pathA中的卷積忽略了輸入特征圖的四分之三,因為它使用的核尺寸為1*1,步長為2。ResNet-B在pathA中切換前兩個卷積的步長大小,如下圖所示,因此沒有信息被忽略。由于第二次卷積的核大小為3*3,所以pathA的輸出形狀保持不變。
ResNet-C 結(jié)果表明,卷積的計算成本是核的寬,高的乘積。一個7*7卷積比一個3*3卷積貴5.4倍。因此,這個微調(diào)將輸入主干中的7*7卷積替換為3個3*3卷積,如下圖所示,第一個和第二個卷積的輸出通道為32,步長為2,而最后一個卷積的輸出通道為64。
ResNet-D 受ResNet-B的啟發(fā),我們注意到降采樣塊pathB中的1*1個卷積也忽略了輸入特征圖的3/4,我們想對它進行修改,這樣就不會忽略任何信息。根據(jù)經(jīng)驗,我們發(fā)現(xiàn)在卷積之前添加一個步長為2的平均池化層,使其步長變?yōu)?,在實踐中效果良好,對計算成本的影響很小。這個調(diào)整在如下圖所示。
下表展示了上述提到的ResNet-BCD結(jié)構(gòu)堆疊在一起后的性能,我們發(fā)現(xiàn)一些小的結(jié)構(gòu)調(diào)整,能夠有1個點左右的提升。
5.訓練階段
余弦學習速率衰減 如下圖所示,展示了利用余弦學習速率和階躍衰減速率在驗證集上的性能比對。余弦衰減在開始時緩慢降低學習速度,然后在中間幾乎呈線性下降,到最后再次下降。與階躍衰減相比,余弦衰減從一開始就對學習進行衰減,但在階躍衰減使學習速率降低10倍之前,余弦衰減仍然很大,這可能會提高訓練的精度。
標簽平滑(label smooth) 這是一種抑制網(wǎng)絡過擬合現(xiàn)象的策略,如下圖所示,它主要通過軟化標簽,加入噪聲的方式,實現(xiàn)過擬合抑制。具體我之前寫過一篇文章,感興趣的同學可以點下面的鏈接跳轉(zhuǎn)。
混合訓練(Mixup Training) 這其實是一種數(shù)據(jù)增強方法,稱為mixup。在mixup中,每次我們隨機抽取兩個例子(xi, yi)和(xj, yj)。然后通過這兩個實例樣本的加權(quán)線性插值得到一個新的實例樣本,實現(xiàn)數(shù)據(jù)增強。
知識蒸餾(KD) 在知識蒸餾中,我們使用教師模型來幫助訓練當前的模型,即學生模型。教師模型通常是預訓練的模型,具有較高的準確性,因此通過模仿,學生模型可以在保持模型復雜性不變的情況下提高自身的準確性。最近這段時間正好看了幾篇知識蒸餾的文章,感興趣的同學可以點擊鏈接閱讀。
如下表所示,上述提到的各種策略在之前修改了框架和batch策略的基礎上,又都有提升。且這些策略都是不增加模型耗時的高效trick。
總結(jié)
以上是生活随笔為你收集整理的tictoc正方形网络模型_Trick | 分类网络Trick大汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: labview叠加白噪声_强化学习中Or
- 下一篇: java冒泡排序_Java冒泡排序,鸡尾