Bag of Tricks for Neural Architecture Search
【GiantPandaCV導(dǎo)語】
相比于普通的分類網(wǎng)絡(luò),基于超網(wǎng)的NAS更加難以訓(xùn)練,會(huì)出現(xiàn)收斂效果較差甚至不收斂的情況。并且,基于超網(wǎng)的NAS還需要額外關(guān)注子網(wǎng)的排序一致性等問題,訓(xùn)練策略的選擇也極為重要。AutoSlim, BigNAS等文章都花費(fèi)了大量篇幅來講解超網(wǎng)的訓(xùn)練技巧。本文是CVPR2021 Workshop中的一篇短文,介紹了NAS中常用的Tricks。

1. 介紹
NAS在很多問題和benchmark上都取得了SOTA的成就,比如圖像分類、語義分割、目標(biāo)檢測(cè)等領(lǐng)域。但是NAS往往詬病于其訓(xùn)練的不穩(wěn)定性,并且除了比較優(yōu)化的架構(gòu),還往往添加了不透明、不公平的trick來提高性能。這樣模型性能的提高很難判斷是由于trick帶來的還是模型結(jié)構(gòu)帶來的。
尤其是one-shot模型,對(duì)超參數(shù)非常敏感,并且不比隨機(jī)搜索的結(jié)果更好。
很多文章雖然涉及到了訓(xùn)練的技巧,但是往往并不全面,甚至有些文章可能忽略了對(duì)訓(xùn)練技巧的說明。
所以這篇短文會(huì)討論:
如何提升模型訓(xùn)練的穩(wěn)定性。 如何提升模型訓(xùn)練的高效性。 如何提升模型訓(xùn)練的整體性能。
2. 基于梯度的NAS的穩(wěn)定&訓(xùn)練one-shot模型的方法
2.1 weights warm-up
Gradient-based NAS(最經(jīng)典的DARTS)通常是將離散的搜索空間進(jìn)行連續(xù)化,使用網(wǎng)絡(luò)架構(gòu)參數(shù)α作為權(quán)重來決定各個(gè)op的重要性。
通常使用的是bi-level optimization的方法進(jìn)行優(yōu)化。但是這種方式可能會(huì)帶來問題,即搜索空間的過早收斂。
過早收斂問題的一個(gè)通用的Trick 是:
一開始只優(yōu)化網(wǎng)絡(luò)的權(quán)重 在整個(gè)搜索過程經(jīng)歷一半以后再進(jìn)行優(yōu)化網(wǎng)絡(luò)架構(gòu)參數(shù)。
Sampling-based NAS也會(huì)有類似的weights warm-up的方法。One-Shot(Bender)一開始訓(xùn)練整個(gè)one-shot網(wǎng)絡(luò)模型,然后逐步提高path dropout rate。TuNAS中打開一個(gè)one-shot模型中的全部候選op,然后讓選擇全部op的概率下降到0。
還可以將兩個(gè)過程完全解耦:
先對(duì)one-shot模型進(jìn)行完全的訓(xùn)練 然后在進(jìn)行搜索過程。
2.2 正則化和Loss Landscape Smoothing
通過使用強(qiáng)大的正則化方法來平滑loss landscape可以有效穩(wěn)定網(wǎng)絡(luò)搜索的過程。
通常采用的方法有:
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方法的選擇非常關(guān)鍵,對(duì)于Gradient-based NAS比如DARTS來說,使用傳統(tǒng)的Batch Norm, Layer Norm, Instance Norm, Group Norm都存在比較大的問題。因?yàn)锽N中的可學(xué)習(xí)參數(shù)會(huì)導(dǎo)致網(wǎng)絡(luò)架構(gòu)參數(shù)的放縮,這樣網(wǎng)絡(luò)架構(gòu)參數(shù)就變得沒有意義了。因此在DARTS-Like的NAS算法中,往往禁用BN中的可學(xué)習(xí)參數(shù)。
甚至有一些文章表明BN對(duì)NAS結(jié)果產(chǎn)生負(fù)面影響,因此在網(wǎng)絡(luò)構(gòu)建過程中不使用BN。Batch Norm在與one-shot NAS算法結(jié)合的時(shí)候往往會(huì)存在問題,因?yàn)閛ne-shot 模型往往全部保存在內(nèi)存中,由于內(nèi)存的限制,batch size往往比較小。
Batch Norm和基于采樣的方法結(jié)合也會(huì)存在問題,因?yàn)闅w一化統(tǒng)計(jì)量會(huì)隨著不同的采樣路徑而變化。在訓(xùn)練one-shot nas的過程中,一開始可能會(huì)出現(xiàn)訓(xùn)練不穩(wěn)定的情況,可以以下幾種方法來克服:
使用驗(yàn)證階段的batch統(tǒng)計(jì)量(又稱BN Calibration) 使用Ghost Batch Normalization 使用synchronized Batch Normalization完成跨GPU的BN NAS-FCOS使用了Group Normalization來取代BN。
3. NAS訓(xùn)練過程加速
3.1 Proxy代理任務(wù)
常見的加速NAS訓(xùn)練過程的方法就是低保真度(low fidelity),比如搜索過程中使用更少的filter,訓(xùn)練更少的epoch,減少訓(xùn)練樣本數(shù)量、降低圖像分辨率、減少網(wǎng)絡(luò)層數(shù)等方法。其中Econas研究了低保真度的影響,并評(píng)估了如何結(jié)合不同的代理來實(shí)現(xiàn)最佳速度,同時(shí)保持高度的排序一致性。
3.2 緩存功能
NAS在被用到目標(biāo)檢測(cè)、語義分割等領(lǐng)域的時(shí)候,一般可以將網(wǎng)絡(luò)劃分為幾個(gè)部分,如stem、head等。在搜索過程中,如果主干網(wǎng)絡(luò)在搜索過程中是固定的,那么其輸出就可以被提前計(jì)算出來,避免不必要的計(jì)算,從而加速搜索過程。
3.3 Sequential搜索
不同時(shí)優(yōu)化網(wǎng)絡(luò)架構(gòu)的幾個(gè)組件,而是采用順序優(yōu)化的方式。最經(jīng)典的當(dāng)屬once for all,按照分辨率-kernel size-depth-width的順序依次優(yōu)化目標(biāo)。
對(duì)于目標(biāo)檢測(cè)的搜索問題,首先可以搜索多尺度特征提取器,然后搜索檢測(cè)頭。
3.4 預(yù)先優(yōu)化搜索空間
借鑒人類的先驗(yàn)知識(shí)進(jìn)行搜索可以幫助構(gòu)建搜索空間,比如搜索空間常?;趇nverted residual block構(gòu)建,本質(zhì)上就是優(yōu)化這些block中的超參數(shù),比如kernel size,dilation rate,expansion rate等。
但是缺點(diǎn)也很明顯,這種預(yù)先定義的搜索空間很難發(fā)現(xiàn)全新的體系結(jié)構(gòu),比如transformer等。
4. 提升模型表現(xiàn)
4.1 在搜索過程中找到最優(yōu)架構(gòu)
如何在搜索過程中找到最優(yōu)架構(gòu)是至關(guān)重要的:
由于幾乎所有的方法都采用低保真度估計(jì),代理任務(wù)上的rank排名可能和真實(shí)任務(wù)上的rank排名并不一致。 目前還沒有很好的理解權(quán)重共享機(jī)制是如何影響架構(gòu)的排序。
為了減少 co-adaptation問題,F(xiàn)ew-Shot neural architecture Search提出了使用Sub-one-shot模型的方法,每個(gè)子模型負(fù)責(zé)覆蓋一部分的搜索空間。
對(duì)于Darts這種直接根據(jù)網(wǎng)絡(luò)架構(gòu)參數(shù)最大值,認(rèn)為其對(duì)應(yīng)的就是網(wǎng)絡(luò)最優(yōu)架構(gòu)的方法最近也有很多質(zhì)疑,rethink archtecture selection in differentiable NAS 中認(rèn)為這種先驗(yàn)并沒有理論依據(jù),也未得到證實(shí)。提出了一種不同的方案來離散化網(wǎng)絡(luò)架構(gòu),在移除op的時(shí)候,最小化性能下降的影響。
4.2 超參數(shù)、數(shù)據(jù)增強(qiáng)和其他微調(diào)
網(wǎng)絡(luò)的性能受很多因素影響:
data augmentation: cutout,mixup, autoaugmentation stochastic regularization: shake-shake等 activation functions: Search for activation functions learning rate: SGDR
ICLR20一篇文章 NAS is trustratingly hard 進(jìn)行了詳盡的消融實(shí)驗(yàn),證明了訓(xùn)練流程甚至要比網(wǎng)絡(luò)的架構(gòu)更加重要。
此外,搜索的超參數(shù)對(duì)one-shot NAS方法額外重要。ICLR20另一篇Nas-bench-1shot1優(yōu)化了各種one-shot網(wǎng)絡(luò)算法的超參數(shù),找到的解決方案可以優(yōu)于黑盒NAS優(yōu)化器。
后記
NAS工程實(shí)現(xiàn)以及優(yōu)化方式與傳統(tǒng)普通的CNN構(gòu)建方式有所不同,對(duì)工程要求更高,使用不同的Trick,不同的優(yōu)化方式對(duì)超網(wǎng)的訓(xùn)練都有比較大的影響。本文剛好收集了一批這樣的Trick,在工程實(shí)踐方面有很大的參考價(jià)值。

ps: 近期筆者在CIFAR10數(shù)據(jù)集上測(cè)評(píng)了常見的模型,同時(shí)收集了一批Trick和數(shù)據(jù)增強(qiáng)方法。如果有遺漏的,歡迎在Issue中補(bǔ)充。
項(xiàng)目鏈接:https://github.com/pprp/pytorch-cifar-tricks


- End -

