(北方工業(yè)大學經濟管理學院,北京 100144)
伴隨著互聯(lián)網產業(yè)的興起,大數據迅速成為學術界、企業(yè)界甚至政府機構關注的熱點。相對于傳統(tǒng)數據,人們將大數據的特征總結為5 個大寫的“V”,即體量大(Vol?ume)、速度快(Velocity)、模態(tài)多(Variety)、難辨識(Veraci?ty)和價值大密度低(Value)[1]。人們關注大數據的一個重要目的在于從規(guī)模巨大、紛繁復雜的數據中探求規(guī)律,釋放數據所蘊含的價值;否則,數據再大,也毫無意義。而作為人工智能重要分支的機器學習,在大數據價值發(fā)現中扮演著不可或缺的角色。
機器學習在學術界和產業(yè)界都有巨大實用價值,尤其是大數據環(huán)境下的機器學習算法成為學術界和工業(yè)界共同關注的課題。一般而言,大規(guī)模機器學習算法通常采用分而治之思想,通過分布式計算方式,將數據或者模型進行分割,進而出色地完成對大規(guī)模數據的模型訓練及預測[2]。然而,從零開始構建一個分布式機器學習算法是繁瑣和重復性的。針對該問題,越來越多開源和商業(yè)性的大規(guī)模機器學習工具應運而生。大規(guī)模機器學習工具的產生,降低了機器學習算法的使用門檻,減少了科研技術人員的重復性勞動,使他們將更多的精力集中在創(chuàng)新研究和應用分析上,極大地提高了生產效率。并且,開源大規(guī)模機器學習工具平臺的出現,也順應了當前潮流,開源方式能夠充分集中大眾智慧,讓更多的科研人員投身于算法研究和工具平臺建設中,也更快更好地促進了機器學習發(fā)展。
目前,國內外機器學習工具種類繁多,功能和適用環(huán)境也各不相同。本文主要分析當前國內外機器學習算法開發(fā)和應用主要工具,總結各機器學習工具包的特點及適用場景,以便科研和技術人員在面臨實際問題時能夠選擇合適的機器學習工具平臺。
開源即開放源代碼,開源軟件以開放源代碼的形式提供給使用者使用,在為使用者提供便利的同時,也接受更多來自于開發(fā)者的改造。目前,開源工具已逐漸成為機器學習界的主流,主要有以下幾個分類。
深度學習是研究如何從數據中自動抽取多層特征表示,它與傳統(tǒng)機器學習模型的不同之處在于,深度學習能夠學到數據更高層次的抽象表示,能夠自動從數據中提取特征[3]。一個高層的神經網絡模型通常包含上百萬參數,這樣一個巨大的模型在普通CPU 上訓練非常耗時,而GPU的并行訓練算法可以極大縮短訓練時間。
cuDNN 是Nvidia 研發(fā)的一款專注于深度學習的GPU加速工具,通過將卷積神經網絡計算轉變?yōu)閷PU 更有利的矩陣運算,可以非常有效地提高深度神經網絡訓練速度[4]。由于cuDNN 的強大性能,包括Torch、Caffe 在內的很多機器學習工具包在深度神經網絡運算時,都采用cuDNN 的算法加以實現。
Torch 和TensorFlow 都以對深度神經網絡的良好支持為特點,與cuDNN 相比,這兩個機器學習包提供了更加高層的算法支持[5-6]。
Torch 由Facebook 公司開發(fā),提供了一個非常豐富的社區(qū)驅動算法庫,涉及領域包括機器學習、計算機視覺、信號處理、并行運算、圖像、音頻、視頻和計算機網絡。Torch采用了LuaJIT 語言編寫,它繼承了LuaJIT 語言優(yōu)勢,包括極高的運行速度、靈活的跨平臺特性、良好的可讀性[7]。它支持神經網絡,而且其深度學習模塊運算效率非常高。通過使用Torch 深度學習模塊構造的CNN(卷積神經網絡),比普通CNN 快23.5 倍[8]。
TensorFlow 由谷歌開發(fā),其命名來源于自身運行原理,Tensor 意為張量,Flow 是流的意思[9]。它是基于DistBelief研發(fā)的機器學習工具,提供了一種數據驅動的流式計算框架,采用了一種基于數據流的運算模型。一個TensorFlow的計算可以描述為一個有向圖,圖由節(jié)點和邊構成。每一個節(jié)點可以有零個或者多個輸入和零個或者多個輸出,它們代表某一種操作,在不同節(jié)點之間邊上流動的數據就是Tensor[10]。
與Torch 相比,TensorFlow 的平臺兼容性更加強大,它還提供了異構的網絡結構以便將不同設備包含在同一個任務中。TensorFlow 強大的跨平臺功能正是源于它的流式計算結構。在TensorFlow 中,節(jié)點之間通過統(tǒng)一的數據結構Tensor 進行信息交互,從而屏蔽了不同節(jié)點之間的差異性。
大數據時代的一個特點是數據規(guī)模變得越來越大,為了獲得有效信息,用戶需要構建的大規(guī)模模型往往無法在一臺電腦上完成訓練[11]。于是,分布式計算平臺被提上日程,即將數據分割成小份發(fā)送到每一個工作節(jié)點上加以處理,它較好地滿足了大數據背景下的大規(guī)模運算。目前,主流的分布式計算平臺,如Hadoop、Spark 等,都是基于數據并行的分布式計算平臺[12]。但是,進行大規(guī)模的模型訓練即使在分布式環(huán)境下依然是一個非常困難的問題。
Mahout 是Hadoop 分布式計算平臺上的一個機器學習工具,為了幫助開發(fā)人員更加方便快捷地在Hadoop 上進行分布式數據挖掘任務,它采用Map-reduce 的方式將很多傳統(tǒng)單機上的經典算法在分布式環(huán)境下實現[13]。同時,在Spark 分布式計算平臺上也存在一個與之對應的機器學習工具MlLib。針對Spark 平臺的特性,MlLib 提供了兩個不同的算法庫:Spark.mllib 和Spark.ml。Spark.mllib 提供了面向RDD 的原始算法,而spark.ml 則提供了面向DataFrames的機器學習算法。Spark 對兩個庫都進行維護,以支持用戶的不同需求,但是,鑒于Spark 對DataFrame 的算法優(yōu)化,使用DataFrames 會是一個更好的選擇[14]。
由IBM 公司開發(fā)的SystemML 更加傾向于創(chuàng)造一個靈活、可伸縮的機器學習工具,希望為用戶提供一個工具,使他們編寫的程序可以在各種分布式計算平臺上運行[15]。為此,SystemML 提供了兩種高層次的編程語言,類R 的腳本語言DML 和類Python 的腳本語言PyDML,使用這兩種語言編寫的程序可以完全無修改地在各種平臺上運行,包括Hadoop 分布式平臺和Spark 分布式平臺。此外,System?ML 還會對這兩種語言編寫的算法進行自動優(yōu)化,通過數據和集群性能以保證高效性和可伸縮性。
SystemML 同樣提供了支持各種機器學習算法的工具包,以幫助用戶編寫程序。除在DML 或PyDml 中調用這些工具包外,SystemMl 還提供了Java 語言和Scala 語言的API 接口以方便用戶編程。
與基于數據并行的分布式計算不同,基于模型的并行計算框架除將數據分割分發(fā)給工作節(jié)點外,還會將模型參數發(fā)放給每一個工作節(jié)點進行訓練,這種方式更適合進行機器學習模型訓練。
Petuum 是一個基于模型同步的分布式機器學習框架,它致力于提供一個超大型機器學習的系統(tǒng)接口及通用算法[16]。同時,它也會根據數據統(tǒng)計相關性,通過優(yōu)化模型訓練算法提升模型訓練速度。
微軟的分布式機器學習框架DMTK 則更加關注分布式計算框架的計算性能,它可以在很少的機器集群上訓練出超大規(guī)模的模型[17]。目前,微軟在DMTK 實現了3 個算法:LightLDA[18]、分布式詞向量[19]、多義的分布式詞向量[20]。借助DMTK 分布式框架,LightLDA 可以僅僅使用8臺計算機組成的集群,在2 千億訓練樣本的數據集上訓練具有1 百萬詞匯表和1 百萬個話題的LDA 模型,而這項工作在以往實驗中通常要用上千臺計算機的集群才能夠運行。
DMTk 分布式框架由參數服務器和客戶端服務程序兩部分組成。與傳統(tǒng)參數服務器相比,DMTK 中的參數服務器有一個很大優(yōu)勢是,它允許存儲異構參數模型,即高頻參數和低頻參數分開存儲,以達到更好的服務器負載。
DMTK 的客戶端服務程序運行在各工作節(jié)點上。在參數同步時,DMTK 的客戶端服務程序為工作節(jié)點添加緩存功能,極大減少通信開銷。它還會在訓練程序和模型之間建立高速通道,以提高通信速度。對于DMTK 最重要的機制是,DMTK 采用一種Round-robin 的調度方式,工作節(jié)點只有在需要時才會從服務器上下載部分參數,正是由于這項改進才使得DMTK 可以在非常有限的資源上訓練超大規(guī)模的模型。
基于圖并行的機器學習框架是為了解決大規(guī)模數據下傳統(tǒng)Map-reduce 分布式計算框架不適合機器學習迭代式運行特點而提出的,在解決機器學習領域的問題時,它具有更高的效率。但是這種分布式計算框架需要使用者能夠將機器模型抽象成圖模型的結構。
GraphLab 是GraphLab 實驗室開發(fā)的一款基于圖并行的分布式機器學習框架,其并行的核心思想是對頂點的切分[21]。在GraphLab 中,頂點是最小并行粒度和通信粒度,對于某一個頂點,GraphLab 將其部署到多臺機器上,其中一臺作為master 節(jié)點,其余機器作為mirror 節(jié)點,master 是管理者節(jié)點,會給每一個mirror 安排具體計算任務,mirror作為代理執(zhí)行者需要與master 的數據保持同步[22]。而對于某一條邊,則只會被部署到一臺機器上,通過對每一條邊所關聯(lián)的頂點進行多份存儲以保持模型完整性。這種方式可以解決圖模型邊上數據量大的問題。
通過將數據抽象成Graph 結構,GraphLab 將算法執(zhí)行過程抽象成Gather、Apply、Scatter 3 個步驟。在Gather 階段,工作頂點的邊從臨界頂點和自身收集數據;在Apply 階段,Mirror 會將Gather 計算結果發(fā)送給Master 頂點;在Scatter 階段,Mater 節(jié)點更新邊上的數據并通知對其有依賴的臨界頂點更新狀態(tài)。
商業(yè)軟件是在計算機軟件中被作為商品進行交易的軟件,與開源軟件相比,商業(yè)軟件更加注重用戶體驗,大部分商業(yè)軟件還會配備比較完善的技術支持。
IBM 公司出產的IBM SPSS Modeler 是一款商用的機器學習工具,其設計思想是用盡量簡單的方式進行數據挖掘,盡可能屏蔽數據挖掘算法的復雜性及軟件操作的繁瑣性,使數據挖掘分析員在解決商業(yè)問題時,能夠較好地繞開軟件操作本身,將更多精力放在先進數據挖掘技術使用上[23]。
SPSS Modeler 提供了一個易于操作的拖拽式圖形用戶界面,用戶不需要編寫任何代碼就可以完成自己的數據挖掘任務。開源機器學習工具Weka 也提供了類似的圖形操作界面,但是相比而言,IBM SPSS Modeler 的界面更加簡潔,用戶不需太多數據挖掘知識即可讀懂每一個控件的功能[24]。通常,對于數據挖掘任務而言,數據準備是一項繁瑣工作,SPSS Modeler 則通過數據準備節(jié)點幫助用戶自動準備數據。
SPSS Modeler 還提供了一個與之配套的程序SPSS Modeler Server 以支持用戶完成大數據集上的訓練。SPSS Modeler Server 運行在服務器端,以分布式模式為用戶提供支持服務。大數據集下的內存密集型操作可以在服務器端快速執(zhí)行,并將結果下載到客戶端,因而可以加快運行速度。目前,SPSS Modeler 依然無法支持超大規(guī)模數據的數據挖掘任務。
SAS 全稱是Statistics Analysis System,它是一個用來管理數據、分析數據和編寫報告的大型集成應用軟件系統(tǒng),目前已經被廣泛應用于政府行政管理、科研、教育、生產和金融等不同領域[25]。作為一款商用的數據挖掘工具,SAS與IBM SPSS Modeler 的定位完全不同,它的目標用戶是具有數據分析知識的專業(yè)用戶,因此其操作主要以SAS 語言編程為主,雖然SAS 也提供非編程方式的菜單系統(tǒng),但人機對話界面并不友好。
SAS 提供了當今流行的主要統(tǒng)計分析方法,包括多元分析、回歸分析、方差分析、非參數分析、生存分析、聚類分析、判別分析和心理測量分析等[26]。
SAS 提供多種語句及選項供用戶靈活使用,以滿足用戶不同的功能需求。同時,SAS 也具有良好的跨平臺特性,它可以在多種計算機和操作系統(tǒng)上運行,最新版本的SAS也可以支持Hadoop 分布式計算平臺。
云平臺上的機器學習工具將其部署在云端,以出售計算的形式供用戶使用。這種商業(yè)模式無疑是一種大膽創(chuàng)新,但是具體效果還需等待市場考驗。
由百度公司開發(fā)的BML 是一種部署在云端的機器學習工具,通過BML,用戶無須關心具體算法細節(jié),也無需進行計算平臺配置,只需要上傳數據,選擇計算模型即可自動完成模型訓練,但是BML 并不支持用戶自定義方法[27]。微軟的Azure ML[28]和阿里巴巴的御膳房[29]也提供了一個類似的云端機器學習工具,除Azure ML 提供拖拽式操作外,用戶還可使用Python 語言進行更加靈活的操作,但是用戶用腳本語言編寫的程序無法在Azure ML 上并行運行。
數據處理模型的局限性是云平臺上機器學習工具的一大共性特點。目前,基于云平臺機器學習工具的新型商業(yè)模式正處于起步階段,其將在不斷的發(fā)展和完善中,為用戶提供更好的體驗。
大數據時代,由于數據規(guī)模較大且數據復雜多樣,傳統(tǒng)機器學習在數據價值深度挖掘上都面臨巨大挑戰(zhàn),而大規(guī)模機器學習技術的產生,為人們提供了一個在海量數據中挖掘價值的有效方法。大量開源或者商用的面向大數據的機器學習工具,為人們使用這些新技術提供了便利。目前,國內外各種機器學習工具特點不同,適用領域也不同。從小數據集上的數據挖掘任務,到大數據集下的服務器端數據挖掘任務,再到超大規(guī)模大數據下的機器學習任務,機器學習算法在不斷進步,機器學習工具也在不斷完善。
無論是工業(yè)界還是學術界,研究機器學習的最終目的都是為了方便人類,機器學習工具可以降低機器學習使用門檻,促進機器學習算法普及。未來,機器學習工具也會向著更加全面和更加易用的方向發(fā)展,必將呈現以下功能特點:面向更廣泛更普通的用戶群體、具備良好可視化功能、操作界面簡潔直觀、對常用機器學習算法兼容性強、能夠與企業(yè)自身大數據分析無縫銜接、便于生產環(huán)境建設和升級維護等。