一种优化神经网络模型激活的量化方法与流程

文档序号:30591159发布日期:2022-07-01 19:39阅读:157来源:国知局
一种优化神经网络模型激活的量化方法与流程

1.本发明涉及卷积神经网络加速技术领域,特别涉及一种优化神经网络模型激活的量化方法。


背景技术:

2.近年来,随着科技的飞速发展,大数据时代已经到来。深度学习以深度神经网络(dnn)作为模型,在许多人工智能的关键领域取得了十分显著的成果,如图像识别、增强学习、语义分析等。卷积神经网络(cnn)作为一种典型的dnn结构,能有效提取出图像的隐层特征,并对图像进行准确分类,在近几年的图像识别和检测领域得到了广泛的应用。
3.然而,现有技术中在训练全精度模型多采用的时relu函数,由于全精度数表示的实数范围很广,可以满足训练过程中需要的数值范围,可是在训练低比特时,由于位宽的限制,所以其表示范围是有有限的,导致训练过程中模型无法有效的收敛,最终模型的精度并不理想。
4.现有技术中常用的技术术语包括:
5.卷积神经网络(convolutional neural networks,cnn):是一类包含卷积计算且具有深度结构的前馈神经网络。
6.量化:量化指将信号的连续取值(或者大量可能的离散取值)近似为有限多个(或较少的)离散值的过程。
7.低比特:将数据量化为位宽为8bit,4bit或者2bit的数据。
8.bn(batch normalization,批量归一化):批量归一化操作可以看作是一个特殊的神经网络层,该层是加在每一层非线性激活函数之前。
9.relu(rectified linear unit,线性整流函数)操作:也称修正线性单元,是一种人工神经网络中常用的激活函数,通常指代以斜坡函数及其变种为代表的非线性函数。


技术实现要素:

10.为了解决上述问题,本方法旨在克服上述现有技术中存在的缺陷,解决现有低比特(例如,2bit)模型在训练过程中精度损失严重和难以收敛的问题。
11.本技术是基于全精度模型微调低比特模型:先用数据集训练一版全精度模型达到目标精度,然后基于全精度模型微调训练低比特模型。
12.具体地,本发明提出一种优化神经网络模型激活的量化方法,所述方法基于全精度模型先训练一个4bit模型,再基于4bit模型训练2bit模型,且在训练4bit和2bit的低bit模型时feature map的最大值都采用滑动平均的方式来统计并且每次训练时都重新更新而不依赖上一个模型的统计结果。
13.所述方法包括以下步骤:
14.s1,基于数据集先训练一版全精度模型达到目标精度;
15.s2,基于全精度模型训练权重和激活量化到4bit的模型,并且在训练的同时统计
feature map的最大值;
16.s3,再基于步骤s2训练的4bit模型训练权重和激活量化到2bit的模型,并且重新统计feature map的最大值。
17.所述步骤s1进一步包括:
18.s1.1,确定训练数据:
19.训练模型的数据集是imagenet1000,该数据集是imagenet数据集的一个子集,有1.2million的训练集,5万验证集,15万测试集,1000个类别;
20.s1.2,确定训练模型:
21.训练采用的基础神经网络模型是mobilenetv1,该网络是一种基于深度可分离卷积的模型;
22.s1.3,选择激活函数:
23.mobilenetv1模型,在每一层卷积后面都会加上批量归一化bn和激活函数relu操作;
24.s1.4,训练网络:
25.对于网络的训练基本步骤是:先采用adam优化器训练60个epoch,然后再用sgd优化器直至训练结束;
26.s1.5,测试网络效果:
27.利用测试集测试网络结果。
28.所述步骤s1.3中,由于训练的模型需要量化到低比特,且之后需要将feature map量化到2bit,所以所述激活函数relu操作还可以在训练时将relu激活函数换为relux,如公式1所示:
[0029][0030]
所述步骤s2进一步包括:
[0031]
s2.1,数据量化:对于待量化的数据按公式2进行量化,得到低比特的数据,训练时将权重和激活量化到4bit:
[0032][0033]
变量说明:wf为全精度数据是一个数组,wq为模拟量化后的数据,maxw全精度数据wf中最大值,minw全精度数据wf中最小值,b为量化后的位宽;
[0034]
s2.2,在训练模型的同时,获取feature map的最大值再通过滑动平均的方法统计最大值,用maxvalue表示;
[0035]
s2.3,对每一层激活函数获得的参数maxvalue再通过滑动平均的方法来更新,如公式3所示:
[0036]vt
=β
·vt-1
+(1-β)
·

t
)
ꢀꢀ
公式3
[0037]
变量说明:v
t
为变量v在t时刻的值,β为加权系数,θ
t
为变量v在t时刻的值,v
t-1
为变
量v在t-1时刻的值。
[0038]
所述步骤s2.2通过以下步骤处理得到最大值:
[0039]
1:将relux(v)赋值给参数v:v=relux(v);
[0040]
2:getchannelsnum(v)获取feature map的通道数并赋值给参数channels:channels=getchannelsnum(v);
[0041]
3:getbatchnum(v)获取feature map的batch的大小并赋值给参数batchnum:batchnum=getbatchnum(v);
[0042]
4:初始化参数maxvalue:maxvalue=0.0;
[0043]
5:tag从0到batchnum值时,进行:for tag=0to batchnum do;
[0044]
6:vvaluetag=v[tag];
[0045]
7:getchannelmax(v)获取feature map每个通道上的最大值并赋值给参数perchannelmax:perchannelmax=getchannelmax(vvaluetag)
[0046]
8:reducesum(perchannelmax)求变量perchannelmax的和后再除以参数channels值,并与参数maxvalue值相加再赋值给参数maxvalue:maxvalue+=reducesum(perchannelmax)/channels;
[0047]
9:end for;
[0048]
10:参数maxvalue值除以batchnum值并赋值给参数maxvalue:maxvalue=maxvalue/batchnum。
[0049]
所述步骤s2.3中,滑动平均时加权系数β的值设置为0.996,初始值设置为3.0,其中初始值为公式3中v
t
并且t=0;则训练过程中x值为maxvalue,并记录下maxvalue,推理的过程中使用统计的最大值而不需要重新计算feature的最大值。
[0050]
所述步骤s3包括:
[0051]
s3.1,数据量化:对于待量化的数据按公式2进行量化,得到低比特的数据,训练时将权重和激活量化到2bit:
[0052][0053]
变量说明:wf为全精度数据是一个数组,wq为模拟量化后的数据,maxw全精度数据wf中最大值,minw全精度数据wf中最小值,b为量化后的位宽;
[0054]
s3.2,在训练模型的同时,获取feature map的最大值再通过滑动平均的方法统计最大值,用maxvalue表示;
[0055]
s3.3,对每一层激活函数获得的参数maxvalue再通过滑动平均的方法来更新,如公式3所示:
[0056]vt
=β
·vt-1
+(1-β)
·

t
)
ꢀꢀ
公式3
[0057]
变量说明:v
t
为变量v在t时刻的值,β为加权系数,θ
t
为变量v在t时刻的值,v
t-1
为变量v在t-1时刻的值。
[0058]
在训练2bit模型时,maxvalue需要重新统计,滑动平均时加权系数β的值设置为0.998,初始值设置为2.0,其中初始值为公式3中v
t
并且t=0。
[0059]
所述方法还可以包括:
[0060]
s4,测试网络效果;
[0061]
s5,输出网络。
[0062]
由此,本技术的优势在于:
[0063]
(1)先基于数据集训练一个全精度模型,然后再训练4bit模型,2bit模型,降低训练难度,提高模型的收敛速度和最终的效果;
[0064]
(2)由于每次改变位宽后feature map的分布都会发生变化,所以每次改变位宽训练时都会重新统计feature map的值,使得每一层都能获得一个和当前位宽下实际分布最切合的最大值。
附图说明
[0065]
此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不构成对本发明的限定。
[0066]
图1是本发明方法的流程示意图。
[0067]
图2是bn和relu操作的流程示意图。
[0068]
图3是在训练时将relu激活函数换为relux的流程示意图。
[0069]
图4是低比特模型训练的流程示意图。
[0070]
图5是获取feature map的最大值再通过滑动平均的方法统计最大值,处理步骤的示意图。
[0071]
图6是整个训练流程的示意图。
具体实施方式
[0072]
为了能够更清楚地理解本发明的技术内容及优点,现结合附图对本发明进行进一步的详细说明。
[0073]
如图1所示,本发明涉及一种优化神经网络模型激活的量化方法,所述方法包括以下步骤:
[0074]
s1,基于数据集先训练一版全精度模型达到目标精度;
[0075]
s2,基于全精度模型训练权重和激活量化到4bit的模型,并且在训练的同时统计feature map的最大值;
[0076]
s3,再基于步骤s2训练的4bit模型训练权重和激活量化到2bit的模型,并且重新统计feature map的最大值。
[0077]
具体地,包括以下内容:
[0078]
1全精度模型训练:
[0079]
1)训练数据:
[0080]
训练模型的数据集是imagenet1000,该数据集是imagenet数据集的一个子集,有大约1.2million的训练集,5万验证集,15万测试集,1000个类别。
[0081]
2)模型:
[0082]
本次训练采用的基础神经网络模型是mobilenetv1,该网络是一种基于深度可分离卷积的模型,本文提到的一些修改是在该模型上进行修改的。
[0083]
3)选择激活函数:
[0084]
mobilenetv1模型,在每一层卷积后面都会加上bn和relu操作,如图2所示,mobilenetv1模型,在每一层卷积后面都会加上bn和relu操作。先卷积conv2d,然后bn,再进行relu操作。其中,bn批量归一化层的是这样定义的,当使用批量梯度下降(或小批量)时,对前一层的输出在批量的维度上进行归一化,即其中,
[0085]
其中n是输入批量,是前一层输出批量中的第i个,ε是为避免0除而设置的较小数。
[0086]
不过由于训练的模型需要量化到低比特,所以直接采用relu激活函数的话,每一层激活输出的feature map的最大值是未知并且是没有上界的,这样对量化到低比特是不利的,由于之后需要将feature map量化到2bit,所以在训练时将relu激活函数换为relux:
[0087][0088]
如图3所示,是将图2中在训练时将relu激活函数换为relux的流程。
[0089]
4)训练网络:
[0090]
对于网络的训练基本步骤是:先采用adam优化器训练60个epoch,然后再用sgd优化器直至训练结束。
[0091]
5)测试网络效果:
[0092]
利用测试集测试网络结果。
[0093]
2.低比特模型训练:
[0094]
如图4所示,低比特模型训练流程,具体是:首先训练4bit模型,其次训练2bit模型,再次测试网络效果,最后输出网络。
[0095]
1)训练4bit的模型:
[0096]
数据量化:对于待量化的数据按照以下所示的公式进行量化,得到低比特的数据。
[0097][0098]
变量说明:wf为全精度数据是一个数组,wq为模拟量化后的数据,maxw全精度数据wf中最大值,minw全精度数据wf中最小值,b为量化后的位宽。
[0099]
第一步训练时将权重和激活量化到4bit,在训练模型的同时,通过以下处理获取feature map的最大值再通过滑动平均的方法统计最大值,处理步骤如下:
[0100]
1:v=relux(v)
[0101]
2:channels=getchannelsnum(v)
[0102]
3:batchnum=getbatchnum(v)
[0103]
4:maxvalue=0.0
[0104]
5:for tag=0 to bachnum do
[0105]
6:vvaluetag=v[tag]
[0106]
7:perchannelmax=getchannelmax(vvaluetag)
[0107]
8:
[0108]
9:end for
[0109]
10:
[0110]
11:max value=max(max value,0.0)
[0111]
12:maxvalue=min(maxvalue,3.0)
[0112]
函数说明:getchannelsnum(v)获取feature map的通道数,getbatchnum(v)获取feature map的batch的大小,getchannelmax(v)获取feature map每个通道上的最大值,reducesum(v)求变量v的和。
[0113]
3、对每一层激活函数获得的maxvalue再通过滑动平均的方法来更新,公式如下所示:
[0114]vt
=β
·vt-1
+(1-β)
·

t
)
[0115]
变量说明:v
t
为变量v在t时刻的值,β为加权系数,θ
t
为变量v在t时刻的值,v
t-1
为变量v在t-1时刻的值。
[0116]
滑动平均时加权系数β的值设置为0.996,初始值设置为3.0。则训练过程中x值为maxvalue,并记录下maxvalue,推理的过程中使用统计的最大值而不需要重新计算feature的最大值。流程如图5所示,训练过程中x值为maxvalue,并记录下maxvalue,推理的过程中使用统计的最大值而不需要重新计算feature的最大值:bn操作后,进行计算最大值computemaxvalue,同时计算函数relux(x=maxvalue),其中函数的参数为最大值maxvalue。如图6所示,整个训练流程:计算权重weight,根据权重计算量化quantize(weight),预分层prelayer,并根据量化结果进行卷积和批量归一化;进一步进行relux(x=maxvalue);进行量化quantize(x)。
[0117]
2)训练2bit的模型
[0118]
经过第一步训练后得到一个权重和激活都量化成4bit的模型,然后再基于该模型训练权重和激活都量化成2bit的模型,具体的流程和训练4bit的模型流程是一致的并且在训练2bit模型时,maxvalue需要重新统计,滑动平均时加权系数β的值设置为0.998,初始值设置为2.0。
[0119]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1