AutoML、AutoKeras......這四個「Auto」的自動機器學習方法你分得清嗎?
讓我們先來看一個簡短的童話故事…
從前,有一個魔法師,他使用一種無人再使用的程式語言,在一種無人再使用的框架下訓練模型。一天,一位老人找到他,讓他為一個神祕的資料集訓練一個模型。
這位魔法師孜孜不倦,嘗試了數千種不同的方式訓練這個模型,但很不幸,都沒有成功。於是,他走進了他的魔法圖書館尋找解決辦法。突然,他發現了一本關於一種神奇法術的書。這種法術可以把他送到一個隱藏的空間,在那裡,他無所不知,他可以嘗試每一種可能的模型,能完成每一種優化技術。他毫不猶豫地施展了這個法術,被送到了那個神祕的空間。自那以後,他明白瞭如何才能得到更好的模型,並採用了那種做法。在回來之前,他無法抗拒將所有這些力量帶走的誘惑,所以他把這個空間的所有智慧都賜予了一塊名為「Auto」的石頭,這才踏上了返程的旅途。
從前,有個擁有「Auto」魔石的魔法師。傳說,誰掌握了這塊魔法石的力量,誰就能訓練出任何想要的模型。
哈利波特與死亡聖器
這樣的故事太可怕了,不是嗎?我不知道這個故事是不是真的,但在現代,機器學習領域的頭號玩家們似乎很有興趣將這樣的故事變成現實(可能會略有改動)。在這篇文章中,我將分享哪些設想是可以實現的,並幫助你直觀地理解它們的設計理念(儘管所有工具的名字中都有「auto」這個詞,但它們之間似乎並沒有共同之處)。
動機——人生艱難
在給定的資料集中實現當前最佳模型效能通常要求使用者認真選擇合適的資料預處理任務,挑選恰當的演算法、模型和架構,並將其與合適的引數集匹配。這個端到端的過程通常被稱為機器學習工作流(Machine LearningPipeline)。沒有經驗法則會告訴我們該往哪個方向前進,隨著越來越多的模型不斷被開發出來,即使是選擇正確的模型這樣的工作也變得越來越困難。超引數調優通常需要遍歷所有可能的值或對其進行抽樣、嘗試。然而,這樣做也不能保證一定能找到有用的東西。在這種情況下,自動選擇和優化機器學習工作流一直是機器學習研究社群的目標之一。這種任務通常被稱為「元學習」,它指的是學習關於學習的知識。
AZURE 的自動化機器學習(試用版)
-
開源與否:否
-
是否基於雲平臺:是(可以完成任何計算目標的模型的評價和訓練)
-
支援的模型類別:分類、迴歸
-
使用的技術:概率矩陣分解+貝葉斯優化
-
訓練框架: sklearn
這種方法的理念是,如果兩個資料集在一些工作流中能得到類似的(即相關的)結果,那麼它們在其它的工作流中可能也會產生類似的結果。這聽起來可能似曾相識。如果你以前處理過推薦系統的協同過濾問題,你就知道「如果兩個使用者過去喜歡相同的專案,那麼將來他們喜歡相似專案的可能性就會更大」。

由工作流 P 和資料集 D 組成的輸入矩陣的視覺化。數字對應於資料集 D 在工作流 P 上得到的平衡均值。
要解決這個問題意味著兩件事:學習一種隱藏的表示方法來捕獲不同資料集和不同機器學習工作流之間的關係,以預測某工作流在給定資料集上能夠獲得的準確率;學習一種函式,能夠成功地告訴你下一步應該嘗試哪個工作流。第一個任務是通過建立一個平衡後的準確率組成的矩陣來完成的,不同的工作流可以應對不同的資料集。論文《Probabilistic Matrix Factorizationfor AutomatedMachine Learning》描述了該方法,詳細說明了他們在超過 600 個數據集上嘗試的 42,000 個不同的機器學習工作流。也許這與你今天在 Azure 的試用版中看到的是不同的,但它可以為你提供一種思路。作者指出,隱藏表徵不僅成功地捕獲了關於模型的資訊,而且成功地捕獲了關於超引數和資料集特徵的資訊(注意,這個學習過程是以無監督的方式進行的)。
目前所描述的模型可以作為已經評估的工作流的函式來預測每個機器學習工作流的預期效能,但是還沒有對下一步應該嘗試哪個工作流給出任何指導。由於他們使用的是矩陣分解的概率版本,該方法可以生成關於工作流效能的預測後驗分佈,從而允許我們使用採集函式(貝葉斯優化)來指導對機器學習工作流空間的探索。基本上,該方法可以選擇出下一個可以最大化預期的準確率提升的工作流。
然而,推薦系統飽受一個非常特殊的問題的困擾:冷啟動。如果一個新的資料集出現在系統中(也就是你的資料集),那麼模型無從知曉這個新的資料集與什麼相似。為了解決冷啟動問題,我們可以從資料集中計算出一些元特徵,以捕獲觀測次數、分類的類別數、值的範圍等特徵。然後通過這些指標在已知資料集的空間中確定出一個封閉的資料集。他們在不同的工作流上嘗試了 5次,直到開始使用採集函式來通知自動機器學習系統接下來要嘗試的資料集。注意,這個方法不需要訪問實際的資料集,只需要訪問本地計算出的元特性(這大大減小了開銷)。
谷歌的 AUTOML(測試版)
-
開源與否:否
-
是否基於雲平臺:是(訓練和評價)
-
支援的模型類別:用於分類的 卷積神經網路 (CNN)、迴圈神經網路(RNN)、長短期記憶網路(LSTM)
-
使用的技術:帶梯度策略更新的強化學習
-
訓練框架:TensorFlow
說到神經網路,最近最先進的模型的成功離不開從功能設計到架構設計的正規化轉換。也就是說,構建能夠以無監督的方式從資料中學習最佳表徵的機器學習架構,而不是直接設計這樣的特性(這是複雜的,需要大量關於資料的先驗知識)。然而,設計架構仍然需要大量的知識和時間。谷歌 AutoML 的解決思路是建立一個元模型,該模型能夠學習一種方法,為子模型設計和生成能夠在感興趣的資料集上取得良好效能的架構。
他們使用實現為 RNN 的神經架構搜尋,生成編碼為長度可變token序列(「字串」的一種精妙表達方式)的架構。

使用該方法生成的 CNN 的編碼。每個顏色框對應於RNN生成的建議體系架構的一個引數(或token)。
一旦生成了一個架構,就會構建並訓練所提出的模型,最終記錄所獲得的精度。RNN經過訓練,使用了強化學習策略,該策略更新了RNN的引數,以便隨著時間的推移生成更好的架構。
生成的token序列可以看作是生成架構時應該執行的動作(action)序列。該模型最終會得到一個數據集上的準確率R,我們可以考慮將 R 作為獎勵訊號與強化學習演算法一起訓練 RNN。然而,這樣的獎勵是不可微的,這就是為什麼他們建議通過一些改進措施,使用策略梯度方法迭代更新引數(如Williams 等人在 1992 所提出的方法)。由於訓練過程非常耗時,他們使用分散式訓練和非同步引數更新來加速學習過程,如 Dean 等人在 2012 發表的論文中提出的方法。
它能生成什麼樣的模型?根據谷歌大腦發表的相關論文《NEURALARCHITECTURE SEARCH WITH REINFORCEMENT LEARNING》,在卷積架構方面,他們將修正過的線性單元用於非線性模型(Nair & Hinton, 2010)、批量歸一化(Ioffe &Szegedy, 2015)和跳躍連線(Szegedy et al., 2015 and He et al.,2016a)。對於每個卷積層,它可以在 [1,3,5,7] 中選擇一個濾波器高度,在 [1,3,5,7] 中選擇一個濾波器寬度,在 [24,36,48] 中選擇多個濾波器。在步長方面,它必須預測 [1,2,3] 中的步長。對於 RNN 和LSTM,該架構支援在[identity,tanh, sigmoid, relu] 中選擇啟用函式。RNN神經元的輸入對的數量(「基數」)設定為 8。
AUTOKERAS
-
開源與否:是
-
是否基於雲平臺:否
-
支援的模型類別:用於分類的卷積神經網路(CNN)、迴圈神經網路(RNN)、長短期記憶網路(LSTM)
-
使用的技術:高效神經架構搜尋(參見《Efficient NeuralArchitecture Search via Parameter Sharing》)
-
訓練框架:Keras
AutoKeras 和谷歌AutoML 的構建思路相同:它使用一個通過迴圈訓練的 RNN 控制器,對候選架構(即子模型)進行取樣,然後對其進行訓練,以測量其在期望任務中的效能。接著,控制器使用效能作為指導訊號,以找到更有前景的架構。然而,我們之前沒有提到計算過程的代價有多高。實際上,神經架構搜尋在計算上非常昂貴、耗時,例如 Zoph 等人在 2018 年發表的論文使用 450 個 GPU 運行了大約 4 萬個 GPU 小時。另一方面,使用更少的資源往往產生傾倒的結果。為了解決這個問題,AutoKeras使用了高效神經架構搜尋(ENAS)。
ENAS 應用了一個類似於遷移學習的概念,其思想是:在特定任務上為特定模型學習的引數可以用於其他任務上的其他模型。因此,ENAS 迫使所有生成的子模型共享權值,從而刻意防止從頭開始訓練每一個子模型。這篇論文的作者表明,ENAS 不僅可以在子模型之間共享引數,還能夠獲得非常強的效能。
Auto-sklearn
-
開源與否:是
-
是否基於雲平臺:否
-
支援的模型類別:分類、迴歸
-
使用的技術:貝葉斯優化+自動整合構造
-
訓練框架:sklearn
Auto-sklean 是基於Auto-Weka(https://www.automl.org/automl/autoweka/)使用的 CASH(組合演算法選擇和超引數優化)問題的定義以及和 AzureAutomated ML 相同的思路構建的:他們考慮同時選擇一個學習演算法和設定其超引數的問題。他們提出的主要區別是將兩個額外的步驟合併到主程序中:一開始是元學習步驟,最後是自動化整合構造步驟,詳情請參閱論文《Efficient and Robust AutomatedMachine Learning》。
auto-sklearnAutoML 方法
該方法使用了全部 38 個元特徵來描述資料集,包括簡單的、資訊理論的和統計的元特徵,如資料點的數量、特徵和分類,以及資料偏度和目標的熵。利用這些資訊,他們會選擇 k 個取樣點作為貝葉斯優化的初始取樣點(seed)。注意,這種元學習方法通過使用資料集儲存庫來獲得強大的功能(就像 Azure Automated ML 那樣)。
在完成貝葉斯優化之後,它們會構建一個由所有嘗試過的模型組成的整合模型。這一步的思路是將訓練每個模型所做的努力都儲存下來。他們沒有拋棄這些模型而選擇更好的模型,而是將它們儲存起來,最終構建出一個它們的整合模型。這種自動整合構造方法避免了讓自己陷入單個超引數的設定中,因此魯棒性更強(並且不容易過擬合)。他們使用整合選擇(這個貪婪過程從空整合開始,迭代地新增能夠最大化整合驗證效能的模型)來構建整合模型。
結語和點評
每一種方法都有各自的優缺點,也有其各自的賽道。Azure Automatic ML 和 auto-sklearn 是基於相同的思想構建的,它們被用於迴歸和分類任務,計算量較少,因此實現成本較低。他們不需要整個資料集可見(只要構造的模型能夠生成的),如果對資料隱私有要求的話,那麼使用這兩種框架是很合適的。然而,他們嚴重依賴於已經獲取到的資料集。除了事先處理過的機器學習工作流外,他們不能嘗試任何新的東西。我個人十分懷疑能否把這樣的方法稱為元學習。
另一方面,谷歌 AutoML 和 AutoKeras 也使用了相同的方法,它們試圖學習一種從頭開始構建模型的方法。這是一個更有野心的做法,這也是為什麼它在動作空間上更有限(CNN、RNN、LSTM)。然而,他們使用的強化學習方法使他們能夠探索構建模型的新方法(谷歌聲稱他們的方法發現了一個比他們已有的模型好 1.05 倍的模型)。這聽起來更像是元學習。然而,強化學習方法需要消耗大量的計算能力,這也就是它們每小時收費 20 美元的原因。而這種情況下,AutoKeras 為了提高準確率進行的效能優化是很有吸引力的(另外它是開源的,如果你關心隱私的話,這也是一個好訊息)。
原文連結:https://medium.com/@santiagof/auto-is-the-new-black-google-automl-microsoft-automated-ml-autokeras-and-auto-sklearn-80d1d3c3005c