趙汝濤 王 菁
(北方工業(yè)大學(xué)大規(guī)模流數(shù)據(jù)集成與分析技術(shù)北京市重點(diǎn)實(shí)驗(yàn)室 北京 100144)
生活中很多領(lǐng)域需要用到數(shù)據(jù)分析,但是根據(jù)不同的數(shù)據(jù)集選擇合適的模型并訓(xùn)練、優(yōu)化參數(shù)是一件專(zhuān)業(yè)、復(fù)雜且耗時(shí)的事情,且進(jìn)行數(shù)據(jù)分析對(duì)業(yè)務(wù)人員的專(zhuān)業(yè)水平和經(jīng)驗(yàn)都要求非常高,如何根據(jù)數(shù)據(jù)集自動(dòng)生成機(jī)器學(xué)習(xí)流程(pipeline)是一個(gè)難點(diǎn)問(wèn)題。針對(duì)此問(wèn)題,研究學(xué)者開(kāi)展了AutoML(Automated Machine Learning)研究。AutoML旨在以數(shù)據(jù)驅(qū)動(dòng),客觀和自動(dòng)化的方式做出這些決策:用戶(hù)只需提供數(shù)據(jù),而AutoML系統(tǒng)會(huì)自動(dòng)確定最適合該特定應(yīng)用程序的方法[1]。
因?yàn)樵趯?shí)踐中探索原始元素和超參數(shù)值的整個(gè)空間是不可行的,所以這些系統(tǒng)使用復(fù)雜的搜索策略來(lái)修剪空間并減少需要評(píng)估的pipeline數(shù)量[2]。AutoML的主要實(shí)現(xiàn)方法有:網(wǎng)格搜索方法、隨機(jī)搜索方法、貝葉斯方法、啟發(fā)式方法、基于語(yǔ)法的方法等。在當(dāng)前AutoML工具當(dāng)中,AutoWeka[3]使用貝葉斯優(yōu)化,Auto-sklearn[4]使用元學(xué)習(xí),TPOT[5]使用遺傳編程,而AlphaD3M[6]使用強(qiáng)化學(xué)習(xí)。據(jù)本文了解,到目前為止這些AutoML中大部分都存在耗時(shí)長(zhǎng)或者性能低的情況,且并沒(méi)有考慮將pipeline中primitive之間關(guān)聯(lián)關(guān)系進(jìn)行利用。
本文從primitive服務(wù)關(guān)聯(lián)角度入手,定義了primitive服務(wù)關(guān)聯(lián)模型及挖掘算法,從歷史pipeline當(dāng)中挖掘出primitive間的關(guān)聯(lián)關(guān)系,設(shè)計(jì)了結(jié)合服務(wù)關(guān)聯(lián)與數(shù)據(jù)特征的機(jī)器學(xué)習(xí)流程生成方法,可以在產(chǎn)生pipeline的性能和耗時(shí)維持在較好水平的同時(shí),使產(chǎn)出pipeline的性能整體提升。
本文綜合數(shù)據(jù)特征與服務(wù)關(guān)聯(lián)的機(jī)器學(xué)習(xí)流程生成方法原理如圖1所示,主要分為這幾個(gè)模塊:LSTM預(yù)訓(xùn)練模塊、GAME生成器模塊、LSTM生成器模塊和Coach模塊。
LSTM預(yù)訓(xùn)練模塊指將數(shù)據(jù)集和任務(wù)作為輸入,訓(xùn)練出預(yù)訓(xùn)練LSTM model,在本文當(dāng)中用于預(yù)測(cè)pipeline性能和primitive出現(xiàn)概率,訓(xùn)練出的LSTM model供Coach內(nèi)部使用。
GAME生成器用來(lái)生成博弈模型,博弈模型是一個(gè)針對(duì)于機(jī)器學(xué)習(xí)流程生成問(wèn)題框定的單人游戲。
LSTM生成器模塊用于生成LSTM模型,連同博弈模型一起用于Coach的內(nèi)部使用。
Coach模塊,以GAME生成器、LSTM生成器生成的博弈模型、LSTM和預(yù)訓(xùn)練LSTM模型、best-model(預(yù)置或上次博弈勝出的模型)為輸入,生成兩個(gè)不同的玩家(圖1中的Player)互相博弈,博弈模型中以MCTS[6](蒙特卡洛樹(shù)搜索)為選點(diǎn)策略的玩家,其中,MCTS用于在巨大的搜索空間高效搜索節(jié)點(diǎn),可用來(lái)解決primitive搜索空間過(guò)大問(wèn)題。博弈完成后保留勝者的模型,該博弈過(guò)程稱(chēng)為self-play。
機(jī)器學(xué)習(xí)流程生成方法的具體流程是:輸入數(shù)據(jù)集和任務(wù),通過(guò)預(yù)訓(xùn)練模型模塊產(chǎn)生預(yù)訓(xùn)練模型,并利用GAME生成器生成博弈模型,以博弈模型為輸入通過(guò)LSTM生成器生成LSTM,將這些輸出一起作為Coach的輸入,在Coach內(nèi)部根據(jù)這些輸入生成為兩個(gè)玩家:玩家1、玩家2,用self-play的方式去在博弈模型中博弈(先結(jié)束游戲的玩家為勝,即先生成可用機(jī)器學(xué)習(xí)流程的玩家為勝),博弈時(shí)使用MCTS算法選擇primitive,MCTS中以LSTM(數(shù)據(jù)特征角度)、服務(wù)關(guān)聯(lián)(流程角度)兩者共同作為MCTS的選擇策略,最終保留獲勝玩家的LSTM模型,用于下次指導(dǎo)MCTS選擇primitive,從而用強(qiáng)化學(xué)習(xí)的方法達(dá)到不斷自我優(yōu)化的目的。
本文將上述MCTS使用LSTM和服務(wù)關(guān)聯(lián)共同指導(dǎo)來(lái)生成機(jī)器學(xué)習(xí)流程的方法簡(jiǎn)稱(chēng)為DFSR方法。
通過(guò)分析機(jī)器學(xué)習(xí)流程中存在的服務(wù)關(guān)聯(lián)關(guān)系,在Matthew B.Dwyer的系統(tǒng)特性規(guī)范模式[11]基礎(chǔ)上,將primitive服務(wù)關(guān)聯(lián)關(guān)系定義如下:
例如對(duì)LL0_13_breast_cancer數(shù)據(jù)集執(zhí)行分類(lèi)任務(wù)的機(jī)器學(xué)習(xí)流程當(dāng)中primitive間的存在的部分關(guān)聯(lián)關(guān)系示例如表1所示,根據(jù)關(guān)聯(lián)關(guān)系程度不同分為強(qiáng)關(guān)聯(lián)和弱關(guān)聯(lián),最終整生成primitive服務(wù)關(guān)聯(lián)約束模型。
表1 Primitive服務(wù)關(guān)聯(lián)關(guān)系示例
Occurrence patterns(發(fā)生模式)(a、b均代表單個(gè)primitive):
“stron g exist directly”:表示a緊鄰b出現(xiàn),且為強(qiáng)約束關(guān)系。
“weak exist d i rect ly”:表示a可能緊鄰b出現(xiàn),弱約束關(guān)系。
Order pattern(模式發(fā)生順序):
“a fter”:表示發(fā)生模式一直到b出現(xiàn)后才會(huì)發(fā)生。
2.3.1 Primitive服務(wù)關(guān)聯(lián)模型
Primitive服務(wù)關(guān)聯(lián)關(guān)系模型用于表示primitive之間的二元行為約束關(guān)系,可以表示為一個(gè)四元組:
l i=
其中:linkID是服務(wù)超鏈的唯一標(biāo)識(shí)。linkID=?(sourceI D,tar getI D),其 中 ? 是 由sourceID和targetID唯一確定l inkI D取值的函數(shù),例如?可以表示為sourceI D+"_"+t argetID。sourceID是源primitive的唯一標(biāo)識(shí)。target ID是目標(biāo)primitive的唯一標(biāo)識(shí)。consT ype表示兩個(gè)primitive之間的二元約束關(guān)系。
2.3.2 挖掘算法
假設(shè)S和T為primitive,將需要的數(shù)據(jù)構(gòu)建成頻度表,其中包含以下信息:
&S:S在其他primitive前直接出現(xiàn)的總次數(shù);
S>T:T在S之后直接出現(xiàn)的次數(shù);
S→T:T在S之后直接出現(xiàn)的概率。
表2 頻度表(示例s為sklearn.preprocessing.KBinsDiscretizer)
為了準(zhǔn)確反映服務(wù)行為約束的強(qiáng)度,在傳統(tǒng)流程挖掘算法中結(jié)合AutoML的情況,考慮了機(jī)器學(xué)習(xí)流程的性能指標(biāo),本文過(guò)濾掉性能過(guò)低的機(jī)器學(xué)習(xí)流程結(jié)果,使用挖掘算法計(jì)算最終的primitive的前后關(guān)聯(lián)關(guān)系?;谝陨隙x,提出基于機(jī)器學(xué)習(xí)流程案例挖掘以發(fā)現(xiàn)primitive間二元服務(wù)行為約束關(guān)系的算法。
算法1服務(wù)關(guān)聯(lián)挖掘算法
輸入file:生成機(jī)器學(xué)習(xí)流程歷史數(shù)據(jù)
primitives:生成機(jī)器學(xué)習(xí)流程所需要的primitive
輸出factor:服務(wù)關(guān)聯(lián)系數(shù)結(jié)果
算法的大致流程為:
Step1輸入所有待計(jì)算的primitives和待挖掘的文本文件file,file是包含機(jī)器學(xué)習(xí)流程的數(shù)據(jù)文件,其中包含機(jī)器學(xué)習(xí)流程和機(jī)器學(xué)習(xí)流程的性能數(shù)據(jù)。
Step2初始化所有primitive。
Step3從file中統(tǒng)計(jì)出每個(gè)primitive在緊隨其他primitive之前和之后出現(xiàn)的次數(shù)。
Step4然后嵌套兩層循環(huán),第一層為S(服務(wù)關(guān)聯(lián)中前一個(gè)primitive),第二層為T(mén)(服務(wù)關(guān)聯(lián)中后一個(gè)primitive),分別統(tǒng)計(jì)出S>T和&S次數(shù),并利用兩者的結(jié)果計(jì)算出每一個(gè)S→T的結(jié)果。
Step5將統(tǒng)計(jì)結(jié)果更新到factor(字典結(jié)構(gòu),用于記錄每一個(gè)S→T的結(jié)果),最后程序?qū)⑼诰蚪Y(jié)果factor輸出。
MCTS接收s和a作為輸入,s指代的是當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程,a指代的是action:當(dāng)前所選的primitive在MCTS中的表述,主要是為了方便于系統(tǒng)操作,將primitive結(jié)合相應(yīng)的語(yǔ)法做出的結(jié)構(gòu)調(diào)整,調(diào)整后以action的形式呈現(xiàn)。
MCTS接收s和a之后,分別查詢(xún)出a在s下的LSTM預(yù)測(cè)值和服務(wù)關(guān)聯(lián)預(yù)測(cè)值,將最終結(jié)果用于指導(dǎo)MCTS選點(diǎn)。MCTS的輸出是一組action的預(yù)測(cè)值,玩家在此組action中選出最佳a(bǔ)ction用于生成機(jī)器學(xué)習(xí)流程,進(jìn)而和另外一個(gè)玩家對(duì)抗。
受AlphaD3M的啟發(fā),本文考慮到MCTS的UCT算法當(dāng)中僅考慮下步操作的情況,在其基礎(chǔ)上引入primitive服務(wù)關(guān)聯(lián)約束模型,與LSTM方法不同,LSTM從數(shù)據(jù)特征角度給MCTS以指導(dǎo),服務(wù)關(guān)聯(lián)關(guān)注的是在流程中前后primitive之間的約束關(guān)系,從流程的服務(wù)關(guān)聯(lián)角度給MCTS以指導(dǎo),利用歷史經(jīng)驗(yàn)來(lái)對(duì)每一個(gè)有關(guān)聯(lián)約束強(qiáng)度的action進(jìn)行指導(dǎo),從而整體提高機(jī)器學(xué)習(xí)流程的性能。
具體做法是:在MCTS的基礎(chǔ)上加入服務(wù)關(guān)聯(lián)關(guān)系T(l,a),使用服務(wù)關(guān)聯(lián)和LSTM的預(yù)測(cè)值共同指導(dǎo)MCTS的選擇,由于這個(gè)self-play循環(huán)過(guò)程是強(qiáng)化學(xué)習(xí),在強(qiáng)化學(xué)習(xí)中存在a在s中的強(qiáng)化學(xué)習(xí)獎(jiǎng)勵(lì)值、不存在a在s中的強(qiáng)化學(xué)習(xí)獎(jiǎng)勵(lì)值兩種情況,根據(jù)情況不同,更改后MCTS的上限綁定更新規(guī)則的隨機(jī)搜索公式如下:
其中,T(l,a)公式是:
wT(l,a):其中l(wèi)是當(dāng)前所選action指代的primitive在pipeline中的前一個(gè)primitive,a是當(dāng)前所選action,T(l,a)是前后primitive間的約束強(qiáng)度(通過(guò)挖掘到的關(guān)聯(lián)強(qiáng)度表獲得),當(dāng)關(guān)聯(lián)約束關(guān)系是“strong exist”時(shí),T(l,a)輸出值為1,當(dāng)關(guān)聯(lián)約束關(guān)系是“weak exist”時(shí),T(l,a)輸出值為τ的值,當(dāng)關(guān)聯(lián)約束關(guān)系是“always absent”時(shí),T(l,a)輸出值為0;強(qiáng)弱界定閾值默認(rèn)為0.06。w是根據(jù)LSTM和UCT輸出值大小制定的權(quán)值,將T值限制到LSTM預(yù)測(cè)值的相同數(shù)量級(jí),以確保它們具有同等的決策力。
Q(s,a):Q(s,a)是當(dāng)前action在當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程中的預(yù)期獎(jiǎng)勵(lì)值,用于強(qiáng)化學(xué)習(xí)。
cP(s,a)和cP(s,a)sqrt(N(s)):其中,N(s)是當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程s被訪問(wèn)的次數(shù);N(s,a)是action在當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程s當(dāng)中被訪問(wèn)次數(shù)。P(s,a)是LSTM對(duì)從狀態(tài)s采取行動(dòng)a的概率的估計(jì),c是決定探索量的常數(shù)。
這樣,每次循環(huán),當(dāng)整個(gè)公式最終的結(jié)果大于新的閾值時(shí),MCTS更新閾值將會(huì)更新為當(dāng)前action的U值,最終選出當(dāng)前actions中評(píng)分最高的action,用于指導(dǎo)MCTS對(duì)最優(yōu)action的選擇。如果選擇的action既有LSTM預(yù)測(cè)值,又有服務(wù)關(guān)聯(lián)約束值,就意味著該action對(duì)于當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程有更大價(jià)值,那么將比其他普通action更容易成為best action,從而從眾多actions中脫穎而出,循環(huán)多次后最終結(jié)果中將具有更多包含服務(wù)關(guān)聯(lián)信息的pipeline,而這些服務(wù)關(guān)聯(lián)信息是由滿(mǎn)足高性能條件的機(jī)器學(xué)習(xí)流程中提取而來(lái),意味著這種具有服務(wù)關(guān)聯(lián)關(guān)系的前后primitive搭配更有希望成為高性能的機(jī)器學(xué)習(xí)流程,進(jìn)而提高生成的整體機(jī)器學(xué)習(xí)流程性能。
綜合數(shù)據(jù)特征和服務(wù)關(guān)聯(lián)的DFSR MCTS算法描述如下:
算法2 DFSR MCTS算法
輸入board:當(dāng)前博弈模型中的配置信息
player:當(dāng)前玩家
numMCTSSims:MCTS規(guī)定模擬次數(shù)
輸出probs:一組action的預(yù)測(cè)值
算法的大致流程為
Step1輸入博弈模型中的board(內(nèi)容是當(dāng)前博弈模型的當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程,包含可選action、當(dāng)前機(jī)器學(xué)習(xí)流程等信息)、玩家、numMCTSsims。
Step2然后循環(huán)運(yùn)行numMCTSsims次,每次循環(huán),初始化本次循環(huán)當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程和玩家的狀態(tài)信息,清空上次循環(huán)的數(shù)據(jù),獲取本次循環(huán)的數(shù)據(jù)。
Step3接下來(lái)使用服務(wù)關(guān)聯(lián)和LSTM共同指導(dǎo)從可選action列表中選取綜合評(píng)分最高的action,替換到當(dāng)前數(shù)據(jù)集的數(shù)據(jù)特征和機(jī)器學(xué)習(xí)流程中的機(jī)器學(xué)習(xí)流程上面(初始機(jī)器學(xué)習(xí)流程是一個(gè)模板,替換就是查找出該action在機(jī)器學(xué)習(xí)流程中所屬的位置,然后替換到模板相應(yīng)的位置),再次遞歸,每次遞歸到最后的節(jié)點(diǎn)后,都會(huì)向上反向傳播每個(gè)點(diǎn)的概率值。
Step4如此多次循環(huán)后返回一組包含所有可選action的概率值probs。
實(shí)驗(yàn)使用的數(shù)據(jù)集來(lái)源于OpenML。實(shí)驗(yàn)執(zhí)行分類(lèi)任務(wù),性能評(píng)價(jià)指標(biāo)選擇為f1_macro。實(shí)驗(yàn)環(huán)境如下:
操作系統(tǒng):Ubuntu18.04;內(nèi)存:8G;CPU:Intel Pentium(R)CPU G4400 3.30GHz;GPU:Nvidia GTX950;GPU內(nèi)存:4G。
首先進(jìn)行數(shù)據(jù)集劃分,每個(gè)待運(yùn)行的數(shù)據(jù)集為測(cè)試集,其余為訓(xùn)練集(剔除每次訓(xùn)練集的關(guān)聯(lián)約束結(jié)果)。之后使用TPOT、Autostacker、AlphaD3M和DFSR分別對(duì)數(shù)據(jù)集執(zhí)行相同任務(wù)并對(duì)輸出結(jié)果做對(duì)比。實(shí)驗(yàn)過(guò)程中,對(duì)每個(gè)數(shù)據(jù)集運(yùn)行多次,分別記錄了所有產(chǎn)出pipeline的性能和總耗時(shí),最后對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行了對(duì)比。
將本文提出的DFSR方法與TPOT、Autostacker、AlphaD3M在生成的機(jī)器學(xué)習(xí)流程性能和總耗時(shí)方面進(jìn)行了比較,結(jié)果如圖2、3所示。
圖2 機(jī)器學(xué)習(xí)流程的整體性能對(duì)比
圖3 生成機(jī)器學(xué)習(xí)流程的整體耗時(shí)對(duì)比
圖2顯示的是生成的所有pipeline的性能結(jié)果對(duì)比。從中可以看出,使用DFSR方法生成的pipeline性能達(dá)到了目前AutoML的良好水平。在所有數(shù)據(jù)集上,使用DFSR方法產(chǎn)生的pipeline性能都高于AlphaD3M。在第一個(gè)數(shù)據(jù)集中,使用DFSR方法產(chǎn)生的性能結(jié)果高于TPOT,僅次于Autostacker。在第三個(gè)數(shù)據(jù)集中,使用DFSR方法產(chǎn)生的性能結(jié)果高于AutoStacker,僅次于TPOT。
圖3顯示的是生成的所有pipeline的總耗時(shí)對(duì)比。從中可以看出,在運(yùn)行同一數(shù)據(jù)集的總耗時(shí)方面,AlphaD3M和DFSR方法遠(yuǎn)低于TPOT和Autostacker,執(zhí)行任務(wù)的總耗時(shí)從TPOT和Autostacker的小時(shí)級(jí)別下降到分鐘級(jí)別;此外,由于服務(wù)關(guān)聯(lián)的數(shù)量,DFSR方法在不同的數(shù)據(jù)集上比AlphaD3M多十幾秒到幾十秒不等。
分析實(shí)驗(yàn)結(jié)果,降低耗時(shí)的原因是由于本文的DFSR方法使用的primitive選擇方式與大多數(shù)AutoML生成過(guò)程中選擇primitive不同,大多數(shù)AutoML選擇的方法是預(yù)置一系列模型,然后嘗試每個(gè)模型,在嘗試過(guò)程中使用各種算法進(jìn)行參數(shù)調(diào)整,然后選擇效果好的模型使用。而本文使用的方法是根據(jù)數(shù)據(jù)特征和問(wèn)題定義去預(yù)測(cè)機(jī)器學(xué)習(xí)流程每個(gè)階段所需要的primitive,將機(jī)器學(xué)習(xí)流程結(jié)構(gòu)化、工程化,使用神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)來(lái)選擇模型而不是全部嘗試之后選擇模型,減少了大量計(jì)算時(shí)間,從而維持良好的機(jī)器學(xué)習(xí)流程性能水平的同時(shí),降低時(shí)間消耗。
此外,由于本文使用了博弈策略,所以理論上輸出LSTM模型對(duì)生成機(jī)器學(xué)習(xí)流程指導(dǎo)意義更大,同時(shí)加上服務(wù)關(guān)聯(lián)又可以利用到性能良好的機(jī)器學(xué)習(xí)流程的歷史經(jīng)驗(yàn),所以生成的機(jī)器學(xué)習(xí)流程整體性能可以達(dá)到良好水平。
本文介紹了一種在數(shù)據(jù)分析領(lǐng)域中根據(jù)數(shù)據(jù)集自動(dòng)生成pipeline的方法,通過(guò)結(jié)合數(shù)據(jù)特征與服務(wù)關(guān)聯(lián)關(guān)系,在耗時(shí)方面極大的縮短了AutoML耗時(shí),將總耗時(shí)縮短至分鐘級(jí)。在數(shù)據(jù)分析領(lǐng)域,本文提出的這種方式,將AutoML和服務(wù)組合兩個(gè)領(lǐng)域的技術(shù)應(yīng)用到了機(jī)器學(xué)習(xí)的pipeline流程生成,為pipeline合成提供了一個(gè)新思路。