卷积神经网络的定点运算方法、装置、设备和存储介质与流程

文档序号:17009580发布日期:2019-03-02 02:11阅读:325来源:国知局
卷积神经网络的定点运算方法、装置、设备和存储介质与流程

本发明实施例涉及深度学习的技术,尤其涉及卷积神经网络的定点运算方法、装置、设备和存储介质。



背景技术:

近年来,深度学习广泛应用在视觉等领域,其中,以cnn(convolutionalneuralnetwork,卷积神经网络)为核心的一系列算法,在图像分类、目标检测、像素级分割等应用具有较佳的效果。

然而,卷积神经网络cnn的运算量大,其90%以上的运算负载集中在卷积运算中,通常的实现会将卷积层转换为两个矩阵的相乘操作,而矩阵相乘中的核心部分如下所示:

其中,w是权重,a是输入激活值,o是输出激活值,n是w与a的公共边长度。

由于卷积运算的运算量大,因此,卷积运算在实际部署时通常需要gpu(graphicsprocessingunit,图形处理器)或fpga(field-programmablegatearray,现场可编程门阵列)之类的硬件进行加速,才能达到实时运行的要求。

为了将卷积神经网络cnn迁移到运算资源受限的设备上,如移动终端等嵌入式设备,目前是训练更小、更精简的模型,并辅以定点化、裁剪等方法,尝试在速度和准确率之间取得一个平衡。

其中,定点化(或称量化)方法因其不会改变网络结构,无需重新训练等优势,受到广泛关注。

定点化即把原先采用32bits浮点数表示的数值,通过映射方法转为固定bit的数值表示。以q记法为例,u2q6表示一个8bits的定点数,其整数部分2bit,小数部分6bits。在通用处理器中,定点运算通常比浮点运算有更少的时延和更大的吞吐量。8bits的定点运算与32bits的浮点运算相比,理论上可以为cnn带来4倍的性能提升。

然而,由于定点运算过程中位宽会增长,为了保证精度,需要采用更大的位宽去存储输出结果。例如,两个u2q6的定点数相乘,其输出结果为s4q12,即16bits。这种位宽的增加影响了指令吞吐量,最终导致实际定点运算性能远不及理论性能。

为了提升定点运算的性能,目前的做法有两种:

第一种方法是在定点运算结束后通过移位操作,丢弃低位以减少位宽。

例如,通过在激活层增加一个移位操作,移除一些不太重要的低位,来降低后续定点运算复杂度。

然而,这种方法需要特别设计的硬件支持,因为中间结果通常需要保存非二次幂位宽的结果,而通用处理单元通常只拥有二次幂位宽的运算指令,处理效率较低。

第二种方法是将乘法指令替换为其他溢出风险更低的指令,如移位指令。

例如,通过将权重量化为若干个稀疏的特定值,如{0.125,0.25,0.5}等,这些特定值的乘法运算可以转换为对应比特数的移位操作。

然而,这种方法的精确度较低,应用范围较小,仅适用于简单的图片分类任务。



技术实现要素:

本发明实施例提供一种卷积神经网络的定点运算方法、装置、设备和存储介质,以实现在提高定点运算效率的同时,保证应用范围。

第一方面,本发明实施例提供了一种卷积神经网络的定点运算方法,所述卷积神经网络包括卷积层,所述方法包括:

通过输入通道接收本层卷积层的输入激活值,所述输入通道具有对应的权重;

对所述输入激活值进行定点化操作,获得第一特征值;

将所述第一特征值与所述权重分别写入多个寄存器分组的寄存器中;

针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值。

优选地,每个寄存器分组寄存器包括用于存储所述第一特征值的寄存器、用于存储所述权重的寄存器、乘法寄存器与加法寄存器;

所述针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值,包括:

针对每个寄存器分组,在所述乘法寄存器中对同一个输入通道对应的所述第一特征值与所述权重进行乘法运算,获得特征乘积数据;

将所述特征乘积数据累加至所述加法寄存器中,获得第二特征值。

优选地,还包括:

合并所述多个第二特征值,获得第三特征值;

对所述第三特征值进行浮点化操作,获得第四特征值;

根据所述第四特征值生成本层卷积层的输出激活值。

优选地,在所述通过输入通道接收本层卷积层的输入激活值之前,所述方法还包括:

压缩所述权重的比特数,以压缩所述第二特征值的比特数。

优选地,本层卷积层的输入激活值为上层卷积层的输出激活值;

在所述通过输入通道接收本层卷积层的输入激活值之前,所述方法还包括:

压缩上层卷积层的输出激活值的比特数,以压缩所述第二特征值的比特数。

优选地,所述卷积层为分组卷积层,所述分组卷积层包括多个卷积组;

所述方法还包括:

针对每个卷积组,列举所分配到的输入通道的候选排列方式,所述输入通道具有对应的第一训练值;

将所述第一训练值与所述权重分别写入多个寄存器分组的寄存器中;

针对所述多个寄存器分组,分别根据所述存储器中的所述第一训练值与所述权重在每种候选排列方式下进行乘加运算,获得多个第二训练值;

在所述第二训练值中确定绝对值最小的第二训练值,作为目标训练值;

将所述目标训练值对应的候选排列方式设置为输入通道的目标排列方式。

优选地,每个寄存器分组的寄存器包括用于存储所述第一特征值的寄存器、用于存储所述权重的寄存器、乘法寄存器与加法寄存器;

所述针对所述多个寄存器分组,分别根据所述存储器中的所述第一训练值所述权重在每种候选排列方式下进行乘加运算,获得多个第二训练值包括:

在所述乘法寄存器中对每一个输入通道对应的所述第一训练值与所述权重进行乘法运算,获得训练乘积数据;

从所述训练乘积数据中选择值最小的m个训练乘积数据,作为目标训练乘积数据;

将所述目标训练乘积数据写入至所述加法寄存器中;

将除所述目标训练乘积数据之外的其他训练乘积数据按照每种排列方式累加至所述加法寄存器中,获得第二训练值。

优选地,所述卷积层为分组卷积层,所述分组卷积层包括多个卷积组;

所述通过输入通道接收本层卷积层的输入激活值,包括:

确定每个卷积组所分配到的输入通道;

在每个卷积组中,通过所分配到的输入通道接收输入激活值;

所述将所述第一特征值与所述权重分别写入多个寄存器分组的寄存器中,包括:

依次从所述多个卷积组中确定目标卷积组;

在所述目标卷积组中,将所分配到的输入通道对应的第一特征值与权重分别写入多个寄存器分组的寄存器中;

所述针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值,包括:

在所述目标卷积组中,分别根据所述寄存器分组中的所述第一特征值与所述权重预设的目标排列方式进行乘加运算,获得多个第二特征值。

第二方面,本发明实施例还提供了一种卷积神经网络的定点运算装置,所述卷积神经网络包括卷积层,所述装置包括:

输入激活值接收模块,用于通过输入通道接收本层卷积层的输入激活值,所述输入通道具有对应的权重;

定点化转换模块,用于对所述输入激活值进行定点化操作,获得第一特征值;

分组存储模块,用于将所述第一特征值与所述权重分别写入多个寄存器分组的寄存器中;

乘加运算模块,用于针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值。

优选地,每个寄存器分组寄存器包括用于存储所述第一特征值的寄存器、用于存储所述权重的寄存器、乘法寄存器与加法寄存器;

所述乘加运算模块包括:

乘法运算子模块,用于针对每个寄存器分组,在所述乘法寄存器中对同一个输入通道对应的所述第一特征值与所述权重进行乘法运算,获得特征乘积数据;

加法运算子模块,用于将所述特征乘积数据累加至所述加法寄存器中,获得第二特征值。

优选地,还包括:

特征值合并模块,用于合并所述多个第二特征值,获得第三特征值;

浮点化转换模块,用于对所述第三特征值进行浮点化操作,获得第四特征值;

输出激活值生成模块,用于根据所述第四特征值生成本层卷积层的输出激活值。

优选地,还包括:

权重压缩模块,用于压缩所述权重的比特数,以压缩所述第二特征值的比特数。

优选地,本层卷积层的输入激活值为上层卷积层的输出激活值;

所述装置还包括:

输出激活值压缩模块,用于压缩上层卷积层的输出激活值的比特数,以压缩所述第二特征值的比特数。

优选地,所述卷积层为分组卷积层,所述分组卷积层包括多个卷积组;

所述装置还包括:

候选排列方式列举模块,用于针对每个卷积组,列举所分配到的输入通道的候选排列方式,所述输入通道具有对应的第一训练值;

训练集写入模块,用于将所述第一训练值与所述权重分别写入多个寄存器分组的寄存器中;

训练集训练模块,用于针对所述多个寄存器分组,分别根据所述存储器中的所述第一训练值与所述权重在每种候选排列方式下进行乘加运算,获得多个第二训练值;

目标训练值选择模块,用于在所述第二训练值中确定绝对值最小的第二训练值,作为目标训练值;

目标排列方式设置模块,用于将所述目标训练值对应的候选排列方式设置为输入通道的目标排列方式。

优选地,每个寄存器分组的寄存器包括用于存储所述第一特征值的寄存器、用于存储所述权重的寄存器、乘法寄存器与加法寄存器;

所述训练集训练模块包括:

训练乘积数据计算子模块,用于在所述乘法寄存器中对每一个输入通道对应的所述第一训练值与所述权重进行乘法运算,获得训练乘积数据;

目标训练乘积数据选择子模块,用于从所述训练乘积数据中选择值最小的m个训练乘积数据,作为目标训练乘积数据;

目标训练乘积数据写入子模块,用于将所述目标训练乘积数据写入至所述加法寄存器中;

训练乘积数据累加子模块,用于将除所述目标训练乘积数据之外的其他训练乘积数据按照每种排列方式累加至所述加法寄存器中,获得第二训练值。

优选地,所述卷积层为分组卷积层,所述分组卷积层包括多个卷积组;

所述输入激活值接收模块包括:

通道分配子模块,用于确定每个卷积组所分配到的输入通道;

通道接收子模块,用于在每个卷积组中,通过所分配到的输入通道接收输入激活值;

所述分组存储模块包括:

目标卷积组确定子模块,用于依次从所述多个卷积组中确定目标卷积组;

通道存储子模块,用于在所述目标卷积组中,将所分配到的输入通道对应的第一特征值与权重分别写入多个寄存器分组的寄存器中;

所述乘加运算模块包括:

排列乘加子模块,用于在所述目标卷积组中,分别根据所述寄存器分组中的所述第一特征值与所述权重预设的目标排列方式进行乘加运算,获得多个第二特征值。

第三方面,本发明实施例还提供了一种设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明第一方面实施例提供的卷积神经网络的定点运算方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明第一方面实施例提供的卷积神经网络的定点运算方法。

在本发明实施例中,通过输入通道接收本层卷积层的输入激活值,对输入激活值进行定点化操作,获得第一特征值,将第一特征值与权重分别写入多个寄存器分组的寄存器中,针对多个寄存器分组,分别根据寄存器中的第一特征值与权重进行乘加运算,获得多个第二特征值,由于处理器中通常提供多个寄存器,可以通过将累加操作分散在多个寄存器中进行,即分组累加,以此减少均摊的乘加运算的数量,减少溢出风险,提高应用操作指令的处理效率,增大整体吞吐量,同时,保持了精确度,保证了应用范围。

附图说明

图1是本发明实施例一提供的卷积神经网络的定点运算的流程图;

图2是本发明实施例一中的卷积层的示意图;

图3是本发明实施例一中的寄存器分组的示意图;

图4是本发明实施例二提供的卷积神经网络的定点运算的流程图;

图5是本发明实施例三提供的卷积神经网络的定点运算的流程图;

图6是本发明实施例三中的分组卷积层的示意图;

图7为本发明实施例四提供的卷积神经网络的定点运算装置的结构示意图;

图8为本发明实施例五提供的设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

图1为本发明实施例一提供的卷积神经网络的定点运算的流程图,具体包括如下步骤:

s110、通过输入通道接收本层卷积层的输入激活值。

在具体实现中,本发明实施例可以应用在一设备中,该设备具有通用计算单元,如cpu(centralprocessingunit,中央处理器)、dsp(digitalsignalprocessing,数字信号处理)等,通常应用二次幂位宽的操作指令。

该设备可以为运算资源受限的嵌入式设备,如移动终端等,但也可以为运算资源较为充裕的服务器集群,如分布式系统等,本发明实施例对此不加以限制。

目前,卷积神经网络的基本组成层可以包括卷积层(convolutionlayer)、池化层(poolinglayer)、激活层(activationlayer)和全连接层(fullconnectionlayer)等。

其中,卷积层、池化层、激活层可以合为一层的操作,用于完成卷积神经网络的卷积运算。

对于某层卷积层,可以通过输入通道in_channels接收输入至本层卷积层的输入激活值,该输入激活值可以为浮点数据。

此外,输入通道具有对应的权重,该权重又称卷积核。

卷积层一般由多个神经元层map组成,每个map由多个神经单元组成,同一个map的所有神经单元共用一个权重,权重往往代表一个特征,比如某个权重代表一段弧,那么卷积的值有可能也是一段弧。

需要说明的是,对于定点运算,该权重可以预先进行定点化操作,即该权重可以为定点数据。

s120、对所述输入激活值进行定点化操作,获得第一特征值。

在本发明实施例中,对于每个输入激活值,可以通过q计法等方式进行定点化操作,从浮点数据转换为定点数据,定点化操作转换的结果即为第一特征值。

s130、将所述第一特征值与所述权重分别写入多个寄存器分组的寄存器中。

在本发明实施例中,如图2所示,在设备中设置有多个存储器,可以预先将至少部分寄存器划分至多个寄存器分组202中。

在一个示例中,处理器通常拥有32个以上的simd(singleinstructionmultipledata,单指令多数据流)寄存器。

与之相对的,单次乘加运算mac占用4个寄存器,其中,权重和第一特征值各占用1个寄存器,乘加运算mac输出的结果是16bits,占用2个寄存器。

此外,收集寄存器分组累加的结果占用8个寄存器,其中,收集寄存器分组累加的结果是32bits,占用4个寄存器,为防止数据阻塞流水线,额外一倍的寄存器,即总共占用8个寄存器。

在本示例中,除去收集寄存器分组累加的结果占用的8个寄存器,剩余24个寄存器,每组寄存器分组单独进行乘加运算mac,即每个寄存器分组至少占用4个寄存器,因此,可以将寄存器划分至6个寄存器分组中,每个寄存器分组内使用独立的寄存器进行乘加运算mac。

在本发明实施例中,如图2所示,可以通过顺序、随机等方式,将每一个输入通道in_channels201对应的第一特征值与权重分别写入对应的多个寄存器分组的寄存器中。

s140、针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值。

在具体实现中,如图3所示,每个寄存器分组的寄存器包括用于存储第一特征值的寄存器301、用于存储权重的寄存器302、乘法寄存器303与加法寄存器304。

一般情况下,对于输入卷积神经网络的原始数据,可以通过重叠拆分等方式,将其切分为数量、大小与权重相同的输入特征值,使得输入特征值与权重一一对应。

例如,输入卷积神经网络的为一个320*240的图像数据,若权重为6*6*10,则可以将该图像数据拆分成多个6*6*10的输入特征值。

针对每个寄存器分组,在乘法寄存器203中对同一个输入通道对应的第一特征值与权重进行乘法运算,获得特征乘积数据。

将特征乘积数据累加至加法寄存器204中,获得第二特征值。

所谓累加,是指从第一个特征乘积数据开始,加法寄存器一直累积每个特征乘积数据的值,并不清除在先的特征乘积数据,直至累加到最后一个特征乘积数据,累加完成之后,获得的数据即为第二特征值。

进一步而言,该寄存器分组的乘加运算可以表达如下:

其中,o为第二特征值,g为寄存器分组的数量,w为权重,a为第一特征值,n为w与a之间的公共边长度,为每个寄存器组内分配到的乘法运算的数量。

在本发明实施例中,通过输入通道接收本层卷积层的输入激活值,对输入激活值进行定点化操作,获得第一特征值,将第一特征值与权重分别写入多个寄存器分组的寄存器中,针对多个寄存器分组,分别根据寄存器中的第一特征值与权重进行乘加运算,获得多个第二特征值,由于处理器中通常提供多个寄存器,可以通过将累加操作分散在多个寄存器中进行,即分组累加,以此减少均摊的乘加运算的数量,减少溢出风险,提高应用操作指令的处理效率,增大整体吞吐量,同时,保持了精确度,保证了应用范围。

图4为本发明实施例二提供的卷积神经网络的定点运算的流程图,本实施例以前述实施例为基础,进一步增加了对压缩权重和/或输出比特值的比特数、第二特征值的处理操作。该方法具体包括如下步骤:

s410,压缩所述权重的比特数,以压缩所述第二特征值的比特数。

s420,压缩上层卷积层的输出激活值的比特数,以压缩所述第二特征值的比特数。

由于将两个8bits的定点数据进行乘法运算,其输出的结果为16bits,因此,可以将输出的结果比特数限制在小于16bits。

在实际应用中,8bits的权重和/或8bits的输入激活值并非必须的,可以在保持一定精度的前提下压缩权重和/或输入激活值的比特数,以达到压缩输出的第二特征值的比特数。

而对于本层卷积层而言,本层卷积层的输入激活值为上层卷积层的输出激活值,因此,在上层卷积层中可以压缩输出激活值的比特数。

在具体实现中,可以通过如下方式压缩权重和/或输出激活值的比特数:

1、均匀压缩

每个值都乘以255/(最大值-最小值),然后最近邻取整。

2、基于相对熵的截断压缩

通过统计方法获取一个阈值,绝对值大于阈值的值被强行抑制为255,其他值都乘上255/阈值。

3、非均匀量化

乘以一个动态变化的值,要求精度高的部分取值密度高,否则取值密度低。

当然,上述压缩方式只是作为示例,在实施本发明实施例时,可以根据实际情况设置其他压缩方式,本发明实施例对此不加以限制。另外,除了上述压缩方式外,本领域技术人员还可以根据实际需要采用其它压缩方式,本发明实施例对此也不加以限制。

目前的标准确定的有符号8bits定点数值为[-128,127],下表列举了当定点的乘法运算其中一个操作数范围受限时,对应输出位宽的变化情况:

其中,操作数a可以为权重,操作数b可以为输入激活值,输出范围及输出位宽为操作数a与操作数b进行乘法运算输出结果(如第二特征值)的取值范围及位宽。

可选地,由于实时压缩输出激活值的位宽需要额外开销,因此,可以选择离线地压缩权重的部分位宽,卷积神经网络cnn在实际运行时加载的权重已经是压缩之后的权重。

目前,在包括图像分类、目标检测和分割等绝大部分卷积神经网络cnn应用场合,可以将权重的位宽压缩到上表的范围并保持一定的准确性。

在本发明实施例中,可以通过压缩权重和/或输出激活值的比特数,即限制权重和/或输出激活值的取值范围,从而压缩第二特征值的比特数,使得可以避免将乘加运算拆分为乘法运算和加法运算两条指令执行的问题。

需要说明的是,除限制权重的取值范围、限制输入激活值的范围之外,还可以引入新的硬件指令来达到允许乘加操作mac由一条指令完成,本发明实施例对此不加以限制。

s430,通过输入通道接收本层卷积层的输入激活值。

其中,输入通道具有对应的权重。

对于本层卷积层而言,本层卷积层的输入激活值为上层卷积层的输出激活值,即上层卷积层的输出激活值在压缩比特数之后,再通过输出通道out_channels输入到本层卷积层,本层卷积层所接收到的输入激活值已经经过压缩。

s440,对所述输入激活值进行定点化操作,获得第一特征值。

s450,将所述第一特征值与所述权重分别写入多个寄存器分组的寄存器中。

s460,针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值。

s470,合并所述多个第二特征值,获得第三特征值。

s480,对所述第三特征值进行浮点化操作,获得第四特征值。

s490,根据所述第四特征值生成本层卷积层的输出激活值。

在本发明实施例中,由于在设备中具有多个寄存器分组,因此,乘加运算所得的第二特征值的数量为多个。

对多个第二特征值进行两两合并,合并之后获得的数据为第三特征值。

第三特征值为定点数据,将其重新映射为浮动数据,即可获得第四特征值。

对第四特征值通过bn(batchnormalization)算子等方式进行规范化操作、通过relu(rectifiedlinearunits)函数、sigmod函数等方式进行激活操作,等等,即可作为本层卷积层的输出激活值,通过输出通道out_channels输出至下层卷积层。

可选地,对于本层卷积层而言,在生成输出激活值之后,可以实时压缩该输出激活值的比特数,并通过输出通道out_channels将压缩之后的输出激活值输出到下层卷积层

在每个寄存器分组的乘加运算mac的过程中:

对每个寄存器组,特征乘数数据是8bits,累加之后的第二特征值是16bits,这一步耗时理论上来讲是(n/g)*t1,其中,t1为处理器单元执行一次乘加运算mac所需的平均耗时,由于乘加运算mac可以穿插进行,没有流水线阻塞,此处只需考虑流水线建立时间。

假设存在6个寄存器分组,通过累加得到一共6个16bits的第二特征值,将第二特征值两两配对累加得到3个32bits的中间数值,耗时3*t2,其中t2为包含流水线阻塞在内的单个累加运算的耗时。

对上述中间数值再进行两次累加,得到第三特征值,耗时2*t2。

当(n/g)远大于5时,乘加运算的耗时远大于累加运算的耗时,而8bits的乘加运算mac单次能处理的数据量(吞吐量)理论上是32bits全精度数据的4倍,故可以在单位时间内处理更多的数据,因此整体耗时就更少。

需要说明的是,合并操作的输入操作数依然是16bits,输出则是32bits,相比8bits的乘法运算,吞吐量是减半的,因此,在实际应用中,本领域技术人员可以调整寄存器分组的数量和权重的位宽,从而达到速度和精度的折衷。

图5为本发明实施例三提供的卷积神经网络的定点运算的流程图,本实施例以前述实施例为基础,进一步增加了分组卷积层的处理操作。该方法具体包括如下步骤:

s501,针对每个卷积组,列举所分配到的输入通道的候选排列方式。

在本发明实施例中,卷积神经网络cnn中的某个卷积层为分组卷积层(groupedconvolution),又称为群卷积层,分组卷积层包括多个卷积组group。

相比普通卷积层,分组卷积层的参数更少,运算速度更快,并且,由于其优秀的性能以及对cache友好的特性,分组卷积层已成为嵌入式设备实现卷积神经网络cnn的一个经典结构。

假设上一层的输出featuremap有n个,即输入通道数in_channel=n,再假设分组卷积层的卷积组的数量为m,那么,在分组卷积层中,输入通道数in_channe分成m份,每一个卷积组group对应n/m个输入通道数in_channel,与之独立连接,然后各个卷积组group卷积完成后将输出叠在一起(concatenate),作为这一层的输出通道out_channel。

在实际应用中,分组卷积层的每一个卷积组group所分配到的输入通道in_channel一般在设计卷积神经网络cnn的时候已经固定,但是,根据加法运算的交换定律,一个卷积组group内的输入通道in_channel可以重新调整顺序,而不对加法运算产生影响。

对于卷积层而言,其输入通道in_channel的顺序和输出的结果并无相关,而输入激活值和权重进行乘法运算的结果有正有负(概率接近),因此,可以通过调整输入通道in_channel的顺序,使得每一卷积组group内进行加法运算的结果尽可能小,以此来减少溢出风险。

因此,离线时可以针对每个卷积组,列举所分配到的输入通道的候选排列方式。

s502,将所述第一训练值与所述权重分别写入多个寄存器分组的寄存器中。

一方面,输入通道in_channel具有对应的第一训练值,该第一训练值作为本层分组卷积层的输入特征值,用于训练排列方式。

由于第一训练值是一个旨在模拟实际使用场景的数据集,因此,可以从训练卷积神经网络cnn的测试集中直接抽取。

另一方面,输入通道in_channel具有对应的权重。

同样地,在设备中设置有多个存储器,可以预先将至少部分寄存器划分至多个寄存器分组中。

通过顺序、随机等方式,将每一个输入通道in_channels对应的第一训练值与权重分别写入多个寄存器分组的寄存器中。

s503,针对所述多个寄存器分组,分别根据所述存储器中的所述第一训练值与所述权重在每种候选排列方式下进行乘加运算,获得多个第二训练值。

s504,在所述第二训练值中确定绝对值最小的第二训练值,作为目标训练值。

在具体实现中,卷积组group串行运行,每个卷积组group均可调用多个寄存器分组独立进行乘加运算mac。

对于每个卷积组group,可以将第一训练值与权重在每种候选排列方式下进行乘加运算mac,获得多个第二训练值。

作为优化的目标,使得每一寄存器分组累加结果(即第二训练值)的绝对值尽可能小,来减少溢出风险。

上述优化目标可以表达如下:

其中,g为寄存器分组的数量,r为当前排列方式s下,第二训练值的最大绝对值。

在本发明的一个实施例中,每个寄存器分组的寄存器包括用于存储第一特征值的寄存器、用于存储权重的寄存器、乘法寄存器与加法寄存器。

则在本发明实施例中,s504可以包括:

s5041,在所述乘法寄存器中对每一个输入通道对应的所述第一训练值与所述权重进行乘法运算,获得训练乘积数据。

s5042,从所述训练乘积数据中选择值最小的m个训练乘积数据,作为目标训练乘积数据。

s5043,将所述目标训练乘积数据写入至所述加法寄存器中。

s5044,将除所述目标训练乘积数据之外的其他训练乘积数据按照每种排列方式累加至所述加法寄存器中,获得第二训练值。

在本发明实施例中,估计算每一个输入通道对应的第一训练值与权重之间进行乘法运算获得的训练乘积数据。

从所有的训练乘积数据中取绝对值最小的m(m为正整数,一般取值为2-32)个训练乘积数据,作为目标训练乘积数据。

将目标训练乘积数据写入至加法寄存器中,作为累加的初始值。

从所有的训练乘积数据中取剩余的训练乘积数据,按照不同的排列方式累加至加法寄存器中,从而获得第二训练值。

此时,与当前寄存器值累加后绝对值最小的输入通道in_channels,分配给该加法寄存器然后重新计算加法寄存器的累加值,累加完成,即可获得绝对值最小的即第二训练值。

上述第二训练值可以表达如下:

其中,r为第二训练值,g为寄存器分组的数量,w为权重,a为第一特征值,n为w与a之间的公共边长度,为每个寄存器组内分配到的乘法运算的数量,s为排列方式,w和h为第一训练值的宽和高。

需要说明的是,除采用暴力遍历方法外,亦可以采用动态规划的方法进行通道重排操作中选取最优的排列方式,或者,亦可以通过准确率等间接指标来评判选取最优的排列方式,本发明实施例对此不加以限制。

s505,将所述目标训练值对应的候选排列方式设置为输入通道的目标排列方式。

根据每个寄存器分配的输入通道in_channels的通道id,交错起来,得到最终的目标排列方式。

在分组乘加阶段,一个16bits的寄存器需要累加一共(n/g)次乘法运算的结果,一旦(n/g)很大,有可能会在累加过程中,绝对值超出15bits(1bits符号位)所能存放的数据上限,导致溢出回绕(正数变负数)。

在本发明实施例中,由于卷积组内的加法运算对输入通道的顺序无关,因此可以任意排列输入通道的顺序,调整累加的顺序,使得在第一训练值上每一次乘加运算后绝对值的增量最小,从而减少累加过程中出现的绝对值峰值。

由于第一训练值可以实现对真实情况的采样,当数量足够时,根据大数定律其绝对值分布逼近真实分布,因此,可以认为该排列顺序在实际应用中也能使得每一次乘加运算后绝对值的增量最小。

s506,确定每个卷积组所分配到的输入通道。

s507,在每个卷积组中,通过所分配到的输入通道接收输入激活值。

如图6所示,在线应用卷积神经网络cnn时,某本层卷积层为分组卷积层,则可以分别查询预先分配给每个卷积组group602的输入通道in_channels601。

针对每个卷积组group602,分别通过所分配到的输入通道in_channels601接收输入至该卷积组group602的输入激活值。

s508,对所述输入激活值进行定点化操作,获得第一特征值。

s509,依次从所述多个卷积组中确定目标卷积组。

多个卷积组group按照顺序串行运行,当前运行的卷积组中即为目标卷积组。

s510,在所述目标卷积组中,将所分配到的输入通道对应的第一特征值与权重分别写入多个寄存器分组的寄存器中。

如图6所示,卷积组group602在运行时,可调用多个寄存器分组603,通过顺序、随机等方式,将所分配到的输入通道in_channels601对应的第一特征值与权重分别写入多个寄存器分组603的寄存器中。

s511,在所述目标卷积组中,分别根据所述寄存器分组中的所述第一特征值与所述权重预设的目标排列方式进行乘加运算,获得多个第二特征值。

在实际应用中,查询该目标卷积组所分配到的输入通道in_channels对应的目标排列方式,由此确定第一特征值与权重在该目标卷积组中进行加法运算的顺序,在进行乘法运算之后,以此进行加法运算,从而获得第二特征值。

需要说明的是,该目标排列方式可以为离线时训练的排列方式,也可以为设计卷积神经网络cnn时默认的排列方式,本发明实施例对此不加以限制。

在本发明实施例中,通过引入卷积组摊分公共边,可以限制第一特征值与权重之间的公共边的数量随输入通道的数量增长而增长,拓展到包含任意输入通道数的卷积层。

此外,每个卷积组内较少的输入通道允许通过暴力搜索的简单方式获取输入通道重排的最优解。

需要说明的是,除分组卷积层之外,还有其他方式可以限制参与单次卷积的元素个数,包括但不限于:深度可分离卷积(depth-wiseconvolution),网络裁剪和稀疏化,空洞卷积等等,本发明实施例对此不加以限制。

其中,网络裁剪和稀疏化与空洞卷积通过将卷积核中部分权重置为0来减少参与运算的元素个数。

为使本领域技术人员更好地理解本发明实施例,在本说明书中,通过具体的示例说明本发明实施例中卷积神经网络的定点运算方法。

示例一普通的卷积层

本层卷基层具有8个输入通道channel_1、channel_2、channel_3、channel_4、channel_5、channel_6、channel_7、channel_8

针对该8个输入通道分部设置8个定点数据的权重,w1、w2、w3、w4、w5、w6、w7、w8

设备将存储器划分出两个寄存器分组a1、a2

离线时:

压缩w1、w2、w3、w4、w5、w6、w7、w8的比特数

在线时:

分别从channel_1、channel_2、channel_3、channel_4、channel_5、channel_6、channel_7、channel_8接收输入激活值a1、a2、a3、a4、a5、a6、a7、a8

将a1、a2、a3、a4、a5、a6、a7、a8转换为定点数据,作为第一特征值

将channel_1、channel_3、channel_5、channel_7分配到a1

将channel_2、channel_4、channel_6、channel_8分配到a2

在a1运行乘加运算的第二特征值为:a1*w1+a3*w3+a5*w5+a7*w7=d1

在a2运行乘加运算的第二特征值为:a2*w2+a4*w4+a6*w6+a8*w8=d2

d1与d2合并为第三特征值:d1+d2=d3

将d3映射为浮点的数值,经过规范化操作、激活函数激活等操作之后,作为激活输出值

压缩d3的比特数

通过输出通道将d3输出到下层卷积层

示例二分组卷积层

分组卷积层具有2个卷积组,b1、b2

具有8个输入通道channel_1、channel_2、channel_3、channel_4、channel_5、channel_6、channel_7、channel_8

其中,channel_1、channel_2、channel_3、channel_4分配给b1

channel_5、channel_6、channel_7、w_8分配给b2

针对该8个输入通道分部设置8个定点数据的权重,w1、w2、w3、w4、w5、w6、w7、w8

设备将存储器划分出两个寄存器分组a1、a2

离线时:

压缩w1、w2、w3、w4、w5、w6、w7、w8的比特数

分别从channel_1、channel_2、channel_3、channel_4、channel_5、channel_6、channel_7、channel__8接收第一训练值a1’、a2’、a3’、a4’、a5’、a6’、a7’、a8’

在b1中,预估channel_1、channel_2、channel_3、channel_4的输出值,即a1’*w1、a2’*w2、a3’*w3、a4’*w4

绝对值最小的两个通道为channel_1、channel_2,即a1’*w1、a2’*w2的绝对值小于a3’*w3、a4’*w4的绝对值

在a1’*w1的基础上分别加上a3’*w3、a4’*w4

在a2’*w2的基础上分别加上a3’*w3、a4’*w4

假设(a1’*w1+a3’*w3)+(a2’*w2+a4’*w4)的绝对值小于(a1’*w1+a4’*w4)+(a2’*w2+a3’*w3)

那么,在b1中输入通道的最优的排列方式(即目标排列方式)为(channel_1、channel_3)、(channel_2、channel_4)

在b2中,预估channel_5、channel_6、channel_7、channel_8的输出值,即a5’*w5、a6’*w6、a7’*w7、a8’*w8

绝对值最小的两个通道为channel_6、channel_8,即a6’*w6、a8’*w8的绝对值小于a5’*w5、a7’*w7的绝对值

在a6’*w6的基础上分别加上a5’*w5、a7’*w7

在a8’*w8的基础上分别加上a5’*w5、a7’*w7

假设(a6’*w6+a5’*w5)+(a7’*w7+a8’*w8)的绝对值小于(a6’*w6+a8’*w8)+(a7’*w7+a5’*w5)

那么,在b2中输入通道的最优的排列方式(即目标排列方式)为(channel_6、channel_5)、(channel_7、channel_8)

在线时:

分别从channel_1、channel_2、channel_3、channel_4、channel_5、channel_6、channel_7、channel_8接收输入激活值a1、a2、a3、a4、a5、a6、a7、a8

将a1、a2、a3、a4、a5、a6、a7、a8转换为定点数据,作为第一特征值

将channel_1、channel_3、channel_5、channel_7分配到b1

将channel_2、channel_4、channel_6、channel_8分配到b2

b1先处理:

在b1中,读取b1的目标排列方式,将channel_1、channel_31分配到a1、将channel_2、channel_4分配到a2

在a1运行乘加运算的第二特征值为:a1*w1+a3*w3=e1

在a2运行乘加运算的第二特征值为:a2*w2+a4*w4=e2

e1与e2合并为:e1+e2=e3

b1处理完成之后,b2进行处理:

在b2中,读取b2的目标排列方式,将channel_6、channel_5分配到a1、将channel_7、channel_8分配到a2

在a1运行乘加运算的第二特征值为:a_6*w_6+a_5*w_5=e4

在a2运行乘加运算的第二特征值为:a_7*w_7+a_8*w_8=e5

e4与e5合并:e4+e5=e6

e3与e6合并为第三特征值:e3+e6=e7

将e7映射为浮点的数值,经过规范化操作、激活函数激活等操作之后,作为激活输出值

压缩e7的比特数

通过输出通道将e7输出到下层卷积层

图7为本发明实施例四提供的卷积神经网络的定点运算装置的结构示意图,具体可以包括如下模块:

输入激活值接收模块710,用于通过输入通道接收本层卷积层的输入激活值,所述输入通道具有对应的权重;

定点化转换模块720,用于对所述输入激活值进行定点化操作,获得第一特征值;

分组存储模块730,用于将所述第一特征值与所述权重分别写入多个寄存器分组的寄存器中;

乘加运算模块740,用于针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值。

在本发明的一个可选实施例中,每个寄存器分组寄存器包括用于存储所述第一特征值的寄存器、用于存储所述权重的寄存器、乘法寄存器与加法寄存器;

所述乘加运算模块740包括:

乘法运算子模块,用于针对每个寄存器分组,在所述乘法寄存器中对同一个输入通道对应的所述第一特征值与所述权重进行乘法运算,获得特征乘积数据;

加法运算子模块,用于将所述特征乘积数据累加至所述加法寄存器中,获得第二特征值。

在本发明的一个可选实施例中,还包括:

特征值合并模块,用于合并所述多个第二特征值,获得第三特征值;

浮点化转换模块,用于对所述第三特征值进行浮点化操作,获得第四特征值;

输出激活值生成模块,用于根据所述第四特征值生成本层卷积层的输出激活值。

在本发明的一个可选实施例中,还包括:

权重压缩模块,用于压缩所述权重的比特数,以压缩所述第二特征值的比特数。

在本发明的一个可选实施例中,本层卷积层的输入激活值为上层卷积层的输出激活值;

所述装置还包括:

输出激活值压缩模块,用于压缩上层卷积层的输出激活值的比特数,以压缩所述第二特征值的比特数。

在本发明的一个可选实施例中,所述卷积层为分组卷积层,所述分组卷积层包括多个卷积组;

所述装置还包括:

候选排列方式列举模块,用于针对每个卷积组,列举所分配到的输入通道的候选排列方式,所述输入通道具有对应的第一训练值;

训练集写入模块,用于将所述第一训练值与所述权重分别写入多个寄存器分组的寄存器中;

训练集训练模块,用于针对所述多个寄存器分组,分别根据所述存储器中的所述第一训练值与所述权重在每种候选排列方式下进行乘加运算,获得多个第二训练值;

目标训练值选择模块,用于在所述第二训练值中确定绝对值最小的第二训练值,作为目标训练值;

目标排列方式设置模块,用于将所述目标训练值对应的候选排列方式设置为输入通道的目标排列方式。

在本发明的一个可选实施例中,每个寄存器分组的寄存器包括用于存储所述第一特征值的寄存器、用于存储所述权重的寄存器、乘法寄存器与加法寄存器;

所述训练集训练模块包括:

训练乘积数据计算子模块,用于在所述乘法寄存器中对每一个输入通道对应的所述第一训练值与所述权重进行乘法运算,获得训练乘积数据;

目标训练乘积数据选择子模块,用于从所述训练乘积数据中选择值最小的m个训练乘积数据,作为目标训练乘积数据;

目标训练乘积数据写入子模块,用于将所述目标训练乘积数据写入至所述加法寄存器中;

训练乘积数据累加子模块,用于将除所述目标训练乘积数据之外的其他训练乘积数据按照每种排列方式累加至所述加法寄存器中,获得第二训练值。

在本发明的一个可选实施例中,所述卷积层为分组卷积层,所述分组卷积层包括多个卷积组;

所述输入激活值接收模块包括:

通道分配子模块,用于确定每个卷积组所分配到的输入通道;

通道接收子模块,用于在每个卷积组中,通过所分配到的输入通道接收输入激活值;

所述分组存储模块包括:

目标卷积组确定子模块,用于依次从所述多个卷积组中确定目标卷积组;

通道存储子模块,用于在所述目标卷积组中,将所分配到的输入通道对应的第一特征值与权重分别写入多个寄存器分组的寄存器中;

所述乘加运算模块包括:

排列乘加子模块,用于在所述目标卷积组中,分别根据所述寄存器分组中的所述第一特征值与所述权重预设的目标排列方式进行乘加运算,获得多个第二特征值。

本发明实施例所提供的卷积神经网络的定点运算装置可执行本发明任意实施例所提供的卷积神经网络的定点运算方法,具备执行方法相应的功能模块和有益效果。

图8为本发明实施例五提供的设备的结构示意图,如图8所示,该设备包括处理器80、存储器81、输入装置82和输出装置83;设备中处理器80的数量可以是一个或多个,图8中以一个处理器80为例;设备中的处理器80、存储器81、输入装置82和输出装置83可以通过总线或其他方式连接,图8中以通过总线连接为例。

处理器80包括中央处理器(centralprocessingunit/processor,cpu),而寄存器801是中央处理器内的组成部分。寄存器801是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(ir)和程序计数器(pc)。在中央处理器的算术及逻辑部件中,寄存器801有累加器(acc)。

存储器81作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的卷积神经网络的定点运算方法对应的程序指令/模块(例如,卷积神经网络的定点运算装置中的输入激活值接收模块710、定点化转换模块720、分组存储模块730和乘加运算模块740)。处理器80通过运行存储在存储器81中的软件程序、指令以及模块,从而执行设备/终端/服务器的各种功能应用以及数据处理,即实现上述的卷积神经网络的定点运算方法。

存储器81可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器81可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器81可进一步包括相对于处理器80远程设置的存储器,这些远程存储器可以通过网络连接至设备/终端/服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置82可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置83可包括显示屏等显示设备。

本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种卷积神经网络的定点运算方法,该方法包括:

通过输入通道接收本层卷积层的输入激活值,所述输入通道具有对应的权重;

对所述输入激活值进行定点化操作,获得第一特征值;

将所述第一特征值与所述权重分别写入多个寄存器分组的寄存器中;

针对所述多个寄存器分组,分别根据所述寄存器中的所述第一特征值与所述权重进行乘加运算,获得多个第二特征值。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的卷积神经网络的定点运算中的相关操作.

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

值得注意的是,上述卷积神经网络的定点运算装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

应当说明的是,上述仅为本发明的较佳实施例及本发明所运用技术原理。本领域技术人员可以理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然以上实施例对本发明进行了较为详细的说明,但是本发明不局限于此,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由权利要求范围决定。

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