神經架構搜尋(NAS)越來越高效,但遠遠不夠!

雷鋒網 AI 科技評論按:過去數年間,研究者和企業都試圖透過提供可獲得的預訓練計算機視覺或機器翻譯模型,來讓更多非專業人士用上深度學習方法。將預訓練模型用到另一項任務上的方法,就是我們所說的遷移學習,但是這種方法依舊要求使用者具備一定的專業度,能夠對在另一個數據集上執行的模型進行微調。因而如果有方法能夠將這一步驟完全自動化,可以讓更多的使用者從迄今為止機器學習領域所取得的重大突破受益。

該方法就是自動機器學習(AutoML),它能夠涵蓋預測建模的多個部分,例如架構搜尋、超引數最佳化等等。

近期,能夠為某個給定的資料集搜尋到「最佳」架構的架構搜尋方法取得了突破性進展,因而在本文中,我將聚焦架構搜尋部分展開討論。其中,文中展示的結果,是基於與 Jonathan Lorraine 合作進行的工作得來的。

神經架構搜尋的重要性

首先大家需要了解的是,僅有單個隱藏層和非線性啟用函式的神經網路,在該層有足夠多神經元的情況下(即萬能近似定理,UAT),是能夠表示任意函式的。

然而,這種簡單的架構,雖然理論上能夠學習任意函式,但是並不能表示出現在人類視覺皮層的分層過程。

神經網路架構假定一個歸納偏置、淺層、寬廣並且不使用卷積的網路,在影象法分類任務上的表現要比深度卷積網路差得多。因此,為了讓神經網路實現泛化,同時不會過度擬合訓練資料集,找到歸納偏置正確的架構是至關重要的(不管架構是否由大腦所驅動)。

神經架構搜尋(NAS)全覽

NAS 是谷歌推出的一項有啟發性的工作,後續推動了 ENAS、PNAS、DARTS 等工作的出現。它涉及到使用強化學習(RL)來訓練迴圈神經網路(RNN)控制器,從而自動生成架構。之後,這些架構對其權重進行訓練並在驗證集上進行評估。它們在驗證集上的效能就是控制器的獎勵訊號,後續可以增加生成表現良好的架構的機率,以及降低生成表現不佳的架構的機率。

對於沒有技術基礎的讀者而言,NAS 基本上還需要他們完成這一步驟:手動調節神經網路並學習哪種方法的表現更好,最終將表現最好的方法自動化。自動建立神經網路架構的思想一開始並非由 NAS 提出,因為很久之前就有其他方法用上了諸如遺傳演算法等方法,但是 NAS 有效地使用了 RL 來高效地搜尋到能夠實現詳盡搜尋的空間。

下面,我將更深入地分析 NAS 的各個部分,然後再探討該方法存在的侷限性以及由該方法衍生但更加高效的 ENAS(高效神經網路架構搜尋),不過 ENAS 同樣也是一個非常有趣的失效模式。

當對文字和下面展示如何對架構採用和訓練的圖進行比較時,下面的兩個小節是最好理解的。

神經架構搜尋(NAS)越來越高效,但遠遠不夠!

NAS 工作原理圖解

短期記憶網路(LSTM)控制器

控制器透過對大量預定義的時間步長做出一系列選擇,來生成架構。例如,在生成卷積架構時,控制器一開始僅建立其中 6 層的架構。對於每一層,控制器都只做 4 項決策:濾波器高、濾波器寬、濾波器個數和步長。假設第一層的編號為 0,則特定層 ? 的決策 ? 被取樣為:

濾波器高為 ?_{?,h} ~ p_{? x 4)

濾波器寬為 ?_{?,w} ~ p_{? x 4+1)

濾波器個數為 ?_{?,f} ~ p_{? x 4+2)

步長為 ?_{?,s} ~ p_{? x 4+3)

注意,時間步長 ? 的機率分佈 p_?=f_?(h_?),只是該時間步長的隱藏狀態下的線性函式,softmax 函式緊隨其後。

由於控制器是一個 LSTM,因此在初始時間步長 h_0 = [0,0,。。。,0] 的隱藏狀態被設定為全 0 的向量。每個取樣的決策都有一組預設值,例如針對濾波器個數的 [24,36,48,64](看起來像是機率網格搜尋)。最終層數會增加,因此需要 LSTM 提供動態計算,並期望 LSTM 的隱藏狀態能夠記住過去的選擇並有偏向地決定未來時間步長的機率分佈,從而將這些選擇考慮在內。

訓練取樣的架構

在建立完給定的架構之後,就要對其進行 epoch 個數有限(本文中為 50)的訓練,並且觀察驗證準確度 Acc_v。有趣的是,由於在過去 5 個 epoch 中觀察到的最大驗證準確度隨後被立方化並且被用作使用策略梯度來更新控制器引數的獎勵,因此涉及一些並不明顯的獎勵重塑(Reward Shaping):

神經架構搜尋(NAS)越來越高效,但遠遠不夠!

NAS 使用的獎勵重塑

當我稍後討論 ENAS 時,大家需要注意的一個重點是,經過訓練的架構,它的權重後續會被捨棄,並且在每次對架構進行取樣時,這些權重都會被隨機初始化。由於架構選擇非常簡單,因此所有經取樣的架構的記錄及其驗證準確性,都會得到保留。

選擇最佳架構

在控制器訓練期間,最佳效能的架構會被採用,並且會在一些基本超引數例如學習速率和權重衰減上執行網格搜尋,以實現與 STOTA 相當的效能。

高效神經網路架構搜尋(ENAS)全覽

從深度學習專家到非專業人士,並非每個人都能使用 NAS 的原因是它的計算複雜性所帶來的昂貴的計算成本。實際上,它的計算大約需要消耗 32,000 GPU 個小時。如此說來,為什麼不直接聘專家來設計架構而投入如此多資源來自動搜尋一個架構呢?

ENAS 的誕生,便是用來解決這個問題的。

權重共享

ENAS 透過使用不斷更新的共享引數池,而無需捨棄在訓練過程中從所有經取樣的架構學到的權重。

這意味著,架構 100 在被取樣時,已經提供了尤其是與隨機權重相比更加合理的準確度的權重對將其初始化。這樣的話,搜尋到一個性能良好的架構所需要的 GPU 耗時就從 32000 個小時降到了 50 個小時!

透過下圖,大家可以非常好地理解該取樣過程。回顧一下,在 NAS 示例中,我展示瞭如何建立整個 CNN 架構。在這裡,我將聚焦單個迴圈單元。而在 ENAS 環境中的單元基本上僅為一個有向無環圖(DAG),如果預先設定 DAG 中的節點數,則它只需要學習連線。DAG 可以被視作一個計算圖,其邊緣表示將資訊從一個節點傳送到另一個節點的矩陣乘法,以及表示不同「隱藏狀態」的節點。

DAG 的構建,可以透過為每個節點選定:

在該節點使用的啟用函式,即 [tanh,sigmoid,ReLU];

用於連線當前節點的前一節點,例如在節點 4 處可能的選擇是 [1,2,3]。

下圖中取樣的 DAG 用紅色箭頭表示,剩餘的藍色箭頭則表示不屬於取樣架構的一部分,但顯示了建立其中包含 5 個節點的 DAG 時可能存在的一些其他連線。

未填充的藍色節點表示內部節點,橙色節點表示葉節點。葉節點透過平均的方法(或者也可能是其他機制)來組合它們的輸出,並且這種方法被視為當前時間步長 h_ {t} 處的整個迴圈單元的隱藏狀態。

黑色箭頭表示硬編碼連線(例如,此處無法做選擇)。例如,單元始終將當前時間步長 x_ {t} 處的特徵和前一時間步長 h_ {t-1} 處的單元隱藏狀態作為輸入。

神經架構搜尋(NAS)越來越高效,但遠遠不夠!

ENAS 如何對 DAG 取樣

由於存在與 DAG 中每個邊都相關聯的矩陣,因此共享引數池僅是所有這些矩陣的集合。

為什麼這些方法都能做得這麼好?

儘管 NAS 或 ENAS 提供的架構(以及它們學到的權重)在影象分類和語言建模任務上都表現出色,但目前尚不清楚這樣的結果是否是由於搜尋方法導致的。

架構搜尋真值

首先,針對一個給定的資料集,如果不將每個可能的架構都訓練一遍,並且為每一個架構都執行一次大範圍的超引數搜尋,就不可能知道哪個才是該資料集的最佳架構。這就使得我們很難說明白控制器事實上是否正在有效地搜尋可能存在的架構空間,或者是否僅僅只是重新建立此前已經提供了高驗證準確率的架構。

這裡存在一個熵引數,使得控制器在每個時間步長輸出的機率分佈都更加均勻,從而增強了搜尋,但是這種搜尋基本上是隨機的,不過有利於對已被視為最好的架構進行微調。如果我們所關心的只是讓架構達到某種程度的準確性,這可能並不是什麼大問題,不過對於架構的良好效能,可能還存在另外一種解釋。

由誰決定搜尋空間?

控制器在每個時間步長所做出的決定都非常有限。這些決定相當於是從一組過去被認為是在迴圈或卷積架構上表現很好的選項中選擇出來的。例如,針對濾波器寬的選項是 [1,3,5,7],它們是已在 ResNets 或 DenseNets 等模型中應用的標準值。因而,搜尋空間本身存在此類偏差,以至於很難去對錶現糟糕的架構取樣。

顯而易見,擁有更多細粒度的選擇會增加搜尋演算法的取樣複雜度,但是如果我們真的相信搜尋演算法的有效性,我們就不會限制它去採用我們人類認為有效的值,因為這可能會阻止它發現更有效的架構。

架構搜尋 VS 隨機搜尋

在我們的實驗,以及 Sciuto 等人和 Li、Talwakar 在近期所做的相關工作中,使用基於 RL 的控制器來搜尋架構空間,似乎並沒有比使用隨機搜尋更好。我們的實驗聚焦的是面向 Penn Treebank 語言建模任務的 ENAS,該任務的目標是生成迴圈單元。

如下圖所示,當從經過訓練的控制器中取樣的 1000 個架構與從未經訓練的控制器中取樣的 1000 個架構相比時,經過訓練的控制器的確表現更好,但這可以透過權重共享方案而不是控制器在搜尋空間上的探索能力來加以解釋。

經過訓練的控制器取樣得到的一組架構具備更少多樣性,因為它在定義上無可避免地存在偏見。這就意味著,當在訓練期間更新共享引數時,它們一定會對較少的架構有效。而另一方面,隨機控制器取樣得到的架構會更加多變,因此其更新共享引數的目的在於試圖變得對非常多的架構有效,然而最終的結果是,它對於任何給定的架構都不會特別有效。

神經架構搜尋(NAS)越來越高效,但遠遠不夠!

經過訓練的控制器的效能 vs 未經訓練的控制器的效能

控制器在學習什麼?

如果使用基於 RL 的控制器獲得的架構最終並沒有比隨機搜尋更好,那麼控制器到底在學習什麼呢?眾所周知,深度學習導致了黑盒模型無法解釋的結果,但對於影象分類、目標檢測甚至目標分割等任務而言,我們能夠藉助一些技術視覺化 NN 關注的輸入影象所具備的特徵,儘管結果大打折扣,正如 Adebyo 等人所說的那樣,在最低限度上,我們可以預期控制器的迴圈屬效能夠基於過去的決策來做出未來傾向的決策,然而這在 ENAS 中,是不會發生的。

這種對架構決策的無條件取樣是令人不安的,因為可能存在高效單元要求節點之間有特定的連線模式,並且如果無法將過去的決策條件化,控制器是無法發現這種模式的。

下圖顯示了 100 個取樣架構的 RNN 控制器的隱藏狀態(每行對應於單個架構的控制器隱藏狀態)。請注意,在(a)中,即使取樣架構不同,所有行也都是相同的,這表明控制器在隱藏狀態下,不會對架構選擇進行編碼。

神經架構搜尋(NAS)越來越高效,但遠遠不夠!

控制器隱藏狀態視覺化圖

是否有可能強制讓控制器記憶過去的決策呢?我們透過在用於訓練控制器的原始損失中新增正則化項來研究該想法:一個自我監督的目標,要求控制器能夠再現它曾看到過的過去的架構。特別地:

經過 5 個 epoch 的訓練,每個 epoch 都取樣和儲存 1000 個架構(最多可達 10,000 個)。一旦此緩衝區滿了,每個時期 epoch 就會隨機替換 100 個架構;

在第 10 個 epoch 處,新增一個監督懲罰,用於從架構的記憶體緩衝區重建 100 個架構的隨機樣本。在控制器訓練的每一步中,此損失都會被新增到策略梯度損失中:L = L_ {PG} + L_ {Sup}。

這種正則化的方法與以自動迴歸方法中使用 RNN 進行語言建模的方式類似:每個時間步長的目標,都是預測下一個步長的架構選擇。這個問題跟「雞和蛋」的問題有點像。

如果我們要求控制器重建的架構,它的每個時間步長的選擇一開始都不會首先考慮過去的時間步長,那麼我們的這種方法是不是更加強化了它的這一行為呢?事實上,這並不重要,因為我們在嘗試讓控制器能夠記憶和重現序列,這至少能夠促使控制器的隱藏狀態能夠涵蓋控制器過去的選擇。

上圖(b)中顯示了這種正則化的影響,很明顯地是,控制器的隱藏狀態現在至少在取樣架構之間是不同的。

為了確認這種正則化是否真地讓控制器嵌入提供架構之間有意義的相似性,我們將架構嵌入之間的 L2 距離與架構相似性的各種直觀概念相關聯,這些直觀概念包括啟用函式的個數,或者取樣的 DAG 之間的公共連線等。

如下表所示,正則化給出了最佳的 Spearman 相關性,但這種相關性仍然很低。以一種不那麼特定的方式去強制控制器記憶架構,似乎更有助於進一步增加這種相關性。

神經架構搜尋(NAS)越來越高效,但遠遠不夠!

架構間的距離和其他概念之間的 Spearman 相關性

未來的研究方向

目前,神經網路搜尋透過比較各種架構從而選出最佳架構的方式還過於簡單。僅考慮這些架構在驗證集上的效能,會遺漏許多我們可能希望模型能夠具有的有用屬性。例如,我們可能偏向使用架構搜尋來生成對於對抗性擾動更魯棒的架構,或者更適合修剪的架構。

為了賦予架構搜尋方法這一能力,以某種方式量化特定架構可以學到的函式空間,將是有用的。這種方法有助於使用「更好」的更有趣的概念,因為許多架構提供了類似的驗證準確性,然而即使 A_ {1} 的效能略差於 A_ {2},它也可能有我們看重但 A_ {2} 不具備的其他屬性。

隨著近來機器學習社群開始對提高隱私、降低偏見等領域產生興趣,我們越來越需要更加智慧的架構搜尋技術,來搜尋到能夠滿足所有此類需求的架構。雷鋒網

via https://towardsdatascience。com/neural-architecture-search-limitations-and-extensions-8141bec7681f雷鋒網