Bag of Tricks for Neural Architecture Search

【GiantPandaCV導語】相比於普通的分類網絡,基於超網的NAS更加難以訓練,會出現收斂效果較差甚至不收斂的情況。並且,基於超網的NAS還需要額外關注子網的排序一致性等問題,訓練策略的選擇也極爲重要。AutoSlim, BigNAS等文章都花費了大量篇幅來講解超網的訓練技巧。本文是CVPR2021 Workshop中的一篇短文,作者單位是de bosch,介紹了NAS中常用的trick。

1. 介紹

NAS在很多問題和benchmark上都取得了SOTA的成就,比如圖像分類、語義分割、目標檢測等領域。但是NAS往往詬病於其訓練的不穩定性,並且除了比較優化的架構,還往往添加了不透明、不公平的trick來提高性能。這樣模型性能的提高很難判斷是由於trick帶來的還是模型結構帶來的。

尤其是one-shot模型,對超參數非常敏感,並且不比隨機搜索的結果更好。

很多文章雖然涉及到了訓練的技巧,但是往往並不全面,甚至有些文章可能忽略了對訓練技巧的說明。

所以這篇短文會討論:

  • 如何提升模型訓練的穩定性。
  • 如何提升模型訓練的高效性。
  • 如何提升模型訓練的整體性能。

2. 基於梯度的NAS的穩定&訓練one-shot模型的方法

2.1 weights warm-up

Gradient-based NAS(最經典的DARTS)通常是將離散的搜索空間進行連續化,使用網絡架構參數α作爲權重來決定各個op的重要性。

通常使用的是bi-level optimization的方法進行優化。但是這種方式可能會帶來問題,即搜索空間的過早收斂。

過早收斂問題的一個通用的Trick 是:

  • 一開始只優化網絡的權重
  • 在整個搜索過程經歷一半以後再進行優化網絡架構參數。

Sampling-based NAS也會有類似的weights warm-up的方法。One-Shot(Bender)一開始訓練整個one-shot網絡模型,然後逐步提高path dropout rate。TuNAS中打開一個one-shot模型中的全部候選op,然後讓選擇全部op的概率下降到0。

還可以將兩個過程完全解耦:

  • 先對one-shot模型進行完全的訓練
  • 然後在進行搜索過程。

2.2 正則化和Loss Landscape Smoothing

通過使用強大的正則化方法來平滑loss landscape可以有效穩定網絡搜索的過程。

通常採用的方法有:

  • drop path

  • weight decay

  • data augmentation

  • robust loss functions (SAM谷歌的)

    • Stabilizing differentiable archi- tecture search via perturbation-based regularization
  • implicitly smoothing the loss function via auxiliary connections.

    • Robustly stepping out of performance collapse without indicators.

2.3 Normalization 方法

在NAS中Normalization方法的選擇非常關鍵,對於Gradient-based NAS比如DARTS來說,使用傳統的Batch Norm, Layer Norm, Instance Norm, Group Norm都存在比較大的問題。因爲BN中的可學習參數會導致網絡架構參數的放縮,這樣網絡架構參數就變得沒有意義了。因此在DARTS-Like的NAS算法中,往往禁用BN中的可學習參數。

甚至有一些文章表明BN對NAS結果產生負面影響,因此在網絡構建過程中不使用BN。Batch Norm在與one-shot NAS算法結合的時候往往會存在問題,因爲one-shot 模型往往全部保存在內存中,由於內存的限制,batch size往往比較小。

Batch Norm和基於採樣的方法結合也會存在問題,因爲歸一化統計量會隨着不同的採樣路徑而變化。在訓練one-shot nas的過程中,一開始可能會出現訓練不穩定的情況,可以以下幾種方法來克服:

  • 使用驗證階段的batch統計量(又稱BN Calibration)
  • 使用Ghost Batch Normalization
  • 使用synchronized Batch Normalization完成跨GPU的BN
  • NAS-FCOS使用了Group Normalization來取代BN。

3. NAS訓練過程加速

3.1 Proxy代理任務

常見的加速NAS訓練過程的方法就是低保真度(low fidelity),比如搜索過程中使用更少的filter,訓練更少的epoch,減少訓練樣本數量、降低圖像分辨率、減少網絡層數等方法。其中Econas研究了低保真度的影響,並評估瞭如何結合不同的代理來實現最佳速度,同時保持高度的排序一致性。

3.2 緩存功能

NAS在被用到目標檢測、語義分割等領域的時候,一般可以將網絡劃分爲幾個部分,如stem、head等。在搜索過程中,如果主幹網絡在搜索過程中是固定的,那麼其輸出就可以被提前計算出來,避免不必要的計算,從而加速搜索過程。

3.3 Sequential搜索

不同時優化網絡架構的幾個組件,而是採用順序優化的方式。最經典的當屬once for all,按照分辨率-kernel size-depth-width的順序依次優化目標。

對於目標檢測的搜索問題,首先可以搜索多尺度特徵提取器,然後搜索檢測頭。

3.4 預先優化搜索空間

借鑑人類的先驗知識進行搜索可以幫助構建搜索空間,比如搜索空間常常基於inverted residual block構建,本質上就是優化這些block中的超參數,比如kernel size,dilation rate,expansion rate等。

但是缺點也很明顯,這種預先定義的搜索空間很難發現全新的體系結構,比如transformer等。

4. 提升模型表現

4.1 在搜索過程中找到最優架構

如何在搜索過程中找到最優架構是至關重要的:

  • 由於幾乎所有的方法都採用低保真度估計,代理任務上的rank排名可能和真實任務上的rank排名並不一致。
  • 目前還沒有很好的理解權重共享機制是如何影響架構的排序。

爲了減少 co-adaptation問題,Few-Shot neural architecture Search提出了使用Sub-one-shot模型的方法,每個子模型負責覆蓋一部分的搜索空間。

對於Darts這種直接根據網絡架構參數最大值,認爲其對應的就是網絡最優架構的方法最近也有很多質疑,rethink archtecture selection in differentiable NAS 中認爲這種先驗並沒有理論依據,也未得到證實。提出了一種不同的方案來離散化網絡架構,在移除op的時候,最小化性能下降的影響。

4.2 超參數、數據增強和其他微調

網絡的性能受很多因素影響:

  • data augmentation: cutout,mixup, autoaugmentation
  • stochastic regularization: shake-shake等
  • activation functions: Search for activation functions
  • learning rate: SGDR

ICLR20一篇文章 NAS is trustratingly hard 進行了詳盡的消融實驗,證明了訓練流程甚至要比網絡的架構更加重要。

此外,搜索的超參數對one-shot NAS方法額外重要。ICLR20另一篇Nas-bench-1shot1優化了各種one-shot網絡算法的超參數,找到的解決方案可以優於黑盒NAS優化器。

後記

NAS工程實現以及優化方式與傳統普通的CNN構建方式有所不同,對工程要求更高,使用不同的Trick,不同的優化方式對超網的訓練都有比較大的影響。本文剛好收集了一批這樣的Trick,在工程實踐方面有很大的參考價值。

ps: 近期筆者在CIFAR10數據集上測評了常見的模型,同時收集了一批Trick和數據增強方法。如果有遺漏的,歡迎在Issue中補充。

https://github.com/pprp/pytorch-cifar-tricks

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