一种高精度的神经网络量化压缩方法与流程

文档序号:16432600发布日期:2018-12-28 20:15阅读:1138来源:国知局
一种高精度的神经网络量化压缩方法与流程

本发明涉及一种压缩方法,更具体一点说,涉及一种高精度的神经网络量化压缩方法,属于人工智能神经网络深度学习技术领域。

背景技术

近年来,在语音、图像和自然语言处理等领域,深度学习的发展逐渐成熟并得到了广泛的应用,尤其是受到动物视觉模型启发而发明的卷积神经网络(convolutionalneuralnetworks,cnn)在计算机视觉领域得到最为广泛的使用。目前的卷神经网络模型在著名的imagenet问题上已经取得了世界性的最好结果,其使得对于图像识别的领域研究更进一步,对于现在的深度学习网络模型已经能够理解和识别一般的自然图像,但是深度学习网络模型在落地过程中还存在一些限制,因为深度学习网络模型的层数深、参数多、计算量大,所以往广大的嵌入式终端设备上部署的时候,在存储空间、计算资源和内存消耗等多个方面都遇到瓶颈,要想让深度学习网络模型可以在嵌入式终端设备上落地,必须对浮点模型进行量化和压缩,就是用低位宽(小于8bit)的定点数来代替浮点运算。

传统的量化压缩方案基本步骤如下:首先,选取一批测试样本进行前向运算以统计数据范围,然后再根据统计所得的数据范围决定对应的定点位置qn,保证数据都不溢出,再然后采用公式xq=(int)x·2q将浮点数据转成对应的定点数据,再用转换后的定点值进行卷积运算。其中q格式表示为qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要m+n+1位来表示这个数据,多余的一位用作符号位,假设小数点在n位的左边(从右向左数),从而确定小数的精度。例如q15表示小数部分有15位,一个short型数据,占2个字节,最高位是符号位,后面15位是小数位,就假设小数点在第15位左边,表示的范围是:-1<x<0.9999695。

传统的量化压缩方案存在如下几个问题:1)精度不够高,当位宽大于16比特的时候和浮点版本误差不大,效果尚可,但当位宽小于8比特时则和浮点版本相差误差已经较大,在效果上也下降明显;2)压缩不充分,因为没有充分考虑挖掘cnn网络的特点,比如cnn网络中存在大量的类似于卷积加激活(conv+relu)这样的基本网络结构,而relu之后的数据特征肯定是大于零的,如果按照传统方法逐层量化,至少符号位是没有用的,这样就会造成位宽的浪费。



技术实现要素:

本发明目的在于解决现有技术问题,提供可以将量化位宽压缩到8比特及其以下,同时也可以保存很高的计算精度,对最终效果影响非常小,深度学习网络模型可以在嵌入式设备上得以部署运行等技术特点的一种高精度的神经网络量化压缩方法。

本发明一种高精度的神经网络量化压缩方法,该方法包括如下步骤:

s1:统计数据范围并对数据范围向内压缩:选取部分样本数据作为测试集输入的神经网络,对测试集中的神经网络从输入层到隐藏层再到输出层前向计算一遍,将输出层获得的准确率作为基准分;统计每一层的数据范围,获得最大值fmax、最小值fmin和设定的量化位宽bw,根据每一层数据的最大值fmax、最小值fmin和量化位宽bw分别计算获得一个搜索步长,采用每一层获得的搜索步长对每一层数据范围进行向内收缩搜索以节省量化空间和范围,并对每一层数据搜索都在测试集上计算出一次准确率,选择测试集上计算获得的的最大准确率与基准分进行比较,当偏差大于设定的阈值则停止搜索;

s2:网络量化压缩:根据每一层数据的最大值fmax、最小值fmin和量化位宽bw分别计算获得每一层数据的量化步长,并通过每一层数据的量化步长、最小值fmin以及最大值fmax、最小值fmin间的浮点值fdata计算获得浮点值fdata对应的无符号索引以实现采用无符号的索引量化;

s3:基于索引前向计算:基于索引前向计算:计算出无符号索引和该无符号索引对应的浮点值fdata之间的系数偏差c1和直流偏差c2以快速、便捷完成无符号索引到浮点值fdata的转换,并采用所述无符号索引代替对应的浮点值fdata进行网络运算。

作为一种改进,对数据范围向内压缩基于学习框架caffe,所述前向计算为采用浮点算法进行计算测试集中每一层的数据。

作为一种改进,所述量化步长计算公式为fstep=(fmax-fmin)/(2^bw),所述计算量化索引公式为index=(fdata-fmin)/fstep。

有益效果:本发明可以将量化宽度压缩到8比特及其以下的同时保存很高的计算精度,对最终的影响非常小;可以使得深度学习网络模型可以在嵌入式设备上得以部署运行;通过对数据范围向内压缩,获得节省量化空间和范围。

附图说明

图1是本发明流程示意图。

图2是本发明实施例1中索引代替真实值进行计算的卷积示意图。

具体实施方式

以下结合说明书附图,对本发明作进一步说明,但本发明并不局限于以下实施例。

实施例1本发明一种高精度的神经网络量化压缩方法,该方法包括如下步骤:

s1:统计数据范围并对数据范围向内压缩:选取部分样本数据作为测试集输入的神经网络,先使用未量化压缩的浮点版本网络模型对测试集中的神经网络从输入层到隐藏层再到输出层前向计算一遍,从输出层获得准确率,这个准确率也就是图1中所示的基准分,如在caffe平台上通过accuracy输出层就可以统计得到这个测试集的准确率,以这个准确率作为后续自适应搜索过程中的基准;统计测试集中神经网络每一层的数据范围,获得神经网络每一层数据范围最大值fmax、最小值fmin和设定的量化位宽bw,根据神经网络每一层数据的最大值fmax、最小值fmin和量化位宽bw分别计算获得一个搜索步长(搜索步长fstep=(fmax-fmin)/(2^bw)),以这个搜索步长对对应的神经网络层数据范围进行压缩试探,即采用获得的搜索步长对对应的神经网络层的数据范围进行向内收缩搜索以节省量化空间和范围,其中每一次搜索都在测试集上计算一次最终的准确率,这个准确率也就是图1中所示的量化分,将获得的量化分与基准分进行比较(作为终止收缩探索判断依据),例如对第一层进行探索计算得到准确率a,对第二层进行探索计算得到准确率b,对第n层进行探索计算得到准确率n,选择最大的准确率最大的那层探索作为当前次的结果加以确认保存,将最大的准确率(量化分)和准确率(基准分)进行比较,若偏差大于设定的阈值则触发退出机制,停止搜索,以此保证了每一层数据范围向内压缩到了最小;

s2:网络量化压缩(采用无符号的索引量化代替有符号的值量化):根据神经网络每一层数据的最大值fmax、最小值fmin和量化位宽bw分别计算获得神经网络每一层数据的量化步长,并通过神经网络每一层数据的量化步长、最小值fmin以及最大值fmax、最小值fmin间的浮点值fdata计算获得浮点值fdata对应的无符号索引以实现采用无符号的索引量化,采用无符号索引可以充分填满最大值fmax到最小值fmin的数据范围,可以显著提升运算精度,避免造成量化空间浪费,量化步长计算公式fstep=(fmax-fmin)/(2^bw),量化索引计算公式为index=(fdata-fmin)/fstep,其中对于网络量化压缩也可以对网络层进行优化组合成网络块,以网络块为单位进行量化,参考cnn网络中的一些层的运算关系和数据,提取网络层和网络层之间的关系,并对网络层和网络层进行合理的组合以减少不必要的中间量化输出,实现层与层之间的量化流水,提升精度,如conv+relu(卷积+激活)网络结构在cnn网络中是非常普通的,relu(激活)的运算特点就是直接截取正数部分,可以将conv+relu组合成一个网络块,只需要取relu(激活)后的数据作为这个网络块的量化输出,不再对conv(卷积)后的数据进行量化,这样可以显著的提升运算精度,针对caffe中所定义的常用层的计算特征,提供一种组合标准:不需要跨通道计算的层都可以和其前面的层组合成网络块。例如,激活层、池化层、通道内归一化层等,可以组合成如下网络块:conv+relu、conv+pool、conv+relu+pool等;

s3:基于索引前向计算(采用索引代替真实值进行计算):计算出无符号索引和该无符号索引对应的浮点值fdata之间的系数偏差c1和直流偏差c2,并采用所述无符号索引代替对应的浮点值fdata进行网络运算以方便索引和值之间的转换,如图2所示,包括权值参数、输入数据,所述权值参数为滤波器矩形系数,包括k11、k12、k13、k21、k22、k23、k31、k32、k33,输入数据为代替真实值的量化索引,包括d11、d12、d13、d21、d22、d23、d31、d32、d33,在对网络进行前向运算的时候,直接采用索引代替真实值进行计算,以图2为例,推导过程如下:

以第一行计算为例

y11=k11*d11+k12*d12+...+k13*d13+k21*d21+k22*d22+...+k23*d23+k31*d31+k32*d32+...+k33*d33+bias1【式1】

其中:y是输出数据;k是权值参数(卷积滤波器的滤波系数);d是输入数据;bias1是偏置参数(卷积滤波器的直流偏置系数)。

d=fstep*dindex+fmin

其中:d表示值,dindex表示量化索引。

代入【式1】则:变换为

y11=k11*(fstep*dindex11+fmin)+k12*(fstep*dindex12+fmin)+…+k33*(fstep*dindex33+fmin)+bias1【式2】

合并同类项则:

y11=fstep*(k11*dindex11+k12*dindex12+k13*dindex13+k21*dindex21+k22*dindex22+k23*dindex23+k31*dindex31+k32*dindex32+k33*dindex33)+fmin*(k11+k12+k13++k21+k22+k23+k31+k32+k33)+bias1

设:c1=fstep

c2=fmin*(k11+k12+k13++k21+k22+k23+k31+k32+k33)+bias1

得:y11=c1*[(k11*d11_index+...+k13*d13_index)+(k21*d21_index+...+k23*d23_index)+(k31*d31_index+...+k33*d33_index)]+c2【式3】

其中c1和c2是可计算所得的固定常数,可以用浮点保留高精度。因此实际在进行网络计算的时候,只需要计算中间索引表示的那部分,既用索引代替值进行运算,最后在输出的时候,很容易完成索引和值之间的转换。

以上仅是本发明的优选实施方式,本发明的保护范围并不限于上述实施例,凡属于本发明思路下的技术方案均属于本发明保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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