ECCV20 BigNAS無需后處理直接部署

【GiantPandaCV導(dǎo)語】這篇是Slimmable Network三部曲之后的續(xù)作,提出了Single-Stage的超網(wǎng)訓(xùn)練方法,在更大的搜索空間中,提出了很多訓(xùn)練的Trick來提升訓(xùn)練效果以及穩(wěn)定訓(xùn)練過程。

0. Info

Title: BigNAS: Scaling Up Neural Architecture Search with Big Single-Stage Models

Author: Jiahui Yu, Pengchong Jin, Hanxiao Liu, Gabriel Bender, Pieter-Jan Kindermans, Mingxing Tan, Thomas Huang, Xiaodan Song, Ruoming Pang, Quoc Le Google Brain

Link: https://arxiv.org/pdf/2003.11142v3.pdf

Date: ECCV20

Code: https://github.com/JiahuiYu/slimmable_networks

1. Motivation

目前NAS的一個(gè)非常受歡迎的研究分支是one-shot NAS,即用一個(gè)超網(wǎng)包含所有的搜索空間,子網(wǎng)絡(luò)通過共享超網(wǎng)絡(luò)的參數(shù)來加速訓(xùn)練流程。超網(wǎng)的作用可以看作一個(gè)評(píng)估器,用于通過評(píng)估子網(wǎng)在驗(yàn)證集上的準(zhǔn)確率來代表該網(wǎng)絡(luò)在測(cè)試集的效果。

One-Shot NAS在這里被劃分為Two-Stage NAS,包含了搜索階段和評(píng)估階段。

  • 在搜索階段,通過使用某些算法進(jìn)行訓(xùn)練超網(wǎng)絡(luò),找到最有希望的子網(wǎng);
  • 在評(píng)估階段,將搜索階段找到的子網(wǎng)從頭進(jìn)行訓(xùn)練,得到最終在測(cè)試集上的準(zhǔn)確率。

之所以需要評(píng)估階段是因?yàn)橐粋€(gè)實(shí)驗(yàn)現(xiàn)象 ,即通過超網(wǎng)共享得到的子網(wǎng)的準(zhǔn)確率是遠(yuǎn)低于從頭訓(xùn)練該子網(wǎng)的準(zhǔn)確率的。所以之前的大部分工作都存在評(píng)估階段,通常會(huì)在搜索階段結(jié)束以后采用重新訓(xùn)練、微調(diào)或者其他后處理發(fā)方法提升準(zhǔn)確率。

BigNAS則試圖挑戰(zhàn)以上觀點(diǎn),認(rèn)為評(píng)估階段可以不必要存在的,無需額外的重新訓(xùn)練或者后處理步驟,從超網(wǎng)中直接得到的子網(wǎng)絡(luò)就可以直接部署,也即提出了One-Stage NAS。

image

如上圖所示:普通的One-Shot模型使用訓(xùn)練好的超網(wǎng)得到對(duì)應(yīng)子網(wǎng),然后經(jīng)過retrain才可以進(jìn)行部署。

Once for all中則提出了Progressive Shrinking的方法,先訓(xùn)練大的網(wǎng)絡(luò),然后大的網(wǎng)絡(luò)作為教師網(wǎng)絡(luò)指導(dǎo)小網(wǎng)絡(luò)進(jìn)行訓(xùn)練,最終可以可以無需retrain直接部署。

BigNAS則提出使用了Single-Stage的范式,同時(shí)訓(xùn)練所有的子網(wǎng)絡(luò),并且可以無需retrain直接部署。

2. Contribution

Once for all并沒有完全拋棄后處理過程,根據(jù)OFA提供的試驗(yàn)結(jié)果,其在ImageNet上繼續(xù)finetune了25個(gè)epoch,也會(huì)帶來一定的提升。

image

BigNAS的核心貢獻(xiàn)就是:

  • 無需重新訓(xùn)練和后處理,可以訓(xùn)練一個(gè)Single-Stage模型,直接從超網(wǎng)中就可以切分子網(wǎng)用于部署。

  • 提出了一些技巧來彌補(bǔ)不同的初始化和大小模型的學(xué)習(xí)率調(diào)整的差距。

筆者個(gè)人感覺,超網(wǎng)絡(luò)作為一個(gè)過參數(shù)的網(wǎng)絡(luò),相當(dāng)于集成了成千上萬個(gè)子網(wǎng)絡(luò)進(jìn)行共享,每個(gè)子網(wǎng)絡(luò)的梯度優(yōu)化方向不同,可能會(huì)帶來沖突,這可能是weight sharing nas效果不如stand alone nas的原因。那為何BigNAS可以做到無需retrain直接部署呢?筆者覺得這與超網(wǎng)絡(luò)的模型容量有一定的關(guān)系,同時(shí)也和訓(xùn)練優(yōu)化的技巧有一定的關(guān)系。OFA得到的模型的FLOPS在230M的量級(jí),BigNAS的FLOPS則是從200M到1G都有,可以說模型容量比較大,如果能夠承載非常多的子網(wǎng),那么可能準(zhǔn)確率本身確實(shí)可以達(dá)到比較高的水平。再配合上一些探索得到的訓(xùn)練技巧,將超網(wǎng)性能提升到一個(gè)非常高的水平。廖哥認(rèn)為inplace distillation起到了比較重要的作用。鑫哥認(rèn)為超網(wǎng)模型的參數(shù)冗余度非常高,所以O(shè)FA這種類型是可行的。也歡迎添加筆者微信進(jìn)行討論~

3. Method

方法部分主要介紹了幾種訓(xùn)練技巧以及選擇模型的方式。

筆者之間訓(xùn)練過一個(gè)簡(jiǎn)單的超網(wǎng),可以說超網(wǎng)訓(xùn)練難度要比訓(xùn)練普通的網(wǎng)絡(luò)高很多倍,由于其每次是動(dòng)態(tài)采樣,可能會(huì)出現(xiàn)訓(xùn)練不穩(wěn)定,大模型過擬合小模型欠擬合的問題。

3.1 Tricks

Trick1: 三明治法則

每一步訓(xùn)練,找到最大模型和最小模型,然后無偏均勻采樣N(N=2)個(gè)中間大小的模型。訓(xùn)練以上所有模型,累積梯度,然后進(jìn)行一次更新。

最小的模型代表了整體的最低水平,最大的模型代表整體最高水平,BigNAS目標(biāo)就是同時(shí)推高lower bound和upper bound,實(shí)現(xiàn)整個(gè)超網(wǎng)性能的提升。

Trick2: Inplace Distillation

使用最大模型提供的soft label對(duì)其他小網(wǎng)絡(luò)進(jìn)行蒸餾也是一種常用的trick(OFA中就用到了這種策略)。

值得一提的是,BigNAS中的小網(wǎng)絡(luò)只使用inplace distillation進(jìn)行訓(xùn)練,并沒有直接根據(jù)label進(jìn)行訓(xùn)練。

Trick3: Initialization

訓(xùn)練超網(wǎng)時(shí)候的learning rate選取不能和普通網(wǎng)絡(luò)一致,需要將learning rate調(diào)整為原來的30%左右,這樣訓(xùn)練loss才不會(huì)爆炸。

這樣做雖然loss不會(huì)爆炸,但是也降低了最終的性能,這就需要另外一個(gè)方法來穩(wěn)定訓(xùn)練。由于本文搜索空間中是包含殘差網(wǎng)絡(luò)的,使用zero-initialize每個(gè)殘差塊的最后一個(gè)BN的縮放系數(shù)為0,不僅可以穩(wěn)定訓(xùn)練還能提升最終模型準(zhǔn)確率。

  # Zero-initialize the last BN in each residual branch,
  # so that the residual branch starts with zeros, and each residual block behaves like an identity.
  # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677
  for m in self.modules():
      if isinstance(m, MaskedBlock):
          # type: ignore[arg-type]
          nn.init.constant_(m.shortcut.convbn.bn.weight, 0)

Trick4: Convergence Behavior

使用三明治法則進(jìn)行訓(xùn)練會(huì)帶來一個(gè)問題,隨著訓(xùn)練的進(jìn)行,在小網(wǎng)絡(luò)還處于欠擬合的時(shí)候,大網(wǎng)絡(luò)就已經(jīng)過擬合了。

BigNAS提出修改學(xué)習(xí)率策略來解決這個(gè)問題,使用指數(shù)衰減策略降低學(xué)習(xí)率的時(shí)候,當(dāng)學(xué)習(xí)率達(dá)到初始設(shè)定的5%, 將學(xué)習(xí)率保持恒定。

這種做法的理由是,大模型達(dá)到精度峰值以后用恒定學(xué)習(xí)率可以梯度震蕩,緩解過擬合線性,而這個(gè)時(shí)候欠擬合的小模型可以繼續(xù)進(jìn)行訓(xùn)練。

image

Trick5: Regularization

正則化方法,也是為了解決以上問題,只給最大的子網(wǎng)施加正則,包括weight decay、Dropout等正則化方法。

Trick6: BN Calibration

BN矯正技術(shù)在one-shot nas中非常常見,single path one shot、FairNAS等工作中都使用到了這個(gè)技術(shù)。采樣得到的子網(wǎng)通常需要在訓(xùn)練集上重新計(jì)算BN的值,這樣模型性能才不會(huì)大幅降低。

3.2 Coarse-to-fine Architecture Selection

由于現(xiàn)在搜索空間中的候選網(wǎng)絡(luò)數(shù)量非常多,如何從這些候選網(wǎng)絡(luò)中選擇出合適的網(wǎng)絡(luò)呢?BigNAS提出了由粗到細(xì)的搜索方法:

  • 粗略搜索階段:找到一個(gè)大致滿足約束的粗粒度空間,

  • 細(xì)粒度搜索階段:然后再這個(gè)子空間中進(jìn)行細(xì)粒度網(wǎng)格搜索查找模型。

image

4. Experiment

  1. 搜索空間展示:使用的是MobileNetV2的搜索空間。
image
  1. 在不同量級(jí)下與其他方法進(jìn)行對(duì)比:
image
  1. 驗(yàn)證學(xué)習(xí)率設(shè)置以及初始化方法對(duì)模型訓(xùn)練的影響。
image
  1. 驗(yàn)證學(xué)習(xí)率策略的有效性
image
  1. 驗(yàn)證正則方法的有效性
image
  1. 驗(yàn)證繼續(xù)finetune是否會(huì)帶來提升?
image
  1. 驗(yàn)證從頭訓(xùn)練會(huì)不會(huì)帶來提升?
image

5. Revisiting

看這篇文章很容易把BigNAS看作是Trick的合集,不得不承認(rèn),BigNAS的效果確實(shí)很好,少不了這些Trick的功勞。后期筆者會(huì)對(duì)這些trick進(jìn)行驗(yàn)證,看看是否真的和論文中一樣work。

其中比較令人在意的一個(gè)問題就是為何這樣可以work,即直接從超網(wǎng)中采樣得到子網(wǎng)就能直接部署,無需finetune,retrain等操作。

可能的解釋有:

  • 模型容量足夠大,之前的two stage nas算法容量不足,參數(shù)冗余度不夠。

  • 之前的two-stage nas沒有充分訓(xùn)練

  • 訓(xùn)練技巧的功勞,比如Progressive Shrinking方法或者Inplace Distillation的功勞。

此外,OFA在MobileNetV3, ProxylessNAS, ResNet三種空間進(jìn)行搜索;BigNAS在MobileNet,ResNet,MNasNet進(jìn)行的搜索;這幾種空間其實(shí)差不太多,都是ResNet-like的類型,其他two-stage nas的空間,比如DARTS-like,NASNet-like搜索空間中是否可行呢?

6. Take Away

BigNAS追隨了Once for all的工作,提出了One-Stage NAS,無需retrain就直接部署的方案,使用一系列技巧來提升模型訓(xùn)練的效果,得到了非常廣泛的BigNAS族群,F(xiàn)LOPS從200M到1G都廣泛存在。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容