Processing

Please wait...

Settings

Settings

Goto Application

1. WO2020135093 - CONVOLUTIONAL NEURAL NETWORK PROCESSING METHOD AND APPARATUS, DEVICE, AND STORAGE MEDIUM

Document

说明书

发明名称 0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090   0091   0092   0093  

权利要求书

1   2   3   4   5   6   7   8   9   10  

附图

1   2   3   4  

说明书

发明名称 : 卷积神经网络处理方法、装置、设备及存储介质

[0001]
本申请要求在2018年12月28日提交中国专利局、申请号为201811627040.3的中国专利申请的优先权,该申请的全部内容通过引用结合在本申请中。

技术领域

[0002]
本申请实施例涉及深度学习技术,例如涉及一种卷积神经网络处理方法、装置、设备及存储介质。

背景技术

[0003]
自2012年AlexNet网络结构模型被提出以来,卷积神经网络在图像处理领域取得了巨大成功,在多个图像竞赛中,卷积神经网络效果远超传统算法,频繁刷新业内多种评测指标。
[0004]
由于信息安全和低时延的需求,神经网络的计算需要从云端迁移到移动终端,但随着卷积神经网络效果的提升,卷积神经网络的模型越来越复杂,计算量急剧增加。在云端,可以依靠图形处理器(Graphics Processing Unit,GPU)并行计算,对卷积神经网络进行加速,而在移动终端,由于计算资源相对匮乏,使得卷积神经网络的计算速度无法得到提高,进而无法在移动终端实现实时运行。
[0005]
发明内容
[0006]
本申请实施例提供一种卷积神经网络处理方法、装置、设备及存储介质,以提高卷积神经网络的计算速度。
[0007]
本申请实施例提供了一种卷积神经网络处理方法,该方法包括:
[0008]
获取卷积神经网络的原始权值矩阵和输入神经元矩阵;
[0009]
对所述原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对所述原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵;
[0010]
根据所述目标权值矩阵和所述目标输入元矩阵,得到所述卷积神经网络的输出神经元矩阵。
[0011]
本申请实施例还提供了一种卷积神经网络处理装置,该装置包括:
[0012]
原始矩阵获取模块,设置为获取卷积神经网络的原始权值矩阵和原始输入 神经元矩阵;
[0013]
目标矩阵生成模块,设置为对所述原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对所述原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵;
[0014]
输出神经元矩阵生成模块,设置为根据所述目标权值矩阵和所述目标输入神经元矩阵,得到所述卷积神经网络的输出神经元矩阵。
[0015]
本申请实施例还提供了一种设备,该设备包括:
[0016]
一个或多个处理器;
[0017]
存储器,设置为存储一个或多个程序;
[0018]
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本申请实施例提供的方法。
[0019]
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例提供的方法。

附图说明

[0020]
图1是本申请实施例提供的一种卷积神经网络处理方法;
[0021]
图2是本申请实施例提供的另一种卷积神经网络处理方法;
[0022]
图3是本申请实施例提供的一种卷积神经网络处理装置的结构示意图;
[0023]
图4是本发明实施例中的一种设备的结构示意图。

具体实施方式

[0024]
下面结合附图和实施例对本申请进行说明。此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。
[0025]
卷积神经网络一般由以下三部分组成,第一部分是输入层,第二部分由卷积层、激活层和池化层(或下采样层)组合而成,第三部分由一个全连接的多层感知机分类器(即全连接层)构成。卷积层负责特征提取,使用了两个关键的概念:接收域和权值共享;池化层执行局部平均和子采样,减少特征对偏移和畸变的敏感性,这是由于特征的精确位置是次要的,而相对于其它特性的相对位置更重要;全连接层执行分类。
[0026]
卷积层是卷积神经网络的核心,卷积层由一些称为特征图的二维神经元面组成,一个特征图上的每个神经元与前一层神经元的一个小子集(称为接收域) 连接,二维空间上的局部接收域使得卷积神经网络可以从输入中提取初级特征。一个特征图中的神经元共享一个或多个权值矩阵(或称卷积核)。权值共享不仅大幅减少了需要训练的权值数目,也大大减少了需要的训练数据量,且降低了神经网络的复杂性,减轻了过拟合的问题。上述特征提取过程即为卷积运算过程。同时,可将特征图理解为神经元矩阵,相应的,可将当前层未进行特征提取(即卷积运算)的特征图作为输入神经元矩阵,将当前层经过特征提取(即卷积运算)的特征图作为输出神经元矩阵。当前层的输出神经元矩阵即为下一层的输入神经元矩阵。
[0027]
卷积层的卷积运算占据了卷积神经网络的大部分计算量,计算量即指网络的运算次数,而网络的运算次数可用时间复杂度来表示。下面给出卷积运算的计算过程:假设原始输入神经元矩阵M in为W in*H in的矩阵,原始权值矩阵N为F*F的矩阵,卷积步长为S,零填充个数为P,则每个输出神经元矩阵M out为W out*H out的矩阵,输出神经元矩阵的个数等于K,即输出神经元矩阵的个数等于权值矩阵个数,W out=(W in-F+2P)/S+1,H out=(W out-F+2P)/S+1。由此可知,根据原始输入神经元矩阵和原始权值矩阵,得到每个输出神经元矩阵需要经过的乘法运算次数为W out*H out*F*F,卷积运算中的乘法运算是卷积神经网络的时间复杂度的一部分。
[0028]
为了提高卷积神经网络的计算速度,可考虑从以下两方面进行改进:其一、降低卷积神经网络的时间复杂度。由于卷积运算中的乘法运算是卷积神经网络的时间复杂度的一部分,因此,可考虑减少乘法运算的次数,可以采用非耗时运算(如加法运算)替代耗时运算(如乘法运算),如将数据从时域转换到频域进行处理;其二、降低卷积神经网络的数据位宽。可以采用量化方法进行。采用非耗时运算操作替代耗时运算操作以降低卷积神经网络的复杂度的前提是:耗时运算的时钟周期要大于非耗时运算的时钟周期。
[0029]
由于采样量化方法来降低卷积神经网络的数据位宽时,将损失部分数据精度,此外,采用非耗时运算替代耗时运算来降低卷积神经网络的时间复杂度时,也将损失数据精度。上述实现方式是通过降低卷积神经网络的结果精度来提高卷积神经网络的计算速度的,如果通过上述处理方式所得结果的误差在预设误差范围内,那么可认为上述处理方式是可行的。如果通过上述处理方式所得结果的误差不在预设范围内,那么即使采用上述处理方式提高了卷积神经网络的计算速度,上述处理方式也将认为是不可行的。换句话说,上述处理方式是否可行的前提是,通过上述处理方式所得结果的误差在预设误差范围内。相应的,为了确保上述处理方式可行,需要考虑如何降低结果的误差,即提高结果精度。下面将结合具体实施例对上述内容进行说明。
[0030]
图1为本申请实施例提供的一种卷积神经网络处理方法的流程图,本实施例可适用于提高卷积神经网络的计算速度的情况,该方法可以由卷积神经网络确定装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如配置于计算机或移动终端等中。如图1所示,该方法包括如下步骤:
[0031]
步骤110、获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵。
[0032]
步骤120、对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵。
[0033]
步骤130、对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵。
[0034]
在本申请的实施例中,根据前文所述可知,为了提高卷积神经网络的计算速度,可考虑从降低卷积神经网络的时间复杂度以及降低卷积神经网络的数据位宽两个方面进行改进。针对降低卷积神经网络的时间复杂度,可以采用非耗时运算(如加法运算)替代耗时运算(如乘法运算)的方式,即增加非耗时运算操作,减少耗时运算操作。一实施例中,可以采用Winograd变换来实现降低卷积神经网络的复杂度。下面对Winograd变换进行说明。
[0035]
Winograd变换是一种广泛使用的矩阵串行乘法,Winograd变换的思想是增加少量加法运算而减少乘法运算。Winograd变换公式为:Y=A T[N w□W inw]A,A表示输出神经元变换矩阵,A T表示输出神经元变换矩阵的转置矩阵,N w表示对原始权值矩阵N进行Winograd变换得到的矩阵,且N w=GNG T,G表示原始权值变换矩阵;W inw表示对原始输入神经元矩阵W in进行Winograd变换得到的矩阵,且W inw=B TW inB,B T表示原始输入神经元变换矩阵。输出神经元变换矩阵A、原始权值变换矩阵G与原始输入神经元变换矩阵B T可以根据预设Winograd变换参数确定,这里所述的预设Winograd变换参数指的是输出神经元矩阵M out的维数与原始权值矩阵N的维数,输出神经元矩阵M out为W out*H out的矩阵,原始权值矩阵N为F*F的矩阵,即原始权值变换矩阵G与原始输入神经元变换矩阵B T可以根据F(W out*H out,F*F)确定。
[0036]
当输出神经元矩阵M out为W out*H out的矩阵,原始权值矩阵N为F*F的矩阵时,基于Winograd变换完成卷积运算所需要的乘法次数μ(F(W out*H out,F*F))=(W out+F-1)(H out+F-1),即对原始输入神经元矩阵W in以及原始权值矩阵N进行Winograd变换后,根据变换后的原始输入神经元矩阵和原始权值矩阵得到输出神经元矩阵所需要经过的乘法运算次数为μ(F(W out*H out,F*F))=(W out+F-1)(H out+F-1)。根据前文所述可知,未采 用Winograd变换完成卷积操作所需要的乘法次数为μ(F(W out*H out,F*F))=W out*H out*F*F,即未对原始输入神经元矩阵W in以及原始权值矩阵N进行Winograd变换,得到输出神经元矩阵所需要经过的乘法运算次数为μ(F(W out*H out,F*F))=W out*H out*F*F。基于上述,采用Winograd变换可减少卷积神经网络的乘法运算次数,即采用Winograd变换可降低卷积神经网络的时间复杂度。
[0037]
上述给出了当原始权值矩阵的个数为一个的Winograd变换情况,当原始权值矩阵的个数为至少两个以上时,每个原始权值矩阵均可采用上述方式进行Winograd变换,并将Winograd变换后的结果相加即可。
[0038]
示例性的,如当输出神经元M out为2*2,原始权值矩阵N为3*3,则 采用Winograd变换得到输出神经元所需要的乘法运算次数μ(F(2*2,3*3))=4,而未采用Winograd变换得打输出神经元所需要的乘法运算次数为μ(F(2*2,3*3))=36,由此可见,采用Winograd变换可将低卷积神经网络的时间复杂度。
[0039]
由于卷积神经网络的训练过程是一个不断对权值进行调整的过程,这个对权值所进行的调整一般需要浮点精度才能完成,因此,原始权值矩阵和原始输入神经元矩阵的元素通常是以浮点数类型存储的。但浮点运算会消耗比较大的计算资源,如果在不影响卷积神经网络的结果的精确度的情况下,这里所述的不影响卷积神经网络的结果的精确度指的是对卷积神经网络进行处理后所得结果的误差在预设误差范围内,则可以采用其它简单数值类型进行计算的话,卷积神经网络的计算速度将得到极大提高,同时也可降低功耗,这对于移动终端来说,如不能高效执行浮点运算的嵌入式系统来说,尤为重要。基于上述,可以考虑采用量化方法来降低卷积神经网络的数据位宽,从而提高卷积神经网络的计算速度。
[0040]
量化指的是利用浮点运算精度的冗余进行原始权值矩阵和原始输入神经元矩阵的数据压缩,由于数据压缩不会更改网络结构,因此,通常不需要重新训练。可以对卷积神经网络的原始权值矩阵和原始输入神经元矩阵进行量化的原因在于:卷积运算的原始权值矩阵和原始输入神经元矩阵的元素值一般是以32 位浮点数形式存在,而由于通用的中央处理器或数字信号处理器最小可以支持8位定点数,且大量实验表明,卷积神经网络对于数据位宽的敏感性不高,也即降低卷积神经网络的数据位宽对结果所造成的影响较小,因此,可以对原始权值矩阵和原始输入神经元矩阵进行量化处理,即将原始权值矩阵和原始输入神经元矩阵的元素值从32位量化至8位。这里所述的8位定点数指的是8位定点整数,即8位二进制数。由于8位数值的存取相对浮点数而言,使得内存带宽降到25%,上述可以更好地利用缓存并且避免随机存取存储器(Random Access Memory,RAM)出现存取瓶颈。此外,还可以提高单指令多数据流(Single Instruction Multiple Data,SIMD)的吞吐量,即实现SIMD在每个时钟周期内执行更多的操作。
[0041]
量化方法可以包括最大最小值量化方法和信息熵量化方法等。其中,在信息论中,熵是信息不确定性的一个测度,熵越大,则表示信息的不去定程度越高。最大最小值量化方法为:在选择将32位浮点数量化至8位定点数的情况下,确定参数的最大浮点值a和最小浮点值b,根据最大浮点值a和最小浮点值b确定参数的分布区间[a,b],将所有参数均线性映射到分布区间[a,b]之间的255个8位定点数中最接近的一个数值,这里所述的参数为原始权值矩阵的元素以及原始输入神经元中的元素,此外,也可以采用非线性映射将所有参数映射到分布区间[a,b]之间的255个8位定点数中最接近的一个数值。示例性的,如原始权值矩阵的元素的分布区间为[-3,5],采用线性映射方法将原始权值矩阵中的所有元素映射到分布区间[-3,5]之间255个8位定点数中最接近的一个数值,则可将-3映射为-127,将5映射为127。
[0042]
根据前文所述可知,由于降低卷积神经网络的时间复杂度以及降低卷积神经网络的数据位宽都将降低卷积神经网络的结果精确度,因此,如果将两者进行结合而不考虑实际情况,则将导致卷积神经网络的结果所产生的误差大于预设误差范围内,进而认为该结果并可信,上述处理方式也并不可行。基于上述,需要考虑实际情况来确定可行的处理方式,这里所述的实际情况主要指:由于原始权值矩阵中元素的分布范围与原始输入神经元矩阵中元素的分布范围并不相同,原始权值矩阵中元素的分布范围比较集中,而原始输入神经元矩阵中元素的分布范围比较广,因此,原始权值矩阵与原始输入神经元矩阵对量化位宽的敏感程度并不相同,进而需要针对原始权值矩阵和原始输入神经元矩阵,考虑执行降低卷积神经网络的时间复杂度以及降低卷积神经网络的数据位宽的先后顺序,即考虑执行Winograd变换以及量化处理的先后顺序。
[0043]
针对原始权值矩阵而言,由于原始权值矩阵中元素的分布范围比较集中,因此,对原始权值矩阵进行量化处理时,比较容易确定阈值,这里所述的阈值 可以指元素的最大浮点值与最小浮点值。根据阈值对原始权值矩阵中元素进行筛选时,可将原始权值矩阵中大部分元素包含在内,使得原始权值矩阵中元素丢失较少,即大部分元素均可以被利用,并可将其映射到一个较小范围的分布区间。大量实验表明,针对原始权值矩阵而言,将原始权值矩阵中多个元素分别由32位量化到8位,无论采用哪种量化方法,量化后的结果的精确度损失并不大,甚至还可以量化到更小的数据位宽,量化所产生的误差主要来源于取整丢失的精确度。基于上述,针对原始权值矩阵,可以先对原始权值矩阵执行Winograd变换,再对Winograd变换后的原始权值矩阵执行量化处理。如果先对原始权值矩阵执行量化处理,再对量化处理后的原始权值矩阵执行Winograd变换,则由于量化处理会累加放大原始权值矩阵中元素在量化取整时所产生的误差,因此,将影响卷积神经网络的结果。
[0044]
针对原始输入神经元矩阵而言,由于输入神经元矩阵中元素的分布范围比较广,因此,对原始输入神经元矩阵进行量化处理时,比较难确定阈值,这里所述的阈值可以指元素的最大浮点值与最小浮点值。根据阈值对原始输入神经元矩阵中元素进行筛选时,可能无法将原始输入神经元矩阵中大部分元素包含在内,使得原始输入神经元矩阵中元素丢失较多,即大部分元素可能无法被利用。大量实验表明,针对原始输入神经元矩阵而言,将原始输入神经元矩阵中多个中的每个元素元素由32位量化到8位,采用信息熵量化方法的效果较好,且在时域处理的效果优于频域处理的效果。基于上述,针对原始输入神经元矩阵,由于在时域中量化处理的效果优于频域中量化处理的效果,而Winograd变换是将数据从时域转换到频域,因此,需要先对原始输入神经元矩阵执行量化处理,再对量化处理后的原始输入神经元矩阵执行Winograd变换。
[0045]
基于上述,本申请实施例中卷积神经网络的原始权值矩阵表示的是未经过Winograd变换和量化处理的权值矩阵,卷积神经网络的原始输入神经元矩阵表示的是未经过量化处理和Winograd变换的输入神经元矩阵。
[0046]
对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,可作如下理解:先对原始权值矩阵进行Winograd变换,得到Winograd变换权值矩阵,再对Winograd变换权值矩阵进行量化处理,得到目标权值矩阵。本实施例中,可采用最大最小值量化方法或信息熵量化方法对Winograd变换权值矩阵进行量化处理,采用哪种量化方法,可根据实际情况进行设定,在此不作限定。
[0047]
对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵,可作如下理解:先对原始输入神经元矩阵进行量化处理,得到量化输入神经元矩阵,再对量化输入神经元矩形进行Winograd变换,得到目标输 入神经元矩阵。本实施例中,可以采用信息熵方法对原始输入神经元矩阵进行量化处理。
[0048]
步骤140、根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵。
[0049]
在本申请的实施例中,由于Winograd变换将矩阵由时域转换到了频域,因此,时域中原始权值矩阵和原始目标输入神经元矩阵执行的卷积操作,转换为,频域中目标权值矩阵和目标输入神经元矩阵执行的点乘操作。根据目标权值矩阵和目标输入神经元矩阵得到的卷积神经网络的输出神经元矩阵为频域卷积神经网络的结果,之后可以对该输出神经元矩阵进行Winograd变换将其转换为时域卷积神经网络的结果,即作为下一层的原始输入神经元矩阵。
[0050]
步骤120和步骤130可以同步执行,也可以先执行步骤120,再执行步骤130,还可以先执行步骤130,再执行步骤120,执行先后顺序,可根据实际情况进行确定,在此不作限定。
[0051]
本实施例的技术方案,通过获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵,对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵,根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵,实现了通过Winograd变换降低卷积神经网络的时间复杂度,以及通过量化处理降低卷积神经网络的数据位宽,进而提高了卷积神经网络的计算速度。
[0052]
在上述技术方案的基础上,对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,可以包括:获取目标权值变换矩阵。根据目标权值变换矩阵,对原始权值矩阵进行Winograd变换,得到Winograd变换权值矩阵。对Winograd变换权值矩阵进行量化处理,得到目标权值矩阵。
[0053]
在本申请的实施例中,对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,可以包括:获取目标权值变换矩阵,根据目标权值变换矩阵,对原始权值矩阵进行Winograd变换,得到Winograd变换权值矩阵,再对Winograd权值变换矩阵进行量化处理,得到目标权值矩阵,这里所述的目标权值变换矩阵可以根据预设Winograd变换参数确定,这里所述预设Winograd变换参数指的是输出神经元矩阵M out的维数与原始权值矩阵N的维数。本实施例中,输出神经元矩阵M out为W out*H out的矩阵,原始权值矩阵N为F*F的矩阵,即目标权值变换矩阵根据F(W out*H out,F*F)确定。
[0054]
示例性的,如F(2*2,3*3),则目标权值变换矩阵为
[0055]
在上述技术方案的基础上,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵,可以包括:获取目标输入神经元变换矩阵。对原始输入神经元矩阵进行量化处理,得到量化输入神经元矩阵。根据目标输入神经元变换矩阵,对量化输入神经元矩阵进行Winograd变换,得到目标输入神经元矩阵。
[0056]
在本申请的实例中,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵,可以包括:获取目标输入神经元变换矩阵,对原始输入神经元矩阵进行量化处理,得到量化输入神经元矩阵,再根据目标输入神经元变换矩阵,对量化输入神经元矩阵进行Winograd变换,得到目标输入神经元矩阵,这里所述的目标输入神经元变换矩阵可以根据预设Winograd变换参数确定,这里所述的预设Winograd变换参数指的是输出神经元矩阵M out的维数与原始权值矩阵N的维数。本实施例中,输出神经元矩阵M out为W out*H out的矩阵,原始权值矩阵N为F*F的矩阵,即目标输入神经元变换矩阵根据F(W out*H out,F*F)确定。
[0057]
示例性的,如F(2*2,3*3),则目标输入神经元变换矩阵为
[0058]
在上述技术方案的基础上,目标权值变换矩阵和目标输入神经元变换矩阵可以通过如下方式确定:根据预设Winograd变换参数确定原始权值变换矩阵和原始输入神经元变换矩阵,原始权值变换矩阵的行数和原始输入神经元变换矩阵的行数相等。在根据原始输入神经元变换矩阵对所述量化输入神经元矩阵进行Winograd变换的过程中出现数据溢出的情况下,将原始输入神经元变换矩阵中所述数据对应的第i行的多个元素值分别乘以预设比例值,得到目标输入神经元变换矩阵,并将原始权值变换矩阵中第i行的多个元素值分别除以预设比例值,得到目标权值变换矩阵,预设比例值小于1。i为小于或等于n的正整数,n为所述原始输入神经元变换矩阵的行数。
[0059]
在本申请的实施例中,由于原始输入神经元矩阵通常是经过激活层处理后的矩阵,激活层通常采用的激活函数为修正线性单元(Rectified Linear Unit,ReLU)函数,ReLU函数为f(x)=max(0,x),f(x)可以表示原始输入神经元矩阵的元素值,对原始输入神经元矩阵经过量化处理后,即将原始输入神经元矩阵的多个元素分别由32位量化至8位,则得到量化输入神经元矩阵的元素的取值范围为[0,127],再对量化输入神经元矩阵进行Winograd变换,所得到的目标输入神经元矩阵的元素值将可能超过取值范围[0,127],即超出8位存储范围,上述可以理解为在对原始输入神经元矩阵进行量化处理过程中,出现了溢出问题。为了解决上述问题,可考虑对Winograd变换中涉及的变换矩阵进行调整。
[0060]
根据前文所述可知,Winograd变换公式为:Y=A T[N w□W inw]A,A表示输出神经元变换矩阵,A T表示输出神经元变换矩阵的转置矩阵,N w表示对原始权值矩阵N进行Winograd变换得到的矩阵,且N w=GNG T,G表示原始权值变换矩阵;W inw表示对原始输入神经元矩阵W in进行Winograd变换得到的矩阵,且W inw=B TW inB,B T表示原始输入神经元变换矩阵。输出神经元变换矩阵A、原始权值变换矩阵G与原始输入神经元变换矩阵B T可以根据预设Winograd变换参数确定,这里所述的预设Winograd变换参数指的是输出神经元矩阵M out的维数与原始权值矩阵N的维数,输出神经元矩阵M out为W out*H out的矩阵,原始权值矩阵N为F*F的矩阵,即原始权值变换矩阵G与原始输入神经元变换矩阵B T可以根据F(W out*H out,F*F)确定,并且原始权值变换矩阵G的行数与原始输入神经元变换矩阵B T的行数相等。
[0061]
判断原始输入神经元变换矩阵对所述量化输入神经元矩阵进行Winograd变换的过程中是否出现数据溢出,如果出现数据溢出,则可以将原始输入神经元变换矩阵中所述数据对应的第i行的多个元素值分别乘以预设比例值,该预设比例值大于0,取值范围一般为(0,1)。同时,由于卷积神经网络的输出神经元矩阵是目标权值矩阵和目标输入神经元矩阵进行点乘后得到的结果,因此,为了使输出神经元矩阵的所有元素值不变,可将原始权值变换矩阵中对应的第i行的多个元素值分别除以预设比例值,得到目标输入神经元变换矩阵和目标权值变换矩阵。经过上述处理后,根据目标输入神经元变换矩阵和量化输入神经元矩阵进行Winograd变换,所得到的目标输入神经元矩阵的元素值将位于取值范围[0,127]之内,即不会超出取值范围[0,127]。
[0062]
若根据原始输入神经元变换矩阵对量化输入神经元矩阵进行Winograd变换的过程中未出现数据溢出,则无需对原始输入神经元变换矩阵中的元素进行调整,原始输入神经元变换矩阵即为目标输入神经元变换矩阵。
[0063]
上述对原始输入神经元变换矩阵中多个元素以及原始权值变换矩阵中多个元素进行调整时,可以直接采用SIMD中的单指令vrhadd实现移位操作,上述也不会造成额外的指令开销。
[0064]
上述当根据原始输入神经元变换矩阵对量化输入神经元矩阵进行Winograd变换的过程中出现数据溢出时,通过将原始输入神经元变换矩阵中所述数据对应的第i行的多个元素值分别乘以预设比例值,以及,将原始权值变换矩阵中第i行的多个元素值分别除以预设比例值,预设比例值小于1,i为小于或等于n的正整数,n为所述原始输入神经元变换矩阵的行数,使得在保证卷积神经网络的输出神经元矩阵的多个元素值不变的基础上,实现目标输入神经元矩阵的元素值位于取值范围[0,127]内,从而解决了在对原始输入神经元矩阵进行量化处理过程中所出现的溢出问题。
[0065]
为了理解本申请实施例所提供的技术方案,现以F(2*2,3*3)为例进行说明。根据F(2*2,3*3)可以确定原始输入神经元变换矩阵为 原始权值变换矩阵为 假设量化输入神经元矩阵为 在将B T与量化输入神经元矩阵为进行乘积运算时,B T中第2行元素与量化输入神经元矩阵的运算结果为b+c,其中,由于b和c均为[0,127]之间的数,可能会存在b+c大于127的情况,即溢出问题。一实施例中,一旦出现溢出问题,设置预设比例值为 将原始输入神经元变换矩阵B T中第2行的多个元素值分别乘以预设比例值,原始神经元变换矩阵B T中除第2行外的其它多行中的元素值保持不变,得到目标输入神经元变换矩阵 并将原始权值变换矩阵G中第2行的多个元素分别除以 预设比例值 原始权值变换矩阵G中除第2行外的其它多行中的元素值保持不变,得到目标权值变换矩阵
[0066]
在上述技术方案的基础上,对原始输入神经元矩阵进行量化处理,得到量化输入神经元矩阵,可以包括:将原始输入神经元矩阵中多个元素值分别加上预设调整值,得到调整后的原始输入神经元矩阵。对调整后的原始输入神经元矩阵向零取整,得到量化输入神经元矩阵。
[0067]
在本申请的实施例中,为了尽可能降低量化所产生的误差,可将原始输入神经元矩阵中多个元素值分别加上预设调整值,得到调整后的原始输入神经元矩阵,这里预设调整值可以为0.5浮点数(float),并采用向零取整的方法,对调整后的原始输入神经元矩阵进行量化处理,得到量化输入神经元矩阵。
[0068]
在上述技术方案的基础上,目标权值矩阵中多个元素的取值范围均可以为[-127,127]。
[0069]
在本申请的实例中,由于量化处理后,将目标权值矩阵中多个元素分别由32位量化到8位,因此,目标权值矩阵中多个元素的取值范围均可以为[0,127]。
[0070]
在上述技术方案的基础上,目标输入神经元矩阵中多个元素的取值范围均可以为[0,127]。
[0071]
在本申请的实例中,由于原始输入神经元矩阵通常是经过激活层处理后的矩阵,激活层通常采用的激活函数为ReLU函数,ReLU函数为f(x)=max(0,x),f(x)可以表示原始输入神经元矩阵的元素值,对原始输入神经元矩阵经过量化处理后,即将原始输入神经元矩阵的多个元素分别由32位量化至8位,则得到量化输入神经元矩阵的元素的取值范围为[0,127],在此基础上,对量化输入神经元矩阵进行Winograd变换得到的目标输入神经元矩阵中多个元素的取值范围可以均为[0,127]。
[0072]
本申请实施例所提供的技术方案,通过采用Winograd变换降低了卷积神经网络的时间复杂度,以及,通过采用量化方法降低了卷积神经网络的数据位宽,并根据原始权值矩阵和原始输入神经元矩阵中元素的分布情况,针对原始权值矩阵,确定采用先执行Winograd变换,再执行量化处理的方式,针对原始输入神经元矩阵,确定采用先执行量化处理,再执行Winograd变换的方式,实现了最大程度利用Winograd变换和量化方法的优点,在确保上述处理操作所产生的 误差在预设误差范围内的基础上,大幅度提高了卷积神经网络的计算速度,上述使得卷积神经网络在移动设备上基本可以达到实时运行的要求。
[0073]
图2为本申请实施例提供的另一种卷积神经网络处理方法的流程图,本实施例可适用于提高卷积神经网络的计算速度的情况,该方法可以由卷积神经网络确定装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如配置于计算机或移动终端等中。如图2所示,该方法包括如下步骤:
[0074]
步骤2010、获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵。
[0075]
步骤2020、根据预设Winograd变换参数确定原始权值变换矩阵和原始输入神经元变换矩阵,原始权值变换矩阵的行数和原始输入神经元变换矩阵的行数相等。
[0076]
步骤2030、判断根据原始输入神经元变换矩阵对量化输入神经元矩阵进行Winograd变换的过程中是否出现数据溢出,若出现数据溢出,则执行步骤2040;若未出现数据溢出,则执行步骤2050。i=为小于或等于n的正整数,n为所述原始输入神经元变换矩阵的行数。
[0077]
步骤2040、将原始输入神经元变换矩阵中第i行的多个元素值分别乘以预设比例值,得到原始输入神经元变换矩阵中第i行新的多个元素值,并将原始权值变换矩阵中第i行的多个元素值分别除以预设比例值,得到原始权值变换矩阵中第i行新的多个元素值,预设比例值小于1。
[0078]
步骤2050、保持原始输入神经元变换矩阵中第i行的多个元素值不变,以及,保持原始权值变换矩阵中第i行的多个元素值不变。
[0079]
步骤2060、生成目标输入神经元变换矩阵和目标权值变换矩阵。
[0080]
步骤2070、根据目标权值变换矩阵,对原始权值矩阵进行Winograd变换,得到Winograd变换权值矩阵。
[0081]
步骤2080、对Winograd变换权值矩阵进行量化处理,得到目标权值矩阵。
[0082]
步骤2090、对原始输入神经元矩阵进行量化处理,得到量化输入神经元矩阵。
[0083]
步骤2100、根据目标输入神经元变换矩阵,对量化输入神经元矩阵进行Winograd变换,得到目标输入神经元矩阵。
[0084]
步骤2110、根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵。
[0085]
在本申请的实施例中,步骤2070-步骤2080与步骤2090-步骤2100可以同 步执行,也可以先依次执行步骤2070-步骤2080,再依次执行步骤2090-步骤2100,还可以先依次执行步骤2090-步骤2100,再依次执行步骤2070-步骤2080。执行顺序,可根据实际情况进行确定,在此不作限定。
[0086]
本实施例的技术方案,通过获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵,对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵,根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵,实现了通过Winograd变换降低卷积神经网络的时间复杂度,以及通过量化处理降低卷积神经网络的数据位宽,进而提高了卷积神经网络的计算速度。
[0087]
图3为本申请实施例提供的一种卷积神经网络处理装置的结构示意图,本实施例可适用于提高卷积神经网络的计算速度的情况,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如配置于计算机或移动终端等中。如图3所示,该装置包括:
[0088]
原始矩阵获取模块310,设置为获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵。
[0089]
目标矩阵生成模块320,设置为对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵。
[0090]
输出神经元矩阵生成模块330,设置为根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵。
[0091]
本实施例的技术方案,通过获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵,对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵,根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵,实现了通过Winograd变换降低卷积神经网络的时间复杂度,以及通过量化处理降低卷积神经网络的数据位宽,进而提高了卷积神经网络的计算速度。
[0092]
图4为本申请实施例提供的一种设备的结构示意图。图4示出了适于用来实现本实施方式的示例性设备412的框图。如图4所示,设备412以通用计算设备的形式表现。设备412的组件可以包括但不限于:一个或者多个处理器416,系统存储器428,连接于不同系统组件(包括系统存储器428和处理器416)的总线418。系统存储器428可以包括易失性存储器形式的计算机系统可读介质, 例如随机存取存储器(Random Access Memory,RAM)730和/或高速缓存存储器432。仅作为举例,存储系统434可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。具有一组(至少一个)程序模块442的程序/实用工具440,可以存储在例如存储器428中。设备412也可以与一个或多个外部设备414(例如键盘、指向设备、显示器424等)通信。这种通信可以通过输入/输出(Input/Output,I/O)接口422进行。并且,设备412还可以通过网络适配器420与一个或者多个网络(例如局域网(Local Area Network,LAN),广域网(Wide Area Network,WAN)和/或公共网络,例如因特网)通信。处理器416通过运行存储在系统存储器428中的程序,从而执行各种功能应用以及数据处理,例如实现本申请实施例所提供的一种卷积神经网络处理方法,包括:获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵。对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵。根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵。
[0093]
本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,该程序被处理器执行时实现如本申请实施例所提供的一种卷积神经网络处理方法,该方法包括:获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵。对原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵。根据目标权值矩阵和目标输入神经元矩阵,得到卷积神经网络的输出神经元矩阵。

权利要求书

[权利要求 1]
一种卷积神经网络处理方法,包括: 获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵; 对所述原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对所述原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵; 根据所述目标权值矩阵和所述目标输入神经元矩阵,得到所述卷积神经网络的输出神经元矩阵。
[权利要求 2]
根据权利要求1所述的方法,其中,所述对所述原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,包括: 获取目标权值变换矩阵; 根据所述目标权值变换矩阵,对所述原始权值矩阵进行Winograd变换,得到Winograd变换权值矩阵; 对所述Winograd变换权值矩阵进行量化处理,得到所述目标权值矩阵。
[权利要求 3]
根据权利要求2所述的方法,其中,所述对所述原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵,包括: 获取目标输入神经元变换矩阵; 对所述原始输入神经元矩阵进行量化处理,得到量化输入神经元矩阵; 根据所述目标输入神经元变换矩阵,对所述量化输入神经元矩阵进行Winograd变换,得到所述目标输入神经元矩阵。
[权利要求 4]
根据权利要求3所述的方法,其中,所述目标权值变换矩阵和所述目标输入神经元变换矩阵通过如下方式确定: 根据预设Winograd变换参数确定原始权值变换矩阵和原始输入神经元变换矩阵,所述原始权值变换矩阵的行数和所述原始输入神经元变换矩阵的行数相等; 在根据所述原始输入神经元变换矩阵对所述量化输入神经元矩阵进行Winograd变换的过程中出现数据溢出的情况下,将所述原始输入神经元变换矩阵中所述数据对应的第i行的多个元素值分别乘以预设比例值,得到所述目标输入神经元变换矩阵,并将所述原始权值变换矩阵中第i行的多个元素值分别除以所述预设比例值,得到所述目标权值变换矩阵,所述预设比例值小于1,i为小于或等于n的正整数,n为所述原始输入神经元变换矩阵的行数。
[权利要求 5]
根据权利要求3或4所述的方法,其中,所述对所述原始输入神经元矩 阵进行量化处理,得到量化输入神经元矩阵,包括: 将所述原始输入神经元矩阵中多个元素值分别加上预设调整值,得到调整后的原始输入神经元矩阵; 对所述调整后的原始输入神经元矩阵向零取整,得到量化输入神经元矩阵。
[权利要求 6]
根据权利要求1-5任一所述的方法,其中,所述目标权值矩阵中多个元素的取值范围均为[-127,127]。
[权利要求 7]
根据权利要求1-6任一所述的方法,其中,所述目标输入神经元矩阵中多个元素的取值范围均为[0,127]。
[权利要求 8]
一种卷积神经网络处理装置,包括: 原始矩阵获取模块,设置为获取卷积神经网络的原始权值矩阵和原始输入神经元矩阵; 目标矩阵生成模块,设置为对所述原始权值矩阵依次进行Winograd变换和量化处理,得到目标权值矩阵,以及,对所述原始输入神经元矩阵依次进行量化处理和Winograd变换,得到目标输入神经元矩阵; 输出神经元矩阵生成模块,设置为根据所述目标权值矩阵和所述目标输入神经元矩阵,得到所述卷积神经网络的输出神经元矩阵。
[权利要求 9]
一种设备,包括: 至少一个处理器; 存储器,设置为存储至少一个程序; 当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1-7任一所述的方法。
[权利要求 10]
一种计算机可读存储介质,存储有计算机程序,所述程序被处理器执行时实现如权利要求1-7任一所述的方法。

附图

[ 图 1]  
[ 图 2]  
[ 图 3]  
[ 图 4]