深度學習的未來:神經架構搜尋

CVer發表於2019-06-27

本文轉載自:專知

【導讀】我們中的很多人知道ResNet的成功,當我們使用ResNet作為預訓練網路時,有沒有好奇過,怎麼會有人能夠想出這樣的網路呢?這就是神經架構搜尋做的事。

深度學習的未來:神經架構搜尋

我們只需要將資料集輸入神經架構搜尋系統,它就能針對該資料集找到最適合的神經架構。神經架構搜尋可以看出是一個AutoML的一個子領域,並與引數優化有顯著的替身。為了理解神經架構搜尋,我們需要仔細思考它在做什麼。它是在所有可能的結構中,以一定的搜尋策略,找到最大化效能的結果。下圖是對神經架構搜尋的一個總結。

深度學習的未來:神經架構搜尋

它有三個主要組成部分:搜尋空間、搜尋策略與效能評估。

搜尋空間定義了神經架構搜尋可能給出的模型。它可以是鏈式的結構,第n-1層的輸出作為第n層的輸入,或者也可以是現代化的複雜架構,包括skip connection等。

深度學習的未來:神經架構搜尋

很多時候,人們都想手動設計外層的架構,在這種情況下,外層的架構是固定的,神經架構搜尋只搜尋一個網路單元的結構。這種型別的搜尋被稱為micro-search 或者單元搜素。

深度學習的未來:神經架構搜尋

在許多神經架構搜尋的方法中,細節與整體架構同時層次化地搜尋。

第一層確定了一系列主要的操作,第二層確定了這些操作的連結方法,第三層確定了第二層中的一些模組是如何連線的,以此類推。

強化學習

強化學習通過一些策略來執行一些操作,然後智慧體更加執行操作後得到的獎勵更新策略的引數。在神經架構搜尋的情況下,智慧體產出一些模型架構,稱為子網路,然後然後訓練模型,並把在資料集上的效能表現作為獎勵,以此完成對智慧體的迭代更新。

深度學習的未來:神經架構搜尋

經典的RNN神經網路作為一個控制器或者智慧體,它生成一個字串,然後從該字串中構建模型。

深度學習的未來:神經架構搜尋

例如,上圖中RNN的輸出構建了一個濾波器,包括濾波器的大學與補償。輸出錨點用於預測跳躍連結。在N層之後,錨點會包含N-1個基於內容的sigmiod函式,用於預測之前的層時候需要被連線。

漸進式神經架構搜尋(PNAS)

PNAS是一種網路單元搜尋方法,他們從網路塊中構建單元然後使用一種預定義的方法逐步增加單元。

深度學習的未來:神經架構搜尋

深度學習的未來:神經架構搜尋

每個模型塊有幾個預定義的操作構成。

深度學習的未來:神經架構搜尋

原始論文中使用瞭如上圖所示的幾個操作,但是這些操作是可以被擴充套件的。

深度學習的未來:神經架構搜尋

上圖是一個完整的例子,即使只是為了確定這個單元內的結構是否是最好的,也需要10^14 次驗證。

因此,為了減少複雜度,第一個單元只有一個模型塊。這很簡單,因為前面提到過,我們只有256個模型塊可以選擇。然後前K個表現最好的單元被選中,然後開始構建第二個模型塊,直到構建完第5個模型塊。

但是對於一個合理的K,需要測試太多兩個程式碼塊的候選了。一個很簡易的解決方案是使用surrogate模型。

舉例而言,我們可以構建256個單個單元的模型,然後測試它們的效能。然後用這些資料訓練surrogate模型。然後用這些模型來預測2個單元的效能,而並不實際訓練這個模型。當然,surrogate模型需要對不同大小的輸入資料魯棒。在這之後,前K個兩個單元的模型被選定了,當兩個單元的模型用真實資料真正訓練好之後,這個surrogate模型被微調,然後擴充套件到第三個單元。

深度學習的未來:神經架構搜尋

可微架構搜尋

神經架構的搜尋空間是離散的,每一個神經架構與另外一個至少神經架構至少有一個層是不一樣的。這種方法應用了一個連續的鬆弛方法,可以用梯度下降法來優化這個離散域的搜尋。

單元可以看成是一個有向無環圖,每個節點X可以看成是一個隱式的表示(如卷積神經網路中的特徵圖),每個有向邊可以看成是一些操作(如卷積,最大池化等),這些操作可以將節點i儲存的隱式表示轉移到節點j儲存的隱式表示。

深度學習的未來:神經架構搜尋

每個節點的輸出可以由左邊的公式求出。

在連續鬆弛下,與連線兩個節點的單個操作不同,使用每個操作的凸組合來刻畫兩個節點之間的多種可能的邊,每個邊對應了一個特定的操作。每條邊上也有一個權重alpha

深度學習的未來:神經架構搜尋

現在,O(i,j)是節點i,j 之間的邊o(i,j)的線性組合, o(.)ϵ S, S是所有可能的操作的集合。

深度學習的未來:神經架構搜尋

輸出O(i,j) 由上邊的公式得到。

w∗ = argmin L_train(w, α∗ ).

使用L_train和L_val作為訓練與驗證的誤差,兩個誤差都由模型的引數alpha與網路的引數w決定。架構搜尋的目標是找到最好的alpha,最小化驗證誤差L_val,而權值w則是最小化訓練誤差得到的。這是因為alpha是高層的變數而w是低層的變數。

α * = argmin L_val(w ∗ (α), α)

s.t. w ∗ (α) = argmin L_train(w, α)

隨著訓練的進行,一些邊的權值會比另一些高很多,為了再將這個連續的模型變為離散的,每兩個節點之間只保留最大的邊。

深度學習的未來:神經架構搜尋

當所有的節點都確定之後,就可以構建更大的網路了。

原文連結:

https://medium.com/@ashiqbuet14/neural-architecture-search-nas-the-future-of-deep-learning-c99356351136

相關文章