本发明涉及的是一种神经网络应用领域的技术,具体是一种基于神经网络权重数据分布特点的量化方法,可用于各种冗余性高的神经网络与便携设备相组合的场景如智能手机等。
背景技术:
:现有的神经网络通过加深网络、扩大网络尺寸以追求更高的边缘精度,但同时网络参数变得越来越大,计算量也快速增大,这样网络的冗余性也非常大,提高精度后随之而来付出的代价就是进行一次网络的前向传播计算量巨大导致计算时间过长。现有的压缩技术之一为对网络参数进行均匀量化,其优点在于计算复杂度不高,容易进行处理操作,但在权值分布范围较大时候它对于小值的量化误差较大且将严重影响检测精度;另外还有现有技术通过2的幂次进行量化,但这种方案同样对于一些值的误差较大,影响性能。此外,虽然现有技术通过利用gpu的并行计算能力,使计算时长在一定程度上缩短,但gpu价格昂贵,功耗较大的同时便携性差也成为其无法忽视的缺点。随着智能便携设备的流行,急需一种能压缩网络在推理过程减少计算量和存储量而同时又能使检测达到一个令人满意的精度的方法。技术实现要素:本发明针对现有技术权重分布范围广,最大最小值差距大导致小值量化后精度不高所产生的问题,提出一种基于神经网络权重数据分布特点的量化方法,能够充分利用比特位数,使每个数据都能根据自身参与计算的频率来得到充分的计算,在保证网络性能的同时大幅度降低存储量实现减少参数存储量的目的,且无需训练。本发明是通过以下技术方案实现的:本发明涉及一种基于神经网络权重数据分布特点的量化方法,通过将神经网络中的包含参数的任意一层的权重的分布情况进行统计后,根据统计结果设置码值分配数量,并根据该数量将不同范围下的参数分别分割为对应的子范围,每个子范围内的参数以代表值作为其量化值,最后将每个代表值编码后制表,计算时通过读入码值查表得到对应参与计算的量化值。所述的包含参数的任意一层采用但不限于卷积层。所述的统计结果,优选将小于2-11手动调整为0而不影响结果。所述的码值分配数量是指:正负分配数量满足其中:设码值总数为m,由于权重正负值分布对称,则正负码值总数各为存储码值的位数设为n,则m=2n,统计的范围[2-(n 1),2-n]范围内的权重数量为i[n],权重总数量为i。所述的码值分配数量,优选当计算得到大值(相对较大的值)的权重分配数量小于1时,则手动调整分配数量为2,大值的码值分配更多,相对应的减少小值的码值分配。所述的代表值,即子范围的中间值为:其中所述的制表,即将代表值ym进行存储,不同的n值对应着不同的ym和ym的数量。对于卷积层中卷积操作所涉及的偏置bias,因为其数据很小实验表明对检测结果影响很小,所以bias都设置为0。优选地,针对神经网络中的不同层,采用不同的优选码值m和代表值ym,不同比特的码值m和存储参与计算的ym有不同的效果,比特数越小,权重占用的存储越少,计算效率越高,但性能会逐步下降,故比特数与性能的权衡是优化的重点,本发明中优选码值m为代表值ym的数量,如8bit码则m=28=256,ym的数量为256。优选地,对本发明得到的量化值进一步再训练后作为所述的神经网络的权重能够进一步提高神经网络的性能,进一步优选地,将训练后的权重进一步通过本发明所述方法进行量化。所述的参与计算的量化值是指:根据码值通过查找表找到对应的代表值,将代表值作为权值参与神经网络中待处理数据的计算并将计算结果输出至下一层。技术效果与现有技术相比,本发明运用查找表存储用于计算的代表值,能使存储量有效减少且保持较高精度,其技术效果进一步包括:1)存储量有效减少:读取码值通过查找表找到代表值进行计算,一个代表值能最大限度地多次复用计算,码数量也是有限,使代表值在存储位数有限的情况下最大限度地接近原来权重值,通过分布范围内出现的次数而分配的码值利用率更高,且码值数量和代表值位数都可进一步减少。2)更低比特数:不仅仅8比特的码值,7比特的码值也足够用,若对更低比特的码值进行分层优化,能进一步提高精度3)低复杂度:整个通过码分配数值的方案不需要其他新颖的单元,只需要读取码值而后通过查找表找到对应的代表值进行计算即可。附图说明图1为本发明流程示意图;图2为实施例效果示意图;图3为实施例效果示意图。具体实施方式以下实施例使用resnet50,比较的基准是使用tensorflow框架的resnet50用于imagenet的检测精度。实施例1如图1所示,本实施例采用8比特码和不同比特代表值ym,具体步骤包括:步骤1、选择具有代表性的一层卷积层权重统计其权重的分布情况,如表1所示:[0]39[8]452[16]2[24]0[1]427[9]214[17]0[25]0[2]1138[10]98[18]0[26]0[3]1480[11]50[19]1[27]0[4]1655[12]22[20]0[28]0[5]1595[13]14[21]0[29]0[6]1386[14]9[22]0[30]0[7]823[15]3[23]0[31]0表1一层卷积层权重统计分布情况由统计情况可知绝大部分的值分布在[2-8,20],所以将小于2-8的值都设为0步骤2、计算码分配数量在[2-8,20]范围内的值共有8995个,根据可得x0=0.55,由于子范围的个数x0必为整数,且神经网络中的权重大值相对于小值对检测精度的影响更大,故给大值尽量分配更多的子范围以减少精度损失,故x0取为2。同理可得x1=8,x2=18,x3=22,x4=24,x5=24,x6=20,x7=10。步骤3、子范围的代表值因为在[2-1,20]范围内,x0=2,所以在这个范围内可以分成2个子范围,每个子范围的范围中间值作为代表值,凡是落到这个子范围的权重值统一用代表值表示。根据公式(2)代入,得:其他子范围同理。步骤4、制表表28比特码用于查找表的存储示意图步骤5、优化不同bit的代表值上述码表中的数据如0.875,0.625,0.484375等代表值可以用更低比特位数表示,进一步降低存储量。float13bit12bit11bit10bit9bit8bittop163.461.560.760.258.951.528.6top583.083.28383.380.575.350.2表3用不同比特存储代表值的精度结果如图2所示,可以发现8bit存储数据表达力不够使精度快速下降。实施例2不同比特码和16比特代表值ym:不仅仅代表值的存储可以降低,降低码数量更能降低存储量,先前采用的是8bit码值,进行优化成7比特,6比特,5比特,4比特。同样使用实施例1进行码值分配,可以看出随着码值比特数下降,精度逐步下降,到4比特时,码值表现力显然不足,精度呈断崖式下降。表4不同比特码数分配方案top1top58bit63.4837bit61.681.26bit59.3815bit54.776.94bit15.933.1表5不同比特码数精度结果如图3所示,为不同比特码数精度结果。实施例3分层不同码方案优化:i)6比特码分层优化数据范围在[20,2-8],[2-1,2-8],[2-1,2-9],[2-2,2-10]的码分配方案(-1,0)(-2,-1)(-3,-2)(-4,-3)(-5,-4)(-6,-5)(-7,-6)(-8,-7)(-9,-8)(-10,-9)[20,2-8]14666531[2-1,2-8]4556651[2-1,2-9]46665311[2-2,2-10]66653321表66比特不同数据范围的分配码方案ii)5比特码分层优化5比特的方案可分配的码数量进一步减少,所以对应的方案则是进一步缩小数据范围,将小于2-8的权重值置于0,数据范围在[20,2-7],[2-1,2-8],[2-2,2-8]的码分配方案如表7所示:表75比特不同数据范围的分配码方案优化后的精度比较top1top56bit未优化57.3806bit优化59.682.9diff 2.3 2.95bit未优化53.9785bit优化54.478.2diff 0.50.2表8优化前后精度比较本发明根据权重在不同范围内的分布数量的不同划分不同数量的子范围,取中间值作为代表值参与计算,并为之编码,计算时读取编码找到对应的代表值进行计算。本发明通过将原来的网络直接读取权重改为读取存储量更少的码值,通过查找表找到参与计算的代表值;通过分层优化,根据每一层的权重分布特点的不同,使用不同的码值分配方案进一步提升了精度。在计算机中,搭建resnet50的神经网络框架,对权重进行本发明的量化操作,能够使同为8bit的量化,传统方法的top1精度为49%,本方法top1能达到63.4%。由此可见本方法能够显著减少存储空间和量化损失,并提供神经网络更高的精度。上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。当前第1页1 2 3 
技术特征:1.一种基于神经网络权重数据分布特点的量化方法,其特征在于,通过将神经网络中的包含参数的任意一层的权重的分布情况进行统计后,根据统计结果设置码值分配数量,并根据该数量将不同范围下的参数分别分割为对应的子范围,每个子范围内的参数以代表值作为其量化值,最后将每个代表值编码后制表,计算时通过读入码值查表得到对应参与计算的量化值。
2.根据权利要求1所述的方法,其特征是,所述的统计结果,将小于2-11手动调整为0而不影响结果。
3.根据权利要求1所述的方法,其特征是,所述的码值分配数量是指:正负分配数量满足其中:设码值总数为m,由于权重正负值分布对称,则正负码值总数各为存储码值的位数设为n,则m=2n,统计的范围[2-(n 1),2-n]范围内的权重数量为i[n],权重总数量为i。
4.根据权利要求1所述的方法,其特征是,所述的码值分配数量,当计算得到大值的权重分配数量小于1时,则手动调整分配数量为2,大值的码值分配更多,相对应的减少小值的码值分配。
5.根据权利要求1所述的方法,其特征是,所述的代表值,即子范围的中间值为:其中
6.根据权利要求1所述的方法,其特征是,所述的制表,即将代表值ym进行存储,不同的n值对应着不同的ym和ym的数量。
7.根据权利要求1所述的方法,其特征是,所述的包含参数的任意一层,采用卷积层;对于卷积层中卷积操作所涉及的偏置设置为0。
8.根据权利要求1所述的方法,其特征是,针对神经网络中的不同层,码值m为代表值ym的数量。
9.根据权利要求1所述的方法,其特征是,对得到的量化值进一步再训练后作为所述的神经网络的权重能够进一步提高神经网络的性能;再将训练后的权重进一步通过所述方法进行量化。
10.根据权利要求1所述的方法,其特征是,所述的参与计算的量化值是指:根据码值通过查找表找到对应的代表值,将代表值作为权值参与神经网络中待处理数据的计算并将计算结果输出至下一层。
技术总结一种基于神经网络权重数据分布特点的量化方法,通过将神经网络中的包含参数的任意一层的权重的分布情况进行统计后,根据统计结果设置码值分配数量,并根据该数量将不同范围下的参数分别分割为对应的子范围,每个子范围内的参数以代表值作为其量化值,最后将每个代表值编码后制表,计算时通过读入码值查表得到对应参与计算的量化值。本发明能够充分利用比特位数,使每个数据都能根据自身参与计算的频率来得到充分的计算,在保证网络性能的同时大幅度降低存储量实现减少参数存储量的目的,且无需训练。
技术研发人员:徐顺锋;曹姗;徐树公;张舜卿
受保护的技术使用者:上海大学
技术研发日:2019.09.12
技术公布日:2021.03.12