ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware
2019-03-19 16:13:18
Paper:https://openreview.net/forum?id=HylVB3AqYm
Code:https://github.com/MIT-HAN-LAB/ProxylessNAS
1. Background and Motivation:
先來看看算法的名字:ProxylessNAS,將其拆分之后是這么個意思: Proxy(代理)Less(扣除)NAS(神經結構搜索),難么很自然的就可以讀懂了:不用代理的神經網絡搜索。那么問題來了,什么是代理呢?這就要提到本文的動機:NAS 可以自動設計有效的網絡結構,但是由於前期所提出算法計算量太大,難以在大型任務上執行搜索。於是,出現了可微分的NAS,大大的降低了 GPU 的運算時間,但是也有一個需要較大 GPU memory 消耗的問題(grow linearly w.r.t. candidate set size)。所以,這些算法就只能在 proxy task 上,例如在較小的數據集上訓練,或者僅用幾個 blocks 進行學習,或者僅僅訓練幾個 epoch。這就可能引出如下的問題,算法在小數據上的搜索出來的模型,可能在 target task 上並不是最優的。所以,本文就提出 ProxylessNAS 來直接在 large-scale target tasks 或者 目標硬件平台上進行結構的學習。
本文作者將 NAS 看做是 path-level pruning process,特別的,我們直接訓練一個 over-parameterized network,其包含所有的候選路徑(如圖 2 所示)。在訓練過程中,我們顯示的引入結構化參數來學習哪條路徑是冗余的,這些冗余的分支在訓練的最后,都被移除,以得到一個緊湊的優化結構。通過這種方式,在結構搜索過程中,我們僅僅需要訓練一條網絡,而不需要任何其他的 meta-controller (or hypernetwork)。
但是簡單的將所有的候選路徑都包含進來,又會引起 GPU 顯存的爆炸,因為顯存的消耗是和 選擇的個數,呈現線性增長的關系。所以,GPU memory-wise,我們將結構參數進行二值化(1 或者 0),並且強制僅僅有一條路徑,在運行時,可以被激活。這樣就將顯存需求將為了與訓練一個緊湊的模型相當的級別。我們提出一種基於 BinaryConnect 的基於梯度的方法來訓練二值化參數。此外,為了處理不可微分的硬件目標,如 latency,在特定的硬件上,來學習特定的網絡結構。我們將 network latency 建模成連續的函數,並且將其作為正則化損失來進行優化。另外,我們也提出 REINFORCE-based algorithm 作為另外一種策略來處理硬件度量。
2. Method:
作者首先描述了 over-parameterized network 的構建,然后引入如何利用 binarized architecture parameters 來降低顯存消耗。然后提出一種基於梯度的方法,來訓練這些 binarized architecture parameters。最終,提出兩種基礎來處理不可微分的目標(e.g. latency),使其可以在特定的硬件上處理特定的神經網絡。
2.1 Construction of Over-Parameterized Network:
==