一文講解自動機器學習(AutoML)!你已經是個成熟的模型了,該學會自己訓練了
<div>
Datawhale 作者: 瞿曉陽,AutoML書籍作者 寄語:讓計算機自己去學習和訓練規則,是否能達到更好的效果呢?自動機器學習就是答案,也就是所謂“AI的AI”,讓AI去學習AI。 隨着深度神經網絡的不斷發展,各種模型和新穎模塊的不斷髮明利用,人們逐漸意識到開發一種新的神經網絡結構越來越費時費力,爲什麼不讓機器自己在不斷的學習過程中創造出新的神經網絡呢? 正是出於這個構思,2017年Google推出了AutoML,一個能自主設計深度神經網絡的AI網絡。 自此,人工智能又有了更進一步的發展,人們開始探索如何利用已有的機器學習知識和神經網絡框架來讓人工智能自主搭建適合業務場景的網絡,人工智能的另一扇大門被打開。
深度學習vs自動化深度學習
隨着深度神經網絡的廣泛應用和不斷發展,越來越強大的網絡模型被構建,從AlexNet,到VGGNet,GoogleNet以及ResNet。 雖然這些模型足夠靈活,但人工神經網絡結構仍然需要大量的專業知識並且需要充足的時間,而且調參對於深度模型來說也是一項非常痛苦的事情,衆多的超參數和網絡結構參數會產生爆炸性的組合。 是否有可能使這一過程自動化,讓每一個人,甚至是不瞭解機器學習的人可以輕鬆地將機器學習應用於所面臨的問題,自動化深度學習(AutoDL)就是答案。 如圖1所示,是現在的深度學習方法與自動化深度學習的對比圖,自動化深度學習的目標是通過超參數優化的方法讓機器學會自動設計網絡及調參優化。圖1:傳統深度學習與AutoDL比較
什麼是神經架構搜索(NAS)
神經架構搜索(NAS)是一種針對特定數據集從頭開始自動設計性能良好的模型的技術,NAS技術與超參數優化所解決的問題相同: 在搜索空間中找到對目標任務表現良好的網絡結構。 NAS主要由三個基本問題組成,分別是搜索空間、優化方法、以及評估方法。-
搜索空間針對目標任務定義了一組可能的神經網絡結構。
-
優化方法確定如何探索搜索空間以找到好的架構。
-
評估方法評估通過優化方法考慮的每種網絡結構的性能。
圖2:NAS組件
搜索空間
如其名,就是可供搜索的一個網絡結構集合,它的數字表示爲:
-
網絡的結構(如:神經網絡的深度,即隱藏層個數,和特定的隱藏層寬度)
-
配置(如:操作/網絡間的鏈接類型,核的大小,過濾器的數量)
搜索算法
搜索算法是一個迭代過程,用於確定以何種規則來探索搜索空間。 在搜索過程的每個步驟或迭代中,一個來自於搜索空間的樣本會被生成,即子網絡(child network)。所有的子網絡在訓練集上被訓練,在驗證集上的準確率作爲目標被優化(或者是強化學習中的獎勵)。 搜索算法的目的是找到最佳子網絡,例如最小化驗證集損失或最大化獎勵。主流的NAS搜索策略大致可以分爲強化學習、進化算法和可微分的梯度下降算法。1. 基於強化學習的方法
強化學習有三個基本要素:智能體(Agent)、環境(Environment)和獎勵(Reward),智能體以 “試錯”的方式進行學習,通過與環境交互獲得獎勵來指導行爲。智能體和環境之間的交互可以被視爲順序決策過程:在每個時間t,Agent在動作集合中選擇動作與環境交互並接收獎勵。圖3: 強化學習中智能體與環境的交互過程 神經架構自動搜索中,強化學習把架構的生成看成一個智能體(agent)在選擇動作(action)的過程,通過在測試集上測試網絡性能來獲取獎勵值(reward),從而指導架構的生成。 與傳統的強化學習問題略有不同的是構建了一個RNN控制器,通過迭代的方式來更新控制器從而生成合適的架構。
圖4:基於強化學習的網絡架構搜索示意圖 2. 基於進化算法的方法 基於進化算法的神經網絡結構搜索,在演化步驟中,把子模型作爲種羣來進化。羣體中的每個模型都是訓練過的網絡,並被視爲個體,模型在驗證集上的表現(例如,準確度)作爲每個個體的質量好壞。基於進化算法神經架構搜索的通用流程如下:
-
初始化操作,對現有的各個個體進行編碼,把這些個體編碼成種羣。
-
選擇操作,從種羣中根據適應度挑選出優秀的個體。
-
繁殖操作,分爲兩種:有性繁殖操作和無性繁殖操作,無性繁殖的操作包括變異操作,有性繁殖包括交叉操作或者組合操作。
-
網絡訓練操作,對上一步繁殖操作得到的所有個體神經網絡進行訓練,訓練到收斂爲止。
-
適應度計算操作,使用指定的驗證集對每個已訓練的網絡計算驗證準確率,把驗證準確率作爲適應度。
圖5: 基於進化算法的神經架構搜索通用流程 3. 基於可微分架構搜索的方法 可微分架構搜索方法很多種,其中比較出名的是卡內基梅隆大學提出的 DARTS (DifferentiableArchitecture Search)。 與傳統的在離散的和不可微的搜索空間尚採用進化或強化學習搜索結構的方法不同,該方法是基於將結構表示的鬆弛化(relaxation),允許使用梯度下降來解決架構搜索的問題,所以效率可以比之前不可微的方法快幾個數量級。 簡單來說就是給操作(operations)的每個連接都賦一個權值alpha,優化的目的是爲了通過梯度下降優化alpha矩陣,根據alpha的大小來確定連接方式。 神經網絡原有的權重稱爲矩陣,在訓練集上固定alpha矩陣的值,然後梯度下降矩陣的值,再驗證集上固定矩陣的值,然後梯度下降alpha的值,循環往復直到這兩個值都比較理想。
圖6:DARTS搜索空間
加速方案
無論是基於強化學習還是進化算法的搜索,子網絡都要被訓練和評估,以指導搜索過程。但是從頭開始訓練每個自網絡需要超大的資源和時間。所以NAS的加速方案被提出,主要代表方案是改進代理模型和權值共享。 1. 改 進代理(Improve proxy) 很明顯代理模型的引入會帶有誤差,研究證明子網絡的FLOPs(每秒計算的浮點數)和模型大小與最終準確度呈負相關,因此引入了一種應用於獎勵計算的校正函數,通過早期停止獲得子網絡的精度,彌合代理與真實準確性之間的差距。 根據這一想法,研究者們提出了幾種通過“預測”神經架構的精度來改進代理度量的方法,預計精確度較差的子網絡將被暫停訓練或直接放棄。以下是三種預測神經架構搜索的方法:-
根據子網絡的學習曲線預測神經架構的精度。
-
迴歸模型。使用基於網絡設置和驗證曲線的特徵來預測部分訓練模型的最終性能。
-
訓練代理模型,基於progressively architectural properties預測子網絡的準確性。
2. 權值共享(Weight sharing)
在神經網絡的搜索和訓練過程中,涉及到很多權值和超參數,權值共享可以實現加速,在這裏列舉 幾個權值共享的經典方法:-
在進化過程中,允許子網絡繼承父本的權重,而不是從頭訓練每個子模型。使用One shot 模型實現共享。
-
設計帶有輔助超網絡的“主”模型,以生成以模型架構爲條件的主模型的權重。從超網絡代表的分佈中採樣的權重。
-
使用one-shot模型,主要有兩種方法:
-
第一種是訓練表示各種候選結構的one-shot模型,然後使用預訓練的one-shot模型權重在驗證集上隨機評估這些候選結構。
-
另一種是使用包含整個搜索空間的one-shot模型訓練所有權重,同時,使用梯度下降來優化候選結構的分佈。
-
通過網絡轉換/態射來探索搜索空間,它使用諸如插入層或添加跳過連接之類的操作將訓練好的神經網絡修改爲新的結構。由於網絡轉換/態射從現有的訓練網絡開始,因此重用權重並且僅需爲數不多的訓練迭代來完成新的結構的訓練。
圖7:one-shot結構圖,實現連接無法刪除而虛線連接可以刪除
神經網絡架構搜索的快速實現
使用開源的開源自動機器學習項目例如微軟的NNI和亞馬遜的AutoGluon可以快速實現常用NAS算法。下面簡單介紹使用AutoGluo n在10分鐘內快速實現ENAS的過程: 1. 定義基礎Block結構2. 定義ENAS單元結構
3. 定義超網絡
4. 構造ENAS_Scheduler開始訓練
5. 訓練結束可以查看搜索到的最佳結構