本发明涉及压缩方法技术领域,具体而言,涉及一种人工智能神经网络8比特量化压缩方法。
背景技术:
近年来,深度学习快速发展,在语音、图像和自然语言处理等领域得到了广泛引用,大量基于神经网络模型的技术推陈出新。然而,由于神经网络模型本身层数多、参数量多、计算量大的特点,在将这些技术转换为产品落地时,仍面临着储存空间不足、内存消耗过多、计算资源不足等问题。所以必须对神经网络模型进行8比特量化,采用定点运算来代替浮点运算,以保证其能在嵌入式终端设备上顺利落地。
传统8比特量化压缩方案基本步骤如下:首先,对模型进行权重量化,统计每一个网络层的权重绝对值最大值wmax,将其最大值映射到127,即根据公式flw=int(log2(127/wmax))计算整数flw。这样,一个层数为n的网络最终会统计出n个flw。随后,根据公式
传统8比特量化压缩方案得到的结果往往精度不高。对于层数越少的网络,量化权重造成的精度损失越明显,对于层数较多的网络,量化输出造成的精度损失越明显。同时,传统8比特量化压缩方案对于网络中的batchnorm层仍按照浮点运算,而不对其进行量化,由于大多数网络都带有大量batchnorm层,故这种不完全量化方式的提速效果也不够全面。
技术实现要素:
针对现有技术中的不足,本发明提供一种神经网络8比特量化压缩方法,将深度学习神经网络量化到8比特的同时保留较高的计算精度,使得神经网络可以在嵌入式设备上进行部署。
为实现上述目的,本发明的技术方案如下:
一种神经网络8比特量化压缩方法,包括权重量化和输出量化,
所述权重量化包括:
根据caffe神经网络框架中的每一层的权重,计算每一层的权重的第一直方图;
遍历8比特量化参数得到若干个量化后的8比特权重,根据量化后的8比特权重得到若干个对应的第二直方图;
根据第一直方图和若干个第二直方图计算每一层对应的散度,选取散度中最小值对应的8比特量化参数来量化该层权重;
所述输出量化包括:
选取校准数据集,针对设定任务定义其精度指标;
对已量化完权重的caffe神经网络框架中的每一层,遍历8比特量化参数,对网络进行前向运算,得到量化后的8比特输出;其中,所述输出量化的遍历8比特量化参数的取值范围与所述权重量化的遍历8比特量化参数的取值范围不同;
将所定义的精度指标来评价量化后的8比特输出,选取精度最高的输出对应的8比特量化参数作为该层的输出量化参数。
如上所述的神经网络8比特量化压缩方法,进一步地,在根据caffe神经网络框架中的每一层的权重,计算每一层的权重的第一直方图前,所述方法还包括:
将caffe神经网络框架中batchnorm层转化为scale层,进一步压缩网络,其中,caffe神经网络框架中前馈时batchnorm层的计算公式为
如上所述的神经网络8比特量化压缩方法,进一步地,在所述输出量化中,对于caffe神经网络框架,量化第k层的输出时,需要应用第1层到第k-1层的输出量化参数,此时使用贪心策略进行逐层量化,进一步提高量化结果精度。
如上所述的神经网络8比特量化压缩方法,进一步地,在所述输出量化中,若第k层精度指标值下降超过设定值,则将输出值乘以一个缩放系数,使其在当前8比特量化参数下能保持精度指标值,再对该缩放系数与权重的乘积重新进行量化,以保证量化完的网络为高精度8比特网络。
如上所述的神经网络8比特量化压缩方法,进一步地,在所述权重量化中,
对于caffe神经网络框架中的每一层权重w,统计其直方图whist=hist(w);
取8比特量化参数fl=0,1,…,9,分别应用公式wq=int(w×2fl)/2fl得到量化后的8比特权重w0,w1,…,w9;
统计对应直方图得到whist_0,whist_1,…,whist_9;
根据散度计算公式计算对应散度kli=whistln(whist/whist_i),i=0,1,...,9,设第r个散度最小,即klr=min(kli),i=0,1,...,9,则选取其对应的8比特量化参数flr来量化该层权重;
设caffe神经网络框架有n层,则最终可得n个8比特量化参数flr_1,flr_2,…,flr_n,使用量化公式
如上所述的神经网络8比特量化压缩方法,进一步地,在所述输出量化中,
对于caffe神经网络框架第k层的输出o,取8比特量化参数fl=0,1,...,12,分别应用公式oq=int(o×2fl)/2fl得到量化后的8比特输出oq_0,oq_1,...,oq_12;
对于每个输出,使用固定好的判定阈值thsim计算其人脸识别精度评价指标acc0,acc1,...,acc12,设第r个精度最高,即accr=max(acci),i=0,1,...,12;
比较accr和accw,若满足条件accw-accr≤10-3,即满足量化之后精度下降在0.1%以内,则选取其对应的量化参数flr作为该层的输出量化参数;若发现不满足精度条件,即量化之后精度下降超过0.1%,则向下一层借位。
如上所述的神经网络8比特量化压缩方法,进一步地,量化权重后的神经网络的基本组成模块包括卷积层、激活层、scale层、全连接层;
将上述网络层配置为公式ok 1=ok×wk 1 bk 1,即第k 1层的输出值等于第k层的输出值乘以第k 1层的权重再加上第k 1层的偏置值;
对于已完成权重量化的网络,该公式配置为ok 1=ok×wq_(k 1) bq_(k 1),即第k 1层的输出值等于第k层的输出值乘以第k 1层的已量化权重值再加上第k 1层的已量化偏置值;
计算采用上述搜索得到的量化参数flr时能覆盖到的最大浮点值
计算采用上述搜索得到的量化参数flr时能覆盖到的最大浮点值
对于第k层网络,先将其权重缩小s倍,即第k层的输出由公式ok=oq(k-1)×(wq_k/s) (bq_k/s)计算,此操作将第k层的输出缩放到了值vmax的范围内,使其能够使用量化参数flr进行量化而不损失较大精度;同时,将第k 1层网络的权重放大s倍,即第k 1层的输出由公式ok 1=oq_k×(wq(k 1)×s) bq_(k 1)计算;
对这两层被改变的权重重新进行权重量化;
对于n层网络的每一层输出进行该步骤,得到n个8比特量化参数flr_1,flr_2,...,flr_n;
使用量化公式
本发明与现有技术相比,其有益效果在于:本发明可以将深度学习神经网络量化到8比特的同时保留较高的计算精度,在绝大多数情况下精度下降能保证在2%以内;压缩之后的神经网络模型大约缩小4倍,使其得以克服嵌入式设备储存空间不足的问题;权重和输出均为定点,从而解决嵌入式设备在运行神经网络模型时内存消耗过多、计算资源不足的瓶颈,方便各类神经网络模型的部署。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图进行简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的权重量化的流程图;
图2为本发明实施例的输出量化的流程图;
图3为本发明实施例的输出量化借位操作的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
实施例:
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,本发明实施例的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明提供一种神经网络8比特量化压缩方法,将深度学习神经网络量化到8比特的同时保留较高的计算精度,使得神经网络可以在嵌入式设备上进行部署。
参见图1至图3,图1为本发明实施例的权重量化的流程图;图2为本发明实施例的输出量化的流程图;图3为本发明实施例的输出量化借位操作的流程图。
一种神经网络8比特量化压缩方法,包括权重量化和输出量化,所述权重量化包括:
根据caffe神经网络框架中的每一层的权重,计算每一层的权重的第一直方图;遍历8比特量化参数得到若干个量化后的8比特权重,根据量化后的8比特权重得到若干个对应的第二直方图;根据第一直方图和若干个第二直方图计算每一层对应的散度,选取散度中最小值对应的8比特量化参数来量化该层权重。
所述输出量化包括:选取校准数据集,针对设定任务定义其精度指标;对已量化完权重的caffe神经网络框架中的每一层,遍历8比特量化参数,对网络进行前向运算,得到量化后的8比特输出;其中,所述输出量化的遍历8比特量化参数的取值范围与所述权重量化的遍历8比特量化参数的取值范围不同;将所定义的精度指标来评价量化后的8比特输出,选取精度最高的输出对应的8比特量化参数作为该层的输出量化参数。
作为一种可选的实施方式,在某些实施例中,在根据caffe神经网络框架中的每一层的权重,计算每一层的权重的第一直方图前,所述方法还包括:将caffe神经网络框架中batchnorm层转化为scale层。
作为一种可选的实施方式,在某些实施例中,在所述输出量化中,对于caffe神经网络框架,量化第k层的输出时,需要应用第1层到第k-1层的输出量化参数,此时使用贪心策略进行逐层量化。
作为一种可选的实施方式,在某些实施例中,在所述输出量化中,若第k层精度指标值下降超过设定值,则将输出值乘以一个缩放系数,使其在当前8比特量化参数下能保持精度指标值,再对该缩放系数与权重的乘积重新进行量化。
具体地,本发明的具体步骤可以包括:步骤一、权重量化:如附图1所示,若待压缩的网络中存在batchnorm层,由于caffe神经网络框架中前馈时batchnorm层的计算公式为
步骤二、输出量化:如附图2所示,选取校准数据集,以人脸识别为例,可选取大约5000对人脸样本,以人脸识别精度作为评价指标。首先使用校准数据集对已量化完权重的神经网络进行前向运算,设人脸识别判定阈值为thsim,若一对人脸的相似度超过该阈值,则判定为同个人,否则判定为不同人,以此统计判定准确率,即作为人脸识别精度评价指标。人脸识别判定阈值thsim固定为已量化权重的网络在校准数据集上可以得到最高人脸识别精度accw时的阈值,输出量化评价时均采用该固定阈值。对于一个n层的神经网络,量化第k层的输出时,需要应用第1层到第k-1层的输出量化参数,即使用贪心策略进行逐层量化。在此前提下,对于网络第k层的输出o,取8比特量化参数fl=0,1,…,12,分别应用公式oq=int(o×2fl)/2fl得到量化后的8比特输出oq_0,oq_1,...,oq_12,对于每个输出,使用固定好的判定阈值thsim计算其人脸识别精度评价指标acc0,acc1,...,acc12,设第r个精度最高,即accr=max(acci),i=0,1,...,12,比较accr和accw,若满足条件accw-accr≤10-3,即满足量化之后精度下降在0.1%以内,则选取其对应的量化参数flr作为该层的输出量化参数。若发现不满足精度条件,即量化之后精度下降超过0.1%,则向下一层借位。借位过程如附图3所示,由于量化权重后的神经网络的基本组成模块为卷积层、激活层、scale层、全连接层,而这些网络层的计算都可以写成公式ok 1=ok×wk 1 bk 1,即第k 1层的输出值等于第k层的输出值乘以第k 1层的权重再加上第k 1层的偏置值。对于已完成权重量化的网络,该公式改写为ok 1=ok×wq_(k 1) bq_(k 1),即第k 1层的输出值等于第k层的输出值乘以第k 1层的已量化权重值再加上第k 1层的已量化偏置值。接下来,计算采用上述搜索得到的量化参数flr时能覆盖到的最大浮点值
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
上述实施例只是为了说明本发明的技术构思及特点,其目的是在于让本领域内的普通技术人员能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡是根据本发明内容的实质所做出的等效的变化或修饰,都应涵盖在本发明的保护范围内。
1.一种神经网络8比特量化压缩方法,包括权重量化和输出量化,其特征在于,
所述权重量化包括:
根据caffe神经网络框架中的每一层的权重,计算每一层的权重的第一直方图;
遍历8比特量化参数得到若干个量化后的8比特权重,根据量化后的8比特权重得到若干个对应的第二直方图;
根据第一直方图和若干个第二直方图计算每一层对应的散度,选取散度中最小值对应的8比特量化参数来量化该层权重;
所述输出量化包括:
选取校准数据集,针对设定任务定义其精度指标;
对已量化完权重的caffe神经网络框架中的每一层,遍历8比特量化参数,对网络进行前向运算,得到量化后的8比特输出;其中,所述输出量化的遍历8比特量化参数的取值范围与所述权重量化的遍历8比特量化参数的取值范围不同;
将所定义的精度指标来评价量化后的8比特输出,选取精度最高的输出对应的8比特量化参数作为该层的输出量化参数。
2.根据权利要求1所述的神经网络8比特量化压缩方法,其特征在于,在根据caffe神经网络框架中的每一层的权重,计算每一层的权重的第一直方图前,所述方法还包括:
将caffe神经网络框架中batchnorm层转化为scale层,其中,caffe神经网络框架中前馈时batchnorm层的计算公式为
3.根据权利要求1所述的神经网络8比特量化压缩方法,其特征在于,在所述输出量化中,对于caffe神经网络框架,量化第k层的输出时,需要应用第1层到第k-1层的输出量化参数,此时使用贪心策略进行逐层量化。
4.根据权利要求1所述的神经网络8比特量化压缩方法,其特征在于,在所述输出量化中,若第k层精度指标值下降超过设定值,则将输出值乘以一个缩放系数,使其在当前8比特量化参数下能保持精度指标值,再对该缩放系数与权重的乘积重新进行量化。
技术总结