1.本发明涉及模型优化技术领域,具体的说是一种用于降低神经网络模型量化误差的方法及系统。
背景技术:
2.近年来,神经网络模型被广泛应用在许多领域,并取得了非常好的效果。但是,神经网络模型由于模型复杂度高、模型大,导致推理时效率较低,推理时间较长。
3.因此,如何设计低资源消耗的,可以实时预测的、同时保证预测精度的模型成为一个现实问题。如:在类似于单片机的低功耗设备上,需要低资源消耗的模型;在对实时性要求高的领域,不限于语音识别、自动驾驶领域,要求可以实时预测的模型。针对这些问题,一般可以从设计高效的模型架构、设计适合特定硬件的模型架构、网络剪枝、知识蒸馏以及模型量化等方面入手。其中,模型量化在这些问题取得了较好的效果,将模型从浮点类型量化成定点类型可以有效降低模型大小,同时提高模型推理速度。
4.在神经网络模型量化中,由于修改了模型权重、偏置以及激活值的精度,模型的量化往往导致模型精度下降。神经网络模型量化可以分为按层量化、按通道量化、按子通道量化等。针对常用的按层量化,每层取值范围是由各通道的取值范围决定的,具体来说,是由每层取值范围所在的通道决定的,而其他通道取值范围往往远小于每层取值范围,这是造成量化误差的重要原因。
5.基于此,设计研发一种用于降低神经网络模型量化误差的方法及系统,通过放大其他通道数值,以匹配层取值范围数值大小,并且在下一层弥补该层放大数值带来的影响。
技术实现要素:
6.本发明针对目前技术发展的需求和不足之处,提供一种用于降低神经网络模型量化误差的方法及系统,实现通过放大其他通道数值来匹配层取值范围数值大小,并且在下一层弥补该层放大数值带来的影响。
7.首先,本发明提供一种用于降低神经网络模型量化误差的方法,解决上述技术问题采用的技术方案如下:
8.一种用于降低神经网络模型量化误差的方法,其实现内容包括:
9.(1)获取神经网络模型第一层;
10.(2)基于获取层,计算神经网络模型下一层每个输入通道的绝对值的最大值、以及神经网络模型下一层所有输入通道的绝对值的最大值;
11.(3)计算获取层权重的输出通道的绝对值最大值、以及获取层权重所有输出通道的绝对值最大值;
12.(4)计算获取层激活值的输出通道的绝对值最大值、以及获取层激活值所有输出通道的绝对值最大值;
13.(5)计算权重缩放因子以及激活值缩放因子;
14.(6)基于权重缩放因子以及激活值缩放因子,计算获取层的缩放因子;
15.(7)缩放因子规范化,保证缩放因子取值大于等于1;
16.(8)使用缩放因子对获取层的权重和偏置进行缩放;
17.(9)基于获取层,继续获取其下一层来作为新的获取层,执行步骤(2)-(8),直到神经网络模型的最后一层。
18.可选的,执行步骤(5)时,使用如下公式a,计算权重缩放因子weight_scale:
[0019][0020]
其中,weight_output_channel_max表示获取层权重的输出通道的绝对值最大值,weight_output_max表示获取层权重所有输出通道的绝对值最大值,
[0021]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0022]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0023]
进一步可选的,执行步骤(5)时,使用如下公式b,计算权重缩放因子activation_scale:
[0024][0025]
其中,activation_output_channel_max表示获取层激活值的输出通道的绝对值最大值,
[0026]
activation_output_max表示获取层激活值所有输出通道的绝对值最大值,
[0027]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0028]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0029]
进一步可选的,执行步骤(6)时,基于权重缩放因子weight_scale以及权重缩放因子activation_scale,使用公式c计算获取层的缩放因子scale:
[0030]
scale=min(weight_scale,activation_scale,maxs)
ꢀꢀꢀ
公式c,
[0031]
其中,maxs表示缩放因子的取值上限。
[0032]
可选的,执行步骤(9)的过程中,首先判断获取层是否为神经网络模型的最后一层,如果是,则直接结束,如果否,则执行步骤(2)-(8)。
[0033]
其次,本发明提供一种用于降低神经网络模型量化误差的系统,解决上述技术问题采用的技术方案如下:
[0034]
一种用于降低神经网络模型量化误差的系统,其结构包括:
[0035]
顺序获取模块,用于顺序获取神经网络模型的所有层;
[0036]
计算模块一,用于基于获取层,计算获取层的下一层每个输入通道的绝对值的最大值、以及获取层的下一层所有输入通道的绝对值的最大值;
[0037]
计算模块二,用于计算获取层权重的输出通道的绝对值最大值、以及获取层权重所有输出通道的绝对值最大值;
[0038]
计算模块三,用于计算获取层激活值的输出通道的绝对值最大值、以及获取层激活值所有输出通道的绝对值最大值;
[0039]
计算模块四,用于计算权重缩放因子以及激活值缩放因子;
[0040]
计算模块五,用于基于权重缩放因子以及激活值缩放因子,计算获取层的缩放因子;
[0041]
规范模块,用于对缩放因子进行规范化处理,保证缩放因子取值大于等于1;
[0042]
缩放模块,用于使用缩放因子对获取层的权重和偏置进行缩放;
[0043]
判断模块,用于判断顺序获取模块的获取层是否为神经网络模型的最后一层,如果是,则直接结束,如果否,则继续执行计算模块一。
[0044]
可选的,所涉及计算模块四使用如下公式a,计算权重缩放因子weight_scale:
[0045][0046]
其中,weight_output_channel_max表示获取层权重的输出通道的绝对值最大值,weight_output_max表示获取层权重所有输出通道的绝对值最大值,
[0047]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0048]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0049]
进一步可选的,所涉及计算模块四执行步骤(5)时,使用如下公式b,计算权重缩放因子activation_scale:
[0050][0051]
其中,activation_output_channel_max表示获取层激活值的输出通道的绝对值最大值,
[0052]
activation_output_max表示获取层激活值所有输出通道的绝对值最大值,
[0053]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0054]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0055]
进一步可选的,所涉及计算模块五使用公式c计算获取层的缩放因子scale:
[0056]
scale=min(weight_scale,activation_scale,maxs)
ꢀꢀꢀ
公式c,
[0057]
其中,maxs表示缩放因子的取值上限。
[0058]
本发明的一种用于降低神经网络模型量化误差的方法,与现有技术相比具有的有益效果是:
[0059]
(1)本发明通过缩放因子更改神经网络模型的权重,使得神经网络模型各通道的权重均衡,同时保证不改变神经网络模型输出,以达到降低神经网络模型量化误差的目的;
[0060]
(2)本发明适用于模型训练后进行量化,且按层量化的情况。
附图说明
[0061]
附图1是本发明实施例一的方法流程图;
[0062]
附图2是本发明实施例二的连接框图。
[0063]
1、顺序获取模块,2、计算模块一,3、计算模块二,4、计算模块三,
[0064]
5、计算模块四,6、计算模块五,7、规范模块,8、缩放模块,9、判断模块。
具体实施方式
[0065]
为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清楚、完整的描述。
[0066]
实施例一:
[0067]
结合附图1,本实施例提出一种用于降低神经网络模型量化误差的方法,其实现内容包括:
[0068]
(1)获取神经网络模型第一层。
[0069]
(2)基于获取层,计算神经网络模型下一层每个输入通道的绝对值的最大值、以及神经网络模型下一层所有输入通道的绝对值的最大值。
[0070]
(3)计算获取层权重的输出通道的绝对值最大值、以及获取层权重所有输出通道的绝对值最大值。
[0071]
(4)计算获取层激活值的输出通道的绝对值最大值、以及获取层激活值所有输出通道的绝对值最大值。
[0072]
(5)计算权重缩放因子以及激活值缩放因子,具体的,
[0073]
使用如下公式a,计算权重缩放因子weight_scale:
[0074][0075]
其中,weight_output_channel_max表示获取层权重的输出通道的绝对值最大值,weight_output_max表示获取层权重所有输出通道的绝对值最大值,
[0076]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0077]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0078]
使用如下公式b,计算权重缩放因子activation_scale:
[0079][0080]
其中,activation_output_channel_max表示获取层激活值的输出通道的绝对值最大值,
[0081]
activation_output_max表示获取层激活值所有输出通道的绝对值最大值,
[0082]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0083]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0084]
(6)基于权重缩放因子weight_scale以及权重缩放因子activation_scale,使用公式c计算获取层的缩放因子scale:
[0085]
scale=min(weight_scale,activation_scale,maxs)
ꢀꢀꢀ
公式c,
[0086]
其中,maxs表示缩放因子的取值上限。
[0087]
(7)缩放因子规范化,保证缩放因子取值大于等于1。
[0088]
(8)使用缩放因子对获取层的权重和偏置进行缩放。
[0089]
(9)基于获取层,继续获取其下一层来作为新的获取层,执行步骤(2)-(8),直到神经网络模型的最后一层。
[0090]
执行步骤(9)的过程中,首先判断获取层是否为神经网络模型的最后一层,如果是,则直接结束,如果否,则执行步骤(2)-(8)。
[0091]
实施例二:
[0092]
结合附图2,本实施例提出一种用于降低神经网络模型量化误差的系统,其结构包括:
[0093]
顺序获取模块1,用于顺序获取神经网络模型的所有层;
[0094]
计算模块一2,用于基于获取层,计算获取层的下一层每个输入通道的绝对值的最大值、以及获取层的下一层所有输入通道的绝对值的最大值;
[0095]
计算模块二3,用于计算获取层权重的输出通道的绝对值最大值、以及获取层权重所有输出通道的绝对值最大值;
[0096]
计算模块三4,用于计算获取层激活值的输出通道的绝对值最大值、以及获取层激活值所有输出通道的绝对值最大值;
[0097]
计算模块四5,用于计算权重缩放因子以及激活值缩放因子;
[0098]
计算模块五6,用于基于权重缩放因子以及激活值缩放因子,计算获取层的缩放因子;
[0099]
规范模块7,用于对缩放因子进行规范化处理,保证缩放因子取值大于等于1;
[0100]
缩放模块8,用于使用缩放因子对获取层的权重和偏置进行缩放;
[0101]
判断模块9,用于判断顺序获取模块1的获取层是否为神经网络模型的最后一层,如果是,则直接结束,如果否,则继续执行计算模块一2。
[0102]
本实施例中,计算模块四5使用如下公式a,计算权重缩放因子weight_scale:
[0103][0104]
其中,weight_output_channel_max表示获取层权重的输出通道的绝对值最大值,weight_output_max表示获取层权重所有输出通道的绝对值最大值,
[0105]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0106]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0107]
计算模块四5执行步骤(5)时,使用如下公式b,计算权重缩放因子activation_scale:
[0108][0109]
其中,activation_output_channel_max表示获取层激活值的输出通道的绝对值最大值,
[0110]
activation_output_max表示获取层激活值所有输出通道的绝对值最大值,
[0111]
next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,
[0112]
next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。
[0113]
计算模块五6使用公式c计算获取层的缩放因子scale:
[0114]
scale=min(weight_scale,activation_scale,maxs)
ꢀꢀꢀ
公式c,
[0115]
其中,maxs表示缩放因子的取值上限。
[0116]
综上可知,采用本发明的一种用于降低神经网络模型量化误差的方法及系统,通过缩放因子更改神经网络模型的权重,使得神经网络模型各通道的权重均衡,同时保证不改变神经网络模型输出,以达到降低神经网络模型量化误差的目的。
[0117]
以上应用具体个例对本发明的原理及实施方式进行了详细阐述,这些实施例只是用于帮助理解本发明的核心技术内容。基于本发明的上述具体实施例,本技术领域的技术人员在不脱离本发明原理的前提下,对本发明所作出的任何改进和修饰,皆应落入本发明的专利保护范围。
技术特征:
1.一种用于降低神经网络模型量化误差的方法,其特征在于,其实现内容包括:(1)获取神经网络模型第一层;(2)基于获取层,计算神经网络模型下一层每个输入通道的绝对值的最大值、以及神经网络模型下一层所有输入通道的绝对值的最大值;(3)计算获取层权重的输出通道的绝对值最大值、以及获取层权重所有输出通道的绝对值最大值;(4)计算获取层激活值的输出通道的绝对值最大值、以及获取层激活值所有输出通道的绝对值最大值;(5)计算权重缩放因子以及激活值缩放因子;(6)基于权重缩放因子以及激活值缩放因子,计算获取层的缩放因子;(7)缩放因子规范化,保证缩放因子取值大于等于1;(8)使用缩放因子对获取层的权重和偏置进行缩放;(9)基于获取层,继续获取其下一层来作为新的获取层,执行步骤(2)-(8),直到神经网络模型的最后一层。2.根据权利要求1所述的一种用于降低神经网络模型量化误差的方法,其特征在于,执行步骤(5)时,使用如下公式a,计算权重缩放因子weight_scale:其中,weight_output_channel_max表示获取层权重的输出通道的绝对值最大值,weight_output_max表示获取层权重所有输出通道的绝对值最大值,next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。3.根据权利要求2所述的一种用于降低神经网络模型量化误差的方法,其特征在于,执行步骤(5)时,使用如下公式b,计算权重缩放因子activation_scale:其中,activation_output_channel_max表示获取层激活值的输出通道的绝对值最大值,activation_output_max表示获取层激活值所有输出通道的绝对值最大值,next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。4.根据权利要求3所述的一种用于降低神经网络模型量化误差的方法,其特征在于,执行步骤(6)时,基于权重缩放因子weight_scale以及权重缩放因子activation_scale,使用公式c计算获取层的缩放因子scale:scale=min(weight_scale,activation_scale,maxs)
ꢀꢀꢀ
公式c,其中,maxs表示缩放因子的取值上限。5.根据权利要求1所述的一种用于降低神经网络模型量化误差的方法,其特征在于,执行步骤(9)的过程中,首先判断获取层是否为神经网络模型的最后一层,如果是,则直接结
束,如果否,则执行步骤(2)-(8)。6.一种用于降低神经网络模型量化误差的系统,其特征在于,其结构包括:顺序获取模块,用于顺序获取神经网络模型的所有层;计算模块一,用于基于获取层,计算获取层的下一层每个输入通道的绝对值的最大值、以及获取层的下一层所有输入通道的绝对值的最大值;计算模块二,用于计算获取层权重的输出通道的绝对值最大值、以及获取层权重所有输出通道的绝对值最大值;计算模块三,用于计算获取层激活值的输出通道的绝对值最大值、以及获取层激活值所有输出通道的绝对值最大值;计算模块四,用于计算权重缩放因子以及激活值缩放因子;计算模块五,用于基于权重缩放因子以及激活值缩放因子,计算获取层的缩放因子;规范模块,用于对缩放因子进行规范化处理,保证缩放因子取值大于等于1;缩放模块,用于使用缩放因子对获取层的权重和偏置进行缩放;判断模块,用于判断顺序获取模块的获取层是否为神经网络模型的最后一层,如果是,则直接结束,如果否,则继续执行计算模块一。7.根据权利要求6所述的一种用于降低神经网络模型量化误差的系统,其特征在于,所述计算模块四使用如下公式a,计算权重缩放因子weight_scale:其中,weight_output_channel_max表示获取层权重的输出通道的绝对值最大值,weight_output_max表示获取层权重所有输出通道的绝对值最大值,next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。8.根据权利要求7所述的一种用于降低神经网络模型量化误差的系统,其特征在于,所述计算模块四执行步骤(5)时,使用如下公式b,计算权重缩放因子activation_scale:其中,activation_output_channel_max表示获取层激活值的输出通道的绝对值最大值,activation_output_max表示获取层激活值所有输出通道的绝对值最大值,next_input_channel_max表示神经网络模型下一层每个输入通道的绝对值的最大值,next_input_max表示神经网络模型下一层所有输入通道的绝对值的最大值。9.根据权利要求8所述的一种用于降低神经网络模型量化误差的系统,其特征在于,所述计算模块五使用公式c计算获取层的缩放因子scale:scale=min(weight_scale,activation_scale,maxs)
ꢀꢀꢀ
公式c,其中,maxs表示缩放因子的取值上限。
技术总结
本发明公开一种用于降低神经网络模型量化误差的方法及系统,涉及模型优化技术领域,其实现包括:获取神经网络模型第一层;基于获取层,计算模型下一层每个输入通道的绝对值的最大值及所有输入通道的绝对值的最大值;计算获取层权重的输出通道的绝对值最大值及所有输出通道的绝对值最大值;计算获取层激活值的输出通道的绝对值最大值及所有输出通道的绝对值最大值;计算权重缩放因子及激活值缩放因子,计算获取层的缩放因子;缩放因子规范化;使用缩放因子对获取层的权重和偏置进行缩放;基于获取层,继续获取其下一层来作为新的获取层,执行前述过程,直到模型最后一层。本发明可以在不改变模型输出的前提下降低模型误差。以在不改变模型输出的前提下降低模型误差。以在不改变模型输出的前提下降低模型误差。
技术研发人员:陈其宾 李锐 张晖
受保护的技术使用者:山东浪潮科学研究院有限公司
技术研发日:2021.11.10
技术公布日:2022/3/8