輕量級網絡 Slimmable Neural Networks

Slimmable Neural Networks

論文地址:https://arxiv.org/abs/1812.08928
Github: https://github.com/JiahuiYu/slimmable_networks
OpenReviews:https://openreview.net/forum?id=H1gMCsAqY7

Motivation

移動端的應用對算法運行效率有較高要求,但不同的移動端設備計算能力差異很大,即使是同一設備計算資源也會變化(例如運行很多後臺程序,省電模式等情況)。現有的輕量級網絡結構,例如MobileNet、ShuffleNet等,通過width multiplier來控制模型複雜度,訓練得到多種寬度的模型,並針對不同設備進行部署。但是作者認爲此種方式欠缺靈活性,不能在運行時對模型進行調整,所以提出了一種新的網絡訓練方式。

該方法能夠訓練一個網絡模型,並在運行時根據精度和速度要求來動態調整網絡寬度,可以理解爲不同規模的模型共享一組參數。此種方式訓練得到的模型,稱爲Slimmable Neural Network,在不同寬度設置的情況下能夠與單獨訓練的模型具有差不多的分類精度,且在物體檢測、實例分割、人體關鍵點檢測等任務上具有更高的性能。
在這裏插入圖片描述

Slimmable Neural Networks

網絡結構

主幹網絡可以採用現有的網絡結構,例如MobileNet v1\v2,ShuffleNet,ResNet等;然後根據需求設置不同的子網絡寬度,例如[0.25, 0.5, 0.75, 1.0];最後聯合訓練所有的子網絡。

SWITCHABLE BATCH NORMALIZATION

在實驗中,作者發現訓練過程很穩定,但是測試集的準確率很差,ImageNet上的Top-1準確率大約只有0.1%。通過分析,作者認爲這是由於BN層在模型訓練和測試時的統計量差異導致的。

BN層通過對特徵進行歸一化來保持訓練過程中梯度的穩定。在訓練時,BN層使用當前Batch的均值和方差進行歸一化,並對數據集總體的均值和方差進行估計;在測試時,使用訓練中估計的總體均值和方差進行歸一化。

回到slimmable neural networks中,雖然不同子網絡共享同一組參數,但是由於輸入的通道數會改變,導致輸出特徵圖的均值和方差也會變化,並通過滑動平均的方式加權到總體的均值和方差估計中。因此,在測試時,BN層使用的均值和方差相當於是單獨每個子網絡總體均值和方差估計的加權結果,因此和訓練時的使用的均值和方差不一致。

爲了解決這個問題,作者提出了switchable batch normalization,即不同子網絡使用獨立的BN層。

Q: 使用Instance Normalization應該也可以,但是不知道對於測試結果有什麼影響?可能會變差??

訓練算法

爲了使slimmable neural networks具有較高的整體準確率,訓練算法累加不同子網絡的梯度並更新參數,進行聯合優化。
訓練算法

實驗結果

Switchable Batch Normalization

圖中右側爲驗證集測試誤差,小圖表示不使用Switchable batch normalization時的情況。從結果可以看出,使用Switchable batch normalization能夠有效地結果訓練和測試時的統計不一致問題。
在這裏插入圖片描述

ImageNet分類

ImageNet分類結果,一部分slimmable neural networks能夠提升分類準確率,一部分模型精確率下降。
在這裏插入圖片描述

物體檢測、實例分割、特徵點檢測

使用ImageNet上訓練的模型進行初始化,可以發現在這三個任務上都取得了提升,可能來自於兩點:

  1. 更好的初始化特徵。slimmable neural network使用完整的(1.0x)網絡參數進行初始化,具有單獨訓練時更好的預訓練特徵。對於小網絡而言,相當於隱式的知識蒸餾(Knowledge Distillation)過程。
  2. 更多的監督信號。不同複雜度的子網絡聯合進行優化,對不同的子網絡都能提升(甚至連1.0x時也能提升)。
    在這裏插入圖片描述

總結

  • 提出了一種有效的根據計算資源調整模型複雜度的方法。
  • slimmable neural network竟然對1.0x的模型也能帶來提升,說明聯合訓練子網絡的方式,能使模型更好??
  • 模型需要設置不同的寬度比例,能否改進爲任意寬度??
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章