張立民,劉 凱,范曉磊
(1.海軍航空工程學院 山東 煙臺 264001;2.第二炮兵工程大學 士官職業技術教育學院,山東 青州 262500)
基于GPU的受限玻爾茲曼機并行加速
張立民1,劉 凱1,范曉磊2
(1.海軍航空工程學院 山東 煙臺 264001;2.第二炮兵工程大學 士官職業技術教育學院,山東 青州 262500)
為針對受限玻爾茲曼機處理大數據時存在的訓練緩慢、難以得到模型最優的問題,提出了基于GPU的RBM模型訓練并行加速方法。首先重新規劃了對比散度算法在GPU的實現步驟;其次結合以往GPU并行方案,提出采用CUBLAS執行訓練的矩陣乘加運算,設計周期更長、代碼更為簡潔的Tausworthe113和CLCG4的組合隨機數生成器,利用CUDA拾取紋理內存的讀取模式實現了Sigmoid函數值計算;最后對訓練時間和效果進行檢驗。通過MNIST手寫數字識別集實驗證明,相較于以往RBM并行代碼,新設計的GPU并行方案在處理大規模數據集訓練上優勢較為明顯,加速比達到25以上。
受限玻爾茲曼機;GPU;CUDA;加速比;并行加速
基于能量模型的受限玻爾茲曼機 (Restricted Boltzmann Machine,RBM)[1]以其簡單的人工神經網絡形式和快速的學習算法,越來越受到機器學習的關注,目前已經廣泛應用于數據降維、語音識別、3D物體識別、圖像轉換以及高維時間序列建模等機器學習問題,進而催生出機器學習一個新的領域,深度學習[2],并使之得到了迅猛發展。
但隨著大數據時代的到來,模型訓練需要的數據越來越多,單純通過CPU進行計算已經逐漸失去優勢,自2008年Paprotski等人研究了通過CUDA對RBM訓練的加速方法[3],并且取得了較好效果之后,利用GPU的高速運算能力以加快RBM訓練,從而構建深度學習模型,已經成為了RBM訓練的研究熱點[4-6]。目前RBM的CUDA加速方法主要體現在兩種方式,一種是基于相對成熟的CUDA并行庫,例如CUBLAS庫,另一種是根據RBM結構特點和訓練步驟設計Kernel函數,對于RBM訓練過程中目標不同的矩陣運算定義不同的Block和編寫Kernel函數。第一種方法的優點在于,加速方式較為通用,不僅適用于RBM訓練,還可應用于其他與矩陣運算相關的模型訓練;代碼運算穩定,較為健壯,不容易出現溢出問題;但是缺點在于針對性不強,不能高效利用GPU計算資源;第二種方法的優點是能夠針對RBM模型,加速比好,但是缺點為設計較為復雜,擴展性不強。因此,設計一種能夠結合兩種方式的RBM并行加速方法,既保證算法的有效性,也使得擴展性增強。
1.1受限玻爾茲曼機模型
玻爾茲曼機 (Boltzmann Machine,BM)是 1985年由Hinton等提出的一種起源于統計物理學的隨機遞歸神經網絡。作為一種隨機生成的Hopfield網絡,BM由可見層和隱單元層組成,用可見單元和隱單元來表示隨機網絡和隨機環境的學習模型,通過權值表示單元之間的相關性。
為克服BM訓練時間過長、難以確切計算模型分布等問題,研究人員設計了受限玻爾茲曼機。RBM通過限制BM中的層內單元連接,使得在給定同層單元狀態下臨近層單元激活概率條件獨立,其結構如圖1所示。作為無向圖模型,RBM中的V為可見單元層,表示觀測數據;H表示隱單元層,表現為特征檢測器,層內隱單元狀態組合等價于觀測數據的特征組合。文獻[7]指出RBM的隱單元和可見單元可為任意指數族,如泊松單元、高斯單元和Sofmax單元等。文獻[8]從理論方面對RBM的數據泛化能力進行了證明,得出了在足夠多數目隱單元的情況下RBM可以表征任意離散分布的結論。

圖1 RBM單元連接圖Fig.1 RBM unit connection diagram
以包含N個二值可見單元和M個二值隱單元的RBM為例,設定vi表示第i個可見單元的狀態,hj表示第j個隱單元狀態。給定狀態(v,h),模型的能量定義如式(1)所示。

其中,Wij表示可視單元i與隱單元j之間的連接權值,bi表示可視單元i的偏置,cj表示隱單元j的偏置,則RBM處于狀態(v,h)的概率如式(2)所示。

由于層間單元是無連接的,所有單元的激活狀態都是條件獨立的,則隱單元和可見單元的后驗激活概率,如式(3)、(4)所示。

其中σ(x)=1/(1+exp(-x)),在本文中也寫為Sigmoid函數。
1.2CD算法
RBM通過極大似然法則對數據進行無監督學習,即最大化訓練數據出現概率。假設訓練樣本個數為K,則RBM對數據的學習即為最大化以下目標函數,如式(5)所示。

利用隨機梯度下降法,目標函數式(5)對于各個參數的偏導如式(6)所示(以W為例)。

對于式(6)等號右側多項式中的第一個項(Positive Phase),可以通過訓練數據與式(4)直接計算出來;但是對于第二個項(Negative Phase),由于p(v.h)是無法直接通過數學推導出來的,故難以直接計算。
Hinton于2002年提出了對比散度(Contrastive Divergence,CD)算法[9],通過執行吉布斯塊采樣(block Gibbs Sampling)—分別以各個訓練數據作為初始狀態,進行k次狀態轉移(k次Step),然后將轉移后的數據作為樣本對Negative Phase估算均值實現RBM的訓練。Hinton通過實驗證明,在實際應用中,甚至只需要一次狀態轉移就能保證良好的學習效果。由此,在給定訓練數據 v(n)下,隱單元 j的特征 wj的迭代如式(7)所示。

隨著顯卡技術的發展,最初用于計算機圖形渲染的圖像處理器 (Graphics Processing Unit,GPU)計算功能越來越強大,NVIDIA公司推出了面向通用計算的 CUDA(Compute Unified Device Architecture)運算架構[10-14],已經成功地應用到了多種計算領域。
2.1算法分析
以Step=1的CD算法為例,對RBM在訓練過程中的CUDA優化階段進行分析,設定可見單元和隱單元維數分別為I和J,N為訓練樣本數目,以箭頭表示RBM中參數參與計算的方向,則RBM的訓練步驟如圖2所示。

圖2 RBM訓練算法的步驟表示Fig.2 RBM algorithm training Steps
從圖中可以看出,RBM的訓練主要體現在步驟1~6中。這6個步驟分為矩陣乘加(步驟1、3、5、6)、0~1均勻分布隨機數產生(步驟2、4)和Sigmoid函數計算(步驟1、3、5)3個方面。這3個方面計算要求不同,因此在設計CUDA并行化時需要單獨對待。
2.2并行設計
1)矩陣乘加
鑒于矩陣運行庫CUBLAS在處理矩陣運算的高效性和通用性,因此這一部分計算可以直接通過該庫實現,主要使用庫中處理雙精度矩陣乘法運算的cublasDgemm函數。函數說明如下所示,并且所代表的運算如式(8)所示。
cublasDgemm(handle,CUBLAS_OP_N,CUBLAS_OP_N,mat1->_rows,mat2->_cols,mat2->_rows,&alpha,d_a,mat1->_rows,d_b,mat2->_rows,&beta,d_c,mat1->_rows)
其中 d_a為矩陣 a(mat1)在顯存的地址,d_b為矩陣b(mat2)在顯存的地址,d_c為計算結果c的地址,需要在計算完成以后復制到計算機內存中。
2)0~1均勻分布隨機數的產生
0~1均勻分布隨機數的產生需要CUDA隨機數生成器參與。所謂隨機數生成器(Random Number Generator,RNG),是指能夠產生隨機數序列的軟件、硬件或者二者的結合。CUDA 的RNG實質上是偽隨機數發生器 (Pseudo Random Number Generator,PRNG),下面對常用的PRNG進行簡單介紹。
1)線性同余生成器(Linear Congruence Generator,LCG)
線性同余生成器是應用較為廣泛的一種偽隨機數生成器,優點在于計算速度快、容易實現、便于移植等,它是利用數論中的同余運算來產生偽隨機數的,其隨機數遞推公式如式(9)所示。

其中a為乘子,c為增量,M為模數,Xi為序列中的第i個數,Xo稱為種子(Seed)。
2)Tausworthe序列發生器
Tausworthe序列發生器又稱為移位寄存器序列發生器,其工作原理是通過寄存器進行位移操作,直接在存儲單元中生成隨機數,遞推運算公式如式(10)所示。

其中(x0,X1,…,Xp-1)為初始值,p>q>0為整數,Xi是二進制行向量,⊕是位運算符。但是由于Tausworthe序列存在較為嚴重的相關性,很少被單獨使用,通常用于構建組合Tausworthe生成器。
3)組合發生器
組合發生器指將多個獨立的發生器按照某種方式組合在一起以產生偽隨機數,從而得到統計性能更好和周期更長的PRNG。目前CUDA中的隨機數生成器通常是幾種PRNA的組合,從而達到擴大生成器周期和摒棄單獨PRNA中存在的統計學缺陷的目的。文獻 [11]提出一種混合LCG和組合Tausworthe的隨機數產生器,周期為 2121,文獻[6]進一步對RNG進行了改良,實現Tausworthe113和CLCG4的組合發生器,其周期達到2234。
鑒于 Tausworthe113較為復雜,采用 CLCG4和組合Tausworthe共同作為隨機數生成器,周期約為 2210=121+89。其Kernel端核心代碼如下。

3)Sigmoid函數計算
文獻[5]指出,CUDA能夠實現Sigmoid函數的方式有兩種,第一種是通過CUDA提供的-expf(x)函數,定義Sigmoid函數;第二種是利用CUDA拾取紋理內存的讀取模式為cudaReadModeNormalizedFloat時數值被映射到[0,1]區間的能力,選用第二種方式。
綜上,利用CUDA實現RBM訓練的過程如圖3所示。

圖3 基于CUDA的RBM訓練并行設計Fig.3 RBM training CUDA-based parallel design
為驗證CUDA對RBM訓練加速的效果,選取MNIST手寫數字識別集為測試對象。通過對MNIST數據集進行訓練,對比RBM的訓練時間和對數據的擬合程度。實驗平臺的CPU為Intel Core i5 760@2.8GHz,主機內存4 GB,GPU采用GTX460(這與文獻[5]的GPU平臺一致,便于進行數據對比)。
CUDA優化性能主要參考的指標是加速比 (Speed-up)。加速比為程序串行執行時間與并行執行時間比值,數值越大,說明程序的并行化程度越高,CUDA優化效果越好,定義如式(1)所示。
實驗設置RBM的結構為784-Nhid,其中Nhid代表隱單元個數分別取100至800的8個數值,RBM參數的學習速率統一設置為0.01,CD訓練循環次數不超過1000。對比方法選用文獻[5]提出的CUDA設計。圖4為在不同隱單元個數下的兩種CUDA設計的加速比值。

圖4 不同CUDA方法加速比Fig.4 Speedup by different CUDA methods
從圖中可以看出,經過CUDA加速,每個RBM的訓練加速比都在25以上,表現出了較好的并行優化效率。當隱單元較少,即RBM結構小的情況下,所設計的CUDA加速與文獻[118]相比存在差距,原因是Sigmoid函數計算中發生的對紋理內存的讀取增加了顯存讀取,影響了計算效率。但隨著隱單元個數的增大,所設計的CUDA程序能夠得到更大的加速比,原因在于在CUDA框架下,所設計的CUDA程序對隱單元和可見單元隨機狀態的選取進行了硬件加速,相當于對RBM結構的參數更新進行了進一步的并行化設計。因此,隨著隱單元個數的增大,其優越性將得到體現。
表1為當隱單元個數設置為800時,2種不同運算方式下的RBM訓練時間。從表中可以看出,利用CUDA對RBM訓練進行并行化計算,加速比達到41.32,說明所設計實現的CUDA并行化對RBM的加速較為有效。
選取不同訓練樣本個數下的CUDA對RBM的加速比如圖5所示。

表1 RBM訓練時間Tab.1 RBM training time

圖5 不同樣本數目下的CDBM加速比Fig.5 Speedup under different samples number
從圖中可以看出,加速比基本與訓練樣本數目成正比,同時隨著訓練樣本數目的增多呈現出更為顯著的增長趨勢。
本文設計了基于CUDA的RBM并行訓練方法,實現了在GPU技術下RBM的加速訓練。相對于以往RBM的并行加速訓練,該方法能夠更好地處理大規模數據,促進了RBM模型在未來大數據環境下的實用。從實驗結果來看,本文設計實現的基于GPU的RBM并行加速實現,具有較廣的應用范圍和較高的工程價值。
[1]Becker S.An information-theoretic unsupervised learning algorithm for neural networks[D].University of Toronto,1992.
[2]Srivastava N,Salakhutdinov R R,Hinton G E.Modeling documents with deep boltzmann machines[C]//29th Conference on Uncertainty in Artificial Intelligence.Bellevue:IEEE,2013:222-227.
[3]Daniel L.Ly,Paprotski V,Danny Y.Neural Networks on GPUs:Restricted Boltzmann Machines[C]//IEEE Conference on Machine Learning and Applications.Bellevue:IEEE,2010:307-312.
[4]CaiX,XuZ,LaiG,etal.GPU-acceleratedrestricted boltzmann machine for collaborative filtering[M].Algorithms and Architectures for Parallel Processing.Springer Berlin Heidelberg,2012:303-316.
[5]Lopes N,Ribeiro B,Goncalves J.Restricted Boltzmann machines and deep belief networks on multi-core processors [C]//Neural Networks(IJCNN),NewYork:Spring,2012:1-7.
[6]薛少飛,宋彥,戴禮榮.基于多GPU的深層神經網絡快速訓練方法[J].清華大學學報:自然科學版,2013,53(6):745-748.
[7]Welling M,Rosen-Zvi M,Hinton G E.Exponential family harmoniums with an application to information retrieval[C].Advances in neural information processing systems,2004: 1481-1488.
[8]Le Roux N,Bengio Y.Representational power of restrictedBoltzmann machines and deep belief networks[J].Neural Computation,2008,20(6):1631-1649.
[9]G.E.Hinton.Training products of experts by minimizing contrastive divergence[J].Neural Computation,2002,14 (8):1711-1800.
[10]王坤.基于GPU的分類并行算法的研究與實現[J].電子設計工程,2014,(18):39-41.
[11]張聰,邢同舉,羅穎,等.基于GPU的數學形態學運算并行加速研究[J].電子設計工程,2011(19):141-143.
[12]王應戰,魏衍君.基于并行計算的木馬免疫算法研究[J].電子設計工程,2012(16):45-47.
[13]榮少巍.基于改進A*算法的水下航行器自主搜索航跡規劃[J].電子科技,2015(4):17-19,22.
[14]蔣磊,鄒兵,吳明.基于改進免疫遺傳算法的含分布式電源配電網規劃[J].陜西電力,2012(10):26-30.
Realization of RBM parallel training based on GPU
ZHANG Li-min1,LIU Kai1,FAN Xiao-lei2
(1.Naval Aeronautical and Astronautical University,Yantai 264001,China;2.Noncommissioned Officers Vocational and Technical Education College,The Second Artillery Engineering University,Qingzhou 262500,China)
In order to overcome the low efficiency of Restricted Boltzmann Machine handle large data,on the basic of parallel computing platform GPU,the realization of RBM training based on GPU is designed.By researching the training steps of RBM,the contrast divergence algorithm is redesigned to implement on GPU.Combined with previous GPU parallel solutions,matrix multiply-add operations are implemented by CUBLAS libraries.The combination of Tausworthe113 and CLCG4 is used as random number generation to get longer cycle and more concise random number.The CUDA pickup texture memory read mode is used to achieve sigmoid function value,and finally The MNIST handwriting digit database is conduct on the test of this new realization.The MNIST experiment results illustrated that the novel algorithm has good feasibility and is advantageous for hug amount of data.Compared to the previous RBM parallel code,this new GPU parallel processing have more obvious advantages on large data sets and the speedup rate reach at least 25.
RBM;GPU;CUDA;speed-up;parallel programming
TN99
A
1674-6236(2016)02-0028-04
2015-03-21稿件編號:201503294
國家自然科學基金(61032001)
張立民(1976—),男,吉林開源人,博士,教授。研究方向:信號與信息處理、軍用仿真技術。