CVPR2019: Bag of Tricks for Image Classification with Convolutional Neural Networks

概況

自2012年AlexNet提出以後涌現了大量的深度神經網絡結構,例如VGG、Inception 及ResNet等等,這些不同網絡結構之間的性能差異不僅僅是由網絡結構的差異造成的,其它很多小的trick,比如stride size、學習率等等都會對結果帶來很大的影響。爲了綜合評估各種手段對於訓練結果的影響程度,本文對多種訓練技巧進行了評估,並提出了一系列可以提升深度神經網絡訓練效果的trick。

論文涉及到以下幾個方面:

  • 對batch大小的討論
  • 對參數精度(32或16位)的討論
  • 針對ResNet結構的微小調整
  • 訓練精度提升的手段:
    • Learning rate Decay
    • Label smoothing
    • Knowledge distillation

Baseline

在baseline中採用的數據處理方式及優化手段等:

  • ResNet 圖像轉換爲32位浮點數格式,值域[0,255]
  • 隨機裁剪區域,比例隨機選取範圍[3/4, 4/3]. 區域大小隨機採取範圍[8%,100%]
  • resize裁剪的區域至224×224→以0.5的概率隨機水平翻轉
  • 色調、飽和度和明亮度隨機調整比例範圍[0.6,1.4]
  • 增加符合正太分佈N(0,0.1)的PCA噪聲
  • RGB通道減去[123.68,116.779,103.939], 除以[58.393,57.12,57.375].
  • 初始化:採用Xavier algorithm. 偏置初始值全部設置爲0.
  • 優化方式:Nesterov Accelerated Gradient (NAG) desent
  • 120 epoch, 8張Nvidia V100 GPU, batch size 256.
  • Learning rate is initialized to 0.1 and divided by 10 at the 30th, 60th, and 90th epochs.

Batch size

在epoch一定的情況下,大的batch可能會降低模型的訓練精度。這一問題的解決方案有:

  • 線性改變學習率的初始值。大的batch會降低隨機梯度下降的方差,因此有學者提出了通過線性增加學習率的方式改善大batch帶來的不良影響。具體如下,如本文中baseline中的batch大小爲256,如果將batch大小設置爲一個更大的數字b,那麼初始的學習率應該乘以b/256。【這種方式在文中實驗中表現最差,後三者與小batch表現相當】
  • 學習率預熱策略(learning rate warmup)。由於在初始時刻所有的參數都是隨機設定的,參數值與最終的結果相差甚遠,如果一開始就採用很大的學習率會造成學習的不穩定。在學習率預熱策略中,將學習率從一個很小的值隨着訓練的進行增大到預期初始學習率的大小。具體入戲,如果前5個epoch是用於預熱的epoch,預期的初始學習率爲0.1,那麼在第i個預熱epoch的學習率爲i*0.1/5
  • 0初始化γ.在ResNet中,一個block的輸出包含上一層的輸出和自己block的輸出,如果將自己本block的輸出權重設置爲零,可以在開始的時候減少層數
  • 無偏置衰減。偏置的L2 正則化是爲了避免過擬合,除了在卷積層和全連接層使用以外,其它地方無需添加正則。

參數精度

當前主流的計算框架,參數的運算都是32位浮點數的,而一些新的計算設備,如Nvidia V100 提供了在16位浮點數情況下更高的計算效率。相比與32位浮點數,利用16位浮點數進行計算可以使訓練速度增大2-3倍。但由此也會帶來對訓練效果的負面影響,Micikevicius 等人提出可以通過同時保留16位參數和32位參數,在計算梯度時採用16位數據,而在更新參數時採用32位參數的形式避免該問題。另外,對loss乘上一個係數也可以在一定程度上避免該問題。【實驗發現從32位轉到16位對訓練結果並無顯著影響】

模型調整(Model Tweaks)

對網絡結構的細微調整,比如更改特定卷基層的的stride,可能會對模型的精度帶了不可忽略的影響,在本文中以ResNet爲例探究了微調網絡結構對模型的影響。
%



ResNet 50 網絡結構示意圖

ResNet 的幾種變形:

ResNet-B: 最初來自與Torch中的ResNet. 在原始的ResNet的blocks中,Path A的第一次層卷積採用的是1×1,stride=2的卷積操作,因此會遺漏3/4的輸入feature map, 在ResNet-B更改了Path A的前兩層卷積參數。
ResNet-C: 最初來自於Inception-v2. 研究發現卷積的計算量與卷積核的長或者寬呈現二次關係。比如一個7×7的卷積核的計算量是3×3卷積覈計算量的5.4倍。因此在該結構中,input stem的7×7卷積核被換成了3×3卷積核。
ResNet-D: 該結構由本文提出。受ResNet-B的啓發,在ResNet blocks的path B上同樣存在feature map 被遺漏的問題,因此文中提出瞭如上圖C新ResNet結構。

上述幾中不同模型的表現如下:

ResNet-D得到的精度最好,相比於ResNet, ResNet-D訓練速度降低3%

Training refinements

學習率衰減

文中對比了兩種學習率衰減策略:

  • Step: decay: 每隔一定的epoch,比如30epoch,學習率降低至0.1
  • Cosine decay: 假設總共的batch數量爲T,那麼第t個batch的學習率爲:

兩種衰減策略的表現:

Label Smoothing

在分類訓練中,通過softmax獲得標籤的概率分佈qi, 然後利用通過真實標籤概率pi, 計算交叉損失熵:

當i=真實標籤時,pi = 1, 否則爲0
如果直接採用softmax獲取的概率分佈容易造成過擬合,因此在Inception-v2中首次提出了label smoothing策略,對qi進行了如下調整:

Knowlege Distillation

利用一個pre-train的高精度網絡充當teacher, 對待訓練的student網絡添加監督信息:

其中第一項爲普通的分類交叉損失,第二項是待訓練網絡與teacher網絡輸出的交叉損失熵。

Mixup Training

一種數據增強的手段。每次隨機選取兩個樣例(xi,yi)和(xj,yj),通過線性操作獲得新的樣例:

在mixup training中僅採用新生成的樣例。

實驗

實驗發現cosine decay, label smoothing and mixup 對ResNet, Inception V3 and MobileNet 都有穩定的提升,而Distillation只對於ResNet有效,而對於Inception-V3和MobileNet無效,這可能與採用的teacher net的類型有關,文中採用的是ResNet-152.

隨後作者將提升的訓練結果用到了目標檢測和語義分割兩個任務中,證明了這些提升手段有很好的遷移能力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章