?

一種GPU及深度置信網絡的語音識別加速算法研究

2018-03-27 03:30景維鵬朱良寬劉美玲
小型微型計算機系統 2018年3期
關鍵詞:分片內存權重

景維鵬,姜 濤,朱良寬,劉美玲

1(東北林業大學 信息與計算機工程學院,哈爾濱 150040) 2(東北林業大學 機電工程學院,哈爾濱 150040)

1 引 言

語音識別作為人機交互的關鍵技術,已經成為“改變人類未來生活方式的關鍵技術之一[1].深度置信網絡(DBN)作為深度學習中的一種典型模型,擁有強大的判別訓練和連續建模能力,可以通過對比散度算法(CD)[2]進行快速訓練,因此被廣泛應用于語音識別領域[3].軟研究人員將DBN引入語音識別中,在大詞匯量語音識別系統中獲得巨大成功[4].但是,語音數據規模的不斷增加、DBN中的隨機梯度算法(SGD)收斂速度比較慢和DBN參數過多等問題導致DBN模型訓練速度越來越慢.因此如何提高在海量數據下DBN的訓練速度成為迫切需要解決的問題.

為了提高DBN模型的訓練速度,通常存在優化DBN結構和并行加速兩種方法:1)在保證語音識別正確率的前提下,盡可能減少模型訓練參數和優化模型訓練過程;2)利用CPU集群或者GPU進行DBN模型的加速訓練.本文的研究重點是第二種方法,即通過將語音數據進行劃分,利用CPU集群或GPU加速DBN的訓練.文獻[5]通過將語音訓練數據分成許多塊到不同的機器進行訓練,實現并行計算.文獻[6]在訓練中將語音數據劃分成互不相交的子集,在具有上千CPU核的集群上進行訓練.但是該方法面臨著并行計算單元之間的通信開銷問題,使得訓練速度變慢.GPU強大的并行計算能力,被廣泛應用于DBN模型的訓練.文獻[7]將GPU運用于大規模的連續詞匯的語音識別中取得了較好的加速效果.2008年,Paprotski等人通過CUDA加速DBN模型的訓練[8],取得較好的結果.文獻[9]通過使用CUDA的庫函數CUBLAS加速RBM的訓練,取得了較好的成果,但是它的通用性較強,未結合語音數據的特點高效利用GPU的計算資源.文獻[10]合理分解了DNB中RBM的計算過程,建立了CUDA模型,但是GPU的共享內存未充分利用.并且DBM模型存在著大量的參數,在單GPU下,模型參數很可能無法一次性存儲到GPU內.文獻[11]通過將RBM的權重矩陣進行分塊處理,極大提高了訓練速度.但是它沒有考慮RBM參數存儲的優化,沒有建立合理的內存模型.文獻[12]使用4塊GPU卡加速DBN的訓練速度取得了相對于單GPU 3.3倍的加速.但是,多GPU下通信的開銷使得GPU的計算資源不能得到充分的利用.

綜上,現有的利用GPU加速DBN模型存在單GPU內存有限、訪問不同類型內存地址的延遲不相等、多GPU內參數交換成為制約訓練速度提高的瓶頸等問題.因此,為有效利用GPU對DBN模型進行加速,提高語音處理的處理效率,本文提出opCD-k算法:將權重矩陣分片,充分利用GPU的共享內存,建立合理的存儲模型;利用GPU的流處理進行并行處理,即數據傳輸和數據計算并行進行.在多GPU中進行數據并行,利用參數服務器模式,減少參數交換的通信量,并將opCD-k算法應用到多GPU中.

2 深度置信網絡的訓練

深度置信網絡(DBN)是一種概率生成模型[13],由多層受限波爾茲曼機(RBM)和一層反向傳播(BP)神經網絡構成.如圖1所示,是DBN的模型的訓練過程,包括無監督逐層預訓練RBM(pre-training)和有監督BP算法微調(fine-tuning):

受限玻爾茲曼機(RBM)是一類具有兩層結構(可視層和隱含層)、對稱連接的基于能量的隨機神經網絡模型.

由于語音信號的觀測數據是連續的,RBM服從高斯-伯努利分布.一組給定狀態(v,h)的高斯-伯努利RBM所具備的能量定義如公式(1)所示:

(1)

其中,vi∈Rm表示初始輸入的語音特征值(m表示輸入語音特征的維度),hj∈Rn表示語音特征提取后的語音特征向量(n表示提取后的語音特征的維度),θ={wij,ai,bj}是RBM的參數,其中wij表示vi和hj之間的連接權重,ai表示vi的偏置,bj表示hj的偏置.

圖1 DBN模型訓練過程Fig.1 DBN model training process

考慮到RBM特殊的結構,可見單元和隱含層單元的概率分布可用公式(2)和公式(3)表示:

(2)

(3)

其中sigm(x)為sigmoid激活函數.

RBM的學習是為了求出θ的值,通過最大化RBM在訓練集上的對數似然函數得到RBM的參數θ,這是較為困難的.因此采用CD算法:以各個訓練數據作為初始狀態,通過k步Gibbs[14]采樣得到近似值.這樣,各參數的更新準則變為:

(4)

(5)

(6)

經過pre-training為DBN提供有效的訓練初始值后,利用fine-tuning進行有監督訓練,通過誤差反向傳播[15]算法對網絡參數進行調整,從而達到全局最優點.

3 GPU實現

本文提出的opCD-k算法從合理建立權重矩陣分片的內存模型和基于流處理的并行兩個角度實現單GPU對DBN模型的訓練.同時在多GPU訓練過程利用數據并行模型方案,采用參數服務器方式,并將opCD-k算法應用到多GPU中.

3.1 基于權重矩陣分片的內存模型

通過每次訓練mini-batch[10]語音數據可以有效提高RBM的訓練速度,但是mini-batch規模的過大也會造成RBM訓練速度的降低.因此在訓練中mini-bitch的數目(l)遠小于m和n.vi∈Rm×l、ai,hj∈Rn×l、bj由于規模較小可以直接存儲到GPU內存中,而RBM中的權重矩陣由于層間的相互連接很可能無法一次性存儲到GPU中.因此我們將權重矩陣劃分成幾個子矩陣Wi(Wi∈Rm′×n,m′<

圖計算過程Fig.2 Calculation process of

3.2 流處理的并行模型

權重矩陣分片的內存模型提高了DBN模型的訓練速度,但是參數的傳輸成為了制約DBN訓練速度提高的瓶頸.例如更新每個Wi,Wi需要兩次從CPU傳輸到GPU和一次從GPU傳輸到CPU.但在Wi傳輸過程中,GPU是處于空閑狀態的.

圖3 GPU流并行圖Fig.3 GPU stream parallel diagram

結合CUDA的streams和CD算法的實現,在同一個stream中,1)和2)可以并行執行;在不同的stream中,2)和3)可以并行執行;1)和6)可以在不同的stream中并行執行.如圖3所示:其中,HtD是從主機端(CPU)傳輸到設備端,DtH是設備端(GPU)傳輸到主機端(CPU).

3.3 多GPU實現

上述的opCD-k算法可以提高DBN模型的訓練速度,但是單GPU的計算能力是有限的.為了進一步提高DBN模型的訓練速度,我們使用多GPU進行加速.考慮到DBN模型的全連接特性,我們選擇數據并行的方法.

進行多GPU訓練時,選擇參數服務器模式:即一個GPU作為參數服務器,其他GPU作為工作節點.其工作流程是:工作節點將一次迭代計算得到的結果上傳到參數服務器,然后參數服務器進行參數的更新操作;參數服務器將更新后的參數傳輸到工作節點,工作節點進行下一次的參數交換.并且在參數服務器進行參數交換的時候使用的是異步隨機梯度下降方法.在這種情況下,參數服務器的帶寬成為瓶頸.因此我們減少參數服務器和工作節點的通信量.

神經網絡一般采用mini-batch來訓練,每次迭代遍歷mini-batch個數據,然后每次只加載mini-batch進入內存進行計算得到殘差,為減少通信量,在工作節點上訓練fetch個mini-batch數據,然后將獲得的殘差累加起來,最后和參數服務器進行參數交換,用來更新參數.在劃分fetch次數時,采用熱啟動方式:在訓練初期,應該使用較小的fetch,等模型收斂到一定程度之后再逐漸增加fetch的大小.同時我們將上述的opCD-k算法應用到多GPU中.

4 實驗結果與分析

4.1 實驗環境

為驗證CUDA對DBN訓練加速的效果,本文采用TIMIT語音集.在訓練過程中,采用early-stop方法.實驗的輸入數據是由Kaldi語音識別工具經過處理后的40維fMLLR特征拼接而成的440維語音特征參數,輸出為183個音素狀態分類.實驗中的DBN模型共由6層RBM和一層BP網絡組成.在預訓練中,Gauss-Bernoulli RBM學習率為0.002,迭代次數為250,Bernoulli-Bernoulli RBM學習率為0.002,沖量因子為0.9,權重衰減為0.002.mini-batch數目為128.

在實驗中,CPU型號是Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz,GPU型號為Teskla K20m,由于K20m可以存儲全部的訓練參數,因此我們每次只向GPU傳輸權重矩陣的一部分來模擬實驗效果.操作系統為Red Hat Enterprise Linux Server release 6.4,CUDA Toolkit 版本為7.0.

4.2 權重矩陣分片模型下RBM的訓練速度

在本實驗中,我們利用不同內存大小的GPU來驗證基于權重分片內存模型的RBM的訓練速度.由于實驗中的RBM模型的參數可以存儲到單個GPU內,因此為驗證權重分片的內存模型的性能,我們每次從CPU傳輸到GPU內的權重矩陣只占整個權重矩陣的一部分,例如將權重矩陣的1/4傳輸到GPU內進行計算(在GPU核函數運行的過程中,始終只有1/4大小的權重矩陣位于GPU內存內).根據文獻[11]我們拷貝權重矩陣的范圍從1/64到1/4,并且設定streams的數量s=4,測試GPU完整訓練一個RBM所需要的時間.表1為運行一個RBM迭代在GPU in Kaldi和不同GPU內存下的運行時間.

表1 RBM在不同GPU內存下運行時間Table 1 RBM running time in different GPU memory

其中GPU(1/64)表示將權重的矩陣的1/64從CPU傳輸到GPU內.從表1我們可以看出,通過合理劃分GPU的內存模型,使用GPU1/8的內存就快于GPU in Kaldi 的訓練速度 .并且隨著權重矩陣分片的逐漸越大,權重矩陣的交換次數越來越少,GPU和CPU運行時間的加速比越來越大,到權重矩陣的1/4時,達到了最高的1.46倍的加速比.由此可以證明,在權重參數較大單GPU不能一次性存儲整個權重矩陣時,基于權重矩陣分片的內存模型在單GPU實現中也可以取得較好的加速效果.

4.3 opCD-k算法參數的調整

opCD-k算法的實現依賴于對權重矩陣進行分片,這種分片導致權重矩陣的二次傳輸,并且流同步和調度將會引入更多的開銷,從而影響RBM的訓練速度,因此在本部分中,我們對這些參數進行合理的設置.以下實驗中,假定GPU的內存只能存儲權重矩陣的1/4.

4.3.1 slice_size大小的選擇

opCD-k算法中的參數和GPU的內存關系可以被描述為:

S×n×sizeof(float)≤M(G)

(7)

其中s代表slice_size,slice_size是s的行數,代表GPU內存.對于給定的GPU,它的內存是一定的,因此s和slice_size的選擇是提高RBM訓練速度的重要因素.圖4為在不同參數組合下訓練一個RBM所需要的時間.

圖4 不同參數組合下RBM訓練時間Fig.4 RBM training time for different combinations of parameters

從圖4可知:slice_size太大或者slice_size太小都不會取得較好的加速效果.當s最小時,訓練時間是較長的,這是因為streams數量太少,導致GPU在數據傳輸過程中處于空閑狀態.當參數組合為4×75時,訓練時間最少.并且隨著s的增加,訓練時間逐漸增多,原因是s數目的增多使得需要更多的時間進行流同步和調度.

4.3.2 streams數目的選擇

在本實驗中,我們驗證slice_size數目為50 (根據4.3.1得到最好結果為75,但是它的數目超過了1/4內存,因此選擇50)的前提下streams數量的多少,對于RBM訓練速度的影響.我們通過增加streams的數量,觀察訓練一個RBM迭代所需要的時間.訓練結果如圖5所示.

由圖5可知,在s=1時,訓練需要的時間是最多的,隨著streams的增多,需要的時間越來越少.并且,在s=1和s=2之間的變化最大,這是因為只有一個stream的情況下,GPU需要等待所有的計算資源到達后才可以進行計算,因此使得這種變化最大.在s=8時,消耗時間最少,即可以將GPU的空閑時間完全利用.如果開啟過多streams不會導致性能的提升,相反會造成性能下降,因為streams之間的調度和同步需要時間.同時我們發現,在s=5時,基本就可以充分利用GPU的計算資源.因此在下述實驗中,s的數量設為5.

圖5 不同streams下RBM的訓練時間Fig.5 RBM training time for different streams

4.4 改進的單GPU下DBN性能實驗

本部分中,我們將通過三個方面驗證opCD-k算法對DBN訓練性能的影響:1)一個RBM迭代訓練需要的時間2)DBN訓練需要的時間3)DBN訓練的正確率.

4.4.1 RBM訓練時間

本實驗中,我們用3種方法在可視層節點為440的條件下,測試隱含層數目不同時,完成一個RBM迭代訓練所使用的時間:1)opCD-k 算法;2)文獻[12]中的單GPU;3)Kaldi中單GPU.實驗結果如圖6所示.

圖6 不同模型下RBM訓練時間Fig.6 RBM training time for different models

根據圖6可知,對于不同規模的RBM網絡,3種方法訓練RBM的時間隨著隱含層數目的增加而增多.最開始,opCD-k需要的時間最多,原因是它需要權重矩陣的交換和流同步,而其它兩種方法的權重矩陣可以一次性存儲在GPU內.隨著隱含層的數目增加,opCD-k需要的時間少于[12]和kaldi中單GPU所需要的時間,因為它建立了合理的內存模型和流處理的并行模型.并且在隱含層數目為213時,取得了相對于kaldi最高1.7倍的加速.

4.4.2 DBN訓練時間

我們用4種方式訓練一個DBN模型:1)kaldi下單CPU 2)單GPU+CUDAC 3)Kaldi下單GPU 4)opCD-k算法,實驗結果如表2所示.

表2 單GPU下DBN模型訓練時間Table 2 DBN model training time for single GPU

由表2可知,opCD-k算法明顯縮短了DBN模型的訓練時間,相對于Kaldi語音識別工具,取得了1.5倍的模型加速,相對于CPU最高的加速比為223.實驗結果證明opCD-k算法在DBN訓練中可以取得較好的加速效果.

4.4.3 DBN訓練正確率

在加快DBN模型訓練速度的同時,必須保證模型的正確率.表3是利用3種方式運行DBN模型音素的錯誤識別率比較:1)Kaldi下CPU 2)Kaldi下GPU 3)opCD-k 算法:

表3 單GPU下DBN模型訓練錯誤率Table 3 DBN model training error rate for single GPU

由表3可知,利用opCD-k算法訓練DBN相對于Kaldi的GPU模式,錯誤率的相對損失控制在1%內.出現性能損失的原因是使用了CUDA的expf(x)函數,并且權重矩陣參數使用了單精度浮點數.實驗結果證明了優化后的單GPU可以在提高訓練速度的同時,可以保證DBN模型訓練的正確率.

4.5 改進的多GPU下DBN性能實驗

如表4所示,是我們利用4種方法訓練DBN模型需要的時間:1)Kaldi下單GPU 2)Kaldi 下多GPU 3)文獻[12] 中多GPU實現4)優化的多GPU:

表4 多GPU下DBN模型訓練時間Table 4 DBN model training time for multi-GPUs

從表4可以發現,優化后的多GPU訓練方法只用了0.54小時,明顯縮短DBN模型的訓練時間.相對于Kaldi中的多GPU和文獻[12]中的多GPU實現分別取得了1.35和1.2倍的加速.并且相對與Kaldi中的單GPU實現取得了4.6倍的加速.實驗結果證明了優化后的多GPU實現在DBN訓練中可以取得較好的效果.

表5 多GPU下DBN模型訓練錯誤率Table 5 DBN model training error rate for multi-GPUs

如表5所示,是利用這四種方式訓練DBN模型的錯誤率.從表5中我們可以發現,優化后的多GPU實現,相對于Kadli的多GPU實現有1.6%的性能損失.相對于取得的加速效果,這種模型損失是可以接受的.

5 結束語

為了提高基于DBN的語音識別的訓練效率,本文提出了opCD-k算法:將權重矩陣分片,建立合理的存儲模型;采用GPU的流處理技術.并且在多GPU中采用參數服務器,減少參數的通信量.實驗結果證明,優化后GPU并行算法,在保證DBN模型正確率的前提下,可以加速模型的訓練速度.下一步,我們將在DBN模型的訓練中加入噪聲,提高模型的魯棒性.

[1] Liu Chun.Research progress of speech recognition technology[J].Gansu Science and Technology,2008,24(9):41-43.

[2] Hinton G E.Training products of experts by minimizing contrastive divergence[J].Neural Computation,2002,14(8):1771-1800.

[3] Mohamed A R,Dahl G E,Hinton G.Acoustic modeling using deep belief networks[J].IEEE Transactions on Audio Speech & Language Processing,2012,20(1):14-22.

[4] Kim J,Lane I.Accelerating large vocabulary continuous speech recognition on heterogeneous CPU-GPU platforms[C].IEEE International Conference on Acoustics,Speech and Signal Processing(ICASSP2014),2014:3291-3295.

[5] Seide F,Li G,Yu D.Conversational dpeech transcription using context-dependent deep neural networks[C].International Conference on Machine Learning(ICML2012),2012:1-2.

[6] Park J,Diehl F,Gales M J F.Efficient generation and use of MLP features for Arabic speech recognition[C].Conference of the International Speech Communication Association(INTERSPEECH2010),2010:236-239.

[7] Sainath T N,Kingsbury B,Ramabhadran B,et al.Making deep belief networks effective for large vocabulary continuous speech recognition[C].IEEE Workshop on Automatic Speech Recognition and Understanding(ASRU 2011),2011:30-35.

[8] Daniel L Ly,Paprotski V.Neural networks on GPUs:restricted boltzmann machines[C].IEEE Conference on Machine Learning and Applications(ICMLA2010),2010:307-312.

[9] Ly D,Paprotski V,Yen D.Neural networks on GPUs:restricted boltzmann machines [R].Department of Electrical and Computer Engineering,University of Toronto,Canada,2008.

[10] Lopes N,Ribeiro B.Towards adaptive learning with improved convergence of deep belief networks on graphics processing units[J].Pattern Recognition,2014,47(1):114-127.

[11] Zhu Y,Zhang Y,Pan Y.Large-scale restricted boltzmann machines on single GPU[C].IEEE International Conference on Big Data(IEEE BigData 2013),2013:169-174.

[12] Xue Shao-fei,Song Yan,Dai Li-rong.Fast training algorithm for deep neural network using multiple GPUs[J].Journal of Tsinghua University (Science and Technology),2013,53(6):745-748.

[13] Roux N L,Bengio Y.Representational power of restricted boltzmann machines and deep belief networks[J].Neural Computation,2008,20(6):1631-1649.

[14] Gentle J E.Monte carlo strategies in scientific computing[J].Siam Review,2002,44(3):490-492.

[15] Li Xuan,Li Chun-sheng.Alternating update layers for DBN-DNN fast training method[J].Application Research of Computers,2016,33(3):843-847.

附中文參考文獻:

[1] 柳 春.語音識別技術研究進展[J].甘肅科技,2008,24(9):41-43.

[12] 薛少飛,宋 彥,戴禮榮.基于多GPU的深層神經網絡快速訓練方法[J].清華大學學報(自然科學版),2013,53(6):745-748.

[15] 李 軒,李春升.一種交替變換更新層數的DBN-DNN快速訓練方法[J].計算機應用研究,2016,33(3):843-847.

猜你喜歡
分片內存權重
上下分片與詞的時空佈局
利用狀態歸約處理跨分片交易的多輪驗證方案①
物聯網區塊鏈中基于演化博弈的分片算法
權重望寡:如何化解低地位領導的補償性辱虐管理行為?*
權重常思“浮名輕”
筆記本內存已經在漲價了,但幅度不大,升級擴容無須等待
“春夏秋冬”的內存
基于模糊二分查找的幀分片算法設計與實現
為黨督政勤履職 代民行權重擔當
權重漲個股跌 持有白馬藍籌
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合