為方便說明,如無特殊說明后文將PDARTS來指代該篇論文。閱讀本文之前需要對DARTS有一定了解。,如果還不太清楚DARTS可以閱讀這篇文章。
Motivation
進來有很多種NAS技術相繼提出,主要有基於強化學習的,基於進化算法的,還有基於梯度下降的,不同算法有不同優缺點。本文的PDARTS就是基於梯度下降的,其實看名字也能知道它其實是對DARTS的改進算法。
DARTS算法是先在proxy dataset(如CIFAR10)上搜索cell結構,之后通過重復堆疊找到的這個cell得到最終的網絡結構。直白一點就是在CIFAR10數據集上搜索一個深度為8的網絡,而在ImageNet上就通過堆疊得到一個深度為20的網絡,然后對這個更深的網絡訓練。
上述這一過程有一個很明顯的缺點就是DARTS在proxy dataset上搜到的結構可能在target dataset上不是最好的,甚至表現較差。文中把這個叫做depth gap。
為了解決前面提到的depth gap問題,PDARTS提出了一種漸進式搜索的方法。
和其他基於DARTS算法的區別
- PNAS:PNAS是針對cell內部的operation做漸進式搜索,而PDARTS是對layer和cell中的operation做漸進式搜索
- SNAS:SNAS是為了解決訓練和驗證之間的bias,方法是將每條edge的operation權重為one-hot形式。PDARTS則是通過逐漸增加網絡層數的方式來消除這個bias。
- ProxylessNAS:通過binary masks來選擇operation進而減少GPU顯存使用,而且直接在target 數據集上搜索網絡,但是這樣一來對於搜索空間的設置有了更高的要求。PDARTS相比而言搜索時間更快。
算法介紹
PDARTS提出在搜索過程中逐漸增加網絡層數,隨之而來的問題以及解決辦法分別是:
- 計算量增大:當層數增加后,計算量也會成倍增加。因此為了解決這個問題,PDARTS提出了search space approximation策略,即每當層數增加時就會相應地減少候選操作的數量。
- 穩定性降低:在搜更深的網絡時,skip-connection會占據主導地位,這對模型穩定性有較大影響。解決辦法是對搜索空間做正則化約束(search space regularization):
- (1) operation-level Dropout,來避免skip-connection占主導地位
- (2) 在evaluation過程中控制skip-connection的出現次數
示意圖如下,PDARTS搜索分成了3個階段:
最開始是initial stage,網絡由5個cell組成,每個cell中節點之間的候選操作有5個。對initial stage搜索若干個epoch之后進入intermediate stage,可以看到這個階段的層數增加了6層,但是候選操作的數量減少了,這樣做是為了減少GPU顯存使用量,被刪除的操作是前一階段概率最低的操作。最后的final stage同理不再贅述。
Stage | #Cell | # Operation Space size |
---|---|---|
Stage 1 | 5 | 5 |
Stage 2 | 11 | 4 |
Stage 3 | 17 | 2 |
實驗結果
下圖展示了PDARTS在不同階段搜索到的cell的結構,以及DARTS算法使用second-order找到的cell結構。可以看到PDARTS在后面會更加傾向於搜索那些deep connection的cell,而DARTS則是找到shallow connection的cell結構。
下面是具體的實驗結果
- CIFAR10&CIFAR100實驗結果
- ImageNet實驗結果
思考
最近讀了不少NAS的論文,一直有個困惑就是他們所說的搜索時間到底是怎么算的,因為這些算法的搜索epoch數量是各不相同的,比如說A算法設置的搜索epoch數量是100,而B算法只搜了5個epoch,此時B算法就會說它的搜索時間更短。但是我覺得這不太能說服我,因為有可能A算法在第5個epoch的時候也找到了不錯的cell結構。另外我一直在想不同的網絡結構最終的效果真的會有那么大差別嗎?如果的確有差別那么不同的搜索策略則有了意義,反之如果每個cell結構最終性能都差不多,那么就還不如隨機初始化一個網絡,然后直接使用這個網絡。
可能,這就是玄學吧(* ̄︶ ̄)。。。