莊福振 錢明達(dá) 申恩兆, 張大鵬 何 清
(1.中國(guó)科學(xué)院計(jì)算技術(shù)研究所智能信息處理重點(diǎn)實(shí)驗(yàn)室,北京,100190; 2.燕山大學(xué)信息科學(xué)與工程學(xué)院,秦皇島,066004)
機(jī)器學(xué)習(xí)作為人工智能的主體與核心,各種機(jī)器學(xué)習(xí)算法已經(jīng)應(yīng)用到各個(gè)領(lǐng)域,如語(yǔ)音識(shí)別、圖片分類、推薦系統(tǒng)、手寫輸入識(shí)別和漏洞發(fā)現(xiàn)等,極大地提高了計(jì)算機(jī)智能化程度和各種系統(tǒng)的性能。實(shí)際應(yīng)用中許多數(shù)據(jù)并不能很好地表示數(shù)據(jù)規(guī)律,甚至對(duì)系統(tǒng)的學(xué)習(xí)產(chǎn)生副作用,這就需要獲得好的特征表示來(lái)改進(jìn)算法的性能。然而隨著計(jì)算機(jī)以及互聯(lián)網(wǎng)的不斷發(fā)展,信息量不斷增大,信息復(fù)雜度也不斷提升,數(shù)據(jù)包含的信息日益龐雜、冗余,良好的特征工程成為影響機(jī)器學(xué)習(xí)成敗的關(guān)鍵因素。如何取得數(shù)據(jù)良好的特征表示,進(jìn)而提升機(jī)器學(xué)習(xí)算法性能已經(jīng)成為機(jī)器學(xué)習(xí)中一個(gè)關(guān)鍵的問(wèn)題。
特征學(xué)習(xí)(Feature learning)又稱作表示學(xué)習(xí)(Representation learning),是機(jī)器學(xué)習(xí)領(lǐng)域中的一個(gè)重要研究問(wèn)題,它的目標(biāo)是自動(dòng)地學(xué)習(xí)一個(gè)從原始輸入到新特征表示的變換,使得新特征表示能夠有效應(yīng)用在各種學(xué)習(xí)任務(wù)中,從而把人從繁瑣的特征工程中解放出來(lái)。根據(jù)訓(xùn)練過(guò)程是否需要有標(biāo)簽數(shù)據(jù),可以把表示學(xué)習(xí)算法分為兩類:有監(jiān)督特征學(xué)習(xí)和無(wú)監(jiān)督特征學(xué)習(xí)。在有監(jiān)督特征學(xué)習(xí)中,通常需要利用有標(biāo)簽數(shù)據(jù),比如有監(jiān)督字典學(xué)習(xí)。無(wú)監(jiān)督特征學(xué)習(xí)中,不需要數(shù)據(jù)具有標(biāo)簽,比如主成分分析、 獨(dú)立成分分析、 自動(dòng)編碼機(jī)、矩陣分解[1]以及眾多形式的聚類算法[2-3]。
近幾年來(lái)神經(jīng)網(wǎng)絡(luò)深度結(jié)構(gòu)對(duì)特征的多層次抽象吸引了研究人員的廣泛關(guān)注,深度學(xué)習(xí)模型在各類學(xué)習(xí)任務(wù)中都取得了不錯(cuò)的性能,且許多深度模型在實(shí)際應(yīng)用場(chǎng)景中都表現(xiàn)良好[4-6]。自動(dòng)編碼機(jī)已經(jīng)被證明在數(shù)據(jù)降維和特征提取上有著非常好的表現(xiàn)。目前自動(dòng)編碼機(jī)已經(jīng)發(fā)展出眾多變體,除了自動(dòng)編碼機(jī)外,還有稀疏自動(dòng)編碼機(jī)、降噪自動(dòng)編碼機(jī)、堆疊自動(dòng)編碼機(jī)及卷積自動(dòng)編碼機(jī)等[7-9]。此外神經(jīng)元的屏蔽、正則化、邊緣化等方法[10]都被運(yùn)用于自動(dòng)編碼機(jī)。在應(yīng)用上,異常檢測(cè)中自動(dòng)編碼機(jī)取得良好效果,深度自動(dòng)編碼機(jī)也被運(yùn)用到遷移學(xué)習(xí)中[11]。但以上的自動(dòng)編碼機(jī)都是串行實(shí)現(xiàn),不能滿足目前大數(shù)據(jù)環(huán)境下模型復(fù)雜、計(jì)算量大的實(shí)際問(wèn)題。因此,單機(jī)串行實(shí)現(xiàn)的模型在應(yīng)用層面具有很大的局限性。
隨著大數(shù)據(jù)時(shí)代的來(lái)臨,處理海量數(shù)據(jù)、建立大規(guī)模計(jì)算模型成為必然需求。本文提出了一種基于Spark的高效自動(dòng)編碼機(jī),利用Spark分布式內(nèi)存計(jì)算的固有優(yōu)勢(shì)高效處理海量數(shù)據(jù)。現(xiàn)有數(shù)據(jù)種類繁多,許多數(shù)據(jù)有非常稀疏的特點(diǎn),比如推薦系統(tǒng)關(guān)系矩陣、文本詞袋模型等。而現(xiàn)有基于自動(dòng)編碼機(jī)的特征提取算法沒有對(duì)稀疏數(shù)據(jù)做針對(duì)性優(yōu)化,計(jì)算過(guò)程中大量無(wú)效運(yùn)算和存儲(chǔ)空間開銷使時(shí)間復(fù)雜度和空間復(fù)雜度隨數(shù)據(jù)維度成二次甚至三次增長(zhǎng),與有效數(shù)據(jù)成指數(shù)級(jí)增長(zhǎng)。本文編碼算法是一種對(duì)稀疏數(shù)據(jù)針對(duì)性操作的優(yōu)化方法,使得稀疏數(shù)據(jù)處理開銷與有效數(shù)據(jù)成正比,極大優(yōu)化了算法運(yùn)行的時(shí)間效率和空間效率。
圖1 簡(jiǎn)單的自動(dòng)編碼機(jī)結(jié)構(gòu)Fig.1 Structure of a simple auto-encoder
圖2 神經(jīng)元Fig.2 Single neuron
圖1中的自動(dòng)編碼機(jī),作為前饋神經(jīng)網(wǎng)絡(luò),分別由輸入層、隱含層和輸出層組成。其中輸入層為數(shù)據(jù)直接表示,隱含層和輸出層中每個(gè)節(jié)點(diǎn)代表神經(jīng)網(wǎng)絡(luò)的一個(gè)神經(jīng)元。神經(jīng)元由上層網(wǎng)絡(luò)輸出的加權(quán)和通過(guò)激活函數(shù)得到輸出,并提供下一層網(wǎng)絡(luò)使用。神經(jīng)元可以簡(jiǎn)單表示為如圖2所示,激活函數(shù)一般為非線性函數(shù),本文使用Sigmoid函數(shù),其函數(shù)表達(dá)式為
(1)
一般地,一個(gè)自動(dòng)編碼機(jī)包括編碼部分和解碼部分。兩部分可以概括為
Apache Spark,2014年成為Apache基金頂級(jí)項(xiàng)目,以快速、通用、簡(jiǎn)單等特點(diǎn)成為當(dāng)前流行大數(shù)據(jù)處理模型。Spark提出的分布式內(nèi)存計(jì)算框架,既保留了MapReduce的可擴(kuò)展性、容錯(cuò)性和兼容性,又彌補(bǔ)了MapReduce在這些應(yīng)用上的不足。由于采用基于內(nèi)存的集群計(jì)算,所以Spark在這些應(yīng)用上相對(duì)MapReduce有100倍左右的加速[13]。此外Spark可以部署在Hadoop集群環(huán)境下,擁有直接訪問(wèn)HDFS文件系統(tǒng)的能力。但不同于MapReduce中間過(guò)程和計(jì)算結(jié)果需要讀寫HDFS,Spark將計(jì)算結(jié)果保存在內(nèi)存中,從而不必頻繁讀寫HDFS,減少了IO操作,提升了算法運(yùn)行效率,使算法運(yùn)算時(shí)間大幅縮短。
圖3 系統(tǒng)結(jié)構(gòu)圖Fig.3 Structure of system
值得強(qiáng)調(diào)的是,分布式系統(tǒng)需要一個(gè)統(tǒng)一調(diào)度角色,一般稱為管理者(Manager),而其他各運(yùn)算節(jié)點(diǎn)稱為工作者(Worker)。一般情況下,并行程序運(yùn)行過(guò)程中由Workers分別計(jì)算相對(duì)獨(dú)立的并行步驟,Manager統(tǒng)一調(diào)度、管理和統(tǒng)計(jì)。
基于Spark的高效并行自動(dòng)編碼機(jī)(Parallel auto-encoder,PAE)是對(duì)現(xiàn)有自動(dòng)編碼機(jī)完成針對(duì)稀疏數(shù)據(jù)的修改后,將其遷移到Spark計(jì)算平臺(tái)上的成果。系統(tǒng)的結(jié)構(gòu)包括一個(gè)負(fù)責(zé)分發(fā)Job、收集數(shù)據(jù)、調(diào)度任務(wù)的Manager以及若干個(gè)負(fù)責(zé)具體計(jì)算的Worker。系統(tǒng)結(jié)構(gòu)如圖3所示。圖中,系統(tǒng)于分布式系統(tǒng)的各計(jì)算節(jié)點(diǎn)初始化同樣的神經(jīng)網(wǎng)絡(luò)。每計(jì)算一定量的數(shù)據(jù),對(duì)模型的參數(shù)進(jìn)行收集歸并,不斷迭代得到最終權(quán)值。
上述過(guò)程基于神經(jīng)網(wǎng)絡(luò)的性質(zhì):相同初始值的神經(jīng)網(wǎng)絡(luò),對(duì)同分布下不同數(shù)據(jù)樣本進(jìn)行擬合,最終所擬合數(shù)據(jù)分布相同,即得到網(wǎng)絡(luò)參數(shù)分布相近。本文算法以此為基礎(chǔ),在初始化時(shí)保證網(wǎng)絡(luò)完全一致,達(dá)到自動(dòng)編碼機(jī)并行運(yùn)算的目的。
此外,本系統(tǒng)針對(duì)自動(dòng)編碼機(jī)低效處理稀疏數(shù)據(jù)的缺陷,提出避免計(jì)算過(guò)程中無(wú)效計(jì)算和無(wú)效存儲(chǔ)開銷的方案。使用指示器函數(shù)對(duì)算法進(jìn)行改進(jìn),指示器函數(shù)為
通過(guò)指示器函數(shù)的選擇,在計(jì)算中系統(tǒng)只關(guān)注有效值及其對(duì)應(yīng)神經(jīng)元,且反向傳播時(shí)避免無(wú)效計(jì)算與操作。本文系統(tǒng)成功地將時(shí)間復(fù)雜度由二次復(fù)雜度降為線性復(fù)雜度,在保證計(jì)算正確性的前提下,大幅度提高了模型訓(xùn)練速度。
為實(shí)現(xiàn)基于Spark的高效并行自動(dòng)編碼機(jī),本文選擇反向傳播來(lái)進(jìn)行學(xué)習(xí)和優(yōu)化,此外目標(biāo)函數(shù)學(xué)習(xí)使用了梯度下降思想。另外,為提高算法運(yùn)行效率,本文采用隨機(jī)梯度下降算法,即計(jì)算每一條樣本,實(shí)時(shí)更新學(xué)習(xí)模型。
當(dāng)模型訓(xùn)練開始,Manager首先進(jìn)行Map操作,將初始化參數(shù)分發(fā)至各Worker節(jié)點(diǎn),包括數(shù)據(jù)規(guī)模、隱藏層配置、輸入數(shù)據(jù)路徑、正則化參數(shù)及隨機(jī)數(shù)種子等。此后每個(gè)Worker獨(dú)立讀取數(shù)據(jù),利用隨機(jī)數(shù)種子分別初始化自動(dòng)編碼機(jī)的各項(xiàng)參數(shù),其中由相同的隨機(jī)種子保證各Worker上神經(jīng)網(wǎng)絡(luò)初始狀態(tài)一致。
隨后Worker分別利用各自數(shù)據(jù)分片訓(xùn)練自動(dòng)編碼機(jī),Worker每次處理一條數(shù)據(jù)樣本,將讀入樣本進(jìn)行正向傳播,即利用輸入數(shù)據(jù)計(jì)算隱藏層和輸出層的結(jié)果。完成后進(jìn)行反向傳播,利用得到的輸出數(shù)據(jù)誤差計(jì)算出神經(jīng)網(wǎng)絡(luò)的參數(shù)梯度。利用所得梯度,完成網(wǎng)絡(luò)參數(shù)更新,至此完成模型的一次迭代。整個(gè)訓(xùn)練過(guò)程需要重復(fù)迭代,保證所分得數(shù)據(jù)分片中的每一例樣本至少計(jì)算一遍。
各Worker利用一部分?jǐn)?shù)據(jù)完成模型訓(xùn)練后,進(jìn)行Reduce操作,將各節(jié)點(diǎn)計(jì)算結(jié)果進(jìn)行約減。其中約減操作定義為Worker將計(jì)算所得模型參數(shù)上傳至 Manager,由Manager對(duì)各參數(shù)取平均。至此完成系統(tǒng)的一次迭代。
對(duì)系統(tǒng)進(jìn)行迭代,保證所有Worker均完全訓(xùn)練,至少保證訓(xùn)練集中所有數(shù)據(jù)均參與到系統(tǒng)模型的訓(xùn)練中。最終在Manager上得到一個(gè)訓(xùn)練完畢的模型。值得指出的是,實(shí)際操作中可以根據(jù)集群實(shí)際情況,對(duì)數(shù)據(jù)進(jìn)行多種劃分模式,包括但不限于差異化節(jié)點(diǎn)數(shù)目、節(jié)點(diǎn)間不同數(shù)據(jù)條數(shù)、各次迭代處理的數(shù)據(jù)條數(shù)以及系統(tǒng)整體對(duì)數(shù)據(jù)比例劃分。
以上模型可具體表示為:
正向傳播
h=sigmoid(W1x+b1)
(4)
(5)
反向傳播
(6)
(7)
(8)
(9)
權(quán)值更新
W=W+φ(xinΔW-αW)
(10)
式(4~10)中符號(hào)表示含義如表1所示。
表1 公式符號(hào)含義
表中:N為輸入數(shù)據(jù)樣本數(shù)量;M為輸入數(shù)據(jù)維度;K表示隱藏層節(jié)點(diǎn)目。
根據(jù)2.1節(jié)描述可以實(shí)現(xiàn)基于Spark的高效并行自動(dòng)編碼機(jī)。Worker上隨機(jī)梯度下降(Stochastic gradient descent,SGD)偽代碼如算法1所示,基于Spark的高效并行自動(dòng)編碼機(jī)偽代碼如算法2所示。
算法1隨機(jī)梯度下降算法
輸出:自動(dòng)編碼機(jī)學(xué)習(xí)到的參數(shù)W1,b1,W2,b2
For:對(duì)輸入數(shù)據(jù)集中的每一個(gè)樣本:
(1)根據(jù)式(4,5),進(jìn)行正向傳播。并計(jì)算網(wǎng)絡(luò)中每個(gè)單元的輸出;
(2)根據(jù)式(6,7),利用已求有輸出分別求得網(wǎng)絡(luò)各節(jié)點(diǎn)的殘差;
(3)由式(8,9),利用已有殘差分別計(jì)算網(wǎng)絡(luò)模型各參數(shù)的梯度;
(4)按照式(10),更新自編碼機(jī)權(quán)值。
算法2基于Spark的高效并行自動(dòng)編碼機(jī)
輸出:自動(dòng)編碼機(jī)學(xué)習(xí)到的參數(shù)W1,b1,W2,b2
(1)初始化,由Manager根據(jù)Nworker將網(wǎng)絡(luò)參數(shù)size,τ進(jìn)行分發(fā),并根據(jù)實(shí)際情況,將xin隨機(jī)劃分為若干部分,分別派發(fā)給Worker。Worker根據(jù)Manager下發(fā)的size來(lái)構(gòu)建網(wǎng)絡(luò),τ來(lái)初始化矩陣;
算法2流程如圖4所示。由算法2得到的所有Worker上的參數(shù),可以得到最終的模型參數(shù)。
圖4 基于Spark高效并行自動(dòng)編碼機(jī)Fig.4 Efficient parallel auto-encoder based on Spark
本節(jié)在兩個(gè)學(xué)習(xí)任務(wù)上驗(yàn)證算法的有效性以及高效性,即分類任務(wù)和協(xié)同過(guò)濾。本文實(shí)驗(yàn)包括:(1)直接對(duì)源數(shù)據(jù)利用支持向量機(jī)(SVM)得到分類結(jié)果與PAE分類結(jié)果進(jìn)行比較。(2)利用Matlab Deeplearning Tool(http://www.mathworks.com/matlabcentral/fileexchange/38310-deep-learning-toolbox)中SAE單機(jī)壓縮數(shù)據(jù)后,再利用SVM分類結(jié)果與PAE得到的壓縮數(shù)據(jù)分類結(jié)果進(jìn)行比較,分別驗(yàn)證算法不同方面的能力和表現(xiàn)。其中SAE串行算法的有效性已經(jīng)被眾多事實(shí)所驗(yàn)證,公認(rèn)其獲得的特征可以有效提升機(jī)器學(xué)習(xí)算法性能,故而在此不再重復(fù)討論。(3)將PAE應(yīng)用到推薦系統(tǒng)中,得到推薦結(jié)果分別與基準(zhǔn)算法進(jìn)行比較,進(jìn)而驗(yàn)證PAE在推薦系統(tǒng)中的有效性。
為了驗(yàn)證PAE算法的有效性和并行效率,本文采用文本數(shù)據(jù)集20Newsgroups(http://qwone.com/~jason/20Newsgroups/),該數(shù)據(jù)集包含20個(gè)主題,每個(gè)主題有大約1 000個(gè)樣本文件,數(shù)據(jù)維度為61 188,數(shù)據(jù)以稀疏數(shù)據(jù)的方式存儲(chǔ)。20個(gè)主題按照題材簡(jiǎn)單分類后如表2所示。為了構(gòu)造分類問(wèn)題,本文以文檔主題作為分類預(yù)期結(jié)果,總共20類。
表2 20Newsgroups數(shù)據(jù)集主題
在PAE應(yīng)用于推薦系統(tǒng)的實(shí)驗(yàn)中,本文基于兩個(gè)個(gè)性推薦系統(tǒng)公共數(shù)據(jù)集MovieLens(http://grouplens.org/datasets/movielens/)和NetFlix(http://www.prea.gatech.edu/download.html)進(jìn)行實(shí)驗(yàn)。
MovieLens是一套公共推薦系統(tǒng)數(shù)據(jù)集,數(shù)據(jù)為用戶對(duì)自己看過(guò)的電影進(jìn)行的評(píng)分,分值為1~5。顯然,數(shù)據(jù)集中用戶和電影構(gòu)成的評(píng)分矩陣極度稀疏。數(shù)據(jù)集中包括3個(gè)不同大小的庫(kù),100 K數(shù)據(jù)集中包括1 000位用戶對(duì)1 700部電影進(jìn)行評(píng)分的100 000個(gè)評(píng)分記錄;1 M數(shù)據(jù)集中包括6 000位用戶對(duì)4 000部電影打分的100萬(wàn)條記錄;10 M數(shù)據(jù)集中包括了72 000位用戶對(duì)10 000部電影進(jìn)行評(píng)分的1 000萬(wàn)條記錄和10萬(wàn)標(biāo)簽記錄。
NetFlix和MovieLens一樣也是用戶電影評(píng)分?jǐn)?shù)據(jù)集,同樣分值分布為1~5,但前者數(shù)據(jù)量遠(yuǎn)遠(yuǎn)高于后者。該數(shù)據(jù)集反映了自1998年10月到2005年12月期間的評(píng)分記錄分布。NetFlix中包括了從48萬(wàn)名用戶對(duì)17 000部電影的評(píng)分中隨機(jī)選取的1億條評(píng)分記錄。此外還包括了電影的發(fā)行時(shí)間和發(fā)行標(biāo)題。
特征表示學(xué)習(xí)實(shí)驗(yàn)中主要分為兩部分,分別驗(yàn)證PAE的有效性和高效性。
(1)在驗(yàn)證PAE有效性實(shí)驗(yàn)中,本文首先訓(xùn)練SVM分類器,得到源數(shù)據(jù)分類準(zhǔn)確率基準(zhǔn)值;隨后由PAE在不同數(shù)目的Worker下對(duì)數(shù)據(jù)進(jìn)行壓縮降維,利用壓縮后的降維特征訓(xùn)練分類器得到分類準(zhǔn)確率。其中SVM作為基準(zhǔn)分類器使用LibSVM[14]庫(kù)。實(shí)驗(yàn)從所有數(shù)據(jù)中分別隨機(jī)選取60%,70%,80%,90%作為訓(xùn)練集,剩下的作為測(cè)試集。為了保證分布式算法在不同節(jié)點(diǎn)情況下充分測(cè)試,本文分別測(cè)試了2,3,4個(gè)Worker的情況。
(2)本文也比較了Matlab Deeplearning Tool中SAE作為特征的提取方法。由SAE對(duì)數(shù)據(jù)進(jìn)行降維壓縮,得到的特征表示由SVM進(jìn)行學(xué)習(xí)并構(gòu)造分類器,通過(guò)測(cè)試集得出分類準(zhǔn)確率。實(shí)驗(yàn)中利用自動(dòng)編碼機(jī)將原有61 188維稀疏數(shù)據(jù)提取特征降維到100維。為了驗(yàn)證PAE對(duì)海量數(shù)據(jù)處理性能,本文將18 774個(gè)樣本的數(shù)據(jù)集進(jìn)行擴(kuò)展、復(fù)制,進(jìn)而得到海量數(shù)據(jù)。通過(guò)海量數(shù)據(jù)測(cè)試將PAE與SAE進(jìn)行對(duì)比,驗(yàn)證算法運(yùn)行效率。
3.3.1 PAE正確性分析
表3給出了PAE有效性實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果,所列數(shù)據(jù)均為5次實(shí)驗(yàn)平均值。表中還記錄了不同數(shù)目的Worker下本文并行算法執(zhí)行結(jié)果。由表3中結(jié)果可以看到,SVM分類準(zhǔn)確率隨著訓(xùn)練比的不斷提高而提高,經(jīng)過(guò)PAE降維后的數(shù)據(jù)在SVM分類器的表現(xiàn)普遍優(yōu)于同訓(xùn)練比例的原始數(shù)據(jù)。這是由于原始數(shù)據(jù)維度非常高,通過(guò)降維可以得到更好的特征表示。實(shí)驗(yàn)結(jié)果證明了PAE提取特征的正確性和有效性。
表3 SVM分類準(zhǔn)確率
3.3.2 PAE效率分析
在保證正確性的情況下,與Matlab Deeplearning Tool中SAE做效率對(duì)比,同樣地將源數(shù)據(jù)集由61 188維度壓縮為100維度。SAE及PAE算法運(yùn)行時(shí)間統(tǒng)計(jì)結(jié)果如圖5所示。值得指出的是,SAE在數(shù)據(jù)量達(dá)到8 000條時(shí),報(bào)出了內(nèi)存不足的異常,亦即單機(jī)Matlab Deeplearning Tool中SAE處理數(shù)據(jù)的極限不足8 000條。并且由圖5顯示,SAE時(shí)間開銷是隨數(shù)據(jù)量的變化成二次變化。運(yùn)行環(huán)境為:Intel CoreTMi7-4790 3.6 GHz CPU,8 GB 內(nèi)存,500 GB 硬盤,操作系統(tǒng)為 Windows 7,64位專業(yè)版。
圖5 SAE和PAE運(yùn)算時(shí)間開銷對(duì)比Fig.5 Time cost comparison between SAE and PAE
同樣的數(shù)據(jù),在PAE實(shí)驗(yàn)過(guò)程中設(shè)置不同的Worker數(shù)。由圖5看到在數(shù)據(jù)量較小時(shí),PAE時(shí)間開銷相對(duì)較大,變化趨勢(shì)與數(shù)據(jù)量并無(wú)明顯聯(lián)系,這是因?yàn)閿?shù)據(jù)量較小時(shí),分布式計(jì)算中平臺(tái)通訊開銷所占系統(tǒng)時(shí)間開銷比例較大。隨著數(shù)據(jù)量的不斷增大,可以看出當(dāng)數(shù)據(jù)量達(dá)到60 000條時(shí),系統(tǒng)時(shí)間開銷開始有明顯的增長(zhǎng),此時(shí)系統(tǒng)的計(jì)算時(shí)間占比逐漸變大,計(jì)算時(shí)間的變化對(duì)系統(tǒng)總時(shí)間開銷的影響開始顯現(xiàn)出來(lái)。與單機(jī)運(yùn)行SAE對(duì)比,首先PAE能夠處理的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)大于SAE;其次由圖線對(duì)比得出,在數(shù)據(jù)量逐漸增大的過(guò)程中,系統(tǒng)時(shí)間開銷隨數(shù)據(jù)量增大而線性增長(zhǎng),相比SAE二次增長(zhǎng)的時(shí)間曲線,具有明顯優(yōu)勢(shì)。
在推薦系統(tǒng)的應(yīng)用實(shí)驗(yàn)中,本文使用了非負(fù)矩陣分解(Non-negative matrix factorization,NMF)與概率矩陣分解(Probabilistic matrix factorization, PMF)作為與PAE比較的參考算法,其中NMF與PMF均來(lái)自于PREA[15]工具包。
個(gè)性化推薦算法工具包(Personalized recommendation algorithms toolkit,PREA)是一個(gè)個(gè)性化推薦算法的工具包,其中包括了大量推薦算法的實(shí)現(xiàn),提供了便捷的接口可供調(diào)用。學(xué)術(shù)界提出的各種推薦算法常與它進(jìn)行對(duì)比,驗(yàn)證準(zhǔn)確率及效率。
在實(shí)驗(yàn)過(guò)程中,本文利用均值絕對(duì)誤差(Mean absolute error,MAE)和均值平方根誤差(Root mean squared error, RSME)作為衡量算法效果的度量值。實(shí)驗(yàn)中利用PAE分別以u(píng)ser和item作為維度坐標(biāo)進(jìn)行壓縮降維。為表述方便本文將兩種方法表示為PAEu和PAEi。不同算法5次實(shí)驗(yàn)結(jié)果的平均值如表4所示。
表4 推薦系統(tǒng)實(shí)驗(yàn)數(shù)據(jù)
由表4可以看出,當(dāng)數(shù)據(jù)量較小時(shí),在推薦結(jié)果的準(zhǔn)確性和推薦效果的穩(wěn)定性方面NMF表現(xiàn)相對(duì)較好,而且在算法運(yùn)行時(shí)間上也有一定優(yōu)勢(shì)。但隨著實(shí)驗(yàn)數(shù)據(jù)量的增大,NMF與PMF均出現(xiàn)了內(nèi)存不足的情況,在基于海量數(shù)據(jù)推薦任務(wù)中,兩種算法并不能很好地給出結(jié)果。而PAE的兩種算法,盡管在準(zhǔn)確性和穩(wěn)定性方面稍弱于NMF和PMF,但可以應(yīng)對(duì)海量數(shù)據(jù)的推薦任務(wù)。結(jié)果充分表明PAE可以應(yīng)用于推薦系統(tǒng)中,特別是在海量數(shù)據(jù)下的應(yīng)用場(chǎng)景。
本文提出了一種基于Spark的高效并行自動(dòng)編碼機(jī)。通過(guò)對(duì)自動(dòng)編碼機(jī)進(jìn)行并行化,使之能夠高效處理稀疏大數(shù)據(jù),同時(shí)具備正常處理非稀疏數(shù)據(jù)能力。此外,將其遷移到Spark分布式平臺(tái),面向稀疏數(shù)據(jù)進(jìn)行針對(duì)性優(yōu)化,使其大幅減少IO操作,提升算法運(yùn)行效率,算法運(yùn)算時(shí)間明顯縮短。本文做了大量實(shí)驗(yàn)來(lái)驗(yàn)證PAE的可行性與有效性,實(shí)驗(yàn)建立在兩個(gè)實(shí)際應(yīng)用任務(wù)上,其中分類任務(wù)驗(yàn)證了PAE的高效性和PAE對(duì)特征提取的有效性。在保證特征提取有效性的前提下本文將PAE應(yīng)用在推薦系統(tǒng)中,利用自動(dòng)編碼機(jī)提取到的數(shù)據(jù)特征對(duì)原有數(shù)據(jù)進(jìn)行填充預(yù)測(cè),進(jìn)而得出推薦結(jié)果,通過(guò)與對(duì)比算法的比較進(jìn)一步驗(yàn)證本算法的有效性和高效性。
[1] Srebro N, Rennie J D M, Jaakkola T. Maximum-margin matrix factorization[J]. Advances in Neural Information Processing Systems, 2004,37(2):1329-1336.
[2] Coates A, Ng A Y, Lee H. An analysis of single-layer networks in unsupervised feature learning[J]. Journal of Machine Learning Research, 2011,15:215-223.
[3] Dance C, Willamowski J, Fan L, et al. Visual categorization with bags of key points[C]// ECCV International Workshop on Statistical Learning in Computer Vision. Prague:[s.n.], 2004:1-22.
[4] 盧宏濤,張秦川.深度卷積神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺中的應(yīng)用研究綜述[J].數(shù)據(jù)采集與處理,2016,31(1):1-17.
Lu Hongtao, Zhang Qinchuan. Applications of deep convolutional neural network in computer vision[J]. Journal of Data Acquisition and Processing, 2016,31(1):1-17.
[5] 李思雯,呂建成,倪勝巧.集成的卷積神經(jīng)網(wǎng)絡(luò)在智能冰箱果蔬識(shí)別中的應(yīng)用[J].數(shù)據(jù)采集與處理,2016,31(1):205-212.
Li Siwen, Lü Jiancheng, Ni Shengqiao. Integrated convolutional neural network and its application in fruits and vegetables recognition of intelligent refrigerator[J]. Journal of Data Acquisition and Processing, 2016,31(1):205-212.
[6] 楊陽(yáng),張文生.基于深度學(xué)習(xí)的圖像自動(dòng)標(biāo)注算法[J]. 數(shù)據(jù)采集與處理,2015,30(1):88-98.
Yang Yang, Zhang Wensheng. Image auto-annotation based on deep learning[J]. Journal of Data Acquisition and Processing, 2015,30(1):88-98.
[7] Le Q V, Ranzato M A, Monga R, et al. Building high-level Ieatures using large scale unsupervised learning[C]//Proceedings of the International Conference on Machine Learning (ICML). Edinburgh, UK:[s.n.],2012:107-114.
[8] Vincent P, Larochelle H, Bengio Y, et al. Extracting and composing robust features with denoising autoencoders[C]//Proceedings of the 25th International Conference on Machine Learning. Canada:[s.n.], 2008:1096-1103.
[9] Gupta A, Maida A S, Ayhan M. Natural image bases to represent neuroimaging data[C]//30th International Conference on Machine Learning. Atlanta, Georgia, USA: International Machine Learning Society, 2013:987-994.
[10] Chen M, Xu Z, Weinberger K, et al. Marginalized denoising autoencoders for domain adaptation[J]. Computer Science, 2012: 2012arXiv1206.4683C.
[11] Zhuang F, Cheng X, Luo P, et al. Supervised representation learning: Transfer learning with deep autoencoders[C]//Proc of the 24th International Joint Conference on Artificial Intelligence. Buenos Aires, Argentina: AAAI Press, 2015:4119-4125.
[12] Bengio Y. Learning deep architectures for AI[J]. Foundations & TrendsR in Machine Learning, 2009,2(1):1-127.
[13] 黎文陽(yáng).大數(shù)據(jù)處理模型Apache Spark研究[J].現(xiàn)代計(jì)算機(jī):普及版,2015(8):55-60.
Li Wenyang. Research on apache spark for big data processing[J]. Modern Computer, 2015(8):55-60.
[14] Chang C C, Lin C J. LIBSVM: A library for support vector machines[J]. ACM Transactions on Intelligent Systems & Technology, 2011,2(3):389-396.
[15] Lee J, Sun M, Lebanon G. PREA: Personalized recommendation algorithms toolkit[J]. Journal of Machine Learning Research, 2012,13(3):2699-2703.