楊艷艷, 李雷孝*, 林浩, 王永生 , 王慧, 高靜
(1.內(nèi)蒙古工業(yè)大學(xué)數(shù)據(jù)科學(xué)與應(yīng)用學(xué)院, 呼和浩特 010080; 2.內(nèi)蒙古自治區(qū)基于大數(shù)據(jù)的軟件服務(wù)工程 技術(shù)研究中心, 呼和浩特 010080; 3.內(nèi)蒙古農(nóng)業(yè)大學(xué)計算機(jī)與信息工程學(xué)院, 呼和浩特 010010)
隨著大數(shù)據(jù)時代的到來,越來越多的機(jī)器學(xué)習(xí)算法被應(yīng)用于數(shù)據(jù)處理和分析中[1]。為了訓(xùn)練出準(zhǔn)確率較高的模型,模型訓(xùn)練者不可避免地要對機(jī)器學(xué)習(xí)算法中可調(diào)整的參數(shù)尋優(yōu)。如果參數(shù)取值不當(dāng),將會嚴(yán)重影響模型的性能[2]。而在進(jìn)行機(jī)器學(xué)習(xí)的參數(shù)尋優(yōu)時,需將多組參數(shù)輸入機(jī)器學(xué)習(xí)算法中,利用訓(xùn)練得到的模型的準(zhǔn)確率和泛化能力作為參數(shù)尋優(yōu)的標(biāo)準(zhǔn)評價指標(biāo)。這就意味著機(jī)器學(xué)習(xí)的參數(shù)尋優(yōu)是一個極其耗時的過程,每評價一次參數(shù)就需要訓(xùn)練一次模型?;跀?shù)據(jù)并行的并行訓(xùn)練方法是目前提高機(jī)器學(xué)習(xí)訓(xùn)練效率的主流方法,該方法將訓(xùn)練數(shù)據(jù)劃分后分配到各個工作節(jié)點(diǎn)上,各節(jié)點(diǎn)使用分到的數(shù)據(jù)對模型按照某種優(yōu)化方法進(jìn)行更新[3]。但在考慮參數(shù)尋優(yōu)時,它的訓(xùn)練效率常常不盡如人意。目前為止,如何提高機(jī)器學(xué)習(xí)的參數(shù)尋優(yōu)效率仍是一個棘手問題。
近幾年來,針對機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的問題,大量學(xué)者進(jìn)行了研究。首先用于實(shí)踐的是人為的手動調(diào)參。但由于手動調(diào)參不確定性大且耗時耗力,因此新的方法被應(yīng)用到機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)。比如Cui 等[4]、李瀚等[5]提出利用改進(jìn)的網(wǎng)格搜索算法來提高機(jī)器學(xué)習(xí)最優(yōu)參數(shù)的搜索效率。李坤等[6]提出了基于Spark并行計算框架進(jìn)行網(wǎng)格搜索的并行計算,以找到支持向量機(jī)(support vector machines, SVM)的最優(yōu)參數(shù)。但網(wǎng)格搜索算法實(shí)際上是對固定范圍內(nèi)的所有參數(shù)取值進(jìn)行遍歷搜索,且傳統(tǒng)的網(wǎng)格搜索僅僅是通過改變步長來提高搜索效率。網(wǎng)格搜索的并行計算雖然在一定程度上提高了參數(shù)尋優(yōu)的效率,但參數(shù)尋優(yōu)的范圍和步長會直接影響參數(shù)的優(yōu)化程度。另一方面,網(wǎng)格搜索算法只適用于參數(shù)較少以及參數(shù)范圍較小的情況下。在參數(shù)多,取值范圍較廣的情況下使用網(wǎng)格搜索算法,將會存在計算復(fù)雜、耗時長等問題[7]。
針對使用網(wǎng)格搜索算法對機(jī)器學(xué)習(xí)算法的參數(shù)尋優(yōu)時精度較低的問題,群啟發(fā)式算法被廣泛應(yīng)用于機(jī)器學(xué)習(xí)的參數(shù)尋優(yōu)中。王麗婷等[8]提出了利用烏鴉搜索算法求SVM的最優(yōu)參數(shù)組合,實(shí)驗(yàn)證明此模型具有較高的分類準(zhǔn)確度。Wang 等[9]采用遺傳算法(genetic algorithm, GA)求解SVM最優(yōu)參數(shù),實(shí)驗(yàn)結(jié)果表明此模型預(yù)測效果較好。潘成勝等[10]針對K-means算法在文本聚類過程中易陷入局部最優(yōu)解的問題,提出了一種基于灰狼優(yōu)化算法的K-means文本聚類方法。實(shí)驗(yàn)結(jié)果表明,該方法的準(zhǔn)確率、召回率和F值都有明顯提高,文本聚類結(jié)果更可靠。依據(jù)經(jīng)驗(yàn)調(diào)整參數(shù)會導(dǎo)致隨機(jī)森林模型性能不佳,鄒宗民等[11]提出基于粒子群優(yōu)化支持向量回歸的方法?;诰哂休^強(qiáng)搜索能力的粒子群算法來獲取支持向量回歸模型的最優(yōu)參數(shù)組合。除此之外,還有生物地理學(xué)優(yōu)化算法(biogeography-based optimization,BBO)[12]、布谷鳥搜索算法(cuckoo search,CS)[13]、磷蝦群(improved krill herd,IKH)[14]算法等群啟發(fā)式算法被用于機(jī)器學(xué)習(xí)的參數(shù)尋優(yōu)中。目前基于各種改進(jìn)或者未改進(jìn)的群啟發(fā)式算法用于機(jī)器學(xué)習(xí)算法的參數(shù)尋優(yōu)的研究,雖然解決了機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)精度的問題,在一定程度上耗時也有所降低。但是機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的效率依然沒有達(dá)到質(zhì)的提升。基于數(shù)據(jù)并行機(jī)制的訓(xùn)練方式可以用來解決群啟發(fā)式算法進(jìn)行機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)效率低的問題,但是基于數(shù)據(jù)并行的機(jī)制只有在大數(shù)據(jù)量下,優(yōu)勢才會逐漸體現(xiàn)出來。因此目前仍然沒有一個很好的方案來解決基于群啟發(fā)式算法的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)效率低的問題,參數(shù)尋優(yōu)效率仍有上升空間[15]。
現(xiàn)通過對比實(shí)驗(yàn)驗(yàn)證在機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)方面,群啟發(fā)式算法相較于網(wǎng)格搜索算法的優(yōu)越性。另外對群啟發(fā)式算法應(yīng)用于機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)時的各部分耗時進(jìn)行分析。針對使用數(shù)據(jù)并行機(jī)制來解決求解種群個體適應(yīng)度耗時問題時的不足,提出一種基于參數(shù)并行機(jī)制的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)方法。該方法利用Spark并行計算框架將群啟發(fā)算法中的種群轉(zhuǎn)化為Spark所支持的彈性分布式數(shù)據(jù)集(resilient distributed dataset,RDD),然后將RDD切分并分發(fā)到各個節(jié)點(diǎn),各個節(jié)點(diǎn)并行計算種群個體適應(yīng)度。使用GA和RF算法驗(yàn)證了基于參數(shù)并行機(jī)制的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)方法的先進(jìn)性、效率以及可擴(kuò)展性。
機(jī)器學(xué)習(xí)是一門多領(lǐng)域交叉學(xué)科,涉及概率論、統(tǒng)計學(xué)、逼近論、凸分析、算法復(fù)雜度理論等多門學(xué)科。機(jī)器學(xué)習(xí)研究計算機(jī)怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu),使之不斷改善自身的性能。
機(jī)器學(xué)習(xí)算法的參數(shù)可以分為模型參數(shù)和模型超參數(shù)。模型參數(shù)是可以通過數(shù)據(jù)學(xué)習(xí)過程進(jìn)行初始化和更新的一種參數(shù),不需要手動設(shè)置。模型超參數(shù)是無法直接從數(shù)據(jù)學(xué)習(xí)中估計出來的參數(shù),必須在訓(xùn)練機(jī)器學(xué)習(xí)模型之前進(jìn)行設(shè)置。比如訓(xùn)練神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)速率、SVM的懲罰參數(shù)c和RBF核參數(shù)g等。學(xué)習(xí)速率太大會導(dǎo)致神經(jīng)網(wǎng)絡(luò)的權(quán)重更新的幅度大,梯度下降法可能會越過最低點(diǎn),導(dǎo)致權(quán)重在極值點(diǎn)兩端不斷發(fā)散或者劇烈震蕩。學(xué)習(xí)速率設(shè)置太小,則會使神經(jīng)網(wǎng)絡(luò)的權(quán)重更新速度太慢,導(dǎo)致無法快速找到好的下降的方向。對于SVM來說,c的取值直接影響SVM模型的泛化能力。c太大,容易出現(xiàn)過擬合,c太小,容易出現(xiàn)欠擬合。g越大支持向量越少,g越小支持向量越多。而支持向量的個數(shù)會影響SVM模型訓(xùn)練與預(yù)測的速度。因此機(jī)器學(xué)習(xí)模型超參數(shù)的選擇將會直接影響訓(xùn)練好的機(jī)器學(xué)習(xí)模型的性能。
利用群啟發(fā)式算法進(jìn)行機(jī)器學(xué)習(xí)算法的參數(shù)尋優(yōu),將其尋得的參數(shù)用作機(jī)器學(xué)習(xí)算法訓(xùn)練模型的超參數(shù)。設(shè)er為機(jī)器學(xué)習(xí)訓(xùn)練模型的誤差,P為超參數(shù)集合,則機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)問題定義為
miner=F(P)
(1)
(2)
式中:k為需要尋優(yōu)的機(jī)器學(xué)習(xí)算法超參數(shù)的個數(shù);pimin、pimax為超參數(shù)pi的變化范圍。種群中的一個個體對應(yīng)一組P。P的更新依賴于種群的更新。例如,GA通過種群個體的交叉、變異等操作來更新種群,經(jīng)過解碼更新過后的個體得到新的P;PSO根據(jù)找到的當(dāng)前個體極值和整個粒子群共享的當(dāng)前全局最優(yōu)解來更新自己的速度和位置,經(jīng)過解碼更新過后的粒子得到更新過后的P。當(dāng)滿足終止條件時,終止算法。終止條件為
(3)
式(3)中:fitnessbest為擁有最優(yōu)解的個體適應(yīng)度;fitnessmin為算法設(shè)置的最小適應(yīng)度;T為迭代次數(shù);Tmax為算法設(shè)置的最大迭代次數(shù)。當(dāng)種群最優(yōu)個體的適應(yīng)度大于算法設(shè)置的最小適應(yīng)度或者迭代次數(shù)大于算法設(shè)置的最大迭代次數(shù)時,終止迭代,返回最優(yōu)參數(shù)作為機(jī)器學(xué)習(xí)算法的模型超參數(shù)。
Spark是專門基于大數(shù)據(jù)而設(shè)計的通用計算引擎[15],可以完成包括SQL查詢、文本處理、機(jī)器學(xué)習(xí)等各種運(yùn)算[16],能夠解決由于單機(jī)計算資源不足而導(dǎo)致運(yùn)行速度慢、檢測效率低等問題[17]。Spark基于內(nèi)存的運(yùn)算速度比Hadoop MapReduce快100倍以上,而且擁有Hadoop MapReduce具有的所有的優(yōu)點(diǎn)。Spark將數(shù)據(jù)抽象為其特有的RDD。在Spark中,對數(shù)據(jù)的操作主要有創(chuàng)建RDD,轉(zhuǎn)化已有RDD以及調(diào)用RDD操作進(jìn)行求值,Spark會自動將RDD中的數(shù)據(jù)分發(fā)到集群上,進(jìn)行并行化計算[18]。
Spark還提供了很多程序庫,包括Spark SQL、Spark Streaming、MLib、GraphX。其中MLib庫是Spark提供的可擴(kuò)展的機(jī)器學(xué)習(xí)庫。Mlib庫是專為在集群上并行運(yùn)行的情況而設(shè)計的,提供了很多種機(jī)器學(xué)習(xí)算法,包括分類、回歸、聚類、協(xié)同過濾等。Mlib的設(shè)計理念就是把數(shù)據(jù)以RDD的形式表示,然后在分布式數(shù)據(jù)集上調(diào)用Mlib庫所提供的機(jī)器學(xué)習(xí)算法。
在群啟發(fā)式算法中,其操作都可分為初始化種群、計算種群個體適應(yīng)度、種群更新3個部分。初始化種群部分包括種群參數(shù)的設(shè)置、種群個體初始化以及種群個體適應(yīng)度的初始化。種群更新部分為根據(jù)種群的更新規(guī)則進(jìn)行種群的更新。計算種群個體適應(yīng)度的部分為遍歷種群中的所有個體,并調(diào)用機(jī)器學(xué)習(xí)算法來計算種群中每一條個體的適應(yīng)度。以GA為例,運(yùn)行GA 5次,其中最大迭代次數(shù)為50,種群規(guī)模為20,數(shù)據(jù)量為2萬條,計算并記錄各部分耗時的平均值。各部分耗時情況如圖1所示。
圖1 GA各部分耗時Fig.1 Time consuming parts of GA
由圖1可知,計算個體適應(yīng)度的部分耗時最長,占總體算法運(yùn)行時間的96.6%,種群初始化和種群更新部分分別占2.4%和1%。計算適應(yīng)度部分耗時較長的原因是因?yàn)榉N群中的每一個個體都需要訓(xùn)練一次機(jī)器學(xué)習(xí)模型。若種群規(guī)模為20,最大迭代次數(shù)為50,則要進(jìn)行1 000次機(jī)器學(xué)習(xí)算法模型的訓(xùn)練,加上種群個體適應(yīng)度初始化部分,算法總共要進(jìn)行1 020次機(jī)器學(xué)習(xí)算法模型的訓(xùn)練。
針對群啟發(fā)式算法在機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)問題中計算個體適應(yīng)度耗時較長的問題,采用Spark平臺對種群進(jìn)行并行化處理來提高計算種群個體適應(yīng)度的效率。
根據(jù)上述GA各部分操作耗時分析,可以通過并行化計算個體適應(yīng)度來提高機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的效率。在Spark平臺上通過parallelize()方法將種群轉(zhuǎn)換為RDD,將整個種群切分為子種群,然后分發(fā)給不同的Worker節(jié)點(diǎn)。由Worker節(jié)點(diǎn)中的Executor并行進(jìn)行計算子種群個體適應(yīng)度,最終Executor將計算結(jié)果返回給Driver。參數(shù)并行如圖2所示。
圖2中,Driver負(fù)責(zé)資源的申請、RDD的轉(zhuǎn)換、任務(wù)的生成等;Master負(fù)責(zé)資源調(diào)度,與Worker進(jìn)行RPC通信,讓W(xué)orker啟動Executor;Executor負(fù)責(zé)真正的邏輯計算。
在參數(shù)并行的并行化實(shí)現(xiàn)中,Driver首先向Master申請需要的資源,Master收到Driver的請求后與Worker進(jìn)行RPC通信,讓W(xué)orker啟動Executor。Executor啟動之后,Driver端將切分之后的RDD和一些計算邏輯等生成具體的任務(wù)通過網(wǎng)絡(luò)發(fā)送給不同Worker中的Executor來實(shí)現(xiàn)并行化計算。當(dāng)Executor將任務(wù)計算完后,向Driver端返回計算結(jié)果。Driver端匯總所有種群個體適應(yīng)度,然后根據(jù)種群個體適應(yīng)度來進(jìn)行種群的更新,更新之后保留最優(yōu)個體,得到種群一次迭代的最優(yōu)參數(shù)組合。
通過將種群切分為子種群,并行化計算種群個體的適應(yīng)度來提高機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的效率。
并行化算法的設(shè)計主要依賴Spark所特有的RDD來對種群或者數(shù)據(jù)進(jìn)行讀取、切分和并行化處理。針對計算適應(yīng)度耗時較長的問題,現(xiàn)有的方法是基于數(shù)據(jù)并行的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)方法,其將數(shù)據(jù)切分為多個子數(shù)據(jù),并行計算種群內(nèi)個體的適應(yīng)度?;趨?shù)并行機(jī)制的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)方法,將種群切分為多個子種群,并行計算子種群內(nèi)個體的適應(yīng)度?;跀?shù)據(jù)并行和參數(shù)并行的并行化設(shè)計流程圖如圖3所示。
圖3中,左側(cè)是數(shù)據(jù)并行的流程圖,右側(cè)是參數(shù)并行流程圖。在Spark平臺進(jìn)行并行化計算首先應(yīng)進(jìn)行Spark參數(shù)初始化,包括節(jié)點(diǎn)個數(shù)的設(shè)置,并行度的設(shè)置以及節(jié)點(diǎn)內(nèi)存的設(shè)置等,用于Spark集群應(yīng)用的提交。然后將所需要并行處理的部分轉(zhuǎn)化為Spark所支持的RDD。RDD支持兩種操作:轉(zhuǎn)化操作和行動操作。RDD的轉(zhuǎn)化操作返回一個新的RDD操作,它只是封裝了邏輯,但并未真正開始計算。而行動操作是向驅(qū)動器程序返回結(jié)果或者把結(jié)果寫入外部系統(tǒng)的操作,觸發(fā)真正的計算。
圖2 參數(shù)并行Fig.2 Parallel parameters
圖3 基于數(shù)據(jù)并行和參數(shù)并行的并行化設(shè)計流程圖Fig.3 Parallel design flow chart based on data parallelism and parameter parallelism
種群初始化完成后,將包含著參數(shù)、適應(yīng)度、編碼等信息的種群個體存放在一個列表中,形成一個包含所有個體信息的種群列表。將種群個體攜帶的參數(shù)信息作為訓(xùn)練機(jī)器學(xué)習(xí)算法模型的超參數(shù),把模型的準(zhǔn)確率作為種群個體的適應(yīng)度。
由圖3可知,數(shù)據(jù)并行操作是先隨機(jī)初始化種群,然后再讀取數(shù)據(jù),只將數(shù)據(jù)轉(zhuǎn)化為RDD,然后基于數(shù)據(jù)并行來計算種群內(nèi)個體的適應(yīng)度。參數(shù)并行是初始化種群的同時就讀取數(shù)據(jù),將數(shù)據(jù)和種群一起存放在列表中,然后將列表轉(zhuǎn)化為RDD。當(dāng)數(shù)據(jù)和種群轉(zhuǎn)換為RDD時,并未觸發(fā)真正的計算,只是定義了一個RDD。用行動操作collect()合并計算的所有個體適應(yīng)度時,才真正開始計算。所有種群個體的適應(yīng)度計算完成后,根據(jù)每個個體的適應(yīng)度來進(jìn)行種群的更新。不同的種群更新的規(guī)則也是不同的。進(jìn)行完種群更新操作后,保留更新過后的個體最優(yōu)值。如果滿足式(3)所示的終止條件,則返回最優(yōu)參數(shù)作為機(jī)器學(xué)習(xí)算法模型的超參數(shù),否則,將繼續(xù)執(zhí)行并行化計算個體適應(yīng)度、合并所有個體適應(yīng)度、更新種群、保留最優(yōu)個體的操作。
采用隨機(jī)森林作為機(jī)器學(xué)習(xí)算法的代表,選用GA作為群啟發(fā)式算法的代表。二者均是各自應(yīng)用場景中的主流算法。隨機(jī)森林依靠Scikit-learn實(shí)現(xiàn)。Scikit-learn是針對Python編程語言的免費(fèi)軟件機(jī)器學(xué)習(xí)庫,它有各種分類、回歸和聚類算法,是GitHub上最受歡迎的機(jī)器學(xué)習(xí)庫之一。實(shí)驗(yàn)數(shù)據(jù)為廣州市公交車的IC卡交易數(shù)據(jù)。經(jīng)過歸一化后,將其處理為時間序列數(shù)據(jù),利用隨機(jī)森林進(jìn)行回歸預(yù)測。Scikit-learn中的隨機(jī)森林需要調(diào)節(jié)的參數(shù)為:n_estimators、max_depth、max_features。分別為決策樹的個數(shù)、決策樹的深度、單個決策樹使用特征的最大數(shù)量。由于使用的數(shù)據(jù)中,數(shù)據(jù)段總共只有6個,因此選取了所有特征。所以只對n_estimators、max_depth兩個參數(shù)進(jìn)行尋優(yōu)。其中n_estimators參數(shù)的取值范圍為[100,200], max_depth參數(shù)的取值范圍為[2,30]。
通過構(gòu)建Spark集群來驗(yàn)證并行化計算算法的效率。Spark集群詳細(xì)配置為:CentOS-6.10-x64,spark-2.1.1-bin-hadoop2.7,hadoop-2.7.2,py4j- 0.10.4,jdk1.8.0_261,scikit-learn-0.24.0,pyspark-2.3.2。根據(jù)經(jīng)驗(yàn)設(shè)置Spark集群節(jié)點(diǎn)個數(shù)為8,節(jié)點(diǎn)運(yùn)行參數(shù)配置如表1所示。
GA的參數(shù)設(shè)置如表2所示。
表1 節(jié)點(diǎn)運(yùn)行參數(shù)配置Table 1 Node’s operating parameter configuration
表2 GA參數(shù)設(shè)置Table 2 GA parameter settings
3.2.1 網(wǎng)格搜索算法與群啟發(fā)式算法對比實(shí)驗(yàn)
實(shí)驗(yàn)的目的是通過和文獻(xiàn)[6]提出的并行化網(wǎng)格搜索算法進(jìn)行對比,來驗(yàn)證群啟發(fā)式算法作為機(jī)器學(xué)習(xí)算法參數(shù)尋優(yōu)的方法,不僅可以提高機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的效率,而且還能保證機(jī)器學(xué)習(xí)算法模型的準(zhǔn)確率。
(1)第一個實(shí)驗(yàn)。在上述實(shí)驗(yàn)環(huán)境以及參數(shù)范圍內(nèi),通過給網(wǎng)格搜索算法設(shè)置不同的步長,來實(shí)現(xiàn)不同步長下的參數(shù)尋優(yōu)。將每一次得到的最優(yōu)參數(shù)組合作為機(jī)器學(xué)習(xí)算法訓(xùn)練模型的最終的參數(shù)。記錄網(wǎng)格搜索算法不同步長下的機(jī)器學(xué)習(xí)模型的準(zhǔn)確率。實(shí)驗(yàn)結(jié)果如表3所示。
(2)第二個實(shí)驗(yàn)。在第一個實(shí)驗(yàn)的基礎(chǔ)上,選取機(jī)器學(xué)習(xí)算法模型準(zhǔn)確率最高時所對應(yīng)網(wǎng)格搜索算法的步長作為此次實(shí)驗(yàn)的步長。在相同的數(shù)據(jù)量和并行度下,將基于網(wǎng)格搜索算法的參數(shù)尋優(yōu)實(shí)驗(yàn)和基于群啟發(fā)式算法的參數(shù)尋優(yōu)實(shí)驗(yàn)分別進(jìn)行了5次,統(tǒng)計每一次參數(shù)尋優(yōu)實(shí)驗(yàn)的耗時以及最優(yōu)參數(shù)模型的準(zhǔn)確率,計算5次實(shí)驗(yàn)的平均值。實(shí)驗(yàn)結(jié)果如表4和表5所示。
表3 不同步長下的網(wǎng)格搜索算法的參數(shù)尋優(yōu)的模型準(zhǔn)確率Table 3 Model accuracy rate of parameter optimization of grid search algorithm under asynchronous length
表4 不同算法參數(shù)尋優(yōu)的模型準(zhǔn)確率Table 4 Model accuracy of different algorithm parameter optimization
表5 不同算法參數(shù)尋優(yōu)耗時Table 5 Time consuming to optimize the parameters of different algorithms
由表3可以看出,基于網(wǎng)格搜索算法的參數(shù)尋優(yōu)的模型精度受網(wǎng)格搜索算法的步長影響。隨著網(wǎng)格搜索算法步長的增加,模型的準(zhǔn)確率出現(xiàn)了一定程度的下降。另外,從表3還可以看出,當(dāng)參數(shù)n_estimators和參數(shù)max_depth的步長都為1時,得到的最優(yōu)參數(shù)組合的模型的準(zhǔn)確率是最高的。這是由于網(wǎng)格搜索算法遍歷了參數(shù)取值范圍內(nèi)的所有參數(shù)組合,沒有遺漏任何一組參數(shù),但搜索效率很低。隨著步長的增加,網(wǎng)格搜索算法會根據(jù)步長來進(jìn)行參數(shù)的選擇,這就極其容易跳過最優(yōu)參數(shù)組合導(dǎo)致尋優(yōu)精度不高。
由表4可以看出,基于群啟發(fā)式算法的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu),得到的最優(yōu)參數(shù)組合的模型準(zhǔn)確率的平均值為0.819 99;基于網(wǎng)格搜索算法且搜索步長為1的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)得到的模型平均準(zhǔn)確率為0.811 557。兩者的模型準(zhǔn)確率相差不多,在誤差范圍內(nèi)。從表5可以看出,基于網(wǎng)格搜索算法的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的耗時約是群啟發(fā)式算法的1.49倍。由此可以看出,在確保模型準(zhǔn)確率不相上下的基礎(chǔ)上,群啟發(fā)式算法作為機(jī)器學(xué)習(xí)算法的參數(shù)尋優(yōu)方法效率要高于網(wǎng)格搜索算法。
和網(wǎng)格搜索算法相比,群啟發(fā)算法作為機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的方法,不僅在效率上得到了提升,而且并不會使機(jī)器學(xué)習(xí)算法模型的準(zhǔn)確率下降。因此,群啟發(fā)式算法作為機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)的方法在尋優(yōu)能力和效率上都要優(yōu)于網(wǎng)格搜索算法。
3.2.2 參數(shù)并行與數(shù)據(jù)并行對比實(shí)驗(yàn)
實(shí)驗(yàn)的目的是驗(yàn)證參數(shù)并行機(jī)制相較于數(shù)據(jù)并行機(jī)制的效率優(yōu)勢。在上述實(shí)驗(yàn)環(huán)境下,采用Python語言實(shí)現(xiàn)了基于數(shù)據(jù)并行機(jī)制和參數(shù)并行機(jī)制的并行化RF,并記錄算法在不同數(shù)據(jù)量下所用的運(yùn)行時間。在實(shí)驗(yàn)中,最大迭代次數(shù)設(shè)為50,種群規(guī)模設(shè)為20和100。為驗(yàn)證數(shù)據(jù)量對并行效率的影響,在2萬、4萬、8萬、16萬、32萬數(shù)據(jù)量下進(jìn)行實(shí)驗(yàn)。種群規(guī)模為20和100的實(shí)驗(yàn)結(jié)果分別如圖4和圖5所示。
圖4 種群規(guī)模為20時的兩種并行機(jī)制的運(yùn)行時間Fig.4 Running time of the two parallel mechanisms with a population size of 20
圖5 種群規(guī)模為100時的兩種并行機(jī)制的運(yùn)行時間Fig.5 Running time of the two parallel mechanisms with a population size of 100
由圖4、圖5可以看出,當(dāng)數(shù)據(jù)量為20萬左右的時候,兩種并行機(jī)制的運(yùn)行時間出現(xiàn)了交點(diǎn)。當(dāng)數(shù)據(jù)量小于20萬時,參數(shù)并行優(yōu)勢較為明顯,參數(shù)并行相較于數(shù)據(jù)并行來說,參數(shù)尋優(yōu)效率提高了42.8%。當(dāng)數(shù)據(jù)量大于20萬時,參數(shù)并行的運(yùn)行時間出現(xiàn)顯著增長。此時,數(shù)據(jù)并行的優(yōu)勢顯現(xiàn)出來,所用時間較短。這是因?yàn)樵谛?shù)據(jù)量下,每個任務(wù)的計算量越大,效率越高,每個任務(wù)切分越細(xì),效率越低。參數(shù)并行是將種群切分成若干份,訓(xùn)練數(shù)據(jù)不進(jìn)行切分。在相同數(shù)據(jù)量下,對于參數(shù)并行而言,每一個個體都需要一份數(shù)據(jù)量計算個體適應(yīng)度,種群規(guī)模為20時,這個種群就對應(yīng)20份數(shù)據(jù)。本實(shí)驗(yàn)中參數(shù)并行根據(jù)分區(qū)度將種群切分為6份,則每一個任務(wù)就對應(yīng)3.333份數(shù)據(jù)。對于數(shù)據(jù)并行來說,是根據(jù)分區(qū)度把訓(xùn)練數(shù)據(jù)切分為6份,種群不進(jìn)行切分。則每一個任務(wù)所對應(yīng)的訓(xùn)練數(shù)據(jù)為0.167份。所以在小數(shù)據(jù)量下,數(shù)據(jù)并行每一個任務(wù)的數(shù)據(jù)量要小于參數(shù)并行。由于每個任務(wù)的計算量越大,效率越高。即在數(shù)據(jù)量小于20萬時的小數(shù)據(jù)量下,參數(shù)并行的效率要高于數(shù)據(jù)并行。隨著數(shù)據(jù)量的增大,每一個任務(wù)對應(yīng)的計算量越來越大,則運(yùn)行時間相應(yīng)的會越來越長。由于參數(shù)并行每一個任務(wù)對應(yīng)的數(shù)據(jù)量是數(shù)據(jù)并行每一個任務(wù)對應(yīng)的數(shù)據(jù)的20倍左右,在大于20萬時的大數(shù)據(jù)量下,數(shù)據(jù)并行要比參數(shù)并行有優(yōu)勢。
由圖5可知,在數(shù)據(jù)量為2萬的時候,參數(shù)并行和數(shù)據(jù)并行運(yùn)行時間相差不大。其原因在于Spark集群模式下,各個節(jié)點(diǎn)之間需要進(jìn)行資源分配、任務(wù)劃分、任務(wù)調(diào)度以及節(jié)點(diǎn)之間的通信,這些操作也要消耗時間。當(dāng)數(shù)據(jù)量較小時,Spark之間的資源調(diào)度等操作會占一大部分時間,所以此時參數(shù)并行和數(shù)據(jù)并行之間的差距并不明顯。
另外,根據(jù)圖4、圖5還可以看出,數(shù)據(jù)量為8萬時,是數(shù)據(jù)并行的一個拐點(diǎn)。在數(shù)據(jù)量大于8萬時,運(yùn)行時間出現(xiàn)了下降趨勢。此時對于數(shù)據(jù)并行來說,其優(yōu)勢開始顯現(xiàn)出來。數(shù)據(jù)量較小時,每一個任務(wù)對應(yīng)的計算量小,每個任務(wù)切分的細(xì),因此效率較低。
通過上述結(jié)果分析可得,在小數(shù)據(jù)量下,基于參數(shù)并行的機(jī)器學(xué)習(xí)并行化訓(xùn)練方法效率更高。但這并不意味著小數(shù)據(jù)量下并行訓(xùn)練是無意義的。由圖5可知,在數(shù)據(jù)量為8萬時,使用參數(shù)并行可節(jié)省將近2 h的可觀的訓(xùn)練時間。
3.2.3 可擴(kuò)展性實(shí)驗(yàn)
可擴(kuò)展性實(shí)驗(yàn)是指是否能夠通過增加結(jié)點(diǎn)的數(shù)量來提高算法運(yùn)行速度。實(shí)驗(yàn)基于單節(jié)點(diǎn)、2個節(jié)點(diǎn)、4個節(jié)點(diǎn)以及8個節(jié)點(diǎn),在數(shù)據(jù)量為1萬,迭代次數(shù)為20的基礎(chǔ)上將參數(shù)并行算法運(yùn)行5次,計算算法運(yùn)行時間并記錄平均值。參數(shù)并行運(yùn)行結(jié)果如圖6所示。
由圖6可以看出,算法運(yùn)行時間隨著種群規(guī)模的增加而增長。當(dāng)種群規(guī)模為50時,4個節(jié)點(diǎn)和8個節(jié)點(diǎn)的算法運(yùn)行時間差別較小。這是因?yàn)槎鄠€節(jié)點(diǎn)運(yùn)行程序時,節(jié)點(diǎn)之間需要進(jìn)行資源分配、任務(wù)
圖6 參數(shù)并行算法可擴(kuò)展性實(shí)驗(yàn)Fig.6 Parametric parallel algorithm scalability experiment
劃分、任務(wù)調(diào)度以及節(jié)點(diǎn)之間的通信等操作。這些操作也要消耗時間。隨著種群規(guī)模的增大,8個節(jié)點(diǎn)時算法運(yùn)行效率逐漸高于其他節(jié)點(diǎn)。這是因?yàn)楣?jié)點(diǎn)數(shù)越多,算法并行度就越高,即每個節(jié)點(diǎn)計算量就越小。
通過上述實(shí)驗(yàn)結(jié)果分析,參數(shù)并行算法具有良好的可擴(kuò)展性。
3.2.4 節(jié)點(diǎn)個數(shù)與分區(qū)度實(shí)驗(yàn)
節(jié)點(diǎn)個數(shù)與分區(qū)度實(shí)驗(yàn)是指在確定的分區(qū)度下,不同的節(jié)點(diǎn)個數(shù)對參數(shù)并行算法運(yùn)行效率的影響。在節(jié)點(diǎn)個數(shù)為2、4、6、8個,分區(qū)度為6,迭代次數(shù)為20的基礎(chǔ)上分別將參數(shù)并行算法運(yùn)行5次,計算并記錄算法運(yùn)行時間的平均值。參數(shù)并行算法運(yùn)行結(jié)果如圖7所示。
由圖7可以看出,在節(jié)點(diǎn)個數(shù)為6和8時的算法運(yùn)行時間低于節(jié)點(diǎn)個數(shù)為2和4時參數(shù)并行算法運(yùn)行時間。這是因?yàn)楸緦?shí)驗(yàn)節(jié)點(diǎn)的個數(shù)決定算法每一輪并行執(zhí)行的任務(wù)數(shù)的多少。實(shí)驗(yàn)分區(qū)度為6,即有6個任務(wù)需要計算。節(jié)點(diǎn)個數(shù)為2或4時,
圖7 分區(qū)度為6時不同節(jié)點(diǎn)個數(shù)運(yùn)行時間Fig.7 Running time of different nodes when the partition degree is 6
算法每一輪并行執(zhí)行的任務(wù)數(shù)為2個或4個,則需要兩輪才能將所有任務(wù)計算完畢。當(dāng)節(jié)點(diǎn)個數(shù)為6時,剛好一輪就能計算完所有的任務(wù)。當(dāng)節(jié)點(diǎn)個數(shù)為8時,算法運(yùn)行時間要稍稍高于節(jié)點(diǎn)個數(shù)為6時。這是由于只有6個任務(wù),并行度為8,會有兩個節(jié)點(diǎn)不計算任務(wù),但這2個節(jié)點(diǎn)之間還是會被分配資源,進(jìn)行節(jié)點(diǎn)間的通信。在一定程度上,算法運(yùn)行時間會加長。
由以上分析可知,盡管可以通過增加結(jié)點(diǎn)的數(shù)量來提高算法運(yùn)行效率,但是節(jié)點(diǎn)個數(shù)并不是越多越好,應(yīng)當(dāng)根據(jù)分區(qū)度的大小來設(shè)置節(jié)點(diǎn)個數(shù)。
在對機(jī)器學(xué)習(xí)的參數(shù)尋優(yōu)問題進(jìn)行深度分析研究的基礎(chǔ)上,針對群啟發(fā)式算法提出了一種基于參數(shù)并行機(jī)制的機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)方法。設(shè)計了數(shù)據(jù)并行與參數(shù)并行對比實(shí)驗(yàn)、可擴(kuò)展性實(shí)驗(yàn)、節(jié)點(diǎn)個數(shù)與分區(qū)度實(shí)驗(yàn)來驗(yàn)證參數(shù)并行機(jī)制的優(yōu)勢,得到以下結(jié)論。
(1)提出的方法在機(jī)器學(xué)習(xí)參數(shù)尋優(yōu)精度和效率上都要優(yōu)于主流的并行化網(wǎng)格搜索算法。
(2)參數(shù)并行機(jī)制在小數(shù)據(jù)量下能顯著提高參數(shù)尋優(yōu)的效率,進(jìn)而可以提高機(jī)器學(xué)習(xí)的訓(xùn)練效率,并具有良好的可擴(kuò)展性。
只是把GA算法作為群啟發(fā)式算法的代表來進(jìn)行機(jī)器學(xué)習(xí)算法超參數(shù)尋優(yōu)。但基于群啟發(fā)式算法進(jìn)行機(jī)器學(xué)習(xí)算法超參數(shù)的尋優(yōu)問題仍有很多可以研究的方面。在接下來工作中,將會著力研究更適合機(jī)器學(xué)習(xí)算法超參數(shù)尋優(yōu)的群啟發(fā)式算法。例如,可以將參數(shù)并行機(jī)制應(yīng)用于基于混合式群啟發(fā)式算法的機(jī)器學(xué)習(xí)算法超參數(shù)的尋優(yōu);對群啟發(fā)式算法進(jìn)行優(yōu)化,使之能在不影響機(jī)器學(xué)習(xí)算法模型性能的前提下減少計算個體適應(yīng)度的次數(shù)等。