一种卷积神经网络并行化训练加速方法与流程

文档序号:14555678阅读:3840来源:国知局
一种卷积神经网络并行化训练加速方法与流程

本发明属于计算机领域,尤其涉及一种基于fpga的卷积神经网络并行化训练加速方法。



背景技术:

fpga,即现场可编程门阵列,是一种高性能、低功耗、可编程的数字电路芯片。fpga内部主要包含一系列可编程逻辑块(clb)和互联线,除此之外,还包含dsp、bram等模块。逻辑块可以被配置后执行复杂的逻辑组合功能,互联线负责将不同的逻辑块、dsp以及输入相连组成一个完整电路结构。对于计算密集型算法,通用处理器依赖于冯若依曼体系,需要进行取指令、指令译码最终执行机器码的过程,并且通用处理器的计算资源是以乘法器、加法器这样量级的硬件单元组成的,如果架构配置与算法的数学模型相差甚远,则会造成硬件资源的浪费。而fpga的具有可编程的优点,开发人员可以重复地对底层的晶体管电路编程,配置最节省且足够计算的硬件资源,晶体管利用率更高。因此,在针对特定应用下,fpga比通用处理器能耗比更高。

传统的fpga应用开发,需要使用硬件编程语言(verilog或vhdl等)完成rtl级逻辑设计,开发人员需要对硬件电路有较高的理解与把握,存在开发门槛高、开发周期长、难以升级维护等缺点,而目前,深度学习算法不断演进与更新,使用传统的方式开发成本较高。因此,需要一种可以快速实现卷积神经网络的训练的技术,跟进不断变化的算法。

卷积神经网络是一种经典的人工神经网络,在图像分类、目标检测、语音识别、视频识别和自然语言处理等领域有广泛应用。近年来,随着人工智能的快速发展,卷积神经网络的网络泛化能力和识别精确度都有了很大的提高。文献“wangd,anj,xuk.pipecnn:anopencl-basedfpgaacceleratorforlarge-scaleconvolutionneuronnetworks[j].arxivpreprintarxiv:1611.02450,2016.”提出使用流水线的方式执行opencl内核函数,但其缺点是内核函数只能单线程执行。文献“liul,luoj,dengx,etal.fpga-basedaccelerationofdeepneuralnetworksusinghighlevelmethod[c]//p2p,parallel,grid,cloudandinternetcomputing(3pgcic),201510thinternationalconferenceon.ieee,2015:824-827.”介绍了一种基于mini-batch的随机梯度下降法应用于在fpga上并行训练深度神经网络的方法。但该文献仅研究了神经网络的mini-batch梯度下降方法,并且随着网络的结构越来越复杂,网络的深度不断加深,网络层的类型不断增加,使用mini-batch的梯度下降法时,批量的输入样本数据规模增大,会超过fpga的全局内存容量,增加内存读写时间,而使用随机梯度下降法,每次训练使用单个样本的效率较低。因此,需要一种在不显著牺牲训练准确度的前提下,应用于fpga设备的降低训练时间的训练方法。



技术实现要素:

本发明的目的在于针对上诉现有技术存在的问题,提供一种卷积神经网络的训练方法,能在较低的内存带宽下完成卷积神经网络模型的快速训练,内存带宽是指单位时间内读写的字节数。

本发明提供一种卷积神经网络模型的训练方法,所述方法包括:

在嵌入式fpga平台下,cpu作为控制设备,fpga作为计算设备,在fpga上实现卷积神经网络中各个层的并行处理,为模型结构参数和可训练参数分配cpu和fpga都可以访问的共享内存,结构参数包括卷积核数量、卷积核大小、平均池化因子大小等参数,可训练参数是指网络权重、偏置等参数。

根据待训练卷积神经网络中每个层的类型设置不同batch规模的特征图像的输出与局部误差,并为其分配内存空间。batch规模指每次从训练集中选取的样本数量,多个样本组成一个batch。

共享内存通过对齐的方式分配,使用dma(直接存储器访问)的方式由主机向fpga设备传输数据,整个训练过程,共享内存的数据在网络层之间不断计算并传递。

前馈计算时,在全连接层随机读取上一层batch中的一个特征图像的数据,并记录其在batch中的序号,反向传播计算时,使用在序号对应的标签数据计算输出层误差。

更新局部误差时,根据误差反向传播算法的链式计算法则,单个样本的网络层直接更新从输出层反向传播的局部误差,而最后一个batch规模的网络层使用后一层局部误差随机更新当前某一个样本的局部误差,之前batch规模的网络层依次并行更新相应的多个样本的局部误差。

当计算卷积层的局部误差时,如果下一层是池化层,采用平均池化方式,并使用误差缩放因子λ参数乘以池化层的局部误差,得到卷积层相应神经元的局部误差值,达到微调整卷积核参数和偏置的目标。

对于batch规模的卷积层,计算该batch的平均梯度,并行更新卷积核参数。计算该batch的平均局部误差,并行更新偏置参数。

对于单个样本的全连接层,计算单个特征图像的梯度,并行更新权重参数。计算单个特征图像的局部误差,并行更新偏置参数。

当前batch更新完之后,再重新传输下一个batch的数据,直置到达预设的迭代次数或误差低于阈值后停止训练。

附图说明

图1是本发明的卷积神经网络并行化训练方法整体流程图;

图2是本发明的卷积神经网络并行化训练方法中单次迭代的流程图;

图3是本发明的卷积神经网络并行化训练方法中的数据流向示意图;

图4是根据一示例性实施例示出的一种卷积层局部误差更新方法实现原理示意图。

具体实施方式

以下结合附图对本发明的方法做进一步详细描述。

图1所示为本发明实施例中的基于fpga的卷积神经网络并行化训练方法实现流程,包括以下步骤:

将fpga设备通过pcie总线与cpu通信,在cpu端对训练库中的样本重新随机排列,根据opencl标准,为待训练的卷积神经网络模型的每个层的输出、局部误差分配cpu和fpga都能访问的共享内存,分配内存空间大小分为两种batch规模大小,对卷积层和池化层,每个神经元保存某个固定数量(大于1)的多个样本的输出和局部误差,对全连接层,每个神经元只是保存单个样本的输出与局部误差。除此之外,对卷积层而言,还需要分配卷积核和偏置的内存空间,内存空间大小根据上一层图像尺寸、卷积核尺寸、步长计算得出。对全连接层而言,还需要分配权重和偏置的内存空间,内存空间大小根据上一层神经元数量与当前层神经元数量计算得出,对输出层而言,还需要分配标签数据的内存空间。

对于单次并行训练的实现方法,可参考图2,每个层的特征图像输出与局部误差参考图3,具体实现方案如下:

设定某一固定数量的样本作为一个batch,读入一个batch的样本数据,使用[-0.5.0.5]之间的随机数初始化各个卷积层的初始卷积核和偏置以及各个全连接层的初始权重和初始偏置。

对于卷积层的前馈计算,使用三维空间中的opencl核函数对一个batch的特征图像并行地做卷积操作和激活操作,并行粒度是单独地对每个神经元相对应的局部感受野数据取址和计算,得到输出特征图像。

对于池化层的前馈计算,使用三维空间中的opencl核函数对一个batch的经过卷积和激活后的特征图像并行地做平均池化操作,并行粒度是单独地对每个神经元相应的局部感受野数据取址和计算,得到输出特征图像。

对于全连接层前馈计算,随机选取上一层一个batch中的某个特征图像,记录取得的特征图像在当前batch中的序号,使用一维空间中的opencl核函数对其并行地处理,并行粒度是单独对每个神经元连接的上一层的所有神经元取址和计算,得到神经元输出。

对于输出层前馈计算,使用一维空间中的opencl核函数对其并行地处理,并行粒度是单独对每个神经元连接的上一层的所有神经元取址和计算,得到神经元的输出。同时,根据序号读取相应的样本标签数据,使用一维空间的opencl核函数对其并行地计算输出误差,并行粒度是单独对每个神经元计算局部误差。

对于单个样本的全连接层的局部误差更新,使用一维空间中的opencl核函数直接更新全连接层的局部误差,更新过程使用下式(1):

其中,表示第k层第i个神经元的局部误差,表示第k+1层第j个神经元的局部误差,表示第k层激活函数对输出值的导数。

对于后一层是单个样本的全连接层,batch规模的卷积层使用后一层局部误差随机更新当前某一个样本的局部误差,使用一维空间中的opencl核函数更新当前层的局部误差。

对于卷积层的局部误差更新,如果下一层是池化层,参考图4,采用平均池化方式,并使用误差缩放因子λ参数乘以池化层对应神经元的局部误差,得到卷积层相应神经元的局部误差值,更新过程使用下式(2):

其中,表示第k层第i个特征图像的局部误差,表示第k+1层第j个特征图像的局部误差,符号是克罗内克积运算,表示第k层激活函数对特征图像输出值的导数。

其余batch规模的网络层依次使用三维空间的opencl核函数并行更新相应的多个样本的局部误差。对于池化层,如果下一层是卷积层,使用下式(3):

其中,表示第k层第i个特征图像的局部误差,表示第k+1层第j个特征图像的局部误差,extend函数是将特征图像的局部误差扩展,扩展部分的值用零初始化,rot180函数将卷积核旋转180度,符号是卷积运算,表示第k层激活函数对特征图像输出值的导数。

对于batch规模的卷积层,计算该batch的特征图像的平均梯度,使用三维空间的opencl核函数并行更新卷积核参数。更新过程使用下式(4):

对于batch规模的卷积层,计算该batch的特征图像平均局部误差,使用一维空间的opencl核函数并行更新偏置。更新过程使用下式(5):

对于单个样本的全连接层,计算单个特征图像的梯度,使用二维空间的opencl核函数并行更新权重参数。更新过程使用下式(6):

对于单个样本的全连接层,计算单个特征图像的局部误差,使用一维空间的opencl核函数并行更新偏置参数。更新过程使用下式(7):

上述(4)(5)(6)(7)式中,n表示迭代次数,α表示网络学习率,b表示一个batch的样本数量,对于卷积层,wij表示上一层第i个特征图与当前层第j个特征图的卷积核参数,表示上一层第i个特征图输出与当前层第j个特征图局部误差的卷积。对于全连接层,wij表示上一层第i个神经元与当前层第j个神经元权重参数,xi*δj表示上一层第i个神经元输出与当前层第j个神经元局部误差的乘积。

当前batch更新完之后,再重新传输下一个batch的数据,直置到达预设的迭代次数或误差低于阈值后停止训练。

所述卷积神经网络的训练方法适用于但不仅限于以下任意一种模型:

lenet,alexnet,vgg-net,googlenet,resnet。

以上所述仅为本发明的优选实施例而已,并不用限制于本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1