One-Shot NAS 有一個很大的特性就是:訓練一次 Supernet,便可以針對各種不同的constraint,得到多種不同的 network。
One-Shot NAS可以分成兩個階段,分別是 training stage 和 searching stage:
在這個階段,並不會進行搜索,而是單純訓練 Supernet ,使得 Supernet 收斂至一定的程度。
當 Training stage 結束時, Supernet 中的參數就被訓練收斂了,這個時候進入第二階段。
從 Supernet 中不斷取出 Sub-network,並使用 Supernet 的 weight 給Sub-network賦權重,這樣就可以得到不同的Sub-network 的 validation accuracy,直到取得最好且符合 hardware constraint 的 Sub-network。
正是因為weight shared,可以整合不同的search algorithm、evaluation algorithm(e.g., evolution algorithm, accuracy predictor),不斷的從 Supernet 當中取出sub-network。通常有以下兩類:
Parameterized architectures這類方法是將模型結構分布不斷參數化,這些參數a在超網絡訓練期間與網絡權重w進行聯合優化。因此可以在優化時進行模型搜索,從分布中採樣最優的架構。
為了使用基於梯度的優化器進行直接搜索,通常在supernet中引入實值分類分布(架構參數),以達到與supernet權重聯合學習,如DARTS、FBNet和FBNetv2等。
Sampled single-path architectures通過直接搜索離散的搜索空間,利用sampling算法對超網進行訓練,並對單條路徑進行優化。採樣可以是均勻抽樣或公平的多徑抽樣。訓練好的超級網通常作為不同路徑的性能評估器。優化路徑的方法可以是隨機搜索、進化算法等。如GreedyNAS等
一般有以下問題:
論文一SMASH: One-Shot Model Architecture Search through HyperNetworks
1. Abstract
常規的網絡設計需要耗費大量的時間進行驗證,為了節約驗證時間,論文提出訓練一個輔助網絡HyperNet,用於動態生成不同結構模型的權重。
儘管使用這些生成權重的性能不如常規學習到的權重,但在訓練初期,使用生成權重的不同網絡的相對性能可以在一定程度上映射出其最優狀態時的相對性能。
因此,論文提出one-shot模型結構搜索SMASH(one-Shot Model Architecture Search through Hypernetworks),結合輔助網絡生成的權重,可以僅使用一輪訓練來對大量的結構進行排序。
SMASH方法用來評估廣泛的模型配置(在連接模式和每層單位),不處理其他超參數,如正則化、學習速率調度、權重初始化或數據增強。
2. 訓練流程
首先訓練輔助網絡HyperNet,在每個訓練階段,隨機採樣一個網絡,然後使用HyperNet生成權重,end-to-end地對其進行完整的反向訓練。在訓練好HyperNet後,隨機採樣大量的網絡結構,使用HyperNet生成的權重,然後在測試集上驗證性能。3. 核心組件
為了探索具有深度、連接模式、層數等網絡結構,設計了一個memory bank的前饋網絡,能夠生成複雜且多分支的拓撲結構,並且能夠使用二進位向量進行編碼。
訓練一個輔助網絡HyperNet,直接學習二進位結構編碼到權重空間的映射。
論文二ProxylessNAS: Direct Neural Architecture Search
Paper:https://openreview.net/forum?id=HylVB3AqYm
Code:https://github.com/MIT-HAN-LAB/ProxylessNAS
1. Motivation
NAS 可以自動設計有效的網絡結構,但是由於前期算法只能在小型數據集如CIFAR-10上進行搜索,而在大型數據集會出現GPU memory 消耗和耗時長的問題。
所以,很多算法就只能在 proxy task 上,例如在較小的數據集上訓練,或者僅用幾個 blocks 進行學習,或者僅僅訓練幾個 epoch。
這就可能引出如下的問題,算法在小數據上的搜索出來的模型,可能在 target task 上並不是最優的。
2.Contributions
1、ProxylessNAS 不需要使用代理任務,直接在大規模的數據及上搜索整個網絡
2、為NAS提供了一種新的路徑剪枝的方式,展示了NAS與模型壓縮之間的緊密關係,最終通過二值化的手段將內存消耗降低了一個量級
3、提出了一種基於梯度的方法(延遲正則化損失)來約束硬體指標。
3. 算法思路
作者首先描述了 over-parameterized network 的構建,然後利用 binarized architecture parameters 來降低顯存消耗,並提出一種基於梯度的方法,來訓練這些 binarized architecture parameters。最後提出處理不可微分的目標(e.g. latency)的方法,使其可以在特定的硬體上處理特定的神經網絡。
over-parameterized network網絡結構定義為N(e,⋅⋅⋅,en), 其中 e表示一個有向無環圖中一條確定的邊,設O={oi}表示候選基礎元操作,對於每一條邊都對應了這些操作,而網絡搜索的就是每個e該選擇什麼操作O,mO表示每條邊上有並行的N條通路的混合操作,所以超參數化的網絡結構可表示為以下形式。
對於一個輸入x,混合操作mO的輸出結果是基於N條通路所形成的,在One-shot中mO(x)是{oi(x)}的和,當在DARTS中的時候mO(x)表示{oi(x)}的權重和,這個權重是通過對N條通路上的結構參數取softmax得到的。
ProxylessNAS 的做法是先構建一個多路徑的大網絡,訓練完後做 pruning 掉冗餘的路徑。
為了解決顯存佔用和 search candidates 線性增長的問題,將路徑上的 arch parameter 二值化(參考了 BinaryConnect),在搜索時僅有一條路徑處於激活狀態。
Handling Non-Differentiable hardware Metrics為了使延遲可微,這裡的做法是將網絡的延遲建模為神經網絡維度的一個連續函數。
論文三Single Path One-Shot Neural Architecture Search with Uniform Sampling
Paper:https://arxiv.org/abs/1904.00420
Code:https://github.com/megvii-model/SinglePathOneShot
1. Motivation
one shot將問題解耦成了train 和 search兩部分,a和w 不會再有耦合關係。但其仍然沒有解決w參數自身耦合的問題。
而SPOS在train階段每次sample一個architecture,然後只更新 w,為了最大限度地減少耦合,每次sample出的architecture只是A的一個single path。
論文提到的sample方法有2種:uniform sample 和 uniform constraint sample。
2. Single Path One-Shot
為減少節點權重之間的協同適應,曠視研究院提出最大化簡化搜索空間,它只包含單一路徑架構,在每次訓練時僅sample一個。不存在任何調優。
3. Uniform Sampling
通過實驗發現,均勻採樣已經足夠好。
[Channel Number Search]
旨在搜索一個卷積層的通道數。其主要思想是預先分配一個帶有最大通道數的權重張量。在超網絡訓練期間,系統隨機選擇通道數並分割出用於卷積的相應的子張量。
[Mixed-Precision Quantization Search]
選擇單元可以搜索卷積層權重和特徵的量化精度。在超網絡訓練中,特徵圖的位寬和和權重被隨機選取。
4. 進化算法的模型搜索
使用進化算法和隨機搜索兩種方法在進化迭代時的驗證集精度。結果表明進化算法搜索更有效。
論文四GreedyNAS: Towards Fast One-Shot NAS with Greedy Supernet
Arxiv: https://arxiv.org/abs/2003.11236
1. Abstract
訓練一個超級網對於one shot nas方法很重要,因為它可以作為不同架構(路徑)的基本性能估計器。目前的方法主要假設應該對所有路徑給出合理的排名。
然而,對於一個超級網絡來說,在如此巨大的搜索空間上精確地評估是很困難的。
在本文,提出了不必覆蓋所有的路徑,而是通過鼓勵超級網更多地關注那些潛在的好的路徑的評估,來緩解超級網的負擔,使用驗證數據的代理項部分。
具體來說,在訓練過程中,提出了一種帶抑制的多徑採樣策略,並對弱路徑進行貪婪濾波。因此,訓練空間已經貪婪地從所有的道路縮小到那些潛在的好的道路。
此外,還採取了進一步的探索和通過引入一個經驗性候選人來制定開發政策路徑池。
GreedyNAS在ImageNet數據集上的實驗結果表明,在相同的條件下,它可以達到更好的Top-1精度搜索空間和觸發器或延遲級別,但只有supernet訓練成本的60%。
2. Motivation
(1)巨大的搜索空間帶來的評估壓力使Supernet難以準確地區分結構的好壞。
(2)由於所有結構的權重都是在Supernet中高度共享的,如果一個差的結構被訓練到了,好的結構的權重也會受到幹擾。這樣的幹擾會削弱好網絡的最終評估精度,影響網絡的搜索結果。
(3)對差的結構進行訓練相當於對權重進行了沒有必要的更新,降低Supernet的訓練效率。
3. Greedy path filtering
本文目的是把不同路徑分為好路徑和壞路徑,方法是通過一次性採樣多條(m條)路徑,在驗證集的子集直接通過計算損失對不同路徑進行排序。最後採樣m條路徑,保留前k條(m-k條判定為壞路徑,直接拋棄不訓練)。
4. Greedy training of supernet:
上述算法得到的k條路徑,更新候選池,再分別對每條路徑進行參數優化。
5. Training with exploration and exploitation
指訓練時每次以概率ε從候選池選模型,同時以1-ε的概率從整個搜索空間中選模型,避免有些好模型不在候選池中沒有被發現,兩種方式一共選m條路徑。
6. Early stopping
只要候選池模型保持穩定或變動很小,則證明超網訓練充分了。
7. Evolutionary searching
超網訓練完畢後,本文使用 NSGA-II 進化算法進行結構搜索。在進化算法中使用候選池中的結構進行Population的初始化,相較於隨機初始化,藉助於候選池能夠使進化算法有一個更好的初始,提升搜索效率及最終的精度。
當然,還有一些one shot nas的paper沒有介紹。
從以上文章可以看出,supernet的訓練方法比較重要,解w耦合,避免不好的節點的影響;後續還有CVPR2020NAS的總結,大家可以關注原作者。