AutoML簡介

近年來機器學習有了大幅增長,自動化機器學習也有很大需求。本文將從傳統機器學習和深度學習兩個角度介紹。

傳統機器學習AutoML

CASH

AutoML的範圍很廣,可以包括從自動數據分析,自動特徵工程,自動縮放,自動正則化,自動特徵選擇,自動模型選擇,自動超參數優化等等。目前的研究方向,主要集中在CASH[1],既Combined Algorithm Selection and Hyperparameter Optimization。

CASH問題最早由Auto-Weka[1]的作者Thornton提出,他同時提出了用貝葉斯優化 [2] 解決。

貝葉斯優化

在介紹貝葉斯優化之前,先回顧一下有哪些找極值的方法。最簡單的當然是網格搜索和隨機搜索。任何學過機器學習的人,都應該知道梯度下降。那麼爲什麼這裏不用梯度下降,而用貝葉斯優化呢?因爲梯度下降要求目標函數是凸函數,可微分。我們並不知道機器學習算法的超參數是不是這樣的函數,所以,我們用了更加通用的貝葉斯優化。他的好處是,不需要凸函數,不需要可微分。

貝葉斯優化我們把我們要研究的這個黑盒函數叫做目標函數Objective Function。因爲目標函數的開銷大,我們要給他找一個近似函數,這個函數叫代理函數Surrogate Function。代理函數會計算出一條平均值曲線和對應的標準差(Standard Deviation)。有個代理函數,我們就可以找到一下個探索點。這個過程,用一個獲取函數Acquisition Function裏實現。

貝葉斯優化,是在一個特定的搜索空間search space展開的。

整個過程如下:

  1. 在搜索空間中,選幾個初始點X
  2. 用目標函數計算初始點X對應的解y
  3. 更新代理函數
  4. 通過acquisition function獲得下一個樣本點。
  5. Goto 2
    中英文流程圖如下:

在這裏插入圖片描述
下面是一個具體的例子:
假如我們有如下的目標函數:

在這裏插入圖片描述
我們計算了x=0和1時的兩個值,代理用他們擬合了平均值和方差如下:
在這裏插入圖片描述

上圖中的藍色線段爲我們的目標函數,綠色的是通過代理函數擬合的平均值,綠色虛線是平均值減去或者加上標準差。或者說,代理函數認爲真實函數的值的範圍在綠色虛線範圍內。

這時,我們可以根據代理函數提供的信息,去尋找下一個點。這裏,我們的代理函數用的算法是UCB (Upper Confidence Bound),他找下一個點的方法是找平均值和標準差的和。這裏我們忽略beta,或者說我們讓beta等於1。

在這裏插入圖片描述

這時,我們看到,最大值出現在5.5附近。我們用這個x,帶入目標函數,求得對應的y。這樣,我們就有了三個樣本點了。這時,我們繼續。

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

我們看到,經過4次迭代,貝葉斯優化已經很接近最大值了。

比起其他的優化方法,貝葉斯優化掉用目標函數次數比較少。而我們知道,機器學習擬合函數(fit)是一個開銷比較大的函數,如果是深度學習,那就更大了。

比起梯度下降,貝葉斯優化不容易陷入局部最優解。

Auto-Sklearn

Auto-Sklearn[3]繼承了Auto-Weka的貝葉斯優化,並在貝葉斯優化的基礎上,提出了兩個新的改進。

在這裏插入圖片描述

一個改進是meta-learning,Auto-Sklearn通過機器學習的方法,根據數據集的大小,數據集的目標等特徵可以大致估計出應該選擇的超參數。這樣可以減小超參數的搜索空間,從而提高了效率。

另一個改進是ensemble learning,通過ensemble,可以提高準確率。

筆者安裝了Auto-Sklearn,並用我們最常見的,Kaggle中的泰坦尼克和波斯頓房價做了實驗,實驗用的CPU是一塊i7。兩個數據庫,都跑了一個小時。成績score分佈是0.76和0.85。這個表現,一般對準確率要求沒那麼高的場景,應該可以應付了。

Auto-Skleran並不會處理任何的字符行的特徵。所以,只能自行刪除泰坦尼克裏面的名字,船票等字符型特徵。登船地點,性別也只能自行OneHot,或者轉成布爾型。

示例代碼:

import autosklearn.classification
cls = autosklearn.classification.AutoSklearnClassifier()
cls.fit(X_train, y_train)
predictions = cls.predict(X_test)

官網:
https://automl.github.io/auto-sklearn/master/

深度學習AutoML

原生NAS

Neural Architecture Search[4]是現在深度學習自動化的主要研究方向。原生的NAS用字符串表示深度模型,這樣,就把深度學習模型裏層(Layer)的預測,轉化成了一個RNN的問題。NAS把這個RNN叫做控制器Controller。通過強化學習,控制器不斷的調整自己的參數。

在這裏插入圖片描述
這樣,就可以訓練出串聯模型了。
在這裏插入圖片描述

那麼,如果模型有分叉怎麼辦呢?

NAS的辦法是,訓練N-1個二分類,用來預測當前層(第N層),分別和前面的(N-1)成的哪個層相連接。

在這裏插入圖片描述

NAS發現了很多新的結構,比如:

在這裏插入圖片描述

上圖中的第一個爲原始的LSTM,後面兩個爲NAS發現的。

NAS家族

NAS出現以後,不同的學者提出了很多不同的NAS。香港浸會大學的he xin[5]等人對其進行了總結。這些新的NAS用了不同的控制器算法,有網格搜索、隨機搜索、強化學習、遺傳算法(EA)、貝葉斯優化、梯度下降等。在提高效率方面,也想出了Low Fidelity, Transfer Learning, Surrogate, Early Stopping等方法。

Low Fidelity是指減少深度學習的數據量,使其更快收斂。Transfer Learning遷移學習保留了之前的層的參數,只訓練新加入的層。Surrogate是指用代理函數。Early Stopping提前結束訓練,也可以節省計算資源。

下圖是各種NAS的比較:

在這裏插入圖片描述

Network Morphism

在NAS的時候,我們會不斷的嘗試新的網絡結構。如果,我們可以讓新的網絡從已經訓練過的網絡學習參數,就可以大大的節省時間了。
Network Morphism[6]很好的解決了這個問題。NM有人翻譯成網絡變形,也有翻譯成網絡態射的。網絡變形把父網絡的知識遷移到子網絡,這樣,子網絡可以達到高於或者等於父網絡的表現。
在這裏插入圖片描述

他主要包括線性變化,非線性變化,寬帶變化,Kernal變化,子網變化等。

線性變化

在這裏插入圖片描述

網絡從第l-1層到第l+1層,線性變化的時候,其實就是乘了矩陣G。那麼,我們把G分解成Fl和Fl+1就完成了變形。

非線性變化

非線性變化,無法像線性變化一樣處理。在兩個激活函數(φ)中間直接插入一個激活函數肯定不行。所以,有了一個Parametric Activation Function,或者叫P激活函數。

在這裏插入圖片描述

他的思路是,a的初始值是1,這樣一開始P激活就退化成了Identity矩陣了。以後a的值會被訓練出來。

寬度獨立變化

在這裏插入圖片描述

帶浪線的是子網的函數,經過一系列變化,可以得到

這時,我們只要讓乘式兩邊其一爲0,另一個爲隨機值即可。

Kernal獨立變化

在這裏插入圖片描述

Kernal變化比較簡單,只需要做Padding。

子網變化

子網變化分爲兩步,第一步是不斷的執行線性或者非線性變化,插入新的層。第二步產生分支,既把G等分。

在這裏插入圖片描述

AutoKeras

AutoKeras是一款基於Keras的開源的AutoML框架。他採用了貝葉斯優化和網絡變形等技術。目前,他支持CNN,RNN和簡單的深度學習模型的搜索。

只需要四行代碼,就可以自動搜索出一個神經網絡。

import autokeras as ak

clf = ak.ImageClassifier()
clf.fit(x_train, y_train)
results = clf.predict(x_test)

具體可以參考其官網:
https://autokeras.com/

運用場景

AutoML針對的是比較成熟的人工智能解決方案。這時,調參和神經網絡的結構已經有了成熟的解決方案。這些場景包括傳統的機器學習,圖像識別,目標檢測,文本識別等。

對於語音等不成熟的人工智能解決方案,還無法使用AutoML。

參考

[1] C. Thornton, F. Hutter, H. Hoos, and K. Leyton-Brown. Auto-WEKA: combined selection and hyperparameter optimization of classification algorithms. In Proc. of KDD’13, pages 847–855, 2013.
[2] E. Brochu, V. Cora, and N. de Freitas. A tutorial on Bayesian optimization of expensive cost functions, with application to active user modeling and hierarchical reinforcement learning. CoRR, abs/1012.2599, 2010.
[3] Efficient and Robust Automated Machine Learning, Feurer et al., Advances in Neural Information Processing Systems 28 (NIPS 2015).
[4] Zoph, Barret, and Quoc V. Le. “Neural Architecture Search with Reinforcement Learning.” arXiv: Learning (2016).
[5] He, Xin, Kaiyong Zhao, and Xiaowen Chu. “AutoML: A Survey of the State-of-the-Art…” arXiv: Learning (2019).
[6] Wei, Tao, et al. “Network morphism.” international conference on machine learning (2016): 564-572.

原文

https://ericwebsmith.github.io/2020/04/04/automl/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章