­

神經架構搜索研究指南,只看這一篇就夠了

  • 2019 年 10 月 30 日
  • 筆記

作者:Derrick Mwiti

編譯:夏夜

轉載自:AI前線(ID:ai-front),未經允許不得二次轉載

導讀: 從訓練到用不同的參數做實驗,設計神經網路的過程是勞力密集型的,非常具有挑戰性,而且常常很麻煩。但是想像一下,如果能夠將這個過程實現自動化呢?將這種想像轉變為現實,就是本指南的核心內容。 我們將探索一系列的研究論文,這些論文試圖解決具有挑戰性的自動化神經網路設計任務。在本指南中,我們假設讀者嘗試過使用 Keras 或 TensorFlow 等框架從頭開始設計神經網路。

基於強化學習的神經結構搜索

(2016:Neural Architecture Search with Reinforcement Learning)

本文利用遞歸神經網路 (RNN) 生成神經網路的模型描述。為了提高 RNN 在驗證集上的精度,作者對 RNN 進行了強化學習訓練,該方法在 CIFAR-10 數據集上的錯誤率為 3.65。

本文提出的神經結構搜索是基於梯度的。本文提出的方法是基於以下考慮:神經網路的結構和連通性可以用變長串來描述。被稱為控制器的神經網路用於生成這樣的字元串。然後,字元串指定的子網路根據真實數據進行訓練,並在驗證集上得到初始的準確度度量。然後,使用這個準確度數據計算策略梯度,再用後者更新控制器。因此,具有較高準確度的結構可以得到較高的選中概率。

來源:https://arxiv.org/pdf/1611.01578.pdf

神經網路結構搜索中,該控制器用於生成神經網路的結構超參數。在下圖中,控制器用於生成一個卷積神經網路。控制器預測濾波器高度、濾波器寬度和步長。預測由 softmax 分類器執行,然後作為輸入,輸入到下一個時間步。一旦控制器完成了生成結構的過程,帶有這個結構的神經網路就會建立起來,並用它進行訓練。

來源:https://arxiv.org/pdf/1611.01578.pdf

於子網路的訓練需要花費數小時的時間,為了加快控制器的學習過程,作者採用了分散式訓練和非同步參數更新的方法。

來源:https://arxiv.org/pdf/1611.01578.pdf

該模型與其他模型的錯誤率對比如下:

來源:https://arxiv.org/pdf/1611.01578.pdf

可伸縮影像識別領域的可轉移架構學習

(2017:Learning Transferable Architectures for Scalable Image Recognition)

在本文中,作者在一個小數據集上搜索結構上的一個組成模組,然後將該模組再轉換到一個大數據集上。這是因為直接使用大型數據集將非常麻煩和耗時。

作者在 CIFAR-10 數據集上尋找最佳卷積層,並將其應用於 ImageNet 數據集。具體做法是將該層的更多副本堆疊在一起來實現的。每一層都有自己的參數,用於設計卷積架構。作者將這種體系結構稱為 NASNet 架構。

他們還引入了正則化技術——ScheduledDropPath——來改進 NASNet 模型中的泛化性能。該方法的錯誤率為 2.4%。最大的 NASNet 模型平均精度達到 43.1%。

與前一篇文章一樣,本文也使用了神經體系結構搜索 (NAS) 框架。本文的方案中,卷積網路的總體結構是人工預置好的。它們由重複幾次的卷積單元組成。每個卷積層具有相同的結構,但權重不同。

該網路有兩種類型的單元:返回相同維度特徵圖的卷積單元(Normal Cell),以及返回特徵圖的卷積單元(Reduction Cell)。後者特徵圖的高度和寬度在卷積輸出時減少了一半。

來源:https://arxiv.org/pdf/1707.07012.pdf

在本文提出的搜索空間中,每個單元接收兩個初始隱藏狀態作為輸入,這兩個初始隱藏狀態是前兩層或輸入影像中的兩個單元的輸出。在給定這兩個初始隱藏狀態的情況下,控制器 RNN 遞歸地預測卷積單元結構的其餘部分。

來源:https://arxiv.org/pdf/1707.07012.pdf

下面是 CIFAR-10 數據集上神經結構搜索的性能:

來源:[https://arxiv.org/pdf/1707.07012.pdf]

參數共享的高效神經結構搜索

(2018:Efficient Neural Architecture Search via Parameter Sharing)

本文作者提出了一種稱為高效神經結構搜索 (ENAS) 的方法。在這種方法中,控制器通過在大型計算圖中搜索最優子圖來發現神經網路結構。該控制器經過訓練,可以選出在驗證集上獲得最佳準確度的子圖。

然後訓練所選子圖對應的模型,使正則交叉熵損失最小化。參數通常在子模型之間共享,以便 ENAS 能夠提供更好的性能。在 CIFAR-10 測試中,ENAS 的錯誤率為 2.89%,而神經結構搜索 (NAS) 的錯誤率為 2.65%。

本文強制所有子模型共享權值,以避免從零開始訓練每個子模型達到收斂,從而提高了 NAS 的效率。

本文用單個有向無環圖(DAG)表示 NAS 的搜索空間。通過引入一個具有 N 個節點的 DAG,設計出了遞歸單元,該單元表示局部計算,圖中的邊表示 N 個節點之間的資訊流。

ENAS 的控制器是一個 RNN,它決定在 DAG 中的每個節點上執行哪些計算以及激活哪些邊。控制器網路是一個包含 100 個隱藏單元的 LSTM。

來源:https://arxiv.org/pdf/1802.03268.pdf

在 ENAS 中,需要學習兩組參數:控制器 LSTM 的參數和子模型的共享參數。在訓練的第一階段,對子模型的共享參數進行訓練。在第二階段,對控制器 LSTM 的參數進行訓練。這兩個階段在 ENAS 的訓練期間交替進行。

來源:https://arxiv.org/pdf/1802.03268.pdf

以下是 ENAS 在 CIFAR-10 數據集上的表現情況:

來源:https://arxiv.org/pdf/1802.03268.pdf

高效結構搜索的層次化表示

(ICLR 2018:Hierarchical Representations for Efficient Architecture Search)

該網路中提出的演算法在 CIFAR-10 上實現了 3.6% 的 top-1 誤差,在 ImageNet 上實現了 20.3% 的 top-1 誤差。作者提出了一種描述神經網路結構的層次化表示方法,證明了用簡單的隨機搜索可以得到具有競爭力的影像分類網路結構,並提出了一種可擴展的進化搜索方法變體。

對於平面體系結構表示,他們研究了由單源、單匯聚(single-sink)計算圖組成的神經網路體系結構家族,該計算圖將源處的輸入轉換為匯聚處的輸出。圖中的每個節點都對應一個特徵圖,每個有向邊都和某個操作關聯,比如池化操作或者卷積操作。此操作轉換輸入節點中的特徵圖,並將其傳遞給輸出節點。

來源:https://arxiv.org/abs/1711.00436

對於層次化結構,將在不同層次上有若干個不同的 motifs。在較高層次的 motifs 構建過程中,較低層次的 motifs 被作為構建模組。

來源:https://arxiv.org/abs/1711.00436

這是 CIFAR-10 測試集中不同模型的錯誤率:

漸進神經結構搜索

(ECCV 2018:Progressive Neural Architecture Search)

該方法採用基於序列模型的優化策略 (SMBO) 學習卷積神經網路 (CNNs) 的結構。本文基於神經結構搜索 (NAS) 方法。

本文中,搜索演算法的任務是識別一個好的卷積單元,而不是一個完整的 CNN。每個單元格包含 B 個塊,每個塊是應用於兩個輸入數據的組合運算符。每個輸入都可以在組合之前進行轉換——例如,通過卷積進行轉換。然後根據訓練集的大小和最終 CNN 所要求的運行時間,決定疊加起來的單元的數量。

來源:https://arxiv.org/abs/1712.00559

通過使用步長為 1 或步長為 2 的基本單元疊加預定數量的副本,可以將單元疊加轉換為 CNN,如上圖所示。然後,在步長為 2 的單元之間的步長為 1 的單元數量,調整為最多可以有 N 個。在網路的頂層引入了平均池化和 softmax 分類層。

下圖顯示了模型在 CIFAR 測試集上的性能:

Auto-Keras:高效的神經結構搜索系統

(2018:Auto-Keras: An Efficient Neural Architecture Search System)

本文提出了一個框架,使用貝葉斯優化引導網路形變,以提升 NAS 的效率。基於他們的方法,作者構建了一個名為 Auto-Keras 的開源 AutoML 系統。

該方法中,網路的主要組成模組,是在貝葉斯優化演算法的指導下,通過神經結構的形變來尋找搜索空間。NAS 空間不是歐氏空間,因此作者設計了一個神經網路核函數來解決這一問題。核函數是將一個神經結構變形為另一個神經結構的編輯距離。

來源:https://arxiv.org/pdf/1806.10282.pdf

利用貝葉斯優化來指導網路形態的第二個挑戰是獲取函數的優化。這些方法不適用於網路形態的樹結構的搜索。通過優化樹結構空間的獲取函數,解決了這一難題。置信度上界 (UCB) 被選擇作為獲取函數。

該體系結構的搜索模組是包含貝葉斯優化器和高斯過程的模組。搜索演算法在 CPU 上運行,模型訓練器模組在 GPU 上進行計算。

該模組在分離的進程中用訓練數據訓練神經網路,以實現並行化。圖模組處理神經網路的計算圖,並由搜索模組控制,進行網路形態學操作。模型存儲是一個包含經過訓練的模型的池子。由於這些模型很大,所以它們存儲在存儲設備上。

下面是該模型與其他模型在不同數據集上的性能比較:

基於貝葉斯優化和最優傳輸的神經結構搜索

(2018:Neural Architecture Search with Bayesian Optimisation and Optimal Transport)

這篇論文提出了一種基於高斯過程 (貝葉斯優化,即 BO) 的神經結構搜索框架 NASBOT。這是通過在神經網路體系結構的空間中開發一個距離度量來實現的,該距離度量可以通過最優傳輸程式來計算。

作者提出了一種神經網路結構的 (偽) 距離,稱為 OTMANN(神經網路結構的最優傳輸度量),可以通過最優傳輸程式進行快速計算。他們還開發了一個 BO 框架來優化神經網路結構上的函數,稱為 NASBOT(使用貝葉斯優化和最優傳輸的神經結構搜索)。

為了實現 BO 方案,本文提出了一種神經網路結構的核函數,並給出了一種優化神經網路結構獲取函數的方法,它採用進化演算法對獲取函數進行優化。

這個方法有一個初始的網路池,並計算這些網路上的獲取函數。然後該網路池的一組 Nmut 個突變被生成出來。首先要做的就是從被評估的網路集合中隨機選擇 Nmut 個候選對象,這樣那些具有較高的函數值的網路更有可能被選中。然後對每個候選對象進行修改,以生成一個新的體系結構。

可以通過增加或減少一個層中的計算單元數量、添加或刪除層,或更改現有層的連接結構來更改體系結構。

最後一步是評估這些 Nmut 突變的獲取函數,將其添加到初始池中,並重複指定的次數。在實驗中,作者使用 NASBOT 來優化獲取。通過實驗,他們得出結論,NASBOT 的性能優於用於優化採集的進化演算法。

來源:https://arxiv.org/abs/1802.07191

與其他模型相比,NASBOT 的性能如下圖所示:

SNAS:隨機神經結構搜索

(ICLR 2019:SNAS: Stochastic Neural Architecture Search)

這篇論文的作者提出了隨機神經結構搜索 (SNAS)。SNAS 是 NAS 的端到端解決方案,在同一輪的反向傳播中同時訓練神經運算元參數和體系結構分布參數。在此過程中,它維護了 NAS 流程的完整性和可微性。

作者將 NAS 重新表述為單元中搜索空間的聯合分布參數的優化問題。搜索梯度被用於,利用梯度資訊進行泛化的可微損失的體系結構搜索。這種搜索梯度與基於增強學習的 NAS 優化了相同的目標,但為結構決策分配分數時效率更高。

如下所示,搜索空間使用一個有向無環圖 (DAG) 表示,稱為父圖。在圖中,節點 xi 代表隱式表示。邊 (i, j) 表示要在節點之間選擇的資訊流和操作。

來源:https://arxiv.org/pdf/1812.09926.pdf

以下是 CIFAR-10 上 SNAS 和最先進的影像分類器的分類錯誤:

DARTS:可微結構搜索

(ICLR 2019:DARTS: Differentiable Architecture Search)

這篇論文以可微的方式構造任務,解決了結構搜索的可伸縮性問題。

本文沒有在一組離散的候選結構上進行搜索,而是將搜索空間放寬為連續的。因此,可以通過梯度下降,對體系結構的驗證集性能進行優化。基於梯度優化的數據效率提升,使得 DARTS 能夠使用更少的計算資源獲得出色的性能。該模型的性能也優於 ENAS。DARTS 既適用於卷積網路,也適用於遞歸網路。

作者尋找一種計算單元作為最終架構的構建模組。通過遞歸連接,學習單元可以被堆疊成卷積網路或遞歸網路。一個單元是由 N 個節點的有序序列組成的有向無環圖。每個節點都是一個隱式的表示——例如一個特徵圖——並且每條有向邊都與轉換節點的一些操作相關聯。一個單元格被假定為有兩個輸入節點和一個輸出節點。卷積單元的輸入節點定義為前兩層的單元輸出。最近文獻里提到的卷積單元里,它們的輸入節點被定義為當前步驟的輸入和上一步所攜帶的狀態。對所有中間節點應用縮減操作(例如 concatenation 操作)來生成輸出單元。

來源:https://arxiv.org/pdf/1806.09055.pdf

該模型與 CIFAR-10 上最先進的影像分類器的比較如下:

原文鏈接:

https://heartbeat.fritz.ai/research-guide-for-neural-architecture-search-b250c5b1b2e5