Auto-Deeplab:從SOTA模型開始學習神經架構搜索

寫在文章前面的一點小感想:

筆者是北京某高校的在讀研究生。研一至今一直在從事着名爲科研的本科實驗報告撰寫工作,深感自己與時代脫節嚴重。恰逢導師有意,遂將元學習與神經架構搜索作爲自己的研究方向,但卻一直沒有邁出那個第一步。因爲覺得自己如此虛度時光會最終廢掉,因此在此立一個Flag:無論多忙,每天精讀一篇相關領域文章並分享於此。從我個人而言,我的科研方法是側重整體感知而忽視細節的。也即,在我的文章中會主要介紹我從文獻中讀出的思想,因此如有不足之處還請各位仔細參照原文。

最後,科研之路,一人走實在是缺少了些動力和方向。希望能借文章的契機結識五湖四海的朋友們,在這個領域共同取得成果!

 

囉嗦完了,下面開始進入正題!

Auto-Deeplab:神經架構搜索的又一里程碑

從NasNet,MetaQNN到Auto-Deeplab,神經架構搜索技術在短短兩年內已經取得了如此豐碩的成果,使人不禁對AutoDL的未來心懷嚮往。

與前輩們相比,Auto-Deeplab受到如此多關注,其原因除了出自李飛飛實驗室之手外,也得益於其驚人的效果:

可以看到,除了亂入的DARTS外,幾乎所有神經架構搜索算法都需要成百上千的GPU小時,這種繁重的計算量直接限制了AutoDL針對客戶任務進行私人訂製的可能性。而Auto-Deeplab做到的,就是在Cityscapes數據集(原圖2048x1024)縮放一倍後(縮放後1024x512)的321x321大小Crop上,只使用3天的GPU小時就實現了SOTA效果(CIFAR-10圖片僅32x32),並且未使用其他一些方法中小圖片搜索架構,使用到大圖片的trick。更更重要的是,人家還開放代碼!這對於想要入門這一領域的新童鞋是何種恩賜我就不細說了…

廢話少說,開始擼文:

架構

從上面的表裏可以看出,與前輩相比,Auto-DeepLab最大的貢獻,就是引入了Network層級的搜索。

這裏簡要介紹下Cell與Network。我們對網絡的設計思想通常都是從從微觀到宏觀的:先選取網絡中的小塊(Block)——各類卷積/池化/歸一化層,再將小塊以一定方式連接構成小團(Cell)——例如ResNet中的BottleNeck,最後再通過重複小團結構構建網絡(Network)。從效果上看,Inception系列和ResNet系列都通過這種方式取得了很大的成功。

因此,雖然Google在提出NAS時最先使用的是Block級別的搜索,他們在NASNet中很快轉變爲了對Cell的搜索,因爲這種方法既節約時間又高效。NASNet最終使用的固定Network,是這樣的:

固定使用普通Cell-下采樣Cell的循環架構,直接將搜索到的Cell無腦部署到每個格子裏去。

Auto-DeepLab直接沿用了NASNet中的Cell搜索方法。而在此基礎上,他們提出的Network級搜索方法,是這樣的:

神經網絡架構大部分最多下采樣32倍,也即對於ImageNet這種224x224的圖片,最終卷積獲得的核心最小是224/32=7x7的特徵向量。因此,我完全沒必要規定走幾步下采樣一次嘛——我可以搜出來在第幾個Cell後使用下采樣!這就構成了上圖的搜索方法,這種方法在原文中形象的被稱爲trellis-like,走格子方法。對於圖像識別任務,我們只需要往下走,即從L層中選不多於3個添加下采樣即可(原文方法中左上角1->4倍下采樣是固定進行的)。而對於語義分割任務,只需要從左至右選擇能走通的路徑即可。

真的……很簡單,相比起Cell搜索時“選誰連”-“和誰連”的nxn複雜度麻煩方法,這裏的Network直接將搜索空間限定在了非常小的範圍內。

現在比較火的搜索方法通常是基於強化學習或者基於遺傳算法的。而Auto-DeepLab選擇了師承自DARTS的可微分形式的NAS方法:Continuous Relaxation。概括而言,這種方法將離散的神經架構轉換爲了一個不同架構的Softmax概率分佈,在每個節點參與計算的是其與前面節點相互連接的概率,從而使整個網絡可以進行梯度下降。個人覺得Auto-DeepLab在這裏講解的不夠清楚,推薦去看下DARTS的原文或者我寫的介紹文

Cell內的張量長度相同可以直接相加,但由於Resolution不同,Cell間的向量不能如此操作。爲此,Auto-DeepLab使用了另一個SoftMax表示網絡間的連接:

並在優化階段通過DARTS中的一階近似,繼續使用兩步迭代法:

至此,一篇CVPR出爐。

 

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