GPU加速的神经网络BP算法文档Word格式文档下载.docx
- 文档编号:8233475
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:6
- 大小:19.79KB
GPU加速的神经网络BP算法文档Word格式文档下载.docx
《GPU加速的神经网络BP算法文档Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《GPU加速的神经网络BP算法文档Word格式文档下载.docx(6页珍藏版)》请在冰点文库上搜索。
为进一步提高算法速度,本文提出了一种基于可编程图形处理器(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具有520Gflops/s的浮点运算能力,而主流的双核处理器只有不超过25Gflops/s,差距有20倍之多。
2)并行计算特性GPU包含两个用户可编程的部分,即顶点处理单元(vertexstage)和片段处理单元(fragmentstage),两者均基于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程序,对纹理中的对应像素(xy)进行并行计算:
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.4BP算法在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序列分类数据集对网络的正确性和速度进行测试。
实验环境:
AMDX24400+CPU,2GBDDR2RAM,ATIHD3850显卡,具有320个轻量级SP(streamprocessor,流处理单元),GPU核心频率670MHz,显存大小512MB。
操作系统是WindowsXP,使用DirectX9c作为GPU驱动。
测试集的每一个DNA序列均为180维,共分三类。
GPUBP网络的设计是:
输入层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网络算法解决实际问题,避免在大型并行机上操作所带来的困难。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GPU 加速 神经网络 BP 算法 文档