一种量化推理超参数大于1时确保推理精度的方法与流程

文档序号:30595486发布日期:2022-07-01 20:35阅读:97来源:国知局
一种量化推理超参数大于1时确保推理精度的方法与流程

1.本发明涉及图像处理技术领域,特别涉及一种量化推理超参数大于1时确保推理精度的方法。


背景技术:

2.现有技术中,对模型进行定点化,即对网络进行的权重和feature输出进行定点化处理,使得网络前向传播过程中避免float数的存在,从而提升网络的运行效率及速度;然而由于模型在训练的过程中scale存在多种因素的影响,会导致scale大于1(正常模型的scale值是小于1的float数)的情况,使得模型定点化无法进行移位操作。
3.原始网络模型定点化公式中对scale的处理需满足scale小于1的要求,scale小于1时,通过移位转化scale至[0.5,1]的区间,然后对scale乘以2的32次方进行定点化;然而网络训练时,模型合并的scale会存在value大于1的情况,因此需要对大于1的scale超参进行额外的处理;换句话说,现有技术中对scale参数进行定点化时,需要满足scale小于1的要求,模型训练的过程中scale值无法保证scale一定小于1,从而导致模型训练完之后无法在定点化推理模型上运行。
[0004]
现有技术中的常用术语如下:
[0005]
量化定点化推理:将权重和feature根据超参数进行定点化推理,量化至定点化位宽;
[0006]
超参数:定点化过程中对超参数(scale)定点化求解过程。


技术实现要素:

[0007]
为了解决上述问题,本方法的目的在于:修改模型的定点化过程,使得模型能够同时满足scale大于或者小于1的情况。
[0008]
具体地,本发明提供一种量化推理超参数大于1时确保推理精度的方法,所述方法包括:
[0009]
假设第i层的量化计算如下所示:
[0010][0011][0012]
xq=scale(qf*qw+bias)
[0013]
然后把scale进行31位定点化运算:
[0014]
其中,增加scale大于1.0的定点化过程,即增加left_shift参数,所述left_shift参数为右移操作值,在对模型超参数量化移位过程中减去left_shift参数,确保网络在scale推理参数能够满足模型的定点化通用性。其中,所述右移操作,逐步使得scale的值缩
进至0.5与1.0之间,left_shift的命名是以实际应用时定点化进行命名。
[0015]
所述方法进一步包括以下步骤:
[0016]
s1,初始化:其中包括:left_shift参数并赋值为0;
[0017]
s2,对scale进行小于1.0的定点化;
[0018]
s3,对scale进行大于1.0的定点化:
[0019]
当scale值大于1.0时:即while(scale》1.0f);
[0020]
scale值除以2并赋值给scale:scale=scale/2.0;
[0021]
left_shift加1并赋值给left_shift:left_shift=left_shift+1;
[0022]
定点化:int32_t mul=static_cast《int32_t》(round(real_multiplier*(1ll《《max_precision)));
[0023]
s4,进行超参数量化,增加scale大于1.0的超参数量化:
[0024]
增加scale定点化过程中左移与右移的值,同时在定点化过程中减去对右移left_right的值:
[0025]
使得网络的输入通过右移的形式还原到网络量化的结果,避免网络float的运算,同时由于scale大于1时求取得右移left_right,所以需要减去left_right值,确保量化结果一致性:int32_t ab=static_cast《int32_t》((xw*mul)》》(max_precision-left_right)),左移:const int32_t mask=(1《《right_shift)-1;
[0026]
const int32_t one=1;
[0027]
通过ab和mask两者结果的与操作,确保量化输出的精度,决定0.5是向上保留还是向下:int32_t remainder=ab&mask;
[0028]
mask右移1位并赋值于阈值threshold:const int32_t threshold=mask》》1;
[0029]
ab右移并赋值于ab:int32_t temp3=ab》》right_shift;
[0030]
int temp4=0;
[0031]
如果remainder大于阈值threshold:if(remainder》threshold);则temp4=1;
[0032]
res=temp3+temp4;
[0033]
其中xw为网络输入,mul与right_shift为定点化时模型乘以2的31次方的超参数。
[0034]
所述31位定点化运算是通过对scale,scale值为小的全精度数,通过对scale移位,使得scale值保持在[0.5,1]之间,然后使得scale与2的31次方相乘取round操作,求取整数值;
[0035]
所述步骤s1具体包括以下表达式:
[0036]
right_shift=0;
[0037]
max_precision=31;
[0038]
left_shift=0。
[0039]
所述步骤s2具体包括:
[0040]
正常情况下对scale进行小于1.0的定点化表达式如下:
[0041]
当real_multiplier《0.5f时:while(real_multiplier《0.5f);
[0042]
scale=scale*2.0;
[0043]
right_shift=right_shift+1。
[0044]
所述步骤s2还可以包括:
[0045]
scale小于1时对定点化数据进行量化的操作,表达式如下:
[0046]
int32_t ab=static_cast《int32_t》((xw*mul)》》max_precision);
[0047]
const int32_t mask=(1《《right_shift)-1;
[0048]
const int32_t one=1;
[0049]
int32_t remainder=ab&mask;
[0050]
const int32_t threshold=mask》》1;
[0051]
int32_t temp3=ab》》right_shift;
[0052]
int temp4=0;
[0053]
if(remainder》threshold)
[0054]
temp4=1;
[0055]
res=temp3+temp4;
[0056]
其中xw为网络输入,mul与right_shift为定点化时模型乘以2的31次方的超参数。
[0057]
由此,本技术的优势在于:本方法可以使得模型在定点化过程中不需要过度对scale进行依赖,scale无论大于1还是小于1均可以满足模型的定点化通用性。
附图说明
[0058]
此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不构成对本发明的限定。
[0059]
图1是本方法的流程示意图。
具体实施方式
[0060]
为了能够更清楚地理解本发明的技术内容及优点,现结合附图对本发明进行进一步的详细说明。
[0061]
本发明属于深度神经网络基于低bit(4bit,5bit)对超参数scale求解过程及定点化过程中出现scale参数大于1情况的一个补充,确保解决网络前向推理过程中由于scale大于1导致网络模型定点化异常的问题;通过对定点化过程的进一步的改进,使得模型定点化的scale值可以大于1,确保模型的定点化量化精度。
[0062]
本技术方法提出基于模型定点化过程中对scale定点化过程中大于1的处理,保证模型精度及推理正确性。
[0063]
如图1所示,本发明涉及一种量化推理超参数大于1时确保推理精度的方法,所述方法包括:
[0064]
假设第i层的量化计算如下所示:
[0065][0066][0067]
xq=scale(qf*qw+bias)
[0068]
然后把scale进行31位定点化运算:
[0069]
其中,增加scale大于1.0的定点化过程,即增加left_shift参数,增加left_shift右移操作值,在对模型超参数量化移位过程中减去left_shift参数,确保网络在scale推理参数能够满足模型的定点化通用性。
[0070]
所述方法进一步包括以下步骤:
[0071]
s1,初始化:其中包括:left_shift参数并赋值为0;
[0072]
s2,对scale进行小于1.0的定点化;
[0073]
s3,对scale进行大于1.0的定点化:
[0074]
当scale值大于1.0时:即while(scale》1.0f);
[0075]
scale值除以2并赋值给scale:scale=scale/2.0;
[0076]
left_shift加1并赋值给left_shift:left_shift=left_shift+1;定点化:int32_t mul=static_cast《int32_t》(round(real_multiplier*(1ll《《max_precision)));
[0077]
s4,进行超参数量化,增加scale大于1.0的超参数量化:
[0078]
增加scale定点化过程中左移与右移的值,同时在定点化过程中减去对left_right的值:
[0079]
使得网络的输入通过右移的形式还原到网络量化的结果,避免网络float的运算,同时由于scale大于1时求取得left_right,所以需要减去left_right值,确保量化结果一致性:int32_t ab=static_cast《int32_t》((xw*mul)》》(max_precision-left_right));左移:const int32_t mask=(1《《right_shift)-1;
[0080]
const int32_t one=1;
[0081]
通过ab和mask两者结果的与操作,确保量化输出的精度,决定0.5是向上保留还是向下:int32_t remainder=ab&mask;
[0082]
const int32_t threshold=mask》》1;
[0083]
int32_t temp3=ab》》right_shift;
[0084]
int temp4=0;
[0085]
if(remainder》threshold)
[0086]
temp4=1;
[0087]
res=temp3+temp4;
[0088]
其中xw为网络输入,mul与right_shift为定点化时模型乘以2的31次方的超参数。
[0089]
具体地,本技术实基于模型定点化过程中对scale定点化过程中大于1的解决,保证模型精度及推理正确性:
[0090]
假设第i层的量化计算如下所示:
[0091][0092][0093]
xq=scale(qf*qw+bias)
[0094]
然后把scale进行31位定点化运算:
[0095]
注:31位定点化运算即通过对scale(一般情况值很小的全精度数),通过对scale移位,使得scale值保持在[0.5,1]之间,然后使得scale与2的31次方相乘取round操作,求取整数值;
[0096]
在正常情况下也即现有方案中,对scale进行小于1.0的定点化:
[0097]
right_shift=0
[0098]
max_precision=31
[0099]
while(real_multiplier《0.5f)
[0100]
scale=scale*2.0;
[0101]
right_shift=right_shift+1;
[0102]
int32_t mul=static_cast《int32_t》(round(real_multiplier*(1ll《《max_precision)));
[0103]
以下是,scale小于1时对定点化数据进行量化的操作:
[0104]
max_precision=31
[0105]
int32_t ab=static_cast《int32_t》((xw*mul)》》max_precision);
[0106]
const int32_t mask=(1《《right_shift)-1;
[0107]
const int32_t one=1;
[0108]
int32_t remainder=ab&mask;
[0109]
const int32_t threshold=mask》》1;
[0110]
int32_t temp3=ab》》right_shift;
[0111]
int temp4=0;
[0112]
if(remainder》threshold)
[0113]
temp4=1;
[0114]
res=temp3+temp4;
[0115]
其中xw为网络输入,mul与right_shift为定点化时模型乘以2的31次方的超参数。
[0116]
而本技术的改进部分如下:
[0117]
改进scale大于1.0的定点化:
[0118]
right_shift=0
[0119]
left_shift=0
[0120]
while(real_multiplier《0.5f)
[0121]
scale=scale*2.0;
[0122]
right_shift=right_shift+1;
[0123]
while(scale》1.0f)
[0124]
scale=scale/2.0;
[0125]
left_shift=left_shift+1;
[0126]
int32_t mul=static_cast《int32_t》(round(real_multiplier*(1ll《《max_precision)));
[0127]
注:增加scale大于1.0的定点化,增加left_shift参数,确保网络在scale推理参数的更加全面化;
[0128]
改进scale大于1.0的超参数量化:
[0129]
max_precision=31
[0130]
int32_t ab=static_cast《int32_t》((xw*mul)》》(max_precision-left_right));
[0131]
const int32_t mask=(1《《right_shift)-1;
[0132]
const int32_t one=1;
[0133]
int32_t remainder=ab&mask;
[0134]
const int32_t threshold=mask》》1;
[0135]
int32_t temp3=ab》》right_shift;
[0136]
int temp4=0;
[0137]
if(remainder》threshold)
[0138]
temp4=1;
[0139]
res=temp3+temp4;
[0140]
通过增加scale定点化过程中左移与右移的值,同时在定点化过程中减去对left_right的值,从而确保网络定点化过程模型推理正确,增加网络模型推理的通用性;
[0141]
注:在原有定点化处理中添加scale大于1.0处理情况,增加left_shift右移操作值,在对模型超参数量化移位过程中减去left_shift,使得模型推理时的定点化与量化使用scale大于1与小于1的情况,推理过程更加全面;
[0142]
注:改进方法即对现有定点化处理的完善,特别是,原始定点化的处理,只能实用于模型参数scale为小于等于1的情况,网络训练的过程中有时会出现scale大于1的情况,导致模型推理过程出现错误,因此通过改进scale大于1的定点化与量化处理,使得网络scale合成更加的完善、全面。
[0143]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1