基于流水线的神经网络处理系统和处理方法与流程

文档序号:14043374阅读:200来源:国知局

本发明涉及深度学习技术领域,尤其涉及一种基于流水线的神经网络处理系统和处理方法。



背景技术:

近年来,深度学习技术得到了飞速的发展,在解决高级抽象认知问题,例如图像识别、语音识别、自然语言理解、天气预测、基因表达、内容推荐和智能机器人等领域得到了广泛应用,成为学术界和工业界的研究热点。

深度神经网络是人工智能领域具有最高发展水平的感知模型之一,其通过建立模型来模拟人类大脑的神经连接结构,通过多个变换阶段分层对数据特征进行描述,为图像、视频和音频等大规模数据处理任务带来突破性进展。深度神经网络模型是一种运算模型,由大量节点通过网状互连结构构成,这些节点被称为神经元。每两个节点间连接强度都代表通过该连接信号在两个节点间的加权重,即权重,与人类神经网络中的记忆相对应。

然而,在现有技术中,神经网络存在处理速度慢,运行功耗大等问题。这是由于深度学习技术依赖于极大的计算量,例如,在训练阶段,需要在海量数据中通过反复迭代计算得到神经网络中的权重数据;在推理阶段,同样需要神经网络在极短的响应时间(通常为毫秒级)内完成对输入数据的运算处理,特别是当神经网络应用于实时系统时,例如,自动驾驶领域。神经网络中涉及的计算主要包括卷积操作、激活操作和池化操作等,其中,卷积操作和池化操作占用了神经网络处理的大部分时间。

因此,需要对现有技术进行改进,以提高神经网络中卷积操作和池化操作等的计算效率和对输入数据的响应速度,使神经网络的适用范围更广。



技术实现要素:

本发明的目的在于克服上述现有技术的缺陷,提供一种计算效率高、运行功耗低的基于流水线的神经网络处理系统和方法。

根据本发明的第一方面,提供了一种神经网络处理系统。该处理系统包括:

乘法器模块,所述乘法器模块包含构成流水线的多级结构,并用于执行神经网络中待计算的神经元和权值的乘法运算,其中,所述乘法器模块的每一级结构完成所述神经元和权值的乘法运算的子运算;

累加器模块,所述累加器模块包含构成流水线的多级结构,并用于对所述乘法器模块的乘法运算结果进行累加运算,以获得神经网络中卷积层的输出神经元,其中,所述累加器模块的每一级结构完成累加运算的子运算;

池化单元,用于对所述卷积层的输出神经元进行池化处理;

控制单元,用于控制神经网络处理系统中数据的传递。

在本发明的神经网络处理系统中,还包括神经元缓存单元,用于存储所述卷积层的输出神经元。

在一个实施例中,所述控制单元还用于分析所述卷积层的输出神经元,在所述卷积层的输出神经元不属于同一池化域的情况下,将其存储到所述神经元缓存单元,在所述卷积层的输出神经元属于同一池化域的情况下,将其直接传递到所述池化单元。

在一个实施例中,本发明的神经网络系统包括多个乘法器模块和多个累加器模块,所述控制单元还用于基于卷积参数和池化参数确定每个周期参加运算的所述乘法器模块的数量和所述累加器模块的数量。

在一个实施例中,所述卷积参数包括卷积核尺寸、卷积移动步长、输入特征图数量;所述池化参数包括池化域尺寸。

在一个实施例中,本发明的神经网络系统还包括池化缓存单元和输出数据存储单元,所述控制单元控制将所述池化单元的池化结果输出至所述池化缓存单元,并且在所述池化缓存单元中的神经元满足神经网络的下一层卷积核参数分布时,将相应卷积域的神经元批量存储至所述输出数据存储单元。

在一个实施例中,本发明的神经网络处理系统的乘法器模块包括:

输入级,由数据选通器构成,用于接收所述神经元和权值;

多个中间级,排列为二叉树结构,由寄存器和加法器构成,每个中间级用于执行权值和神经元的乘法的子运算并传递中间结果;

输出级,由寄存器构成,用于输出所述神经元和权值的相乘结果。

在一个实施例中,本发明的神经网络处理系统的累加器模块包括:

输入级,由数据选通器构成,用于接收所述乘法器模块的乘法运算结果;

多个中间级,排列为二叉树结构,由寄存器和加法器构成,每个中间级用于执行累加运算的子运算并传递中间结果;

输出级,由寄存器构成,用于将累加结果输出。

根据本发明的第二方面,提供了一种神经网络处理方法。该处理方法包括以下步骤:

步骤1:通过流水线方式获得待计算神经元和权值的乘法运算结果,其中,流水线的每一级完成所述神经元和权值的乘法运算的子运算;

步骤2:通过流水线方式对所述乘法运算结果进行累加运算,以获得神经网络中卷积层的输出神经元;

步骤3:对所述卷积层的输出神经元进行池化处理。

根据本发明的第三方面,提供了一种神经网络处理器,其包括根据本发明的神经网络处理系统。

与现有技术相比,本发明的优点在于:在卷积操作、激活操作和池化操作过程利用了流水线方式,提高了计算效率;在计算过程中,基于卷积核和池化域尺寸来对参与计算的神经元和权值进行划分,以合理的调用计算的资源,从而在提高资源利用率的基础上,提升了数据处理的速度。

附图说明

以下附图仅对本发明作示意性的说明和解释,并不用于限定本发明的范围,其中:

图1示出了根据本发明一个实施例的神经网络处理系统的示意图;

图2示出了图1的神经网络处理系统中乘法器模块的示意图;

图3示出了图1的神经网处理系统中的累加器模块的示意图;

图4示出了根据本发明一个实施例的神经网络处理器的示意图。

具体实施方式

为了使本发明的目的、技术方案、设计方法及优点更加清楚明了,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

典型地,深度神经网络是具有多层神经网络的拓扑结构,并且每层神经网络具有多个特征图层。例如,对于卷积神经网络,其处理数据的过程由卷积层、池化层、归一化层、非线性层和全连接层等多层结构组成,其中,卷积层的操作过程是:将一个k*k大小的二维权重卷积核对输入特征图进行扫描,在扫描过程中权重与特征图内对应的神经元求内积,并将所有内积值求和,然后通过非线性激活函数(如relu)处理之后,获得卷积层的输出特征图或称输出神经元并把该输出特征图传递到下一层(例如池化层),当每个卷积层具有n个输入特征图时,会有n个k*k大小的卷积核与该卷积层内的特征图进行卷积操作。池化层又称下采样层,其具体过程是:将一个p*p大小的二维窗口(即池化域)对特征图(例如,由卷积层输出给池化层的特征图)进行扫描,在扫描过程中计算窗口在图层对应神经元的最大值或平均值,得到池化层的输出神经元,池化层一方面可以消除部分噪声信息,有利于特征提取,另一方面也可以减少下一层特征神经元的数量,从而减小网络规模。

为了改进卷积处理、池化处理的效率,图1示出了根据本发明一个实施例的神经网络处理系统,该处理系统可应用训练好的神经网络模型,从而获得待测的目标神经元的输出。

参见图1所示,该处理系统101包括输入数据存储单元102、控制单元103、输出数据存储单元104、权重存储单元105、输入数据缓存单元106、权重缓存单元107、神经元缓存单元108、池化缓存单元109、流水线乘法器单元110,其包括至少一个乘法器模块bpm(示出为n个)、流水线累加单元111,其包括至少一个累加器模块pacc(示出为m个)、流水线池化单元112,其包括至少一个池化模块pp(示出为l个)。

输入数据存储单元102与输入数据缓存单元106相连,用于存储参与计算的数据,该数据包括原始特征图数据和参与中间层计算的神经元数据。

权重存储单元105与权重缓存单元107相连,用于存储权值数据。

乘法器单元110接收输入数据缓存单元106中的神经元数据和权重缓存单元107中的权值数据,与累加单元111共同完成神经元和权值的卷积操作。

神经元缓存单元108用于暂存经过卷积计算出来的神经元。

池化单元112与神经元缓存单元108相连,用于池化卷积计算出的特征图,并将池化结果输出至池化缓存单元109。

池化缓存单元109与流水线池化单元112相连,用于暂存池化后的神经元。

输出数据存储单元104与池化缓存单元109相连,用于存储池化后的批量输出结果。

控制单元103分别与输出数据存储单元104、权重存储单元105、乘法器单元110、累加单元111、神经元缓存单元108、池化单元112、输出数据存储单元104相连。

在每个时钟周期,控制单元103获得卷积核与池化的相关参数,以控制参与计算的神经元数据和权值数据,并调用乘法器单元110、累加单元111和池化单元112中适当的计算资源参与计算,以及控制神经网络中的数据传输和存储,其中,时钟可以从神经网络处理系统的内部时钟单元获取(图1中未示出)或从独立于神经网络处理系统的外部时钟单元获取。

在图1的实施例中,乘法器单元110、累加单元111和池化单元112均采用流水线式的设计,其中,乘法器单元110用于获得神经元和权值的相乘结果,累加单元111对乘法结果进行累加,乘法器单元110和累加单元111共同实现卷积层的乘累加过程,池化单元112用于对卷积层的输出神经元进行池化处理。

为更详细地阐述本发明的神经网络处理系统,下面结合图1以具体的例子说明乘法器单元110、累加单元111和池化单元112执行过程,其中,卷积层参数设置为:卷积核3x3、卷积移动步长为2、有3个输入特征图、6个输出特征图;池化层参数设置为:池化域尺寸为2x2、采用最大值原则进行池化处理。

1)、关于乘法器单元110

乘法器单元110由至少一个乘法器模块(bpm)构成,在每个周期,一个乘法器模块可以完成一次乘法操作。

图2示出了根据本发明一个实施例的乘法器模块(bpm)的示意图。该乘法器模块可实现16位的乘法操作,其包括输入级,由数据选通器构成,用于接收待进行相乘运算的神经元和权值;第一级至第五级,排列为二叉树结构,形成计算乘法操作的流水线,用于执行权值和神经元的乘法的子运算并传递中间结果,其中,第一级至第四级由寄存器和加法器构成,第五级由寄存器构成;输出级,用于获得神经元和权值的最终相乘结果并将结果输出。

简言之,在图2的实施例中,每组待计算的权值和神经元以原码错位累加的方式实现乘法运算,其中,以权值各位确定需要累加的原码,各原码以二叉树形式以相邻位单元补位累加。具体地,乘法器模块执行以下步骤:

步骤s210,根据待计算的权值和神经元数据对各第一级寄存器赋值。

以16位定点数相乘的算式0000000001011111*1000101000001010为例,假设被乘数为神经元值,乘数为权值。第一级的寄存器赋值原则是将权值为1的第一级寄存器赋值为神经元的原码,将权值对应位为0的第一级寄存器赋值为空。例如,在第一级寄存器中,权值1000101000001010从低位排列的第2、4、10和12位为1(最高位是符号位,不考虑),因此,在第一级寄存器值中,只有从低位排列(从右至左)的第2、4、10和12个寄存器值赋值为神经元原码000000001011111。

步骤s220,乘法器模块流水线的第一级至第五级执行相应的子运算。

具体地,第一级的各加法器将对应的相邻两个寄存器中的数据进行累加,依据同位相加原则对各运算进行补位操作,由于相邻的寄存器位数在运算中相差一位,因此,对于两个相邻寄存器中的高位寄存器,需在其存储的数据的低位补一位0之后,才可与相邻的低位寄存器进行相加运算,第一级各加法器的运算结果传输至与其相连的第二级寄存器。

类似地,第二级至第四级的加法器执行本级寄存器的累加操作并将结果传递到下一级的寄存器。应理解的是,第二级的相邻寄存器运算相差两位,故对于高位寄存器,需在低位补两位0后与相邻的低位寄存器相加。

第五级的寄存器接收第四级的累加结果,在进行标准化后传递至输出级,标准化的原则为末位省略原则。

应理解的是,第一级寄存器用于接收除符号位之外的15位数据,因此,第一级寄存器可为15位,而为了防止第一级寄存器的数据在相加之后溢出,将第二级的寄存器设置为17位,同理,第三级为19位寄存器,第四级为23位寄存器,第五级为31位寄存器。此外,乘法器模块的中间级(即此实施例中的第一级至第五级)的数量与参与计算的数据位宽相关,例如,对于16bit的位宽,包括5个中间级,而如果是32bit的位宽,则需要包括6个中间级。

在此实施例中,对于乘法器模块的流水线结构中每一级,在将计算结果传递给下一级之后,即可开始接收上一级的输出结果,因此,各级计算资源不需要等待状态,从而能够充分利用资源,提高了计算效率和资源利用率。

步骤s230,获得神经元和权值的最终相乘结果。

在输出级,接收来自于第五级的标准化后的结果并与符号位合并,以得到神经元和权值的最终相乘结果,其中,该相乘结果的符号位是1bit,其是在乘法器模块接收到神经元和权值之后,对神经元和权值的符号位进行异或运算(即)并层层传递到输出级的值,参见图3所示。因此,输出级获得最终的16bit的相乘结果,例如,1000000010011101。

在本发明中,控制单元依据卷积核参数确定需要调用的乘法器模块数量,例如,对于图2的实施例,由于卷积核为3x3、有3个输入特征图,因此,可调用27个乘法器模块,组成三个3x3的乘法器群,在每个等效周期,接收三个输入特征图的3x3的卷积域,同时加载单个输出特征图的一组权值,分别传递至三个输入特征图对应的乘法器群,即可完成输入特征图个数为3,卷积核大小为3x3的乘法操作,从而获得27个乘法结果。

2)、关于累加单元111

累加单元111由至少一个累加器模块(pacc)构成,用于对乘法单元110的相乘结果进行累加。

图3示出了根据本发明一个实施例的16位的累加器模块(pacc)的结构示意图,其包括输入级,用于接收来自于乘法器单元110的相乘结果;第一级至第六级,排列为二叉树结构,形成流水线,其中,第一级至第五级由寄存器和加法器构成,第六级由寄存器构成;输出级,用于获得最终的累加结果并将结果输出。具体地,图3的累加器模块(pacc)的计算过程包括:

步骤310,接收乘法器单元输出的乘法结果。

控制单元将乘法器单元110的每周期的输出结果并行传输至一个累加器模块,累加器模块采用流水线的方式对乘法结果进行累加。

例如,累加器模块的输入级并行接收来自于27个乘法器模块(bpm)的结果并将其分别加载到第一级的32个寄存器。

步骤320,累加器模块的流水线各级执行相应的运算。

第一级的各加法器将对应的相邻两个寄存器的数据进行累加,累加结果输出给相连的第二级寄存器,类似地,第二级至第五级依次执行相应的运算。

第六级的寄存器接收第五级的累加结果并将结果标准化后传递到输出级。

在第一级至第六级的流水线结构中,每一级在将计算结果传递给下一级之后,即可开始上一级所输出的结果,从而提高了累加的计算速度。

步骤330,获得最终的累加结果。

在输出级,将接收的累加结果进行移位处理以生成16位的定点值结果;然后,利用relu函数进行激活,并将激活处理后的结果输出,例如,输出到神经元缓存单元或直接输出到池化单元112进行池化处理。

应理解的是,对于图3的实施例,由于第一级的寄存器需要接收27个16位的乘法结果,因此,第一级的寄存器配置为32个16位的寄存器,而在每级进行累加之后,下一级需要的寄存器数量减少,此外,为了防止累加结果溢出,从第一级开始,各级寄存器的位数需要增加,因此,第一级设置为32个16位的寄存器、第二级为16个17位的寄存器、第三级为8个18位的寄存器,第四级为4个19位的寄存器、第五级为2个20位的寄存器、第六级为一个21位的寄存器。此外,由于激活函数为relu,故本实施例的累加器模块不考虑符号位的运算。

经过上述乘法器单元110和累加单元111的计算,即可获得卷积层的输出神经元。

3)、关于池化单元112

池化单元112由至少一个池化模块(pp)构成,用于对卷积层的输出神经元进行池化处理。

在一个实施例中,控制单元分析卷积层输出(即累加单元111)的神经元分布,如果神经元分布满足池化域分布,例如,属于同一池化域,则将卷积层所输出的神经元直接加载到池化单元112进行处理。通过这种方式,能够减少对卷积层的输出进行缓存,从而提高数据传输和处理的速度并减少缓存空间。

在另一个实施例中,当控制单元分析卷积层的输出神经元不属于同一池化域时,将卷积层的输出神经元暂存到神经元缓存单元,当控制单元检测到神经元缓存单元中存在属于同一池化域的一组神经元时,将该组神经元加载到池化单元112,并释放对应神经元的缓存空间。通过将卷积层输出的神经元首先在缓存中进行拼接,能够保证池化单元112始终存在待进行池化处理的神经元,从而减少了池化单元的等待时间。另一方面,通过将缓存中满足同一池化域分布的神经元持续输出给池化单元,能够保证池化单元112在每个周期都有池化结果输出,从而充分利用了池化单元的计算资源。

具体地,池化单元112的计算过程包括:

步骤410,接收属于同一池化域的神经元。

池化单元112加载卷积层直接输出的或来自于神经元缓存单元的属于同一池化域的神经元,对其进行池化处理,以获得池化结果,例如,以最大值或平均值为池化规则。

当控制单元根据卷积层的实时输出的神经元分布或神经元缓存单元中的神经元分布调用足够数量的池化计算资源时,即当池化单元112每周期均能获取一组相同池化域的神经元时,池化单元可持续流水线式的工作,每周期均能输出池化结果。

步骤420,将池化结果输出至池化缓存单元。

控制单元控制将池化结果输出至池化缓存单元,当池化缓存单元中的神经元满足神经网络的下一层卷积核参数分布时(例如,已得到下一层的相关运算所需要的神经元),将相应卷积域的神经元批量存储至数据输出存储单元,以供下一层调用。

在上述实施例中,以16比特定点数为例阐述了神经网络处理系统,本发明也可处理32比特、8比特等的神经元和权值,并且本发明的神经网络处理系统可进一步实现为神经网络处理器。图4示意了根据本发明一个实例的8比特的神经网络处理器。该处理器包括权重存储单元、神经元存储单元、输出存储单元、输入权重缓存单元、输入神经元缓存单元、由四个bpm群构成的乘法器单元、由4个pacc构成的累加单元、由一个池化模块构成的池化单元以及池化缓存单元。

仍以卷积核3x3、卷积移动步长2、池化域尺寸2x2、3个输入特征图、6个输出特征图为例介绍该神经网络处理器的工作过程,具体包括以下步骤:

步骤510,将权值和神经元加载到相应的缓存。

例如,将8比特神经元值拼接为864比特数据存于输入神经元缓存;将8比特的权值拼接为72比特数据存于权重缓存单元。

步骤520,从缓存中将权值和对应神经元加载到乘法器单元的输入端。

从缓存中将权值和神经元加载至乘法器单元的输入端,控制单元(未示出)调用108个2x8位输入的流水线乘法器模块,组成四个区域,每个区域由三个3x3的流水线乘法器群组成;同一周期各乘法器群赋予相同组的权重,每周期进行权重更换。

步骤530,乘法器单元执行乘法操作。

乘法器单元进行流水线乘法运算,将乘法结果移位处理为8位的输出结果,其结果输出至累加单元。

步骤540,累加单元对乘法结果进行累加

控制单元调用4个输入为32x8位输入的流水线累加器模块(pacc),对乘法输出结果进行累加,通过移位与激活函数处理,每周期可输出四个属于同一池化域的神经元值。

步骤550,选择同一池化域的神经元加载到池化单元

将同一池化域的神经元直接输入至池化单元,此时该池化单元可每周期处理一组池化域的神经元值,其结果输出至池化缓存单元。

步骤560,根据池化缓存单元内神经元的分布将其存储到输出存储单元

控制单元分析池化缓存单元内神经元的分布状态,当其分布满足下一层卷积参数分布时,将其神经元值批量存入输出存储单元。

在图4的实施例中,由于卷积层每周期所输出的神经元值可满足单个池化模块的输入要求,故可避免调用神经元缓存单元。

综上所述,在本发明的神经网络处理系统和神经网络处理器中,卷积操作中乘法计算和加法计算、激活处理以及池化处理均可以采用流水线结构,由控制单元根据卷积相关参数和池化相关参数来调用各单元每周期的计算资源,并通过专用缓存空间(例如,神经元缓存单元、权重缓存单元和池化缓存单元等)来适度的缓存神经元、权重和池化结果,从而协调各单元之间的数据传输,有效地提高了神经网络计算过程中的数据吞吐率和计算效率。

应理解的是,尽管上述以乘法器单元、累加单元、池化单元均采用流水线结构来进行阐述,但本发明对采用流水线结构的单元数量并不进行限制,例如,乘法器单元、累加单元、池化单元任何一个采用基于本发明的流水线方式也能达到提高计算效率的效果。

需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

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