論文閱讀20.06-第二週

FBNetV3: Joint Architecture-Recipe Search using Neural Acquisition Function

這篇文章的出發點在於目前的NAS都只搜了結構而對訓練時的其他參數(輸入分辨率、優化算法、學習率、ema等等),那麼本文的最終目的就是要聯合搜索網絡結構和訓練超參數。問題的難點在於訓練超參數是不可導的,且其形式與結構參數是不一樣的,需要找到一種方式來回避基於採樣-嘗試的模式的搜索。文章給出的答案是性能預測器

整個搜索過程分爲兩個階段:

  • 粗探索階段:同時探索搜索域+訓練性能預測器;這爲下一階段提供兩樣東西:訓練好的預測器, 和一個不賴的初始種羣
  • 細開發階段:用性能預測器進行快速的進化算法搜索

首先先說一下預測器,我覺得他想解決的應該是沒有超網絡的情況下,怎麼進行快速評測的問題。他用一個encoder和兩個head,一個預測性能的head和一個預測統計量(flops/params)的head。後者只是用來爲encoder進行一個預訓練。這個設計感覺應該是調出來的,比如可能直接學accuracy學不出來,然後發現這樣初始化有用。Flops和Params都是可以簡單地計算出來的。預測器的訓練過程也比較複雜,還分爲了兩個階段,用的是Huber Loss,感覺這裏應該作者試了很久吧。

那麼第一階段的重點就是怎麼樣採樣訓練預測器的樣本,解決方案是兩步交替進行:用當前預測器去選擇一個batch的樣本,然後再用目前爲止所有的batch去訓練預測器。這個過程直到真實與預測的排序相關係數達到一定閾值時停止,是一種早停策略。第一階段還有一些不明確的點,比如採樣樣本時是否重複之類的,這些是需要看代碼才能確定的。

第二階段就是一個普通的進化算法,他只提到了變異而沒有提到交叉。停止條件也不是固定epoch而是提升飽和。作者特意提了預測器可重複使用搜多個不同的模型,這是目前所有將超網絡訓練與搜索割裂的算法都具有的優點。

FBNetv3
在實驗部分,作者首先嚐試了爲一個給定的網絡去搜索訓練超參數,然後再去進行網絡結構和訓練超參的聯合搜索。但是對比的時候卻去和baseline的ResNet50、152對比,這不太好說明到底是訓練算法的優秀還是AutoTrain的優秀,能說明搜索算法優秀的裕則是交換訓練超參使性能下降的那一段;實驗中指出了EMA模型的有效性,包括在COCO上也進行了驗證。

HourNAS: Extremely Fast Neural Architecture Search Through an Hourglass Lens

文章的中心在於,一個網絡是由許多的block堆起來的,但是不是所有的block都一樣重要,如果我們找出哪些block更重要,然後優先不帶限制地搜索這些block,其他的按照資源限制去分配不是挺好嗎?

那麼第一個問題是:爲什麼有些層會比其他層更重要?作者先從ResNet的模型集成角度來說,任意一個帶skip連接的block,都只參與到了一半的前向路徑中去而像第一個卷積層、最後FC層,還有下采樣模塊這些幾乎參與所有路徑的block,纔是重要block。作者在不同層分別進行了按概率置0的操作,有些層的影響大,而有些層的影響小。

那麼在此基礎上把NAS當作一個資源分配問題,考慮一個兩階段搜索算法。第一階段固定其他block而只搜索vital blocks,不帶有任何的資源限制;第二階段是去在滿足條件的前提下去搜索符合限制的nonvital blocks。兩次搜索均採用類似GDAS,用Gumbel Max採樣(比Gumbel Softmax快),一邊按概率採樣去訓練超網絡裏面的參數,一邊學習超網絡採樣的結構參數。

在第二階段的搜索中,爲了在GDAS的這種方法中引入資源約束,HourNAS加上了space proposal這個概念。大意是,先提取出幾個滿足資源約束的subspace,然後去學習從每個subspace中採樣子結構的概率。但是一個proposal到底意味着什麼?是一種概率分佈還是一個具體的網絡,如果是概率分佈的話這個概率是否也一起優化,如果是具體某個網絡的話那不就等於是從8個網絡中找一個最好的?
HourNAS算法結構
HourNAS最優的一點在於快,把一個大搜索域拆成了兩個子域的直積,並用貪心的方法先後搜索,在ImageNet上居然只需要3GPU hours。

Hit-Detector: Hierarchical Trinity Architecture Search for Object Detection

這篇文章嘗試去聯合搜索一個檢測器的各個部件,backbone、FPN和head,他沒有提到RPN,大概是因爲RPN本身就已經很輕量了?

文章的起點是目前針對檢測器的搜索算法都是單獨對FPN、或者是單獨對backbone的搜索,但是實驗發現,DetNAS+NAS-FPN模型性能反而還下降了,這個實驗突出說明了聯合搜索的重要性。不過如果只是聯合搜索也沒有什麼新意,搜索算法用的是集成了flops優化目標的Darts,這篇文章的亮點在於如何處理不同模塊的不同搜索域。
超大的搜索域
文章的做法是先設計了一個超大的搜索域,大概是從FBNet上面變化而來,一層可選的Block有32種,在此基礎上先用層數少一半的小網絡進行一段類似darts的訓練,不過結構參數的優化目標上增加稀疏正則項。這樣子經過一段時間地訓練之後,就可以在三個搜索域中分別進行排序保留前8的操作,得到三個搜索域各自偏好的操作。
minαf(α)+μmini(l=1Lαl,i2)\min_\alpha f(\alpha)+\mu\min_i(\sqrt{\sum_{l=1}^L\alpha_{l,i}^2})
實驗結果是相當的優秀,不僅和手工模型對比也和NAS算法搜索出來的模型進行了對比,作者也證明了如果都用同一個搜索域效果會下降。
HitDetector實驗結果

FasterSeg: Searching for Faster Real-time Semantic Segmentation

一篇針對語義分割的NAS文章,目標是搜索一個極快的、不太損失精度的網絡結構。主要貢獻點有三個:

借鑑經驗的多分辨率分支搜索域設計

在研究者設計的網絡結構中,許多都是多分辨率分支的網絡,因此用傳統的序列網絡結構肯定不合適。

文章假設我們用N層,每一層都有多個不同下采樣率s的節點。每一個節點可以從上一層的s或是s/2節點獲得輸入,並生成s或是2s的輸出。
因此假設有一個單(多)分支的網絡,這個問題可以變成

– (每個分支)我們應該在第幾層下采樣第一次、第幾層下采樣第二次(β\beta)
– 對於路徑上的每個節點,應該用哪種操作(α\alpha)
– 每個節點的expension rate是多少(γ\gamma)

搜索算法類似於GDAS的那種gumbel softmax,然後不同擴展比用一個超核來實現。訓練完成後α,γ\alpha,\gamma直接取max,β\beta的話取向下傳遞最大的那一層。

考慮操作、分辨率、通道擴充比的更細粒度的延時正則

文章指出在添加網絡延時的約束的時候,網絡自己會傾向於用skip而不是去學出低擴展比。這是因爲時間對於操作的敏感性比對於其他參數要高,所以會優先選skip以減少latency懲罰。我個人覺得這個解釋還是要存疑的,因爲解釋不了在darts這些沒有latency懲罰時的collapse。

但是從結果上來說,把latency懲罰拆分成由β\betaα\alphaγ\gamma引起的三個部分,並給本來時間不敏感的下采樣率和擴展比以更高的權值,確實解決了collapse的問題。
collapse問題的解決

師生蒸餾的聯合搜索

在同一個超網絡中搜兩個結構T和S,兩個結構在超網絡中迭代訓練。其中T結構不搜擴展比參數(γ\gamma)而選擇直接取最大值。搜出來的大網絡用結果KL散度給小網絡做蒸餾。

從實驗結果上來說,網絡在CS、CamVid、BDD上都打敗了其他方法,但是對比時有一些不一致,用了蒸餾之後的網絡去和其他人沒有蒸餾的去對比,擴大了其優勢。
CS上的結果

Search for Better Students to Learn Distilled Knowledge

這也是一篇用NAS做蒸餾的文章。其目的在於,如何在NAS搜索的過程中,發現哪個模型加上蒸餾之後學習效果最棒。但是實際上,在作者的實驗中並沒有與直接NAS搜索進行對比,因此實驗非常地不充分。

NAS本身也可以看作一個在超網絡上進行剪枝的過程。把原始的T網絡當作搜索域,給每一通道上加一個門控gg,那本文所做的就是刪除原模型的若干通道後還能用原模型進行蒸餾達到不錯的效果。也就是搜索目標不再是最好的小網絡,而是能最充分應用蒸餾的小網絡。因此搜索目標由原始的分類,改成了蒸餾的目標KL損失,再加上使門控稀疏化的L1正則和weight decay。優化目標如下式所示。
在這裏插入圖片描述
優化算法用到了次梯度,這裏具體還沒看明白,先留着日後補上。
在這裏插入圖片描述
在不同的結構上,同樣的蒸餾算法所能帶來的提升也不一樣。但是實驗其實找到的不是蒸餾提升最大的,而是最左下角的結果,不加蒸餾這個模型的精度也很高了。不過就實用的角度來說蒸餾提升了多大不重要,只要加上蒸餾之後精度高就行。

文章的消融實驗有點難以理解,把優化中的第一項KL換成與T網絡的交叉熵就變成了剪枝實驗?然後讓kl散度趨於不同值,來證明KL項確實能說明學生網絡的好壞?

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