【論文筆記】ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware

論文: https://arxiv.org/pdf/1812.00332.pdf
源碼: https://github.com/MIT-HAN-LAB/ProxylessNAS

ProxylessNAS 是MIT韓松教授組發表在ICLR2019上的一篇論文,是對NAS方法的進一步補充和優化。這篇文章內容還真是蠻多的寫了好久。。。-_-||

簡介

Neural Architecture Search (NAS) 是目前在自動搜索神經網絡結構的重要算法,然而NAS的使用卻需要大量算力的支撐(104GPUhours10^4 GPU hours),在大規模數據集(ImageNet 1000)上應用難度會更大,因此爲了避免高GPU內存佔用,他們就使用了一些代理任務來解決這個問題,比如在更小數據集上(CIFAR10等)訓練,或者使用小的block,或者減少訓練次數。但這些使用代理任務的辦法都無法保證能得到目標任務的最優解。爲此這篇文章提出了一種不使用代理任務的方法ProxylessNAS能夠直接在大規模的目標任務上搜索結構,能夠解決NAS方法GPU高內存佔用和計算耗時過長的問題。
在這裏插入圖片描述

Contribution

1、ProxylessNAS 不需要使用代理任務,直接在大規模的數據及上搜索整個網絡
2、爲NAS提供了一種新的路徑剪枝的方式,展示了NAS與模型壓縮之間的緊密關係,最終通過二值化的手段將內存消耗降低了一個量級
3、提出了一種基於梯度的方法(延遲正則化損失)來約束硬件指標。
4、在CIFAR10 和 Imagenet上進行試驗,然後實現了state-of-the-art 準確率。

相關工作

1.基於 Proxy Tasks的NAS方法並沒有考慮Latency性能的影響
2.現有的NAS方法採用的是使用stack堆疊block構成最終的網絡,但實際的網絡中是可以存在不同種類的block的
3.DARTS巧妙地將搜索空間轉化爲可微的形式,把結構和權重聯聯合優化,但DARTS仍然是基於Proxy Tasks的,所以在計算堆疊block的過程中仍然佔用大量的GPU資源
4.DropPath 訓練一個網絡來評價一個結構,結構通過隨機置零路徑採樣得到的。

方法

因爲要搜索結構所以首先要對整個網絡的搜索空間定義成超參數。另外PNAS搜索的不是block而是基於路徑進行搜索

Construction of over-parameterized network

網絡結構定義爲N(e,,en)N(e, ···,e_n) 其中 ee表示一個有向無環圖中一條確定的邊,設O={oi}O=\{{o_i}\}表示N的候選基礎元操作,對於每一條邊都對應了這些操作,而網絡搜索的就是每個ee該選擇什麼操作OOmOm_O表示每條邊上有並行的N條通路的混合操作,所以超參數化的網絡結構可表示爲以下形式。
N(e=mO1,,en=mOn) N(e=m_O^1,···,e_n=m_O^n)
對於一個輸入xx,混合操作mOm_O的輸出結果是基於NN條通路所形成的,在One-shot中mO(x)m_O(x){oi(x)}\{o_i(x)\}的和,當在DARTS中的時候mO(x)m_O(x)表示{oi(x)}\{o_i(x)\}的權重和,這個權重是通過對N條通路上的結構參數取softmax得到的。
在這裏插入圖片描述
在這裏插入圖片描述

Learning Binarized Path

爲了降低內存佔用,文章提出適用二值化路徑的方式來節約內存,二值化方式如下
首先從Path的角度,在所有的路徑中只保留1條path
在這裏插入圖片描述
當確定了路徑之後,再考慮二值化gate
在這裏插入圖片描述

Training Binarized Architecture Parameters

因爲想要訓練權重就要考慮如何更新weight和architecture
訓練weight首先要固定好architecture,然後根據公式隨機採樣二值化gate,得到一個網絡結構進行訓練
訓練architecture參數就要先固定weight然後重置gate在驗證集上更新architecture參數。
兩個訓練需要交替進行,一旦訓architecture參數訓練完成,我們就能通過修剪冗餘的路徑得到緊湊的網絡結構,這樣我們就能很容易的選擇權值最高的路徑。
architecture parameters更新不同於weights,文章使用了一種基於梯度的方法學習architecture parameters
在這裏插入圖片描述
因爲存在N條path,因此在更新architecture的時候回需要N倍的GPU內存佔用,爲了解決這個問題,文中根據多項式分佈採樣兩條path,這樣就可以把候選操作從N降到2,同時path weight和gate也要重置。
然後使用採樣的到的兩個path通過公式(4)更新architecture parameters。
最終通過對architecture parameters計算softmax得到path weight,然後需要進行比例放縮來更新architecture parameters以保持沒有被採樣得到的path weight不變

Handling Non-Differentiable hardware Metrics

處理不可微分的硬件指標,想要構建一個可以使用網絡更新優化的可微函數

讓Latency可微

想要可微就需要把網絡的延遲建模成一個連續的函數
假設跟定一個候選操作集合{oj}\{o_j\}那麼對於每一個ojo_j都有一個指定的權重pjp_j來表示每個ojo_j被選擇的概率,爲此爲了建立期望映射,就可以把操作與latency的關係寫成如下公式:
E[latencyi]=jpjiF(oji)E[latency_i]=\sum_j p_j^i * F(o_j^i)
因爲上述公式的E[latencyi]E[latency_i]表示的是第i個block中,latencyilatency_i的數學期望,其中F就是將ojo_j映射成latency的函數,因此對於整個網絡來說
E[latency]=iE[latencyi]E[latency] = \sum_i E[latency_i]
然後這事就成了
在這裏插入圖片描述
此時latency可微了之後就能夠名正言順的加入到loss裏面
在這裏插入圖片描述

Reinforce-Based Approach

這裏是針對binary Gate提出的一種優化方案,使用reinforce的方法來訓練二值化權重。
在這裏插入圖片描述

實驗

實驗分別在Cifar-10和ImageNet上做了實驗
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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