讓體驗(yàn)更個(gè)人化 詳解Facebook人工智能母體FBLearner Flow
點(diǎn)擊:1795
A+ A-
所屬頻道:新聞中心
Facebook昨天第一次正式介紹了FBLearner Flow,一個(gè)可以為全公司員工管理機(jī)器學(xué)習(xí)模型的機(jī)器學(xué)習(xí)軟件。換句話說(shuō),這是一個(gè)可以自己制造人工智能的人工智能,你可以理解為傳說(shuō)中的人工智能母體。
它與其他基于云端的機(jī)器學(xué)習(xí)服務(wù)有點(diǎn)相似,例如微軟的Azure機(jī)器學(xué)習(xí)或者Airbnb的開(kāi)源Airflow,不過(guò),F(xiàn)BLearner Flow是根據(jù)Facebook自己的業(yè)務(wù)而進(jìn)行最優(yōu)化的,裝滿了Facebook工程師開(kāi)發(fā)的算法,讓公司其他人都可以為自己的模型而使用該平臺(tái)。
“公司超過(guò)25%的人都在使用,使用情景是我們之前無(wú)法預(yù)想的。”Facebook核心機(jī)器學(xué)習(xí)小組總監(jiān)Hussein Mehanna在一次訪談中告訴Venture Beat。
Facebook不只可以發(fā)布關(guān)于FBLearner Flow的學(xué)術(shù)論文,還可以最終將其開(kāi)源。Facebook工程師已經(jīng)與其他公司的人討論了這類技術(shù),包括Linkedin、Twitter和Uber等公司。Mehanna說(shuō),他們都非常感興趣。
當(dāng)然會(huì)對(duì)開(kāi)源感興趣啦——這個(gè)系統(tǒng)已經(jīng)在Facebook這樣的大公司驗(yàn)證可行,而且,這!不!花!錢!這一點(diǎn)就與來(lái)自Domino Data Lab和Yhat的數(shù)據(jù)科學(xué)合作工具不同。
Facebook經(jīng)常將一些技術(shù)開(kāi)源,這樣的做法也符合公司自己的需要,因此如果未來(lái)FBLearner Flow完全開(kāi)源了也不奇怪。問(wèn)題是Facebook是否愿意投入工程資源,將這項(xiàng)技術(shù)與其專利系統(tǒng)的匹配斷開(kāi)。話雖如此,如果Facebook不愿開(kāi)源、將FBLearner Flow壓在箱底也不奇怪。因?yàn)槎嗵澚诉@項(xiàng)技術(shù),員工變得更加高效了。這會(huì)是一個(gè)競(jìng)爭(zhēng)優(yōu)勢(shì)。人們?cè)谛孪到y(tǒng)中可以看到過(guò)往的試驗(yàn)和結(jié)果,甚至將兩個(gè)不同的機(jī)器學(xué)習(xí)流水線結(jié)合起來(lái),設(shè)計(jì)出某種更加復(fù)雜的東西。此外,圖形交互界面讓非工程師也可以使用這個(gè)新平臺(tái),因此才會(huì)有Mehanna說(shuō)高達(dá)的25%的人都在使用。
無(wú)論未來(lái)是否會(huì)開(kāi)源,至少,我們今天獲得了一部分FBLearner Flow的技術(shù)詳解。讓我們來(lái)看看Facebook工程師Jeffrey Dunn的博文,詳細(xì)解讀FBLearner Flow作為Facebook的人工智能母體到底厲害在哪兒。Jefferey Dunn從卡內(nèi)基梅隆大學(xué)獲得碩士學(xué)位,2011年加入Facebook,參與打造圖片搜索中的網(wǎng)絡(luò)搜索等工作。
圖片來(lái)源:Facebook Code
如今,F(xiàn)acebook的許多體驗(yàn)和交互都是依靠AI實(shí)現(xiàn)的。當(dāng)你登錄Facebook,我們使用機(jī)器學(xué)來(lái)給你提供獨(dú)特的、個(gè)人化的體驗(yàn)。機(jī)器學(xué)習(xí)(ML)模型實(shí)現(xiàn)了個(gè)人化新聞流(News Feed)、過(guò)濾了可能得罪人的內(nèi)容、突顯流行熱點(diǎn)話題并將搜索結(jié)果排名。還有很多其他體驗(yàn)可以從機(jī)器學(xué)習(xí)中獲益。但是以前,工程師必須有很強(qiáng)機(jī)器學(xué)習(xí)背景,不然沒(méi)法好好利用公司的機(jī)器學(xué)習(xí)基礎(chǔ)設(shè)施。在2014年底,我們從零開(kāi)始,重新定義Facebook的機(jī)器學(xué)習(xí)平臺(tái),將最先進(jìn)的AI和ML算法送到Facebook每一位工程師的手中。
我們希望能有這樣的一個(gè)平臺(tái):
1.每個(gè)機(jī)器學(xué)習(xí)算法應(yīng)該可以一次性設(shè)置好,可以重復(fù)使用;
2. 工程師可以寫(xiě)一個(gè)訓(xùn)練流水線,在許多機(jī)器上平行運(yùn)行,可以被很多工程師所用。
3. 無(wú)論工程師在機(jī)器學(xué)習(xí)領(lǐng)域的背景深淺,都可以很簡(jiǎn)單地訓(xùn)練模型,而且,其中幾乎所有的 步驟都可以完全自動(dòng)化。
4. 人人都能很方便地搜索過(guò)往試驗(yàn)、查看結(jié)果、與他人分享,并在某一個(gè)試驗(yàn)中開(kāi)啟新的變量。
我們決定建造一個(gè)全新平臺(tái):FBLearner Flow,可以簡(jiǎn)單方便地在不同產(chǎn)品中重復(fù)使用算法,可以放大規(guī)模同時(shí)運(yùn)行幾千個(gè)定制試驗(yàn),并且能夠輕松管理試驗(yàn)。這個(gè)平臺(tái)提供了創(chuàng)新性的功能,例如從流水線定義和自動(dòng)平行Python代碼自動(dòng)生成UI體驗(yàn)。平臺(tái)從創(chuàng)立起已經(jīng)訓(xùn)練了超過(guò)一百萬(wàn)個(gè)模型,我們的預(yù)測(cè)服務(wù)發(fā)展到每秒超過(guò)600萬(wàn)次預(yù)測(cè)。
減少了手動(dòng)工作的工程師們可以花更多時(shí)間進(jìn)行特征工程,這反過(guò)來(lái)又可以進(jìn)一步提升精度。工程師可以在更大的平臺(tái)層面去發(fā)揮影響。FBLearner Flow提供了平臺(tái)和工具,讓工程師每天進(jìn)行幾千個(gè)試驗(yàn)。
核心概念和組成
在深入理解系統(tǒng)之前,我們先來(lái)看幾個(gè)關(guān)鍵概念。
工作流:一個(gè)工作流就是在FBLearner Flow中定義的一個(gè)流水線,是所有機(jī)器學(xué)習(xí)任務(wù)的入口。每個(gè)工作流作為一個(gè)具體的任務(wù),例如訓(xùn)練和評(píng)估某個(gè)具體的模型。工作流根據(jù)操作員來(lái)定義,可以平行運(yùn)作。
操作員:操作員是工作流的建造模塊。從概念上,你可以將操作員想象為一個(gè)程序里的一個(gè)功能。在FBLearner Flow中,操作員是執(zhí)行的最小單位,可以在單一機(jī)器上運(yùn)作。
頻道:頻道代表輸入和輸出,在一個(gè)工作流的各個(gè)操作員直接流轉(zhuǎn)。所有頻道都用一個(gè)我們定義的定制類別系統(tǒng)輸入。
平臺(tái)包括這三個(gè)核心組成部分:一個(gè)作者及定制分布工作流的實(shí)施環(huán)境,一個(gè)發(fā)布試驗(yàn)和查看結(jié)果的試驗(yàn)管理UI,以及無(wú)數(shù)預(yù)定義的流水線,用來(lái)訓(xùn)練Facebook大部分經(jīng)常使用的機(jī)器學(xué)習(xí)算法。
作者和實(shí)施環(huán)境
平臺(tái)上所有的工作流和操作員都定義為Python功能,使用獨(dú)特的裝飾器來(lái)整合進(jìn)入平臺(tái)。讓我們來(lái)看一個(gè)具體的情景,我們想用經(jīng)典的Iris數(shù)據(jù)集訓(xùn)練一個(gè)決策樹(shù),基于花朵的花瓣和萼片大小來(lái)預(yù)測(cè)花的品種。假設(shè)數(shù)據(jù)庫(kù)是在Hive里面,有五個(gè)欄目,分布代表了花瓣寬度、花瓣長(zhǎng)度、萼片寬度、萼片長(zhǎng)度和花朵樣本的品種。在這個(gè)工作流中,我們會(huì)用日記損失來(lái)評(píng)估模型的性能,預(yù)測(cè)一個(gè)未標(biāo)記的數(shù)據(jù)庫(kù)的品種。
要處理這類任務(wù)的工作流樣本大概長(zhǎng)這樣:
圖片來(lái)源:Facebook Code
讓我們來(lái)仔細(xì)看看這個(gè)工作流,理解FBLearner Flow到底是怎么運(yùn)作的。
首先,@workflow裝飾器告訴FBLearner Flow,iris功能不是一個(gè)普通Python功能,而是一個(gè)工作流。input_schema和returns參值說(shuō)明了工作流的輸入類型及輸出類型。實(shí)施框架會(huì)自動(dòng)確認(rèn)這些類型,確保工作流收到的數(shù)據(jù)是符合其預(yù)期的。這個(gè)例子中,labeled_data輸入標(biāo)記為有四個(gè)欄目的數(shù)據(jù)庫(kù)輸入。如果在數(shù)據(jù)庫(kù)中有一個(gè)欄目缺失,那么就會(huì)提出一個(gè)TypeError異常,因?yàn)閿?shù)據(jù)庫(kù)與這個(gè)工作流不兼容。
工作流的本體看起來(lái)相應(yīng)普通的Python功能,連接到幾個(gè)操作員來(lái)實(shí)施機(jī)器學(xué)習(xí)工作。雖然看起來(lái)普通,F(xiàn)BLearner Flow使用一個(gè)future系統(tǒng)來(lái)在工作流內(nèi)提供平行化,如果有若干個(gè)步驟不共享一個(gè)數(shù)據(jù)相關(guān)性,就可以同時(shí)運(yùn)行。
工作流不是線性執(zhí)行,而是分兩個(gè)步驟:1)DAG編譯步驟,2)操作員執(zhí)行步驟。在第一部中,操作員并沒(méi)有執(zhí)行,而是返回future。future代表了延遲的計(jì)算。因此在上述例子中,dt變量實(shí)際上是一個(gè)future,代表了還沒(méi)有發(fā)生的決策樹(shù)訓(xùn)練。FBLearner Flow在DAG編譯階段的所有操作員撤銷行為都留有記錄,并且記錄所有必須在操作之前搞定的future。例如,ComputeMetricsOperator和PredictOperator將dt.model作為輸入,因此系統(tǒng)知道nn一定要在操作員運(yùn)行之前計(jì)算,因此必須等到TrainDecisionTreeOperator完成。
DAG編譯階段完成時(shí),F(xiàn)BLearner Flow將打造一個(gè)操作員DAG,可以預(yù)定何時(shí)進(jìn)行執(zhí)行,每個(gè)操作員只要上一級(jí)成功完成就可以開(kāi)始執(zhí)行。在這個(gè)例子中,ComputeMetricsOperator和PredictOperator之間沒(méi)有數(shù)據(jù)相關(guān)性,因此這兩個(gè)操作員可以同時(shí)平行運(yùn)行。
圖片來(lái)源:Facebook Code
在操作員執(zhí)行階段,每個(gè)操作員有自己的CPU、GPU和存儲(chǔ)要求。FBLearner Flow會(huì)分配一個(gè)匹配操作員任務(wù)要求的機(jī)器部分。平臺(tái)自動(dòng)將相關(guān)的代碼分配給機(jī)器,在操作員之間傳送輸入和輸出。
試驗(yàn)管理UI
在全公司有幾百個(gè)不同的工作流,進(jìn)行著無(wú)數(shù)個(gè)機(jī)器學(xué)習(xí)任務(wù)。我們面臨的一個(gè)挑戰(zhàn)是打造一個(gè)通用的UI界面,可以匹配多元的工作流使用。利用定制類別系統(tǒng),我們打造了一個(gè)可以不需要理解每個(gè)工作流的實(shí)施細(xì)節(jié)、就能夠解讀輸入和輸出的UI。為了進(jìn)一步定制化,平臺(tái)UI提供了一個(gè)插件系統(tǒng),可以用來(lái)為具體的團(tuán)隊(duì)和整合Facebook系統(tǒng)提供定制化體驗(yàn)。
FBLearner Flow UI還提供了一些額外體驗(yàn):發(fā)布工作流;將輸出視覺(jué)化并進(jìn)行比較;管理試驗(yàn)。
發(fā)布工作流
我們之前看到,每個(gè)工作流規(guī)定了一個(gè)輸入綱要。工程師發(fā)布工作流的時(shí)候,UI讀取到了輸入綱要,自動(dòng)生成一個(gè)結(jié)構(gòu)化表格,來(lái)確認(rèn)具體的工作流輸入。這讓ML工程師可以不用寫(xiě)一行前端代碼,就可以使用豐富的UI。定制類別系統(tǒng)有豐富的類別用于描述數(shù)據(jù)庫(kù)、特征和許多其他共同的機(jī)器學(xué)習(xí)數(shù)據(jù)類型。這讓UI可以描繪復(fù)雜的輸入元素,例如功能輸入提示和數(shù)據(jù)庫(kù)選擇條。
圖片來(lái)源:Facebook Code
視覺(jué)化輸出并比較
工程師可以看到每一個(gè)工作流的輸出,來(lái)修改標(biāo)簽和其他超數(shù)據(jù),并采取行動(dòng),例如將模型導(dǎo)入生產(chǎn)。工程師可以比較工作流的輸入和輸出,來(lái)基于基準(zhǔn)評(píng)估試驗(yàn)的性能。我們使用了一項(xiàng)類似的技術(shù)來(lái)將輸出視覺(jué)化,類似于渲染輸入形式的技術(shù)——系統(tǒng)用此來(lái)為每種具體類型的輸出提供渲染。通過(guò)一個(gè)插件系統(tǒng)可以加入額外的定制視覺(jué)化和行動(dòng)。例如,新聞流(News Feed)團(tuán)隊(duì)可以為他們的模型增加實(shí)時(shí)系統(tǒng)量度。
圖片來(lái)源:Facebook Code
管理試驗(yàn)
Facebook工程師每天發(fā)布幾千個(gè)試驗(yàn),平臺(tái)UI提供了管理所有實(shí)驗(yàn)的工具。所有的工作流運(yùn)行都在Elasticsearch記錄索引,因此可以用無(wú)數(shù)的維度來(lái)進(jìn)行搜索,系統(tǒng)支持保存搜索,方便尋找試驗(yàn)。當(dāng)調(diào)試模型時(shí),工程師經(jīng)常運(yùn)行細(xì)分的復(fù)雜參數(shù)掃描分析,很方便就能看到哪一個(gè)配置產(chǎn)出的結(jié)果最好。
圖片來(lái)源:Facebook Code
機(jī)器學(xué)習(xí)程序庫(kù)
FBLearner Flow平臺(tái)的一個(gè)核心原則是,它不與任何具體的算法綁定。因而,平臺(tái)可以支持無(wú)數(shù)的ML算法以及這些算法的創(chuàng)新組合。平臺(tái)也很容易延展——任何工程師都可以寫(xiě)一個(gè)新的工作流,讓他或她最愛(ài)的算法可供全公司使用。算法的開(kāi)源實(shí)施很容易在一個(gè)工作流中完成,并整合進(jìn)入Facebook的基礎(chǔ)設(shè)施。
Facebook的應(yīng)用機(jī)器學(xué)習(xí)團(tuán)隊(duì)維護(hù)的工作流可以為常用算法提供可擴(kuò)展的實(shí)施,包括:
神經(jīng)系統(tǒng)
迭代決策樹(shù)(GBDT)
LambdaMART
隨機(jī)梯度下降
邏輯回歸
未來(lái)計(jì)劃
有了FBLearner Flow,AI成為工程師組織中的核心,通過(guò)簡(jiǎn)單的API為Facebook工程師提供了最先進(jìn)的人工智能。我們持續(xù)改善FBLearner Flow,來(lái)讓工程師變得越來(lái)越高效,能夠?qū)C(jī)器學(xué)習(xí)應(yīng)用于越來(lái)越多的產(chǎn)品中。在未來(lái)的幾個(gè)月中,我們將更加緊密關(guān)注其中一些系統(tǒng)和應(yīng)用,讓工程師在產(chǎn)品中使用AI和ML更加簡(jiǎn)便,并為使用Facebook的人們提供更加個(gè)人化的體驗(yàn)。
(審核編輯: 滄海一土)
分享