1. 程式人生 > >自動化機器學習將成為下一個AI研究主流?聽聽資料科學家怎麼說

自動化機器學習將成為下一個AI研究主流?聽聽資料科學家怎麼說

在過去的一年當中,自動化機器學習已經成為一個眾人感興趣的話題。KDnuggets舉辦了一個關於該話題的部落格大賽。結果喜人,有很多有意思的想法與專案被提出來了。一些自動化學習工具也引起了大家的興趣,受到了大家的追捧。

本篇文章的作者 Matthew Mayo 將會對自動化學習進行簡單的介紹,探討下一下它的合理性、採用情況,介紹下它現在使用的工具,討論下它預期的未來發展方向。

資料科學家

什麼是自動化機器學習呢?

接下來我們要探討的是自動化機器學習屬於哪一類科學,以及它不屬於哪一類科學。

自動化機器學習並不屬於自動化資料科學。毫無疑問的是它與自動化資料科學有重複的部分。儘管如此,機器學習只是資料科學工具包中的一個工具。它無法對所有的資料科學任務起作用。例如,機器學習雖然適用於預測性的資料科學任務。但它並不適用於描述性分析的資料科學任務。

即使是那些預測性的資料科學任務,也不僅僅只包含預測。我們對自動化機器學習與自動化資料科學會產生了混淆,對此,資料科學家Sandro Saitta認為:

這種誤解來源於我們對完整的資料科學過程(例如:CRISP-DM)、準備資料的子過程(特徵提取等等)以及建模(建模也被我們我們稱為機器學習)的混淆。

在讀到關於自動化資料科學與資料科學競賽的工具新聞的時候,沒有行業經驗的人會很困惑,他們可能認為資料科學就是建模,這樣就可以完全自動化運行了。

他是完全正確的,不僅僅是詞義的問題。假如你想要對機器學習與資料科學有一個更加清晰的認識,那就讀讀這個。

此外,資料科學家、自動化機器學習的領軍人物Randy Olson認為我們要想得到高效的機器學習設計方案,我們必須做到以下幾點:

  • 始終調整我們模型的超引數
  • 始終嘗試不同的模型
  • 始終對我們的資料進行大量的特徵探索

假如我們將以上所說的東西都考慮進去,那麼我們可以認為自動化機器學習的任務是選擇演算法、超參調整、迭代建模以及模型評價,這樣的話,我們就可以以此來定義自動化機器學習了。自動化機器學習的定義是多種多樣的(對比一下資料科學,當你向十個人詢問什麼是資料科學的時候,你會得到是十一種不同的回答。),但是我們卻可以說,這開了個好頭兒。

我們為什麼需要它?

儘管我們知道了自動化機器學習的概念,自動化機器學習對我們可能有好處,但是我們仍需要知道為什麼機器學習會很難。

AI研究人員、斯坦福大學博士生S. Zayd Enam最近寫了一篇奇特的部落格,部落格的標題是《為什麼機器學習這麼“硬”?》,在這篇文章中,他寫道(注意粗體字):

資料科學家
機器學習仍然是相對很困難的問題。毫無疑問,通過研究來推進機器學習演算法的進步會很困難。這需要創造力、實驗以及堅持。 由於現成的演算法、模型可以很好的為你提供服務,這就阻礙了機器學習的發展。

請注意,儘管Enam主要提及的是機器學習的研究,但是他也提到了現成的演算法在用例中的實現(見粗體字)。

緊接著Enam詳細闡述了機器學習的難題,並著重敘述了演算法的特性(見粗體字):

機器學習的難題之一就是建立直覺。建立直覺的意思是採用某種工具來應對問題。 這就需要知道可用的演算法、模型、風險權衡以及每一個限制條件。

……

困難在於機器學習基本上很難進行除錯。對於機器學習來說,除錯會在兩種情況下發生:1)你的演算法不起作用了;2)你的演算法效用不是很好。…… 演算法一開始就起作用的情況很少,因此我們大部分時間都在用來建立演算法。

Enam緊接著從演算法研究層面闡述了框架問題。再次強調下,他所說的是應用演算法。假如一個演算法不起作用,或者效能不是很好,那麼我們就需要對演算法進行迭代,即再選擇與再定義。這就產生了自動化,因此也就有了自動化演算法。

我以前對於自動化機器學習演算法本質的理解是這樣的:

正如Sebastian Raschka描述的那樣,假如說計算機程式關於自動化的,那麼機器學習可以看做是“關於自動化的自動化”。那麼自動化機器學習就是關於自動化的自動化的自動化。程式通過管理重複的任務來減輕我們的壓力;機器學習幫助計算機如何最好的處理這些重複的任務;自動化機器學習幫助計算機學習如何優化上面的結果。

這種思想很有用處;儘管我們之前會擔心調引數、調超引數。自動化機器學習通過嘗試一些列不同的方法,最終會採用最好的方式來調參,從而得到最優的結果。

自動化機器學的理論基礎來源於這個想法:假如我們必須建立海量的機器學習模型、使用大量的演算法、使用不同的超引數配置,那麼我們就可以使用自動化的方式進行建模。同時也可以比較效能與準確度。

很簡單,對不對?

對自動化機器學習工具進行比較

現在我們知道了自動化機器學習到底是什麼了,以及我們要用它的原因。那我們我們該如何才能創造出一個自動化機器學習模型來?接下來要講解的是兩個自動機器學習工具包的概述,以及二者之間比較。這些工具包是使用python編寫而成的。這兩個工具使用不同的方式來達到相同的目的,也就是是機器學習過程的自動化。

Auto-sklearn

Auto-sklearn是自動化機器學習的工具包,我們用它來替換scikit-learn中的estimator。在最近由KDnuggets舉辦的機器學習部落格大賽中,它取得了冠軍頭銜。

資料科學家
auto-sklearn使機器學習的使用者可以很輕鬆的進行演算法選擇以及超引數的調整。它的優勢就是在於使用貝葉斯優化、元資料學習以及集合建設。要想了解更多關於auto-sklearn的背後技術,你可以閱讀這篇2015年發表在NIPS論文。

上面的資訊是摘自專案的文件說明,Auto-sklearn可以通過貝葉斯優化方式將超引數最優化,就是通過不斷迭代以下幾個步驟:

  1. 建立一個概率模型,來找到超引數設定與機器學習的表現之間的關係
  2. 使用這個模型來挑選出有用的超引數設定,通過權衡探索與開發,進而繼續嘗試。探索指的是探索模型的未知領域;開發指的是重點從已知的空間中找到表現良好的部分。
  3. 設定好超引數,然後執行機器學習演算法。

下面將進一步闡明這個過程是如何進行的:

這個過程可以概括為聯合選擇演算法、預處理方法以及超引數。具體如下:分類/迴歸的選擇、預處理方法是最高優先順序、分類超引數、被選擇方法的超引數會被啟用。我們將使用貝葉斯優化方法來搜尋組合空間。貝葉斯優化方法適用於處理高維條件空間。我們使用SMAC,SMAC是的基礎是隨機森林,它是解決這類問題的最好方式。

就實用性而言,由於Auto-sklearn直接替代scikit-learn的estimator,因此scikt-learn需要安裝這個功能,我們才能利用到這個優勢。Auto-sklearn同樣也支援在分散式檔案系統中進行平行計算,同時它也可以利用scikit-learn模型的持續特性。要想高效的使用Auto-sklearn替代estimator只需要4行程式碼就可以了。作者這樣寫道:

資料科學家
有一個更具魯棒性的示例(該示例使用了Auto-sklearn,並以MNIST資料集作為資料來源),如下:

資料科學家

需要注意的是,Auto-sklearn是ChaLearn AutoML challenge競賽中,auto單元與tweakathon tracks單元的雙料冠軍。

最近Kdnuggets舉辦了自動化資料科學與機器學習部落格大賽,Auto-sklearn研發團隊提交的一篇博文在本次大賽中獲獎,你可以 點選這裡 進行閱讀,同樣也可以 點選這裡 來閱讀對他們的的採訪。Auto-sklearn是由Freiburg大學研發出來的。

Auto-sklearn已經被託管到GitHub上了,你可以找到相關文件以及API。

TPOT

TPOT被認為是“你的資料科學助手”(要注意,不是“你的資料科學替代品”)。它是一個Python的工具。通過使用“遺傳程式設計來自動的建立與優化機器學習管道”。TPOT與Auto-sklearn類似,與scikit-learn協同工作。就像是scikit-learn的包裝器。

在本文中,我們曾提到過,這兩個工具使用不同的方式,達到相似的目標。二者都是開源的,都是使用python編寫而成的,都宣稱通過使用自動化機器學習的方式簡化了機器學習的過程。然而Auto-sklearn使用的是貝葉斯優化,TPOT使用的卻是遺傳程式設計。

儘管兩者使用的方法不同,但是二者的最終結果卻是相同的:自動化超引數選擇,用一系列算進行建模,對大量特徵的探索,這些都導致了迭代建模以及模型進化。

資料科學家
TPOT的真正好處之一就是使用scikit-learn的管道,產生可以準備執行的、獨立的Python程式碼。這個程式碼代表著所有備選模型中表現最好的模型。我們就可以修改與審查這份程式碼。這份程式碼並不會是最終的模型,而是可以當做是我們尋找最優模型的有效起點。

下面是一個關於TPOT的例子,該案例使用MNIST資料集:

資料科學家
這次執行的結果正確率達到了98%,同時pyhton程式碼也就是我們所說的管道也會被匯入到tpot-mnist-pipeline.py檔案當中,如下所示:

TPOT的領軍人物Randy Olson在Kdnuggets上寫過一篇關於TPOT 與AutoML(自動化機器學習)的文章,你可以 點選這裡 找到該文章。也會在這裡找到對Randy的採訪。

TPOT是由賓夕法尼亞大學生物醫學資訊學研究所研究出來的,由NIH資助。

當然,自動化機器學習不僅僅只有這兩個工具。還有其他的工具,像Hyperopt (Hyperopt-sklearn)、 Auto-WEKA,以及Spearmint等等。我打賭在未來幾年,大量相關的額外專案將會出現,這些專案中既會包含研究專案,也會包含工業專案。

自動化機器學習的未來

自動化機器學習的未來在哪裡?

我最近公開地進行過以下陳述(根據我的文章《2017年機器學習預測》):

自動化機器學習將變成重要的技術。在外人看來,它可能不如深度神經網路。但是自動化機器學習對於機器學習、人工智慧以及資料科學都產生了深遠的影響。這種影響極有可能在2017年顯示出來。

在同一篇文章當中,Randy Olson也表達了在2017年他對自動化機器學習的期望。此外Randy在最近的採訪中有更加詳細地闡述了他的預測:

在不久的將來,我認為自動化機器學習將會替代機器學習的建模過程:一旦資料集擁有相對清晰的格式,那麼自動化機器學習將會比99%的人類更快地設計與優化機器學習管道。

……

我可以很確定地認為自動化機器學習系統將會成為機器學習的主流。

但是自動化機器學習是否會替代資料科學家?Randy繼續說道:

我並不認為自動化機器學習的目標是為了替代資料科學家,就像是智慧程式碼自動完成工具的目標並不是來替代程式設計師一樣。相反,對於我來說,自動化機器學習的的目標是為了減輕資料科學家的壓力,使他們不必將大量的精力耗費在重複與耗時的任務上(比如說機器學習的管道設計與超引數的最優化)。這樣他們就可以將時間投入到無法進行自動化的任務當中去。

這種思想十分好。auto-sklearn的開發人員也同樣認同他的觀點:

我們發展自動化機器學習方法是為了向資料科學家提供幫助,而不是代替他們。這些方法使資料科學家擺脫了討厭複雜的任務(比如說超引數優化),機器可以很好地解決這些任務。然而資料分析與結論獲取的工作仍然需要人類專家來完成。在未來,理解應用程式領域的資料科學家仍然極其的重要。

這聽起來十分的鼓舞人心:資料科學家不會被大量替換,自動化機器學習是為了幫助他們更好的工作。這並不是說自動化機器學習已經很完美了。在我們提到自動機器學習是否還有進步空間的時候,Auto-sklearn團隊如是說:

儘管有一些方法可以用來除錯機器學習管道的超引數,但是目前為止很少有工作能發現新管道。Auto-sklearn以固定的順序使用一系列的預定義的前處理器與分類器。假如一個方法對於找到新管道很有效,那麼這個方法將會很有用處。當然,人們可以繼續這種思路,並嘗試自動尋找新的演算法。最近,已經有幾篇論文這樣做了。比如說Learning to learn by gradient descent by gradient descent.(雷鋒網此前也有提及這篇論文,它獲得了RedditML小組評選的“年度最佳論文標題獎”)

自動化機器學習的發展方向在哪裡?很難說清楚。毋庸置疑的是,遲早會出現。儘管不是所有的資料科學家都熟知自動化機器學習,但是熟知自動化機器學習將會使你獲益匪淺。別忘了,假如你能夠在大多數人意識到之前就去學習自動化機器學習,駕馭科技浪潮,你就不會因未來的不確定性而擔心你的工作了。你對於這些技術的駕馭利用將會幫助你在未來更好的工作。而我也再想不出比這個更好的理由來學習自動化機器學習了。