(華南農業大學 信息學院 廣州 510642)
摘 要:近年來圖形處理器(GPU)快速拓展的可編程性能力加上渲染流水線的高速度及并行性,使得圖形處理器通用計算(GPGPU)迅速成為一個研究熱點。針對大規模神經網絡BP算法效率低下問題,提出了一種GPU加速的神經網絡BP算法。將BP網絡的前向計算、反向學習轉換為GPU紋理的渲染過程,從而利用GPU強大的浮點運算能力和高度并行的計算特性對BP算法進行求解。實驗結果表明,在保證求解結果準確度不變的情況下,該方法運行效率有明顯的提高。
關鍵詞:圖形處理器; 神經網絡; 反向傳播算法
中圖分類號:TP391.4文獻標志碼:A
文章編號:1001-3695(2009)05-1679-03
GPU accelerated BP algorithm of neural network
TIAN Xuhong JIANG Minjie
(College of Informatics South China Agricultural University Guangzhou 510642 China)
Abstract:Recently the raw speed highly dataparallel nature and rapidly expanding programmability of graphics processing units make them an attractive platform for general purpose computation. As the efficiency of BP algorithm in largescale neural network is relative low proposed a GPU accelerated BP algorithm of neural network. Translated the forward computing and backpropagation learning of BP algorithm into texture rendering of GPU so as to solve the BP algorithm using the powerful floatpoint operation ability and high parallel computing characteristic of GPU. Experimental results show that the proposed method greatly raises the speed of BP algorithm in largescale neural networks without losing the accuracy.
Key words:graphics processing unit(GPU); neural network; BP algorithm
0 引言
人工神經網絡(ANN)是一種非線性映射,它具有很強的魯棒性、容錯性、冗余度及計算并行性等特點,在人工智能領域得到了廣泛的應用,尤其適用于大規模數據的研究。在諸多人工神經網絡模型中,BP網絡是典型的多層前傳神經網絡(multilayer forwardfeed neural network,MFNN),也是人們認識最清楚、應用最廣泛的一類模型,其已經被成功地應用于模式識別、模式分類、特征提取、函數逼近等領域。訓練BP網絡的算法即誤差反向傳播算法(error backpropagation algorithm,BP算法)是1986年由Rumelhart等人提出的一種訓練方法。盡管文獻[1~3]對BP算法進行改進以提高網絡訓練收斂速度,如采用可變步長學習[1],加入動態最優學習因子和動量因子等來提高效率[2],但效果不甚理想。特別是在大型網絡中,可能需要經過上萬次學習才能達到最終穩定狀態,BP算法依然需要大量的計算時間。
為進一步提高算法速度,本文提出了一種基于可編程圖形處理器(GPU)加速的BP實現方法,將BP算法的學習過程轉換為GPU紋理的渲染過程,對于大型的BP網絡能有效地提高算法的運行速度。
1 神經網絡BP算法
傳統BP算法是求出前向多層網絡的實際輸出與期望輸出之間最小平方差的一種迭代梯度算法[4]。
圖1為具有兩個隱層的BP網絡,各層神經元輸出如下:
gj=f(∑n0i=0wijxi);j=0,1,…,n1
hk=f(∑n1j=0wjkgj);k=0,1,…,n2
yl=f(∑n2j=0wklhk);k=0,1,…,m-1(1)
其中各隱層激活函數與輸出層激活函數參見文獻[4]。
再設輸入樣本有a組x0,x1,…,xa-1,對應的導師信號(期望輸出)t0,t1,…,ta-1。用這a組樣
本(xp,tp)(p=0,1,…,a-1)對網絡進行訓練。當第p個樣本經各層正向傳播運算后,網絡的實際輸出值為ypl(l=0,1,…,m-1)。因此連續輸入a個樣本后的誤差總量為
E=∑a-1p=0Ep=1/2 ∑a-1p=0∑m-1l=0(tpl-ypl)2(2)
在調整各層連接權之前,需先調整學習速率及動量因子。取網絡算法前后兩次誤差總量:
a)若ΔE=E(n)-E(n-1)<0,則
η=λη,mc=mc,λ>1(3)
b)若ΔE=E(n)-E(n-1)>0,則
η=λη,mc=0,λ<1(4)
其中:mc為動量因子,一般取0.9;η為學習速率。
應用最速下降法可得到如下各層權值修正:
a)輸出層到第二隱層的修正為
wkl(n+2)=wkl(n+1)+η∑a-1p=0δplhpk+mc[wkl(n+1)-wkl (n)]
δpl=f′(∑n2k=0w(n+1)klhk)(tpl-ypl) (5)
其中:δpl為第p個輸入樣本作用下輸出神經元l的等效誤差。
b)第一隱層到第二隱層的修正為
wjk(n+2)=wjk(n+1)+η∑a-1p=0δpkgpj+mc[wjk(n+1)-wjk(n)]
δpk=∑m-1l=0δplwkl(n+2)f′(∑n1j=0wjk(n+1)gj)(6)
其中:δpk為在第p個輸入樣本下分攤給第二隱層神經元k的等效誤差。
c)輸入層到第一隱層的修正為
wij(n+2)=wij(n+1)+η∑a-1p=0δpjxpi+mc[wij(n+1)-wij(n)]
δpj=∑n2k=0δpkwjk(n+2)f ′(∑n0i=0wij(n+1)xi)(7)
其中:δpj為在第p個輸入樣本下分攤給第一隱層神經元j的等效誤差。
2 圖形處理器通用計算
隨著計算機圖形處理器(GPU)運算速度及可編程性的大幅度提高,GPU不僅在計算機圖形學本身得到廣泛應用,而且還涉及到其他眾多領域的計算,如偏微分方程組求解[5]、優化問題[6]、串匹配算法[7]、遺傳算法[8]、微粒群算法[9]等,以至于通用計算近年來成為GPU應用的一個研究熱點[10]。在一些對運算能力敏感的特定領域,GPU已經被證明比單獨的CPU更具優勢。
1)向量運算優化及浮點運算能力 GPU是針對向量計算進行了優化的高度并行的數據流處理器,有著CPU無法比擬的強大浮點運算能力。目前,GeForce8800GTX具有520 Gflops/s的浮點運算能力,而主流的雙核處理器只有不超過25 Gflops/s,差距有20倍之多。
2)并行計算特性 GPU包含兩個用戶可編程的部分,即頂點處理單元(vertex stage)和片段處理單元(fragment stage),兩者均基于SIMD模式,因此GPU是一個非常適合處理單指令多數據流的處理機,計算并行度取決于GPU所具有的處理單元的個數。
適合于GPU通用設置的算法存在如下幾個特征,即算法密集、高度并行、控制簡單、分多個階段執行以及前饋流水線等。其工作原理是通過紋理或全局存儲器讀入數據,然后觸發GPU產生大量片段,每個片段都可以被并行處理(即對紋理的每一像素執行同一運算),結果另保存于輸出紋理中。
以矩陣加法為例,定義M×N矩陣A和B:
A=a11a12…a1na21a22…a2n am1am2…amn,B=b11b12…b1nb21b22…b2n bm1bm2…bmn
用GPU計算矩陣加法C=A+B過程如下:
a)定義三張M×N的紋理P、Q和R。用紋理P中每個像素r通道(一個像素具有r、g、b、a四通道)保存矩陣A中相應元素的值,同理Q紋理保存B的值;用紋理R保存最后計算結果。
b)編寫GPU程序,對紋理中的對應像素(x y)進行并行計算:R(x,y).r=P(x,y).r+Q(x,y).r。
GPU對每個像素并行地執行相同的矩陣加法指令,并將結果保存在紋理R中。具體的實現過程如圖2所示。
3 基于GPU的BP網絡算法
通過對BP網絡和GPU編程的研究,本文將批處理的BP網絡學習過程轉換為GPU的渲染過程,從而達到提高算法速度的目的。在GPU中實現BP算法主要需要解決數據存儲、誤差總量的計算、矩陣運算及批處理BP算法向GPU的轉換。
3.1 數據存儲
CPU上處理BP網絡數據時,基本上采用的是二維數組保存學習樣本、各層的連接權值、每一個隱層的輸出、最后的網絡輸出及導師信號等數據。在GPU中,運算數據分別存入到不同紋理每個像素的r通道中,可利用紋理坐標對其進行訪問。
本文對BP網絡的實現作以下定義:迭代次數n,學習速率η,動量因子mc,誤差總量E(n)、E(n+1)。紋理iSample保存訓練樣本數據;紋理oTeacher保存導師信號;權值紋理wij(n)、wij(n+1)、wij(n+2)保存輸入層到第一隱層的連接權,wjk(n)、wjk(n+1)、wjk(n+2)保存第一隱層到第二隱層的連接權,wkl(n),wkl(n+1),wkl(n+2)保存第二隱層到輸出層的連接權;結果紋理由resultY記錄最后網絡的實際輸出;紋理margin用于保存導師信號與實際輸出的差值;標志紋理flag記錄差值情況。
3.2 誤差總量的計算
把一個大的向量縮減到較小的向量甚至縮減為一個值,這種計算稱之為并行縮減[11],也就是為了生成輸出的元素,片段程序讀取兩個或更多的值來求得所需,如累加和、求最大最小值等。
在BP網絡中,前向學習要求誤差總量,即對最后輸出的誤差值進行累加和運算。這需要使用到消減算法得出總值,如圖3所示。
3.3 矩陣運算
在BP網絡的學習過程中,多次出現矩陣運算、矩陣加法和減法過程。而乘法運算需要用到循環并要考慮計算紋理的步長。矩陣一行乘一列計算如下:
while(i<128)
{
a=P(x0+i*pace,y).r;
b=Q(x,y0)+i*pace).r;
sum+=a*b;
}
其中:x0是矩陣P一行中第一個像素的x坐標,y0是矩陣Q一列中第一個像素的y坐標;pace是矩陣間隔步長;i為循環次數。通過循環和步長偏移,可以分別取出矩陣P一行中的各像素值和矩陣Q中一列的各像素值,最后由sum+=a*b得到兩向量相乘后的結果。
3.4 BP算法在GPU上的實現
a)初始化各變量,令迭代次數n=0;分別賦予權值紋理wij(n),wjk(n),wkl(n)隨機值,并有wij(n+1)=wij(n),wjk(n+1)=wjk(n),wkl(n+1)=wkl(n);初始差值紋理margin;令E(n)、E(n+1)等于一個較大的正值及學習速率η∈(0,1),動量項mc=0.9,調整系數λ=0.05。
b)從文件讀入共a組學習樣本集x0,x1,…,xa-1存放于樣本紋理iSample,導師信號t0,t1,…,ta-1存放在導師信號紋理oTeacher中。
c)把樣本集紋理iSample和各連接權加載到GPU中,各隱層利用式(1)(2)計算得到各隱層輸出,并利用式(4)計算得輸出層結果并存儲在紋理resultY中。
d)加載紋理resultY與導師信號紋理oTeacher進行矩陣減法比較,結果存儲在差值紋理margin中。若紋理margin中各元素均符合|ypi-tpi|<ε(ε為預定誤差限),則flag紋理相應位置寫入0,否則寫1。然后利用3.2節中介紹的消減原理對flag紋理進行累加和,若消減出最后結果為0,則認為網絡已基本達到訓練要求,算法結束;否則,繼續執行以下運算。
e)對紋理margin進行消減運算,通過式(2)求得誤差總量E(n+1),計算出ΔE,利用式(3)或(4)進行學習速率η及動量因子mc的調整。
f)參照式(5)~(7),在GPU中通過矩陣運算方法實現權值的調整。
g)使n=n+1,用新權值紋理替換舊權值紋理并轉到步驟c)進行再一次迭代學習。
4 實驗結果與分析
采用DNA序列分類數據集對網絡的正確性和速度進行測試。實驗環境:AMD X2 4400+ CPU,2 GB DDR2 RAM,ATI HD3850顯卡,具有320個輕量級SP(stream processor,流處理單元),GPU核心頻率670 MHz,顯存大小512 MB。操作系統是Windows XP,使用DirectX9c作為GPU驅動。
測試集的每一個DNA序列均為180維,共分三類。GPU BP網絡的設計是:輸入層256個神經元(因為GPU處理時紋理長、寬只能取2n,所以180維的DNA序列需補0~256維),第一隱層256個神經元,第二隱層128個神經元;輸出層2個神經元(分類結果取01、10、11,因此只需要兩位),并令每64個DNA序列組合成一個樣本集。
分別在GPU和CPU上實現了BP算法,并針對經過不同數量樣本集訓練的網絡進行測試。實驗結果表明:
a)GPU與CPU上BP算法在精度和學習能力上基本保持一致。對GPU上BP算法的測試情況如表1所示,網絡分別經過1~10個不同樣本集訓練,然后采用不同的10個測試集進行測試。當只經過少量樣本集學習時,網絡的分類能力較弱,隨著學習樣本集的增加,分類能力也就逐漸增強。一部分訓練網絡中出現波動這是正常的,隨著學習樣本集的數量增加,分類能力會趨于穩定。
注:表中1~10代表一個網絡所經過學習的樣本集數量;A~J代表測試樣本集代號。
圖4是網絡對測試樣本集B的分類準確率折線圖,可以很直觀地看到網絡的分類能力是不斷提高而帶有一定的波動性,符合預期結果。
b)BP算法在GPU上的運行效率相對CPU上有明顯提高。如圖5所示,GPU和CPU上BP算法的運行時間均隨著學習次數的增長而增加 而GPU上BP算法的運行時間隨著學習次數的增長速度遠小于CPU的BP算法,運行效率提高了20倍左右。
5 結束語
利用GPU進程間的快速通信,在一定程度上減少傳統并行機進程間通信和管理的損耗,降低了程序并行運算控制的難度。
BP算法執行時間與網絡規模及迭代學習次數呈線性關系,當規模龐大,網絡需要進行多次反復學習時,充分利用了GPU的浮點運算能力和并行性,能極大地提高算法運行速度。
由于目前PC機中所配備的顯卡(GPU)已非常強大,更多研究人員可使用本文的BP網絡算法解決實際問題,避免在大型并行機上操作所帶來的困難。
參考文獻:
[1]MAGOULAS G D VRAHATIS M N ANDEROULAKIS G S. Effective backpropagation training with variable stepwise[J]. Neural Networks 1997,10(1):69-82.