不再需要苦惱於學習各種機器學習的算法
目錄:
一、為什么需要自動機器學習
二、超參數優化 Hyper-parameter Optimization
三、元學習 Meta Learning
四、神經網絡架構搜索 Neural Architecture Search
五、自動化特征工程
六、其它自動機器學習工具集
一、為什么需要自動機器學習
對於機器學習的新用戶而言,使用機器學習算法的一個主要的障礙就是算法的性能受許多的設計決策影響。隨着深度學習的流行,工程師需要選擇相應的神經網絡架構,訓練過程,正則化方法,超參數等等,所有的這些都對算法的性能有很大的影響。於是深度學習工程師也被戲稱為調參工程師。
自動機器學習(AutoML)的目標就是使用自動化的數據驅動方式來做出上述的決策。用戶只要提供數據,自動機器學習系統自動的決定最佳的方案。領域專家不再需要苦惱於學習各種機器學習的算法。
自動機器學習不光包括大家熟知的算法選擇,超參數優化,和神經網絡架構搜索,還覆蓋機器學習工作流的每一步:
- 自動准備數據
- 自動特征選擇
- 自動選擇算法
- 超參數優化
- 自動流水線/工作流構建
- 神經網絡架構搜索
- 自動模型選擇和集成學習
二、超參數優化Hyper-parameter Optimization
學習器模型中一般有兩類參數,一類是可以從數據中學習估計得到,還有一類參數時無法從數據中估計,只能靠人的經驗進行設計指定,后者成為超參數。比如,支持向量機里面的C Kernal Gamma;朴素貝葉斯里面的alpha等。
超參數優化有很多方法:
最常見的類型是黑盒優化 (black-box function optimization)。所謂黑盒優化,就是將決策網絡當作是一個黑盒來進行優化,僅關心輸入和輸出,而忽略其內部機制。決策網絡通常是可以參數化的,這時候進行優化首先要考慮的是收斂性。
以下的幾類方法都是屬於黑盒優化:
- 網格搜索 (grid search)
Grid search大家都應該比較熟悉,是一種通過遍歷給定的參數組合來優化模型表現的方法。網格搜索的問題是很容易發生維度災難,優點是很容易並行。
- 隨機搜索 (random search)
隨機搜索是利用隨機數求極小點而求得函數近似的最優解的方法。
很多時候,隨機搜索比網格搜索效果要更好,但是可以從上圖看出,都不能保證找到最優解。
- 貝葉斯優化(http://t.cn/EfRNqz8)
貝葉斯優化是一種迭代的優化算法,包含兩個主要的元素,輸入數據假設的模型和一個采集函數用來來決定下一步要評估哪一個點。每一步迭代,都使用所有的觀測數據fit模型,然后利用激活函數預測模型的概率分布,決定如何利用參數點,權衡是Explaoration還是Exploitation。相對於其它的黑盒優化算法,激活函數的計算量要少很多,這也是為什么貝葉斯優化被認為是更好的超參數調優的算法。
黑盒優化的一些工具:
- hyperopt(http://t.cn/RyJDbzH)
hyperopt 是一個Python庫,可以用來尋找實數,離散值,條件維度等搜索空間的最佳值
- Google Vizier
Google的內部的機器學習系統 Google Vizier能夠利用遷移學習等技術自動優化其它機器學習系統的超參數
- advisor(http://t.cn/RpTEMhK)
Google Vizier的開源實現
- katib (http://t.cn/EvQJWbq)
基於Kubernetes的超參數優化工具
由於優化目標具有不連續、不可導等數學性質,所以一些搜索和非梯度優化算法被用來求解該問題,包括上面提到的這些黑盒算法。此類算法通過采樣和對采樣的評價進行搜索,往往需要大量對采樣的評價才能獲得比較好的結果。然而,在自動機器學習任務中評價往往通過 k 折交叉驗證獲得,在大數據集的機器學習任務上,獲得一個評價的時間代價巨大。這也影響了優化算法在自動機器學習問題上的效果。所以一些減少評價代價的方法被提出來,其中多保真度優化(multi-fidelity methods)就是其中的一種。這里的技術包括:基於學習曲線來決定是否要提前終止訓練,探索-利用困境(exploration exploitation)的多臂算法 (Multi-armed bandit)(http://t.cn/R5AMrlH)等等。
另外還有一些研究是基於梯度下降的優化。
超參數優化面臨許多挑戰:
- 對於大規模的模型或者復雜的機器學習流水線而言,需要評估的空間規模非常大
- 配置空間很復雜
- 無法或者很難利用損失函數的梯度變化
- 訓練集合的規模太小
- 很容易過擬合
相關參考
http://t.cn/EfRTKmq
http://t.cn/EfRTmLa
http://t.cn/EfRHzrV
http://t.cn/RM7FoqC
http://t.cn/RdEUPtd
http://t.cn/EfRQwnA
http://t.cn/EfRQio5
http://t.cn/EfR8vzx
三、元學習 Meta Learning
元學習也就是"學習如何學習",通過對現有的學習任務之間的性能差異進行系統的觀測,然后學習已有的經驗和元數據,用於更好的執行新的學習任務。這樣做可以極大的改進機器學習流水線或者神經網絡架構的設計,也可以用數據驅動的方式取代手工作坊似的算法工程工作。
從某種意義上來說,元學習覆蓋了超參數優化,因為元數據的學習包含了:超參數,流水線的構成,神經網絡架構,模型構成,元特征等等。
機器學習的算法又稱為‘學習器’,學習器就是假定一個模型,該模型擁有很多未知參數,利用訓練數據和優化算法來找到最適合這些訓練數據的參數,生成一個新的算法,或者參數已知的模型,並利用該模型/算法來預測新的未知數據。如果說世界上只有一個模型,那么問題就簡單了,問題是模型有很多,不同的模型擁有不同的超參數,往往還會把模型和算法組裝在一起構成復合模型和機器學習的流水線,這個時候,就需要知道解決不同的問題要構建那些不同的模型。元學習就在這個時候,可以把超參數,流水線,神經網絡架構這些都看成是一個新的模型的未知參數,把不同學習任務的性能指標看成是輸入數據,這樣就可以利用優化算法來找到性能最好的那組參數。這個模式可以一直嵌套,也就是說,可以有‘元元元學習‘,當然希望不要走得太遠,找不到回來的路。
元學習的方法包括:
- 通過模型評估來學習
- 通過任務的屬性,元特征來學習
以下列出了一些常見的元特征
- 從現有的模型中學習,包括:遷移學習;利用RNN在學習過程中修改自己的權重
元學習的一個很大的挑戰就是如果通過很少的訓練數據來學習一個復雜的模型,這就是one-shot(http://t.cn/EfRmJZp)或者few-shot的問題。
像人類的學習一樣,每次學習無論成功失敗,都收獲一定的經驗,人類很少從頭學習。在構建自動學習的時候,也應該充分利用已有的每一次的學習經驗,逐步的改進,使得新的學習更加有效。
相關參考:
http://t.cn/EfRuJPM
http://t.cn/EyEri3B
http://t.cn/EfR1Iek
四、神經網絡架構搜索Neural Architecture Search
提起AutoML,其實大多數人都是因為Google的AutoML系統才知道這個故事的。隨着深度學習的流行,神經網絡的架構變得越來越復雜,越來越多的手工工程也隨之而來。神經網絡架構搜索就是為了解決這個問題。
NAS主要包含三個部分:
- 搜索空間 search space
- 搜索策略 search strategy
- 性能估計策略 performance estimation strategy
相關參考
http://t.cn/EfRD7WS
五、自動化特征工程
自動化特征工程可以幫助數據科學家基於數據集自動創建能夠最好的用於訓練的特征。
Featuretools(http://t.cn/Rl9tYUT)是一個開源庫,用來實現自動化特征工程。它是一個很好的工具,旨在加快特征生成的過程,從而讓大家有更多的時間專注於構建機器學習模型的其它方面。換句話說,使的數據處於“等待機器學習”的狀態。
Featuretools程序包中的三個主要組件:
- 實體(Entities)
- 深度特征綜合(Deep Feature Synthesis ,DFS)
- 特征基元(Feature primitives)
一個Entity可以視作是一個Pandas的數據框的表示,多個實體的集合稱為Entityset。
深度特征綜合(DFS)與深度學習無關,不用擔心。實際上,DFS是一種特征工程方法,Featuretools的主干。支持從單個或者多個數據框中構造新特征。
DFS通過將特征基元應用於Entityset的實體關系來構造新特征。這些特征基元是手動生成特征時常用的方法。例如,基元“mean”將在聚合級別上找到變量的平均值。
相關參考
http://t.cn/EfRs7O2
http://t.cn/EfRsias
六、其它自動機器學習工具集
以下列出一些開源的自動機器學習工具空大家參考、選擇
- Auto-Sklearn (http://t.cn/EfEPf5H)
- AutoKeras(http://t.cn/RDVQhH4)
- TPOT(http://t.cn/EfEPsHl)
- H2O AutoML (http://t.cn/EfE2fKw)
- Python auto_ml(http://t.cn/Ri1Ch74)