1
本文作者: 翻山 | 2017-02-23 10:16 | 專題:AutoML 祛魅 |
雷鋒網(wǎng)按:在過(guò)去的一年當(dāng)中,自動(dòng)化機(jī)器學(xué)習(xí)已經(jīng)成為一個(gè)眾人感興趣的話題。KDnuggets舉辦了一個(gè)關(guān)于該話題的博客大賽。結(jié)果喜人,有很多有意思的想法與項(xiàng)目被提出來(lái)了。一些自動(dòng)化學(xué)習(xí)工具也引起了大家的興趣,受到了大家的追捧。
本篇文章的作者 Matthew Mayo 將會(huì)對(duì)自動(dòng)化學(xué)習(xí)進(jìn)行簡(jiǎn)單的介紹,探討下一下它的合理性、采用情況,介紹下它現(xiàn)在使用的工具,討論下它預(yù)期的未來(lái)發(fā)展方向。本文由雷鋒網(wǎng)編譯,未經(jīng)許可不得轉(zhuǎn)載。
接下來(lái)我們要探討的是自動(dòng)化機(jī)器學(xué)習(xí)屬于哪一類科學(xué),以及它不屬于哪一類科學(xué)。
自動(dòng)化機(jī)器學(xué)習(xí)并不屬于自動(dòng)化數(shù)據(jù)科學(xué)。毫無(wú)疑問(wèn)的是它與自動(dòng)化數(shù)據(jù)科學(xué)有重復(fù)的部分。盡管如此,機(jī)器學(xué)習(xí)只是數(shù)據(jù)科學(xué)工具包中的一個(gè)工具。它無(wú)法對(duì)所有的數(shù)據(jù)科學(xué)任務(wù)起作用。例如,機(jī)器學(xué)習(xí)雖然適用于預(yù)測(cè)性的數(shù)據(jù)科學(xué)任務(wù)。但它并不適用于描述性分析的數(shù)據(jù)科學(xué)任務(wù)。
即使是那些預(yù)測(cè)性的數(shù)據(jù)科學(xué)任務(wù),也不僅僅只包含預(yù)測(cè)。我們對(duì)自動(dòng)化機(jī)器學(xué)習(xí)與自動(dòng)化數(shù)據(jù)科學(xué)會(huì)產(chǎn)生了混淆,對(duì)此,數(shù)據(jù)科學(xué)家Sandro Saitta認(rèn)為:
這種誤解來(lái)源于我們對(duì)完整的數(shù)據(jù)科學(xué)過(guò)程(例如:CRISP-DM)、準(zhǔn)備數(shù)據(jù)的子過(guò)程(特征提取等等)以及建模(建模也被我們我們稱為機(jī)器學(xué)習(xí))的混淆。
在讀到關(guān)于自動(dòng)化數(shù)據(jù)科學(xué)與數(shù)據(jù)科學(xué)競(jìng)賽的工具新聞的時(shí)候,沒(méi)有行業(yè)經(jīng)驗(yàn)的人會(huì)很困惑,他們可能認(rèn)為數(shù)據(jù)科學(xué)就是建模,這樣就可以完全自動(dòng)化運(yùn)行了。
他是完全正確的,不僅僅是詞義的問(wèn)題。假如你想要對(duì)機(jī)器學(xué)習(xí)與數(shù)據(jù)科學(xué)有一個(gè)更加清晰的認(rèn)識(shí),那就讀讀這個(gè)。
此外,數(shù)據(jù)科學(xué)家、自動(dòng)化機(jī)器學(xué)習(xí)的領(lǐng)軍人物Randy Olson認(rèn)為我們要想得到高效的機(jī)器學(xué)習(xí)設(shè)計(jì)方案,我們必須做到以下幾點(diǎn):
始終調(diào)整我們模型的超參數(shù)
始終嘗試不同的模型
始終對(duì)我們的數(shù)據(jù)進(jìn)行大量的特征探索
假如我們將以上所說(shuō)的東西都考慮進(jìn)去,那么我們可以認(rèn)為自動(dòng)化機(jī)器學(xué)習(xí)的任務(wù)是選擇算法、超參調(diào)整、迭代建模以及模型評(píng)價(jià),這樣的話,我們就可以以此來(lái)定義自動(dòng)化機(jī)器學(xué)習(xí)了。自動(dòng)化機(jī)器學(xué)習(xí)的定義是多種多樣的(對(duì)比一下數(shù)據(jù)科學(xué),當(dāng)你向十個(gè)人詢問(wèn)什么是數(shù)據(jù)科學(xué)的時(shí)候,你會(huì)得到是十一種不同的回答。),但是我們卻可以說(shuō),這開(kāi)了個(gè)好頭兒。
盡管我們知道了自動(dòng)化機(jī)器學(xué)習(xí)的概念,自動(dòng)化機(jī)器學(xué)習(xí)對(duì)我們可能有好處,但是我們?nèi)孕枰罏槭裁礄C(jī)器學(xué)習(xí)會(huì)很難。
AI研究人員、斯坦福大學(xué)博士生S. Zayd Enam最近寫了一篇奇特的博客,博客的標(biāo)題是《為什么機(jī)器學(xué)習(xí)這么“硬”?》,在這篇文章中,他寫道(注意粗體字):
機(jī)器學(xué)習(xí)仍然是相對(duì)很困難的問(wèn)題。毫無(wú)疑問(wèn),通過(guò)研究來(lái)推進(jìn)機(jī)器學(xué)習(xí)算法的進(jìn)步會(huì)很困難。這需要?jiǎng)?chuàng)造力、實(shí)驗(yàn)以及堅(jiān)持。由于現(xiàn)成的算法、模型可以很好的為你提供服務(wù),這就阻礙了機(jī)器學(xué)習(xí)的發(fā)展。
請(qǐng)注意,盡管Enam主要提及的是機(jī)器學(xué)習(xí)的研究,但是他也提到了現(xiàn)成的算法在用例中的實(shí)現(xiàn)(見(jiàn)粗體字)。
緊接著Enam詳細(xì)闡述了機(jī)器學(xué)習(xí)的難題,并著重?cái)⑹隽怂惴ǖ奶匦裕ㄒ?jiàn)粗體字):
機(jī)器學(xué)習(xí)的難題之一就是建立直覺(jué)。建立直覺(jué)的意思是采用某種工具來(lái)應(yīng)對(duì)問(wèn)題。這就需要知道可用的算法、模型、風(fēng)險(xiǎn)權(quán)衡以及每一個(gè)限制條件。
……
困難在于機(jī)器學(xué)習(xí)基本上很難進(jìn)行調(diào)試。對(duì)于機(jī)器學(xué)習(xí)來(lái)說(shuō),調(diào)試會(huì)在兩種情況下發(fā)生:1)你的算法不起作用了;2)你的算法效用不是很好。……算法一開(kāi)始就起作用的情況很少,因此我們大部分時(shí)間都在用來(lái)創(chuàng)建算法。
Enam緊接著從算法研究層面闡述了框架問(wèn)題。再次強(qiáng)調(diào)下,他所說(shuō)的是應(yīng)用算法。假如一個(gè)算法不起作用,或者性能不是很好,那么我們就需要對(duì)算法進(jìn)行迭代,即再選擇與再定義。這就產(chǎn)生了自動(dòng)化,因此也就有了自動(dòng)化算法。
我以前對(duì)于自動(dòng)化機(jī)器學(xué)習(xí)算法本質(zhì)的理解是這樣的:
正如Sebastian Raschka描述的那樣,假如說(shuō)計(jì)算機(jī)程序關(guān)于自動(dòng)化的,那么機(jī)器學(xué)習(xí)可以看做是“關(guān)于自動(dòng)化的自動(dòng)化”。那么自動(dòng)化機(jī)器學(xué)習(xí)就是關(guān)于自動(dòng)化的自動(dòng)化的自動(dòng)化。程序通過(guò)管理重復(fù)的任務(wù)來(lái)減輕我們的壓力;機(jī)器學(xué)習(xí)幫助計(jì)算機(jī)如何最好的處理這些重復(fù)的任務(wù);自動(dòng)化機(jī)器學(xué)習(xí)幫助計(jì)算機(jī)學(xué)習(xí)如何優(yōu)化上面的結(jié)果。
這種思想很有用處;盡管我們之前會(huì)擔(dān)心調(diào)參數(shù)、調(diào)超參數(shù)。自動(dòng)化機(jī)器學(xué)習(xí)通過(guò)嘗試一些列不同的方法,最終會(huì)采用最好的方式來(lái)調(diào)參,從而得到最優(yōu)的結(jié)果。
自動(dòng)化機(jī)器學(xué)的理論基礎(chǔ)來(lái)源于這個(gè)想法:假如我們必須創(chuàng)建海量的機(jī)器學(xué)習(xí)模型、使用大量的算法、使用不同的超參數(shù)配置,那么我們就可以使用自動(dòng)化的方式進(jìn)行建模。同時(shí)也可以比較性能與準(zhǔn)確度。
很簡(jiǎn)單,對(duì)不對(duì)?
現(xiàn)在我們知道了自動(dòng)化機(jī)器學(xué)習(xí)到底是什么了,以及我們要用它的原因。那我們我們?cè)撊绾尾拍軇?chuàng)造出一個(gè)自動(dòng)化機(jī)器學(xué)習(xí)模型來(lái)?接下來(lái)要講解的是兩個(gè)自動(dòng)機(jī)器學(xué)習(xí)工具包的概述,以及二者之間比較。這些工具包是使用python編寫而成的。這兩個(gè)工具使用不同的方式來(lái)達(dá)到相同的目的,也就是是機(jī)器學(xué)習(xí)過(guò)程的自動(dòng)化。
Auto-sklearn是自動(dòng)化機(jī)器學(xué)習(xí)的工具包,我們用它來(lái)替換scikit-learn中的estimator。在最近由KDnuggets舉辦的機(jī)器學(xué)習(xí)博客大賽中,它取得了冠軍頭銜。
auto-sklearn使機(jī)器學(xué)習(xí)的使用者可以很輕松的進(jìn)行算法選擇以及超參數(shù)的調(diào)整。它的優(yōu)勢(shì)就是在于使用貝葉斯優(yōu)化、元數(shù)據(jù)學(xué)習(xí)以及集合建設(shè)。要想了解更多關(guān)于auto-sklearn的背后技術(shù),你可以閱讀這篇2015年發(fā)表在NIPS論文。
上面的信息是摘自項(xiàng)目的文檔說(shuō)明,Auto-sklearn可以通過(guò)貝葉斯優(yōu)化方式將超參數(shù)最優(yōu)化,就是通過(guò)不斷迭代以下幾個(gè)步驟:
創(chuàng)建一個(gè)概率模型,來(lái)找到超參數(shù)設(shè)置與機(jī)器學(xué)習(xí)的表現(xiàn)之間的關(guān)系
使用這個(gè)模型來(lái)挑選出有用的超參數(shù)設(shè)置,通過(guò)權(quán)衡探索與開(kāi)發(fā),進(jìn)而繼續(xù)嘗試。探索指的是探索模型的未知領(lǐng)域;開(kāi)發(fā)指的是重點(diǎn)從已知的空間中找到表現(xiàn)良好的部分。
設(shè)置好超參數(shù),然后運(yùn)行機(jī)器學(xué)習(xí)算法。
下面將進(jìn)一步闡明這個(gè)過(guò)程是如何進(jìn)行的:
這個(gè)過(guò)程可以概括為聯(lián)合選擇算法、預(yù)處理方法以及超參數(shù)。具體如下:分類/回歸的選擇、預(yù)處理方法是最高優(yōu)先級(jí)、分類超參數(shù)、被選擇方法的超參數(shù)會(huì)被激活。我們將使用貝葉斯優(yōu)化方法來(lái)搜索組合空間。貝葉斯優(yōu)化方法適用于處理高維條件空間。我們使用SMAC,SMAC是的基礎(chǔ)是隨機(jī)森林,它是解決這類問(wèn)題的最好方式。
就實(shí)用性而言,由于Auto-sklearn直接替代scikit-learn的estimator,因此scikt-learn需要安裝這個(gè)功能,我們才能利用到這個(gè)優(yōu)勢(shì)。Auto-sklearn同樣也支持在分布式文件系統(tǒng)中進(jìn)行并行計(jì)算,同時(shí)它也可以利用scikit-learn模型的持續(xù)特性。要想高效的使用Auto-sklearn替代estimator只需要4行代碼就可以了。作者這樣寫道:
有一個(gè)更具魯棒性的示例(該示例使用了Auto-sklearn,并以MNIST數(shù)據(jù)集作為數(shù)據(jù)來(lái)源),如下:
需要注意的是,Auto-sklearn是ChaLearn AutoML challenge競(jìng)賽中,auto單元與tweakathon tracks單元的雙料冠軍。
最近Kdnuggets舉辦了自動(dòng)化數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)博客大賽,Auto-sklearn研發(fā)團(tuán)隊(duì)提交的一篇博文在本次大賽中獲獎(jiǎng),你可以點(diǎn)擊這里進(jìn)行閱讀,同樣也可以點(diǎn)擊這里來(lái)閱讀對(duì)他們的的采訪。Auto-sklearn是由Freiburg大學(xué)研發(fā)出來(lái)的。
Auto-sklearn已經(jīng)被托管到GitHub上了,你可以找到相關(guān)文檔以及API。
TPOT被認(rèn)為是“你的數(shù)據(jù)科學(xué)助手”(要注意,不是“你的數(shù)據(jù)科學(xué)替代品”)。它是一個(gè)Python的工具。通過(guò)使用“遺傳編程來(lái)自動(dòng)的創(chuàng)建與優(yōu)化機(jī)器學(xué)習(xí)管道”。TPOT與Auto-sklearn類似,與scikit-learn協(xié)同工作。就像是scikit-learn的包裝器。
在本文中,我們?cè)岬竭^(guò),這兩個(gè)工具使用不同的方式,達(dá)到相似的目標(biāo)。二者都是開(kāi)源的,都是使用python編寫而成的,都宣稱通過(guò)使用自動(dòng)化機(jī)器學(xué)習(xí)的方式簡(jiǎn)化了機(jī)器學(xué)習(xí)的過(guò)程。然而Auto-sklearn使用的是貝葉斯優(yōu)化,TPOT使用的卻是遺傳編程。
盡管兩者使用的方法不同,但是二者的最終結(jié)果卻是相同的:自動(dòng)化超參數(shù)選擇,用一系列算進(jìn)行建模,對(duì)大量特征的探索,這些都導(dǎo)致了迭代建模以及模型進(jìn)化。
TPOT的真正好處之一就是使用scikit-learn的管道,產(chǎn)生可以準(zhǔn)備運(yùn)行的、獨(dú)立的Python代碼。這個(gè)代碼代表著所有備選模型中表現(xiàn)最好的模型。我們就可以修改與審查這份代碼。這份代碼并不會(huì)是最終的模型,而是可以當(dāng)做是我們尋找最優(yōu)模型的有效起點(diǎn)。
下面是一個(gè)關(guān)于TPOT的例子,該案例使用MNIST數(shù)據(jù)集:
這次運(yùn)行的結(jié)果正確率達(dá)到了98%,同時(shí)pyhton代碼也就是我們所說(shuō)的管道也會(huì)被導(dǎo)入到tpot-mnist-pipeline.py文件當(dāng)中,如下所示:
我們可以在GitHub上找到TPOT的源代碼,以及說(shuō)明文檔。
TPOT的領(lǐng)軍人物Randy Olson在Kdnuggets上寫過(guò)一篇關(guān)于TPOT 與AutoML(自動(dòng)化機(jī)器學(xué)習(xí))的文章,你可以點(diǎn)擊這里找到該文章。也會(huì)在這里找到對(duì)Randy的采訪。
TPOT是由賓夕法尼亞大學(xué)生物醫(yī)學(xué)信息學(xué)研究所研究出來(lái)的,由NIH資助。
當(dāng)然,自動(dòng)化機(jī)器學(xué)習(xí)不僅僅只有這兩個(gè)工具。還有其他的工具,像Hyperopt (Hyperopt-sklearn)、 Auto-WEKA,以及Spearmint等等。我打賭在未來(lái)幾年,大量相關(guān)的額外項(xiàng)目將會(huì)出現(xiàn),這些項(xiàng)目中既會(huì)包含研究項(xiàng)目,也會(huì)包含工業(yè)項(xiàng)目。
自動(dòng)化機(jī)器學(xué)習(xí)的未來(lái)在哪里?
我最近公開(kāi)地進(jìn)行過(guò)以下陳述(根據(jù)我的文章《2017年機(jī)器學(xué)習(xí)預(yù)測(cè)》):
自動(dòng)化機(jī)器學(xué)習(xí)將變成重要的技術(shù)。在外人看來(lái),它可能不如深度神經(jīng)網(wǎng)絡(luò)。但是自動(dòng)化機(jī)器學(xué)習(xí)對(duì)于機(jī)器學(xué)習(xí)、人工智能以及數(shù)據(jù)科學(xué)都產(chǎn)生了深遠(yuǎn)的影響。這種影響極有可能在2017年顯示出來(lái)。
在同一篇文章當(dāng)中,Randy Olson也表達(dá)了在2017年他對(duì)自動(dòng)化機(jī)器學(xué)習(xí)的期望。此外Randy在最近的采訪中有更加詳細(xì)地闡述了他的預(yù)測(cè):
在不久的將來(lái),我認(rèn)為自動(dòng)化機(jī)器學(xué)習(xí)將會(huì)替代機(jī)器學(xué)習(xí)的建模過(guò)程:一旦數(shù)據(jù)集擁有相對(duì)清晰的格式,那么自動(dòng)化機(jī)器學(xué)習(xí)將會(huì)比99%的人類更快地設(shè)計(jì)與優(yōu)化機(jī)器學(xué)習(xí)管道。
……
我可以很確定地認(rèn)為自動(dòng)化機(jī)器學(xué)習(xí)系統(tǒng)將會(huì)成為機(jī)器學(xué)習(xí)的主流。
但是自動(dòng)化機(jī)器學(xué)習(xí)是否會(huì)替代數(shù)據(jù)科學(xué)家?Randy繼續(xù)說(shuō)道:
我并不認(rèn)為自動(dòng)化機(jī)器學(xué)習(xí)的目標(biāo)是為了替代數(shù)據(jù)科學(xué)家,就像是智能代碼自動(dòng)完成工具的目標(biāo)并不是來(lái)替代程序員一樣。相反,對(duì)于我來(lái)說(shuō),自動(dòng)化機(jī)器學(xué)習(xí)的的目標(biāo)是為了減輕數(shù)據(jù)科學(xué)家的壓力,使他們不必將大量的精力耗費(fèi)在重復(fù)與耗時(shí)的任務(wù)上(比如說(shuō)機(jī)器學(xué)習(xí)的管道設(shè)計(jì)與超參數(shù)的最優(yōu)化)。這樣他們就可以將時(shí)間投入到無(wú)法進(jìn)行自動(dòng)化的任務(wù)當(dāng)中去。
這種思想十分好。auto-sklearn的開(kāi)發(fā)人員也同樣認(rèn)同他的觀點(diǎn):
我們發(fā)展自動(dòng)化機(jī)器學(xué)習(xí)方法是為了向數(shù)據(jù)科學(xué)家提供幫助,而不是代替他們。這些方法使數(shù)據(jù)科學(xué)家擺脫了討厭復(fù)雜的任務(wù)(比如說(shuō)超參數(shù)優(yōu)化),機(jī)器可以很好地解決這些任務(wù)。然而數(shù)據(jù)分析與結(jié)論獲取的工作仍然需要人類專家來(lái)完成。在未來(lái),理解應(yīng)用程序領(lǐng)域的數(shù)據(jù)科學(xué)家仍然極其的重要。
這聽(tīng)起來(lái)十分的鼓舞人心:數(shù)據(jù)科學(xué)家不會(huì)被大量替換,自動(dòng)化機(jī)器學(xué)習(xí)是為了幫助他們更好的工作。這并不是說(shuō)自動(dòng)化機(jī)器學(xué)習(xí)已經(jīng)很完美了。在我們提到自動(dòng)機(jī)器學(xué)習(xí)是否還有進(jìn)步空間的時(shí)候,Auto-sklearn團(tuán)隊(duì)如是說(shuō):
盡管有一些方法可以用來(lái)調(diào)試機(jī)器學(xué)習(xí)管道的超參數(shù),但是目前為止很少有工作能發(fā)現(xiàn)新管道。Auto-sklearn以固定的順序使用一系列的預(yù)定義的預(yù)處理器與分類器。假如一個(gè)方法對(duì)于找到新管道很有效,那么這個(gè)方法將會(huì)很有用處。當(dāng)然,人們可以繼續(xù)這種思路,并嘗試自動(dòng)尋找新的算法。最近,已經(jīng)有幾篇論文這樣做了。比如說(shuō)Learning to learn by gradient descent by gradient descent.(雷鋒網(wǎng)此前也有提及這篇論文,它獲得了RedditML小組評(píng)選的“年度最佳論文標(biāo)題獎(jiǎng)”)
自動(dòng)化機(jī)器學(xué)習(xí)的發(fā)展方向在哪里?很難說(shuō)清楚。毋庸置疑的是,遲早會(huì)出現(xiàn)。盡管不是所有的數(shù)據(jù)科學(xué)家都熟知自動(dòng)化機(jī)器學(xué)習(xí),但是熟知自動(dòng)化機(jī)器學(xué)習(xí)將會(huì)使你獲益匪淺。別忘了,假如你能夠在大多數(shù)人意識(shí)到之前就去學(xué)習(xí)自動(dòng)化機(jī)器學(xué)習(xí),駕馭科技浪潮,你就不會(huì)因未來(lái)的不確定性而擔(dān)心你的工作了。你對(duì)于這些技術(shù)的駕馭利用將會(huì)幫助你在未來(lái)更好的工作。而我也再想不出比這個(gè)更好的理由來(lái)學(xué)習(xí)自動(dòng)化機(jī)器學(xué)習(xí)了。
via KDnuggets
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。
本專題其他文章