一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

卷积神经网络的运算方法及相关设备

2022-04-30 02:37:52 来源:中国专利 TAG:


1.本技术涉及人工智能技术领域,尤其涉及一种卷积神经网络的运算方法及相关设备。


背景技术:

2.矩阵乘加计算占据卷积神经网络(convolution neural network,cnn)整个计算量的90%以上,加速矩阵乘加计算是加速卷积神经网络的推理和训练的主要手段。将高比特数据格式的数据采用低比特数据格式来表示,能够有效减小计算量、提高计算效率。现有技术中,常采用均匀量化或分组量化的方法将高比特数据格式的数据转换成低比特数据格式表示。
3.然而,若采用均匀量化方法对高比特数据格式的数据进行量化,均匀量化带来的量化误差较大,会使得在卷积神经网络的训练过程中无法训练得到收敛目标解;若采用分组量化的方法对高比特数据格式的数据进行量化,虽然分组量化带来的量化误差较小,但分组量化引入了浮点乘法计算,由于浮点计算的代价较大,这与量化减小计算量、提高计算效率的初衷相违背。因此,如何通过量化降低卷积神经网络的计算量、提高计算效率仍是一个重大难题。


技术实现要素:

4.本技术实施例公开了一种卷积神经网络的运算方法及相关设备,能够有效降低卷积神经网络的计算量、提高计算效率。
5.本技术实施例第一方面公开了一种卷积神经网络的运算装置,装置包括通信连接的浮点算术逻辑单元和卷积模块;浮点算术逻辑单元,用于根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组,其中,cin个第一量化因子为浮点数,cin个第一量化因子的尾数相同,cin个第一量化因子与cin个通道一一对应,cin为正整数;浮点算术逻辑单元,还用于对目标卷积核对应的第一权重参数进行量化以得到第二权重参数;卷积模块,用于将cin个数据组和第二权重参数进行卷积计算;以及将卷积计算后的结果进行移位计算以得到运算结果。本技术实施例中,对于单个卷积核的运算而言,在对输入数据进行分组量化时选择相同尾数的第一量化因子,使得卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,从而大大降低了单个卷积核对应的计算量、提高了单个卷积核的计算效率;且相比于均匀量化,采用本实施例提供的量化方法,在降低计算量、提高计算效率的同时,还可以有效降低量化误差,使得在卷积神经网络的训练过程中可以训练得到收敛目标解,实现低比特训练得到收敛;对于整个卷积核神经网络而言,若整个卷积核神经网络的所有卷积运算均采用本技术实施例提供的量化方法,则可以有效降低整个卷积神经网络的计算量、提高整个卷积神经网络的计算效率。
6.在一种示例性的实施方式中,卷积模块包括:低比特乘法器,用于将cin个数据组和第二权重参数进行卷积计算,其中,卷积计算后的结果为cin个整型数;浮点加法器,用于
针对cin个整型数中的每个整型数,执行以下步骤,以得到cin个浮点数:根据第一系数对目标整型数进行移位计算以得到目标整型数对应的浮点数,其中,目标整型数为cin个整型数中的任意一个,第一系数根据第一目标量化因子的指数确定,第一目标量化因子为与第一目标通道对应的第一量化因子,第一目标通道为与目标整型数对应的通道;浮点加法器,还用于对cin个浮点数进行累加计算。本示例中,在分组量化后的卷积运算中,先将cin个数据组和第二权重参数进行卷积计算,也即根据量化后的第二权重参数对量化后的cin个数据组分别进行乘累加计算,得到cin个整型数;然后针对这cin个整型数中的每个整型数进行移位计算,也即针对这cin个整型数中的每个整型数,乘以根据该整型数对应的第一量化因子的指数确定的第一系数,得到该整型数对应的浮点数,从而根据cin个整型数可以计算得到cin个浮点数;对这cin个浮点数进行累加计算,再根据这cin个浮点数的累加计算结果计算运算结果;由于cin个第一量化因子的尾数相同,因此在运算过程中可以将第一量化因子的尾数和第二量化因子提出到cin个浮点数累加之前,最后将其再乘以cin个浮点数的累加结果即可得到卷积运算结果,也即将分组量化后的卷积运算中的浮点数与整型数的乘法运算,转换成了整型数的移位运算,从而能够有效降低计算量、提高计算效率。
7.在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:根据第一量化因子的尾数、第二量化因子和累加计算的结果计算得到运算结果,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。本示例中,先对这cin个浮点数进行累加计算,再将累加计算结果乘以第一量化因子的尾数、第二量化因子,从而得到运算结果;由于cin个第一量化因子的尾数相同,因此在运算过程中可以将第一量化因子的尾数和第二量化因子提出到cin个浮点数累加之前,最后将其再乘以cin个浮点数的累加结果即可得到卷积运算结果,也即将分组量化后的卷积运算中的浮点数与整型数的乘法运算,转换成了整型数的移位运算,从而能够有效降低计算量、提高计算效率。
8.在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:在对目标卷积核对应的第一权重参数进行量化以得到第二权重参数之前;获取目标卷积核对应的第一权重参数中的最大权重参数;根据最大权重参数和量化位宽计算得到第二量化因子,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。本示例中,对于单个卷积核(也即目标卷积核)而言,获取该卷积核对应的第一权重参数中的最大权重参数,再根据该卷积核对应的最大权重参数和量化位宽计算得到该卷积核对应的第二量化因子;从而对于所有的卷积核,均可以计算得到对应的第二量化因子,有利于采用不同的第二量化因子对不同卷积核的第一权重参数进行量化,减小权重量化的量化误差。
9.在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:在根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组之前;获取第二目标通道的输入数据中的最大数据参数,其中,第二目标通道为cin个通道中的任意一个;根据第二目标通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子;根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子。本示例中,对于单个通道(也即第二目标通道)的输入数据而言,获取该通道的输入数据中的最大数据参数,然后根据通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子,再根据第二目标量化因子
从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子;因此对于cin个通道中的每个通道的输入数据,均可以计算得到对应的第二目标量化因子,并依据该第二目标量化因子从预设量化因子集合中选择到对应的第三目标量化因子,从而可以得到cin个第一量化因子,也即每个通道对应一个第一量化因子;从而有利于采用cin个第一量化因子对cin个通道的输入数据进行量化,也即采用不同的第一量化因子对不同通道的输入数据进行量化,减小数据量化的量化误差。
10.在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:在根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子之前;获取cin个通道的输入数据中的最大数据参数;根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子;根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,其中,cin个第二系数与cin个预设量化因子一一对应,cin个预设量化因子构成预设量化因子集合。本示例中,获取cin个通道的输入数据中的最大数据参数,然后根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子,再根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,由这cin个预设量化因子构成预设量化因子集合;由于这cin个预设量化因子是同一个第四目标量化因子与cin个不同的第二系数分别计算出的,因此这cin个预设量化因子的尾数是相同的,而用于对输入数据进行分组量化的cin个第一量化因子是从这cin个预设量化因子中选择得到的,故cin个第一量化因子的尾数是相同的,从而有利于将卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,降低计算量、提高计算效率。
11.本技术实施例第二方面公开了一种卷积神经网络的运算方法,包括:根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组,其中,cin个第一量化因子为浮点数,cin个第一量化因子的尾数相同,cin个第一量化因子与cin个通道一一对应,cin为正整数;对目标卷积核对应的第一权重参数进行量化以得到第二权重参数;将cin个数据组和第二权重参数进行卷积计算;将卷积计算后的结果进行移位计算以得到运算结果。本技术实施例中,对于单个卷积核的运算而言,在对输入数据进行分组量化时选择相同尾数的第一量化因子,使得卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,从而大大降低了单个卷积核对应的计算量、提高了单个卷积核的计算效率;且相比于均匀量化,采用本实施例提供的量化方法,在降低计算量、提高计算效率的同时,还可以有效降低量化误差,使得在卷积神经网络的训练过程中可以训练得到收敛目标解,实现低比特训练得到收敛;对于整个卷积核神经网络而言,若整个卷积核神经网络的所有卷积运算均采用本技术实施例提供的量化方法,则可以有效降低整个卷积神经网络的计算量、提高整个卷积神经网络的计算效率。
12.在一种示例性的实施方式中,卷积计算后的结果为cin个整型数,将卷积计算后的结果进行移位计算以得到运算结果,包括:针对cin个整型数中的每个整型数,执行以下步骤,以得到cin个浮点数:根据第一系数对目标整型数进行移位计算以得到目标整型数对应的浮点数,其中,目标整型数为cin个整型数中的任意一个,第一系数根据第一目标量化因子的指数确定,第一目标量化因子为与第一目标通道对应的第一量化因子,第一目标通道
为与目标整型数对应的通道;根据第一量化因子的尾数、第二量化因子和cin个浮点数计算得到运算结果,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。本示例中,在分组量化后的卷积运算中,先将cin个数据组和第二权重参数进行卷积计算,也即根据量化后的第二权重参数对量化后的cin个数据组分别进行乘累加计算,得到cin个整型数;然后针对这cin个整型数中的每个整型数进行移位计算,也即针对这cin个整型数中的每个整型数,乘以根据该整型数对应的第一量化因子的指数确定的第一系数,得到该整型数对应的浮点数,从而根据cin个整型数可以计算得到cin个浮点数;再根据第一量化因子的尾数、第二量化因子和cin个浮点数计算得到运算结果,其中,第二量化因子为用于对第一权重参数进行量化的量化因子,也即先对这cin个浮点数进行累加计算,再将累加计算结果乘以第一量化因子的尾数、第二量化因子,从而得到运算结果;由于cin个第一量化因子的尾数相同,因此在运算过程中可以将第一量化因子的尾数和第二量化因子提出到cin个浮点数累加之前,最后将其再乘以cin个浮点数的累加结果即可得到卷积运算结果,也即将分组量化后的卷积运算中的浮点数与整型数的乘法运算,转换成了整型数的移位运算,从而能够有效降低计算量、提高计算效率。
13.在一种示例性的实施方式中,在对目标卷积核对应的第一权重参数进行量化以得到第二权重参数之前,该方法还包括:获取目标卷积核对应的第一权重参数中的最大权重参数;根据最大权重参数和量化位宽计算得到第二量化因子,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。本示例中,对于单个卷积核(也即目标卷积核)而言,获取该卷积核对应的第一权重参数中的最大权重参数,再根据该卷积核对应的最大权重参数和量化位宽计算得到该卷积核对应的第二量化因子;从而对于所有的卷积核,均可以计算得到对应的第二量化因子,有利于采用不同的第二量化因子对不同卷积核的第一权重参数进行量化,减小权重量化的量化误差。
14.在一种示例性的实施方式中,在根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组之前,该方法还包括:获取第二目标通道的输入数据中的最大数据参数,其中,第二目标通道为cin个通道中的任意一个;根据第二目标通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子;根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子。本示例中,对于单个通道(也即第二目标通道)的输入数据而言,获取该通道的输入数据中的最大数据参数,然后根据通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子,再根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子;因此对于cin个通道中的每个通道的输入数据,均可以计算得到对应的第二目标量化因子,并依据该第二目标量化因子从预设量化因子集合中选择到对应的第三目标量化因子,从而可以得到cin个第一量化因子,也即每个通道对应一个第一量化因子;从而有利于采用cin个第一量化因子对cin个通道的输入数据进行量化,也即采用不同的第一量化因子对不同通道的输入数据进行量化,减小数据量化的量化误差。
15.在一种示例性的实施方式中,在根据第二目标量化因子从预设量化因子集合中选
择出第三目标量化因子之前,该方法还包括:获取cin个通道的输入数据中的最大数据参数;根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子;根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,其中,cin个第二系数与cin个预设量化因子一一对应,cin个预设量化因子构成预设量化因子集合。本示例中,获取cin个通道的输入数据中的最大数据参数,然后根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子,再根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,由这cin个预设量化因子构成预设量化因子集合;由于这cin个预设量化因子是同一个第四目标量化因子与cin个不同的第二系数分别计算出的,因此这cin个预设量化因子的尾数是相同的,而用于对输入数据进行分组量化的cin个第一量化因子是从这cin个预设量化因子中选择得到的,故cin个第一量化因子的尾数是相同的,从而有利于将卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,降低计算量、提高计算效率。
16.本技术实施例第三方面公开了一种计算机装置,包括处理器、存储器、通信接口,以及一个或多个程序,上述一个或多个程序被存储在上述存储器中,并且被配置由上述处理器执行,上述程序包括用于执行如上述第二方面中任一项所述的方法中的步骤的指令。
17.本技术实施例第四方面公开了一种芯片,其特征在于,包括:处理器,用于从存储器中调用并运行计算机程序,使得安装有上述芯片的设备执行如上述第一方面中任一项上述的方法。
18.本技术实施例第五方面公开了一种计算机可读存储介质,其存储用于电子数据交换的计算机程序,其中,上述计算机程序使得计算机执行如上述第二方面中任一项所述的方法。
19.本技术实施例第六方面公开了一种计算机程序产品,上述计算机程序产品使得计算机执行如上述第二方面中任一项所述的方法。
附图说明
20.以下对本技术实施例用到的附图进行介绍。
21.图1是本技术实施例提供的一种卷积神经网络的训练流程示意图;
22.图2是本技术实施例提供的一种推理过程中的量化示意图;
23.图3是本技术实施例提供的一种均匀量化原理图;
24.图4是本技术实施例提供的另一种均匀量化原理图;
25.图5是本技术实施例提供的一种不同通道的最大值分布情况示意图;
26.图6是本技术实施例提供的一种卷积计算示意图;
27.图7是本技术实施例提供的一种低比特训练系统的架构示意图;
28.图8是本技术实施例提供的一种卷积神经网络的运算装置的结构示意图;
29.图9是本技术实施例提供的一种卷积神经网络的运算方法的流程示意图;
30.图10是本技术实施例提供的另一种卷积计算示意图;
31.图11是本技术实施例提供的另一种卷积神经网络的训练流程示意图;
32.图12是本技术实施例提供的一种计算机装置的结构示意图。
具体实施方式
33.下面结合本技术实施例中的附图对本技术实施例进行描述。
34.为了便于本领域技术人员理解本技术,首先在此对本技术中的部分用语进行解释说明,以及对本技术实施例涉及的相关技术知识进行介绍。
35.低比特:当前神经网络计算中的主要数据格式是fp32和fp16,低比特通常指int8/int4的数据格式。
36.量化:神经网络的计算过程中,将浮点数据格式转换为整型数据格式,从而将浮点乘法转为整数乘法,可以更快速更高效的完成计算;量化过程通常是将浮点数除以一个量化因子,再四舍五入到最接近的整型数。
37.反量化:量化中整型数的乘法计算完成后,将整型数据结果转换为浮点数的过程,这样保证了整型数的乘法与浮点乘法在数学上等价;反量化的过程通常是将整型数乘以量化因子,得到浮点数。
38.卷积神经网络是当前深度学习领域应用最为广泛的技术之一,通常分为训练(train)和推理(inference)两个环节。以imagenet数据集分类任务为例,训练过程可分为前向传播和反向传播两个过程;前向传播中,训练集图片输入到卷积神经网络,在卷积神经网络中经过卷积层和全连接层处理,输出图片所属类别的概率,再与图片实际标签对比得到误差;反向传播中,误差经过反向传播到卷积神经网络的各层,进而计算得到各层参数的梯度,通过优化器优化卷积神经网络的权重参数。推理过程以训练为基础,将待分类的图片输入到训练好的卷积神经网络模型中,输出图片所属类别的概率。
39.请参阅图1,图1是本技术实施例提供的一种卷积神经网络的训练流程示意图。如图1所示,前向传播和反向传播都用到了大量的矩阵计算;前向传播时,各层输入数据(a
l
)与权重参数(w
l
)相乘得到输出数据,传给下层;反向传播时,本层回传误差(δ
cl
)与本层权重参数(w
l
)相乘得到上层的回传误差,本层回传误差(δ
cl
)与本层数据(a
l
)相乘得到本层权重参数的梯度(δw
l
)。
40.矩阵乘加计算占据卷积神经网络整个计算量的90%以上,因此加速矩阵计算是加速卷积神经网络推理和训练的主要手段。一种加速矩阵计算的主要方法就是将高比特的数据格式(如fp32)改为低比特数据格式(如fp16/fp8/int8)表示,低比特数据格式能够有效提升数据搬移效率,减少内存访问,从而带来更高的计算效率。这种将高精度数据格式转换为低精度数据格式的方法业界统称为量化(quantization),当前主流的训练和推理数据格式为fp32,量化为更低比特的fp16甚至fp8/int8/int4来推理和训练,业界还在努力探索中。
41.在推理过程对数据和权重进行量化,是普遍采用的策略。例如,将fp32的数据格式转换为int16或int8,可极大的加速推理过程。
42.请参阅图2,图2是本技术实施例提供的一种推理过程中的量化示意图。如图2所示,在量化之前,数据矩阵和权重矩阵都是浮点数(float)的,推理过程是浮点数与浮点数的矩阵计算;在对数据矩阵和权重矩阵进行量化以后,数据矩阵和权重矩阵均为整型数(int),推理过程是整型数与整型数的矩阵计算,从而可以加速推理过程。
43.当前量化方法多采用均匀量化,或称线性量化。
44.请参阅图3,图3是本技术实施例提供的一种均匀量化原理图。如图3所示,以int8
量化为例,均匀量化将[-max,max]范围内的数据x映射到[-127,127]之间,映射过程可用公式(1)和公式(2)表示。
[0045][0046][0047]
在公式(1)和公式(2)中,scale为量化因子,表示从浮点数映射到int数的放大系数;round为四舍五入计算,将映射后的浮点值近似到最接近的整数,也是量化带来误差的根本原因,后文统称为舍入误差。
[0048]
均匀量化中,通常情况下卷积神经网络的某一层的权重参数和数据用统一的量化因子,以sw和sa分别表示,该层的矩阵计算可用公式(3)、公式(4)和公式(5)表示。
[0049][0050][0051]
wa=swsa(w
qaq
)
ꢀꢀꢀꢀ
(5)
[0052]
在公式(3)、公式(4)和公式(5)中,w表示权重参数;wq表示量化后的权重参数;a表示数据;aq表示量化后的数据;wa表示量化前的权重参数和量化前的数据参数相乘,约等于等号右边的结果,一般可以认为该等式为量化过程需要满足的条件。
[0053]
因为量化误差的存在,选择数据的最大值max来计算量化因子并非最佳方案,而是存在一个最优的max'使得量化后对结果的影响尽量小。
[0054]
请参阅图4,图4是本技术实施例提供的另一种均匀量化原理图。如图4所示,在量化过程中,减小量化数据的范围,比如在0.6max到max范围内搜索最优的max'的值,可以有效减小量化带来的舍入误差,使得量化后的精度损失尽量小。与之带来的是不在[-max',max']范围的数据直接舍去,带来一定的截断误差。
[0055]
现有量化技术大多用在推理场景,例如int8/int4,甚至2bit、1bit的推理都有方案,对于训练场景的研究却停留在int8,而int4的训练场景尚无任何解决方案。究其原因,直接把int4推理的量化方法迁移到训练场景,训练中除了需要量化前向传播中的矩阵计算,还需要量化反向传播的矩阵计算,此时均匀量化方法带来的量化误差使得计算出的权重梯度误差较大,无法使卷积神经网络训练到收敛目标解。
[0056]
请参阅图5,图5是本技术实施例提供的一种不同通道的最大值分布情况示意图。如图5所示,图5展示了深度残差网络resnet18中一层神经网络最大值在不同通道(channel)的分布情况,可以看到不同通道的差异性较大,如果全部通道用一个量化因子,量化引起的舍入误差将导致训练过程不收敛。
[0057]
因此,可以在卷积神经网络的各层量化中,权重参数和数据参数选取多个量化因子,以此来降低量化误差,也即申请实施例提出的分组量化(group-wise quantization)。分组量化将需要量化的参数按照不同维度分组,每组选择最适合的量化因子,从而能够减小量化误差。
[0058]
请参阅图6,图6是本技术实施例提供的一种卷积计算示意图。如图6所示,在分组
量化过程中,输入数据矩阵(feature map)的维度为batchsize
×
cin
×h×
w,权重矩阵(weight)的维度为cout
×
cin
×
hk
×
wk,根据卷积计算原理得到输出数据矩阵(feature map)的维度为batchsize
×
cout
×h×
w;其中,batchsize表示一次训练所选取的样本数,h表示输入数据的高(height),w表示输入数据的宽,hk表示卷积核(kernel)的高,wk表示卷积核的宽,下标k表示卷积核,cin、cout表示通道数。其中,一个cout表示一个卷积核,有多个个cout,则在图6中有多少个正方体,每个正方体就是一个卷积核,有cout个正方体表示有cout个卷积核。
[0059]
根据不同的分组方法,分组量化可以分为以下三种:
[0060]
第一种,batch quant:数据矩阵(feature map)按照batchsize维度分组,每张图片计算一个量化因子。
[0061]
第二种,channel quant:数据矩阵(feature map)按照cin维度分组,每个通道计算一个量化因子。
[0062]
第三种,kernel quant:权重矩阵(weight)按照cout维度分组,每个卷积核计算一个量化因子。
[0063]
单个卷积核进行一次卷积的过程如公式(6)所示,其中,单个卷积核是指卷积神经网络的第n层卷积层与第n 1层卷积层之间的若干个卷积核中的其中一个。
[0064][0065]
在公式(6)中,conv(w,a)表示卷积计算结果;通道数是从1到cin;w
ijk
表示第i通道第j行第k列权重;a
ijk
表示第i通道第j行第k列像素。
[0066]
若数据矩阵采用channel quant分组量化方法,每个通道采用一个量化因子;而权重矩阵采用kernel quant分组量化方法,则公式(6)可以变形为公式(7)。
[0067][0068]
在公式(7)中,sws
ai
是浮点数;是int整数乘法计算。公式(7)可以简写为公式(8)。
[0069][0070]
在公式(8)中,float代表浮点数;fix代表整型数(int),可以看到此时会引入浮点乘法计算。
[0071]
由上可知,分组量化尽管降低了量化误差,却不得不付出极大的计算代价,具体而言就是上述过程带来了浮点乘法计算,由于浮点计算的代价较大,这与量化减小计算量的初衷相违背。
[0072]
下面结合具体实施方式对本技术提供的技术方案进行详细的介绍。
[0073]
请参阅图7,图7是本技术实施例提供的一种低比特训练系统的架构示意图。如图7所示,该系统主要应用于卷积神经网络的低比特训练场景,具体为:将训练数据和用户模型
输入到系统中,并指定训练过程中对训练数据进行量化的量化位宽;分别对数据和权重进行量化,得到量化后的数据和量化后的权重;再根据量化后的数据和量化后的权重进行前向计算和反向计算,即可开始高效的进行模型的训练过程,最终得到低比特神经网络模型。
[0074]
请参阅图8,图8是本技术实施例提供的一种卷积神经网络的运算装置的结构示意图。如图8所示,该卷积神经网络的运算装置包括通信连接的浮点算术逻辑单元(float cache)和卷积(conv)模块;浮点算术逻辑单元,用于根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组,其中,cin个第一量化因子为浮点数,cin个第一量化因子的尾数相同,cin个第一量化因子与cin个通道一一对应,cin为正整数;浮点算术逻辑单元,还用于对目标卷积核对应的第一权重参数进行量化以得到第二权重参数;卷积模块,用于将cin个数据组和第二权重参数进行卷积计算;以及将卷积计算后的结果进行移位计算以得到运算结果。
[0075]
本技术实施例中,对于单个卷积核的运算而言,在对输入数据进行分组量化时选择相同尾数的第一量化因子,使得卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,从而大大降低了单个卷积核对应的计算量、提高了单个卷积核的计算效率;且相比于均匀量化,采用本实施例提供的量化方法,在降低计算量、提高计算效率的同时,还可以有效降低量化误差,使得在卷积神经网络的训练过程中可以训练得到收敛目标解,实现低比特训练得到收敛;对于整个卷积核神经网络而言,若整个卷积核神经网络的所有卷积运算均采用本技术实施例提供的量化方法,则可以有效降低整个卷积神经网络的计算量、提高整个卷积神经网络的计算效率。
[0076]
在一种示例性的实施方式中,卷积模块包括:低比特乘法器(low-bit multiplier),用于将cin个数据组和第二权重参数进行卷积计算,其中,卷积计算后的结果为cin个整型数;浮点加法器(float adder),用于针对cin个整型数中的每个整型数,执行以下步骤,以得到cin个浮点数:根据第一系数对目标整型数进行移位计算以得到目标整型数对应的浮点数,其中,目标整型数为cin个整型数中的任意一个,第一系数根据第一目标量化因子的指数确定,第一目标量化因子为与第一目标通道对应的第一量化因子,第一目标通道为与目标整型数对应的通道;浮点加法器,还用于对cin个浮点数进行累加计算。
[0077]
需要说明的是,该卷积神经网络的运算装置与现有的卷积神经网络的运算装置相比,在卷积模块中增加了浮点加法器用于移位计算以及浮点数的累加。
[0078]
本示例中,在分组量化后的卷积运算中,先将cin个数据组和第二权重参数进行卷积计算,也即根据量化后的第二权重参数对量化后的cin个数据组分别进行乘累加计算,得到cin个整型数;然后针对这cin个整型数中的每个整型数进行移位计算,也即针对这cin个整型数中的每个整型数,乘以根据该整型数对应的第一量化因子的指数确定的第一系数,得到该整型数对应的浮点数,从而根据cin个整型数可以计算得到cin个浮点数;对这cin个浮点数进行累加计算,再根据这cin个浮点数的累加计算结果计算运算结果;由于cin个第一量化因子的尾数相同,因此在运算过程中可以将第一量化因子的尾数和第二量化因子提出到cin个浮点数累加之前,最后将其再乘以cin个浮点数的累加结果即可得到卷积运算结果,也即将分组量化后的卷积运算中的浮点数与整型数的乘法运算,转换成了整型数的移位运算,从而能够有效降低计算量、提高计算效率。
[0079]
在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:根据第一量化因子的
尾数、第二量化因子和累加计算的结果计算得到运算结果,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。
[0080]
本示例中,先对这cin个浮点数进行累加计算,再将累加计算结果乘以第一量化因子的尾数、第二量化因子,从而得到运算结果;由于cin个第一量化因子的尾数相同,因此在运算过程中可以将第一量化因子的尾数和第二量化因子提出到cin个浮点数累加之前,最后将其再乘以cin个浮点数的累加结果即可得到卷积运算结果,也即将分组量化后的卷积运算中的浮点数与整型数的乘法运算,转换成了整型数的移位运算,从而能够有效降低计算量、提高计算效率。
[0081]
在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:在对目标卷积核对应的第一权重参数进行量化以得到第二权重参数之前;获取目标卷积核对应的第一权重参数中的最大权重参数;根据最大权重参数和量化位宽计算得到第二量化因子,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。
[0082]
本示例中,对于单个卷积核(也即目标卷积核)而言,获取该卷积核对应的第一权重参数中的最大权重参数,再根据该卷积核对应的最大权重参数和量化位宽计算得到该卷积核对应的第二量化因子;从而对于所有的卷积核,均可以计算得到对应的第二量化因子,有利于采用不同的第二量化因子对不同卷积核的第一权重参数进行量化,减小权重量化的量化误差。
[0083]
在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:在根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组之前;获取第二目标通道的输入数据中的最大数据参数,其中,第二目标通道为cin个通道中的任意一个;根据第二目标通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子;根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子。
[0084]
本示例中,对于单个通道(也即第二目标通道)的输入数据而言,获取该通道的输入数据中的最大数据参数,然后根据通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子,再根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子;因此对于cin个通道中的每个通道的输入数据,均可以计算得到对应的第二目标量化因子,并依据该第二目标量化因子从预设量化因子集合中选择到对应的第三目标量化因子,从而可以得到cin个第一量化因子,也即每个通道对应一个第一量化因子;从而有利于采用cin个第一量化因子对cin个通道的输入数据进行量化,也即采用不同的第一量化因子对不同通道的输入数据进行量化,减小数据量化的量化误差。
[0085]
在一种示例性的实施方式中,该浮点算术逻辑单元,还用于:在根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子之前;获取cin个通道的输入数据中的最大数据参数;根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子;根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,其中,cin个第二系数与cin个预设量化因子一一对应,cin个预设量化因子构成预设量化因子
集合。
[0086]
本示例中,获取cin个通道的输入数据中的最大数据参数,然后根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子,再根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,由这cin个预设量化因子构成预设量化因子集合;由于这cin个预设量化因子是同一个第四目标量化因子与cin个不同的第二系数分别计算出的,因此这cin个预设量化因子的尾数是相同的,而用于对输入数据进行分组量化的cin个第一量化因子是从这cin个预设量化因子中选择得到的,故cin个第一量化因子的尾数是相同的,从而有利于将卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,降低计算量、提高计算效率。
[0087]
在一种示例性的实施方式中,该卷积神经网络的运算装置还包括负载(load)模块,该负载模块与卷积模块和浮点算术逻辑单元分别通信连接;该负载模块,用于从外部存储模块(例如ddr)获取包含cin个通道的输入数据和目标卷积核对应的第一权重参数,其中,该包含cin个通道的输入数据为卷积层n的输入数据,卷积层n为卷积神经网络的任意一个卷积层,目标卷积核为卷积层n与卷积层n 1之间的卷积核中的任意一个,卷积层n 1的输入数据为卷积层n的输出数据;
[0088]
在一种示例性的实施方式中,该卷积神经网络的运算装置还包括:保存(save)模块,用于将上述运算结果存储到外部存储模块。
[0089]
其中,该卷积神经网络的运算装置的实际产品可以是低比特训练芯片或者集成在人工智能芯片中的低比特训练模块,其可部署在可用于训练的服务器或终端设备上。
[0090]
在一种示例性的实施方式中,该卷积神经网络的运算装置还包括高速缓存模块(cache),该高速缓存模块与负载模块、保存模块、卷积模块、浮点算术逻辑单元分别通信连接,该高速缓存模块,用于缓存包含cin个通道的输入数据、目标卷积核对应的第一权重参数、cin个第一量化因子和第二量化因子、cin个数据组、第二权重参数。
[0091]
在一种示例性的实施方式中,该高速缓存模块包括:浮点高速缓存单元(float cache),用于缓存包含cin个通道的输入数据、目标卷积核对应的第一权重参数、cin个第一量化因子和第二量化因子;定点高速缓存单元(fix cache),用于缓存cin个数据组、第二权重参数。
[0092]
具体地,负载模块负责将数据从外部存储器中搬运到缓存高速缓存模块中,保存模块负责将运算结果存入外部存储器,定点高速缓存单元和浮点高速缓存单元分别缓存整型数据和浮点数据,卷积模块完成整型数(int)乘法、部分和累加等矩阵计算,浮点算术逻辑单元完成批归一化(batch normalization,bn)层、非线性层等非矩阵计算。
[0093]
需要说明的是,在图8所描述的装置实施例中的术语、解释以及各模块的各个操作的实现,请参阅图9所示的方法实施例中的相关描述。
[0094]
请参见图9,图9是本技术实施例提供的一种卷积神经网络的运算方法的流程示意图,该方法由计算机装置执行,该方法包括但不限于如下步骤。
[0095]
步骤901、根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组,其中,cin个第一量化因子为浮点数,cin个第一量化因子的尾数相同,cin个第一量化因子与cin个通道一一对应,cin为正整数。
[0096]
应理解,包含cin个通道的输入数据为卷积层n的输入数据,卷积层n为该卷积神经
网络的任意一个卷积层。其中,卷积层n的输入数据为卷积核n的输入数据矩阵(feature map)中的多个样本中的任意一个。举例来说,若卷积层n的输入数据矩阵的维度为batchsize
×
cin
×h×
w,则卷积层n的输入数据为卷积层n的输入数据矩阵中的batchsize个样本中的任意一个样本。此外,对于浮点数,可以表示为尾数部分man和指数部分exp;而第一量化因子也可以分为尾数部分和指数部分,上述cin个第一量化因子的尾数是相同的。
[0097]
应理解,第一量化因子为数据参数对应的量化因子,输入数据在量化前为浮点数据格式,cin个数据组为量化后的数据,也即cin个数据组为整型数据格式。输入数据在分组量化时,数据参数(也即输入图像的像素点数据)按照卷积神经网络的通道进行分组,也即一个通道对应一个第一量化因子;对于卷积层n的输入数据存在cin个通道,每个通道对应一个第一量化因子,则cin个通道对应cin个第一量化因子;在对卷积层n的输入数据进行分组量化时,采用各通道对应的第一量化因子对各通道的数据进行量化,则每个通道对应一个量化后的数据组,从而cin个通道对应cin个数据组。
[0098]
具体地,对数据参数进行分组量化时,对于任一个卷积层n,该层的输入数据的维度为batchsize
×
cin
×h×
w,按照batchsize维度和cin维度进行分组,一共分为batchsize
×
cin组,每组分别求得一个数据量化因子,也即每组分别求得一个第一量化因子;而对于单个样本来说,该样本有cin个通道,那么将该样本的数据按照通道维度进行分组,一共分为cin组,cin组中的每组分别求得一个第一量化因子,一共有cin个第一量化因子,采用cin组中的每组对应的第一量化因子对该组的数据参数进行量化,故可以得到量化后的cin个数据组,从而将浮点数据格式的输入数据转换成了整型数据格式的输入数据。
[0099]
举例来说,对于单个样本来说,若该样本图像为rgb三个通道,按照通道维度进行分组也即按照r通道、g通道、b通道分为三个组,则r通道对应一个数据组、g通道对应一个数据组、b通道对应一个数据组。
[0100]
在一种示例性的实施方式中,在根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组之前,该方法还包括:获取第二目标通道的输入数据中的最大数据参数,其中,第二目标通道为cin个通道中的任意一个;根据第二目标通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子;根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子。
[0101]
具体地,在对输入数据进行分组量化时,按照通道维度进行分组,也即将该输入数据分成包含cin个通道的输入数据,对于cin个通道中的每个通道的输入数据,例如第i通道的输入数据,先确定第i通道对应的数据参数中的最大值,然后根据这第i通道对应的数据参数中的最大值和量化位宽计算一个第二目标量化因子,再从预设量化因子集合中选择与第二目标量化因子的差值的绝对值最小的预设量化因子作为第i通道对应的第一量化因子s
ai
。其中,第二目标量化因子的计算公式如公式(9)所示。
[0102][0103]
在公式(9)中,s

ai
表示第i通道对应的第二目标量化因子;max(ai)表示第i通道对应的数据参数中的最大值;n表示量化位宽,例如int8、int4等。
[0104]
为使每个通道对应的第一量化因子的尾数相同,根据s

ai
从下列预设量化因子集合中选择第i通道对应的第一量化因子s
ai

[0105][0106]
其中,上述集合中,s
a_max
表示根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子,也即第一量化因子的尾数。此时,不同通道对应的第一量化因子的倍数关系为2的n次方。
[0107]
本示例中,对于单个通道(也即第二目标通道)的输入数据而言,获取该通道的输入数据中的最大数据参数,然后根据通道的输入数据中的最大数据参数和量化位宽计算得到第二目标量化因子,再根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子,其中,第三目标量化因子为预设量化因子集合中与第二目标量化因子的差值的绝对值最小的预设量化因子,第三目标量化因子为与第二目标通道对应的第一量化因子;因此对于cin个通道中的每个通道的输入数据,均可以计算得到对应的第二目标量化因子,并依据该第二目标量化因子从预设量化因子集合中选择到对应的第三目标量化因子,从而可以得到cin个第一量化因子,也即每个通道对应一个第一量化因子;从而有利于采用cin个第一量化因子对cin个通道的输入数据进行量化,也即采用不同的第一量化因子对不同通道的输入数据进行量化,减小数据量化的量化误差。
[0108]
在一种示例性的实施方式中,在根据第二目标量化因子从预设量化因子集合中选择出第三目标量化因子之前,该方法还包括:获取cin个通道的输入数据中的最大数据参数;根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子;根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,其中,cin个第二系数与cin个预设量化因子一一对应,cin个预设量化因子构成预设量化因子集合。
[0109]
应理解,第四目标量化因子也即s
a_max
;其中,s
a_max
的计算公式如公式(10)所示。
[0110][0111]
在公式(10)中,max(a)表示输入数据中的所有数据参数的最大值,也即cin个通道的输入数据中的最大数据参数;n表示量化位宽。
[0112]
其中,cin个第二系数如下集合所示:
[0113][0114]
从而根据上述集合中的cin个第二系数和s
a_max
可以得到预设量化因子集合。
[0115]
本示例中,获取cin个通道的输入数据中的最大数据参数,然后根据cin个通道的输入数据中的最大数据参数和量化位宽计算得到第四目标量化因子,再根据第四目标量化因子和cin个第二系数计算得到cin个预设量化因子,由这cin个预设量化因子构成预设量化因子集合;由于这cin个预设量化因子是同一个第四目标量化因子与cin个不同的第二系数分别计算出的,因此这cin个预设量化因子的尾数是相同的,而用于对输入数据进行分组量化的cin个第一量化因子是从这cin个预设量化因子中选择得到的,故cin个第一量化因子的尾数是相同的,从而有利于将卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,降低计算量、提高计算效率。
[0116]
其中,对于第i通道对应的量化前的数据参数中的任意一个,在选择完第i通道对应的第一量化因子后,按照公式(11)完成数据参数从浮点数到整型数的量化。
[0117][0118]
在公式(11)中,表示第i通道对应的量化后的数据参数中的任意一个;ai表示第i通道对应的量化前的数据参数中的任意一个;s
ai
表示第i通道对应的第一量化因子。
[0119]
步骤902、对目标卷积核对应的第一权重参数进行量化以得到第二权重参数。
[0120]
在一种示例性的实施方式中,在对目标卷积核对应的第一权重参数进行量化以得到第二权重参数之前,该方法还包括:获取目标卷积核对应的第一权重参数中的最大权重参数;根据最大权重参数和量化位宽计算得到第二量化因子,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。
[0121]
具体地,在权重参数的分组量化时,对于卷积神经网络中的任一层卷积层,该层权重参数按照卷积核分组,每个卷积核计算一个权重量化因子;那么,每个卷积核对应的权重量化因子的计算公式如公式(12)所示。
[0122][0123]
在公式(12)中,sw表示任意一个卷积核对应的权重量化因子,也即任意一个卷积核对应的第二量化因子;max(w)表示任意一个卷积核对应的权重参数的最大值,也即任意一个卷积核对应的第一权重参数中的最大权重参数;n表示量化位宽。
[0124]
应理解,第二量化因子为权重参数对应的量化因子,第一权重参数为量化前的权重参数,也即第一权重参数为浮点数据格式;第二权重参数为量化后的权重参数,也即第二权重参数为整型数据格式。权重参数在分组量化时,权重参数按照卷积神经网络的卷积核进行分组,也即一个卷积核对应一个第二量化因子;对于单个卷积核来说,对应一个第二量化因子,从而目标卷积核对应一个第二量化因子;采用同一个第二量化因子分别对目标卷积核对应的第一权重参数进行量化,可以得到目标卷积核对应的第二权重参数。其中,目标卷积核为卷积层n与卷积层n 1之间的卷积核中的任意一个,卷积层n 1的输入数据为卷积层n的输出数据。
[0125]
本示例中,对于单个卷积核(也即目标卷积核)而言,获取该卷积核对应的第一权重参数中的最大权重参数,再根据该卷积核对应的最大权重参数和量化位宽计算得到该卷积核对应的第二量化因子;从而对于所有的卷积核,均可以计算得到对应的第二量化因子,有利于采用不同的第二量化因子对不同卷积核的第一权重参数进行量化,减小权重量化的量化误差。
[0126]
其中,对于任意一个卷积核,计算得到该卷积核对应的第二量化因子后,按照公式(13)完成浮点数的第一权重参数到整型数的第二权重参数的量化。
[0127][0128]
在公式(13)中,wq表示任意一个卷积核对应的任意一个量化后的权重参数,也即任意一个卷积核对应的任意一个第二权重参数;w表示任意一个卷积核对应的任意一个量化前的权重参数,也即任意一个卷积核对应的任意一个第一权重参数;sw表示任意一个卷
积核对应的权重量化因子,也即任意一个卷积核对应的第二量化因子。
[0129]
步骤903、将cin个数据组和第二权重参数进行卷积计算;将卷积计算后的结果进行移位计算以得到运算结果。
[0130]
应理解,将cin个数据组和第二权重参数进行卷积计算,也即根据第二权重参数对cin个数据组分别进行乘累加计算,得到cin个整型数,其中,cin个第一量化因子与cin个通道一一对应,cin个通道与cin个整型数一一对应,故cin个第一量化因子与cin个整型数一一对应。
[0131]
在一种示例性的实施方式中,上述卷积计算后的结果为cin个整型数,将卷积计算后的结果进行移位计算以得到运算结果,包括:针对cin个整型数中的每个整型数,执行以下步骤,以得到cin个浮点数:根据第一系数对目标整型数进行移位计算以得到目标整型数对应的浮点数,其中,目标整型数为cin个整型数中的任意一个,第一系数根据第一目标量化因子的指数确定,第一目标量化因子为与第一目标通道对应的第一量化因子,第一目标通道为与目标整型数对应的通道;根据第一量化因子的尾数、第二量化因子和cin个浮点数计算得到运算结果,其中,第二量化因子为用于对第一权重参数进行量化的量化因子。
[0132]
应理解,cin个整型数中的每个整型数对应的第一系数的值是不同的,该第一系数的值由该整型数对应的第一量化因子的指数确定。移位计算是二进制中的术语,二进制中的移位表现在整型数(十进制)中也即乘以2的指数,其中,2的指数的值为多少,就表示移多少位。
[0133]
其中,上述根据第一系数对目标整型数进行移位计算以得到目标整型数对应的浮点数,也即将目标整型数乘以第一系数,该第一系数为2的指数。
[0134]
其中,上述根据第一量化因子的尾数、第二量化因子和cin个浮点数计算得到运算结果,也即对cin个浮点数进行累加计算,再将cin个浮点数进行累加计算结果乘以第一量化因子的尾数与第二量化因子,得到运算结果。
[0135]
请参阅图10,图10是本技术实施例提供的另一种卷积计算示意图。如图10所示,以一个卷积核为例,该卷积核对应的量化后得到的第二权重参数与每个通道对应的量化后得到的数据组分别相乘(第一次乘法),然后在hk和wk维度完成累加(第一次累加),得到cin个整型数;累加后的结果(cin个整型数)经过整型数到浮点数的转换(int to float,i2f)运算完成整型数到浮点数的转换,得到cin个浮点数;再对cin个浮点数在cin维度进行累加(第二次累加),得到浮点数累加结果;最后,将该浮点数累加结果与浮点数的尾数相乘(第二次乘法),得到该卷积核的输出结果。
[0136]
本示例中,在分组量化后的卷积运算中,先将cin个数据组和第二权重参数进行卷积计算,也即根据量化后的第二权重参数对量化后的cin个数据组分别进行乘累加计算,得到cin个整型数;然后针对这cin个整型数中的每个整型数进行移位计算,也即针对这cin个整型数中的每个整型数,乘以根据该整型数对应的第一量化因子的指数确定的第一系数,得到该整型数对应的浮点数,从而根据cin个整型数可以计算得到cin个浮点数;再根据第一量化因子的尾数、第二量化因子和cin个浮点数计算得到运算结果,其中,第二量化因子为用于对第一权重参数进行量化的量化因子,也即先对这cin个浮点数进行累加计算,再将累加计算结果乘以第一量化因子的尾数、第二量化因子,从而得到运算结果;由于cin个第一量化因子的尾数相同,因此在运算过程中可以将第一量化因子的尾数和第二量化因子提
出到cin个浮点数累加之前,最后将其再乘以cin个浮点数的累加结果即可得到卷积运算结果,也即将分组量化后的卷积运算中的浮点数与整型数的乘法运算,转换成了整型数的移位运算,从而能够有效降低计算量、提高计算效率。
[0137]
应理解,本技术实施例针对分组量化中的浮点计算进行了创造性的改进,将浮点计算简化为移位计算。其中,i2f是整型数转换为浮点数的移位过程,其原理可表述为公式(8)、公式(14)和公式(15),具体表述如下。
[0138][0139]
对于公式(8)中的浮点数float,可以表示为尾数部分man和指数部分exp,因此公式(8)可以转换为公式(14)。
[0140][0141]
在公式(14)中,如果对于所有求和项1~cin(即数据的所有通道)的尾数mani相同,那么尾数可以提到括号外,浮点数与整型数的乘法计算就变成了整型数的移位计算,累加后再乘以尾数即可得到卷积运算结果,如公式(15)所示。
[0142][0143]
在公式(15)中,表示对fixi移expi位。
[0144]
由公式(15)可知,在hk和wk维度进行累加得到整型数fix之后,在进行cin维度累加之前,需要将整型数fix乘以浮点数float;而浮点乘法计算开销较大,为了把浮点乘法计算简化为移位计算,以减小计算开销;因此需要选择尾数相同的第一量化因子对输入数据进行量化,从而将浮点数的尾数man提出到1~cin累加之前,实现将浮点数的乘法转换为整型数的移位计算。具体地,为了使上述floati尾数相同,只需要让每个通道的量化因子(也即sws
ai
)尾数相同即可;因为floati是sw与s
ai
的乘积,对于每个通道来说,sw是固定的,s
ai
是浮点数,只要各个s
ai
的尾数相同(指数可以不同),就能使得floati的尾数相同;其中,floati的尾数man等于第二量化因子sw与第一量化因子的尾数的乘积,若第一量化因子的尾数均为s
a_max
,则man为sws
a_max

[0145]
可以看出,在本实施例中,对于单个卷积核的运算而言,在对输入数据进行分组量化时选择相同尾数的第一量化因子,使得卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,从而大大降低了单个卷积核对应的计算量、提高了单个卷积核的计算效率;且相比于均匀量化,采用本实施例提供的量化方法,在降低计算量、提高计算效率的同时,还可以有效降低量化误差,使得在卷积神经网络的训练过程中可以训练得到收敛目标解,实现低比特训练得到收敛;对于整个卷积核神经网络而言,若整个卷积核神经网络的所有卷积运算均采用本技术实施例提供的量化方法,则可以有效降低整个卷积神经网络的计算量、提高整个卷积神经网络的计算效率。
[0146]
下面结合具体示例对本技术提供的技术方案进行详细的介绍。
[0147]
1)数据参数的分组量化。本层输入数据矩阵的维度为batchsize
×
cin
×h×
w,按照batchsize维度和cin维度进行分组,一共分为batchsize
×
cin组;其中,对于输入数据矩阵的其中一个样本,有cin个通道,则有cin组;这cin组中的每组分别求得一个第一量化因子,则有cin个第一量化因子。为让这cin个通道中的每个通道对应的第一量化因子的尾数相同,这cin个第一量化因子从下列集合中选择,此时不同通道对应的第一量化因子的倍数关系为2的n次方。
[0148][0149]
从上述集合中可知,第一量化因子的尾数为1/sw。
[0150]
在选择完cin个第一量化因子后,按照公式(11)完成这cin个通道对应的数据参数从浮点数到整型数的量化。
[0151][0152]
2)权重参数的分组量化。本层权重参数w按照卷积核进行分组,每个卷积核根据公式(12)计算一个第二量化因子。
[0153][0154]
计算得到每个卷积核对应的第二量化因子之后,按照公式(13)完成权重参数从浮点数到整型数的量化。
[0155][0156]
3)量化后的整型数完成卷积计算。根据公式(7)、(8)、(14)和(15)完成卷积计算。以一个卷积核为例,该卷积核对应的量化后得到的第二权重参数与每个通道对应的量化后得到的数据组分别相乘,然后在hk和wk维度完成累加,得到cin个整型数;累加后的结果(cin个整型数)经过i2f运算完成整型数到浮点数的转换,得到cin个浮点数;再对cin个浮点数在cin维度进行累加,得到浮点数累加结果;最后,将该浮点数累加结果与浮点数的尾数相乘,得到该卷积核的输出结果。
[0157][0158][0159][0160][0161]
其中,hk和wk维度累加后得到整型数fix,在进行cin维度累加前,需要乘以浮点数
float,浮点乘法开销较大;本示例中,由于选择的第一量化因子的尾数为1/sw,而man等于第二量化因子sw与第一量化因子的尾数的乘积,因此可以使得浮点数的尾数man均等于1,于是可以将卷积运算中的浮点数的乘法计算直接简化为整型数的移位计算。
[0162]
由上可知,上述分组量化方法有效降低了量化误差,大大减少了卷积运算中的计算量。此外,经过实验,对于4比特训练在imagenet上resnet18的精度达到68.14%,是当前业界公开结果中的最优结果。需要说明的是,本方案除用于训练场景外,还可用于推理场景,本技术对此不作具体限定。
[0163]
请参阅图11,图11是本技术实施例提供的另一种卷积神经网络的训练流程示意图。图11所示的训练流程可由图8所示的卷积神经网络的运算装置实现,下面结合图8所示的硬件架构做出说明。其中,训练过程可分为前向计算和反向计算两个阶段。
[0164]
前向计算中,根据输入数据逐层转播得到损失函数值loss,其中涉及到的矩阵计算(卷积层和全连接层)都通过低比特乘法完成:
[0165]
1)负载模块从外部存储器中加载本层数据a
l
和本层权重w
l
到浮点高速缓存单元中。
[0166]
2)浮点算术逻辑单元计算得到本层数据a
l
和本层权重w
l
的量化因子scale,并通过q(a)和q(w)分别完成对本层数据a
l
和本层权重w
l
的量化,得到量化后的本层数据a
l
_q和量化后的本层权重w
l
_q,以及将量化后的本层数据a
l
_q和量化后的本层权重w
l
_q保存到定点高速缓存单元中;其中,q表示quantize,是量化函数的简写,q(a)指数据的量化函数,q(w)指权重的量化函数。
[0167]
3)卷积模块从定点高速缓存单元中加载量化后的本层数据a
l
_q和量化后的本层权重w
l
_q,完成乘累加计算,乘以尾数后,得到输出结果,并将输出结果保存到浮点高速缓存单元中。
[0168]
4)浮点算术逻辑单元加载浮点高速缓存单元中保存的本层数据a
l
的量化因子scale,通过deq(a)对量化后的本层数据a
l
完成反量化,得到本层数据a
l
,并通过保存模块将本层数据a
l
输出到外部存储器中;其中,deq表示dequantize,是反量化的简写,表示从整型数据反量化成浮点数,deq(a)表示对数据进行反量化。
[0169]
反向计算中,损失函数值loss逐层回传,与各层权重和数据分别相乘,得到各层的回传误差和梯度,进而对各层权重参数进行更新:
[0170]
1)负载模块从外部存储器中读入本层回传误差δ
l
到浮点高速缓存单元中。
[0171]
2)浮点算术逻辑单元中经过q(δ)量化,得到量化后的本层回传误差δ
l
_q,并将量化后的本层回传误差δ
l
_q保存到定点高速缓存单元中;其中,q(δ)回传误差的量化函数。
[0172]
3)卷积模块从定点高速缓存单元中读取量化后的本层回传误差δ
l
_q,将量化后的本层回传误差δ
l
_q与量化后的本层权重参数w
l
_q相乘得到上一层的回传误差δ
l 1
_q,并将上一层的回传误差δ
l 1
_q储存在定点高速缓存单元中。
[0173]
4)浮点算术逻辑单元读取定点高速缓存单元中的上一层的回传误差δ
l 1
_q,经过deq(δ)完成反量化,得到浮点数格式的上一层的回传误差δ
l 1
_q,并通过保存模块将浮点数格式的上一层的回传误差δ
l 1
_q输出到外部存储器中。
[0174]
5)卷积模块从定点高速缓存单元中读取量化后的本层回传误差δ
l
_q,将量化后的本层回传误差δ
l
_q与量化后的本层数据a
l
_q相乘得到整型数格式的本层梯度δw
l
,并将整
型数格式的本层梯度δw
l
储存在定点高速缓存单元中。
[0175]
6)浮点算术逻辑单元读取定点高速缓存单元中的整型数格式的本层梯度δw
l
,经过deq(δw)完成反量化,得到浮点数格式的本层梯度δw
l
,并通过保存模块将浮点数格式的本层梯度δw
l
输出到外部存储器中。
[0176]
7)负载模块重新导入本层权重w
l
和浮点数格式的本层梯度δw
l
,在浮点算术逻辑单元中完成梯度更新,得到更新后的本层权重w
l
,并通过保存模块将更新后的本层权重w
l
保存到外部存储器中。
[0177]
应理解,上述前向计算和反向计算过程交替执行,直到训练完成,得到可以用于推理的低比特模型。上述过程所提及的量化过程均为前文所述的分组量化方法,在上述实施例中已经详细描述,此处不再赘述。
[0178]
请参见图12,图12是本技术实施例提供的一种计算机装置1210的结构示意图,该计算机装置1210包括处理器1211、存储器1212和通信接口1213,上述处理器1211、存储器1212和通信接口1213通过总线1214相互连接。
[0179]
存储器1212包括但不限于是随机存储记忆体(random access memory,ram)、只读存储器(read-only memory,rom)、可擦除可编程只读存储器(erasable programmable read only memory,eprom)、或便携式只读存储器(compact disc read-only memory,cd-rom),该存储器1212用于相关计算机程序及数据。通信接口1213用于接收和发送数据。
[0180]
处理器1211可以是一个或多个中央处理器(central processing unit,cpu),在处理器1211是一个cpu的情况下,该cpu可以是单核cpu,也可以是多核cpu。
[0181]
该计算机装置1210中的处理器1211用于读取上述存储器1212中存储的计算机程序代码,执行以下操作:根据cin个第一量化因子对包含cin个通道的输入数据进行量化以得到cin个数据组,其中,cin个第一量化因子为浮点数,cin个第一量化因子的尾数相同,cin个第一量化因子与cin个通道一一对应,cin为正整数;对目标卷积核对应的第一权重参数进行量化以得到第二权重参数;将cin个数据组和第二权重参数进行卷积计算;将卷积计算后的结果进行移位计算以得到运算结果。
[0182]
需要说明的是,上述各个操作的实现还可以对应参照图9所示的方法实施例的相应描述。
[0183]
在图12所描述的计算机装置1210中,对于单个卷积核的运算而言,在对输入数据进行分组量化时选择相同尾数的第一量化因子,使得卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,从而大大降低了单个卷积核对应的计算量、提高了单个卷积核的计算效率;且相比于均匀量化,采用本实施例提供的量化方法,在降低计算量、提高计算效率的同时,还可以有效降低量化误差,使得在卷积神经网络的训练过程中可以训练得到收敛目标解,实现低比特训练得到收敛;对于整个卷积核神经网络而言,若整个卷积核神经网络的所有卷积运算均采用本技术实施例提供的量化方法,则可以有效降低整个卷积神经网络的计算量、提高整个卷积神经网络的计算效率。
[0184]
本技术实施例还提供一种芯片,上述芯片包括至少一个处理器,存储器和接口电路,上述存储器、上述收发器和上述至少一个处理器通过线路互联,上述至少一个存储器中存储有计算机程序;上述计算机程序被上述处理器执行时,图9所示的方法流程得以实现。
[0185]
本技术实施例还提供一种计算机可读存储介质,上述计算机可读存储介质中存储
有计算机程序,当其在计算机上运行时,图9所示的方法流程得以实现。
[0186]
本技术实施例还提供一种计算机程序产品,当上述计算机程序产品在计算机上运行时,图9所示的方法流程得以实现。
[0187]
综上,通过实施本技术实施例,对于单个卷积核的运算而言,在对输入数据进行分组量化时选择相同尾数的第一量化因子,使得卷积运算中因分组量化带入的浮点乘法计算转换为移位运算,从而大大降低了单个卷积核对应的计算量、提高了单个卷积核的计算效率;且相比于均匀量化,采用本实施例提供的量化方法,在降低计算量、提高计算效率的同时,还可以有效降低量化误差,使得在卷积神经网络的训练过程中可以训练得到收敛目标解,实现低比特训练得到收敛;对于整个卷积核神经网络而言,若整个卷积核神经网络的所有卷积运算均采用本技术实施例提供的量化方法,则可以有效降低整个卷积神经网络的计算量、提高整个卷积神经网络的计算效率。
[0188]
应理解,本技术实施例中提及的处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0189]
还应理解,本技术实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dynamic ram,dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data rate sdram,ddr sdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,dr ram)。
[0190]
需要说明的是,当处理器为通用处理器、dsp、asic、fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)集成在处理器中。
[0191]
应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
[0192]
还应理解,本文中涉及的第一、第二、第三、第四以及各种数字编号仅为描述方便进行的区分,并不用来限制本技术的范围。
[0193]
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0194]
应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施
过程构成任何限定。
[0195]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0196]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0197]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0198]
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0199]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0200]
上述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所示方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0201]
本技术实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
[0202]
本技术实施例装置中的模块可以根据实际需要进行合并、划分和删减。
[0203]
以上,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献