掌桥专利:专业的专利平台
掌桥专利
首页

自适应模型量化方法及装置、存储介质及电子装置

文献发布时间:2023-06-19 19:28:50


自适应模型量化方法及装置、存储介质及电子装置

技术领域

本发明实施例涉及大数据技术领域,具体而言,涉及一种自适应模型量化方法及装置、存储介质及电子装置。

背景技术

深度学习模型量化是一种将高精度浮点数据的存储和计算转换成低精度整型数据来存储和计算的模型压缩技术。随着深度学习技术在计算机视觉、自然语言处理、语音等多个领域的快速落地,业界涌现出越来越多基于深度神经网络的智能应用,它们被广泛应用到智慧交通、智慧物流、智慧安防等各类AI应用场景中。然而,深度神经网络都有着占用空间大,计算量巨大的特点,这对用于部署神经网络模型的端侧设备的存储能力和算力都提出了更高的要求。为了降低成本,减少对部署设备的存储、带宽、能耗、算力的需求,模型量化应运而生。模型量化可以在损失一定精度的前提下对模型进行压缩,这将减小模型的大小;理论上计算机对低精度整型数据的读写、计算速度要比高精度的浮点数快,这将加速推理过程,将一个复杂的算法模型进行适当的量化能有效降低对部署设备的要求。模型量化会不可避免的带来精度损失,如何实现快速量化,又同时能尽可能的减少量化误差、减少精度损失是亟待解决的问题。

模型量化算法的核心思想是将高精度的如fp32数映射到低精度、低比特位的数上,例如映射到int8、int4,甚至int2。如图3所示,线性量化算法的通用表达式是:Q=round(S*(R-R

具体的,在量化一个深度神经网络模型时CN114386588A这篇专利使用的方法是对模型的每层进行量化,迭代每一层的量化参数直至找到使得该层量化后的精度满足预设精度阈值的量化参数,最后各层按该层确定的量化参数进行量化得到最终的量化模型。CN111027684A这篇专利使用的方法是仅对模型中对性能影响最大,占比最多的卷积层采用KL散度算法来确定每个卷积层的量化参数,其他层使用全精度,不做量化,最终得到一个混合精度的量化模型。CN111814955A这篇专利对神经网络的每层至少采用两种量化算法获得候选量化参数,再对比不同方法量化前和量化后数据的相关性选出最具相关性(最优)的量化参数,最后各层按该层最优的量化参数量化生成最终的量化模型。HK40066461A这篇专利以原始全精度模型为输入,利用强化学习算法生成不同混合精度的量化模型并选定输入推理出每个量化模型的精度损失,最后选出满足预设精度阈值的量化模型。

但现有的模型量化算法具有以下缺点:1、基于局部最优解找全局最优解的方法,局部最优不一定能保证全局一定最优,在评估量化误差时不仅要考虑每层,还应考虑整网最终的量化误差。2、模型被量化层的量化参数一旦确定得到,则整网的量化误差也就是确定的,当无法满足预设精度要求时,只能考虑换一种量化方法,然后再对模型做一次量化,它无法做到自适应的修正纠偏。

针对相关技术中,现有进行媒体资源信息处理的神经网络模型的模型量化方法单独通过某一层的量化误差来得到整个网络模型的总量化误差导致整个网络模块的总量化误差的准确率较低,以及在整个网络模型的总量化误差不满足要求的时候,不能实现自适应纠偏的问题,目前尚未提出有效的解决方案。

发明内容

本发明实施例提供了一种自适应模型量化方法及装置、存储介质及电子装置,以至少解决现有进行媒体资源信息处理的神经网络模型的模型量化方法单独通过某一层的量化误差来得到整个网络模型的总量化误差导致整个网络模块的总量化误差的准确率较低,以及在整个网络模型的总量化误差不满足要求的时候,不能实现自适应纠偏的问题。

根据本发明的一个实施例,提供了一种自适应模型量化方法,包括:确定原始神经网络模型中的N个层中待量化的参数,得到N组参数,其中,N为大于或等于2的正整数;对所述N组参数执行初次量化,并获取所述N组参数被量化所产生的总精度损失值,其中,所述总精度损失值用于表示所述N组参数被量化前所述N个层的输出与被量化后所述N个层的输出之间的精度损失;在所述总精度损失值大于预设的精度损失阈值的情况下,对所述N组参数执行M次量化,直到所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值,其中,M为大于或等于1的正整数,在所述M次量化中的各次量化中,所述N组参数中的部分组参数被量化;将在所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值时的所述原始神经网络模型确定为目标神经网络模型,并将待处理的媒体资源信息输入到所述目标神经网络模型,得到所述目标神经网络模型输出的所述媒体资源信息的目标处理结果。

在一个示例性的实施例中,所述对所述N组参数执行M次量化,包括:获取第i次量化后所述N组参数中的各组参数对应的精度损失值,得到第i次的N个精度损失值,其中,i为大于或等于1的正整数;根据所述第i次的N个精度损失值,确定所述第i次量化后所述N组参数被量化所产生的总精度损失值;在所述第i次量化后所述N组参数被量化所产生的总精度损失值大于所述精度损失阈值的情况下,根据所述第i次的N个精度损失值,在所述N组参数中确定待执行第i+1次量化的部分组参数;对确定出的所述待执行第i+1次量化的部分组参数执行所述第i+1次量化;在所述第i次量化后所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值的情况下,结束对所述N组参数执行所述M次量化。

在一个示例性的实施例中,所述根据所述第i次的N个精度损失值,确定所述第i次量化后所述N组参数被量化所产生的总精度损失值,包括:获取预先为所述N个层设置的N个权重值,其中,所述N个权重值与所述N个层具有一一对应的关系;对所述N个权重值和所述第i次的N个精度损失值执行加权求和操作,得到所述第i次量化后所述N组参数被量化所产生的总精度损失值。

在一个示例性的实施例中,所述根据所述第i次的N个精度损失值,在所述N组参数中确定待执行第i+1次量化的部分组参数,包括:在预先为所述N个层设置了N个权重值的情况下,将所述第i次的N个精度损失值与所述N个权重值进行对应相乘,得到N个加权精度损失值,其中,所述N个权重值与所述N个层具有一一对应的关系,所述N个加权精度损失值中的第j个加权精度损失值是将所述第i次的N个精度损失值中的第j个精度损失值与所述N个权重值中的第j个权重值进行对应相乘所得到的加权精度损失值,所述第j个精度损失值和所述第j个权重值均与所述N个层中的第j层对应,j为大于或等于1、且小于或等于N的正整数;将所述第i次量化后的所述N组参数中所述加权精度损失值从大到小排在前K位的K组参数确定为所述待执行第i+1次量化的部分组参数,其中,K等于1或K为小于N的正整数。

在一个示例性的实施例中,所述对确定出的所述待执行第i+1次量化的部分组参数执行所述第i+1次量化,包括:在所述待执行第i+1次量化的部分组参数包括所述第i次量化后的所述N组参数中的K组参数、且所述K组参数在执行第i次量化时使用的量化参数为第i次的K个量化参数的情况下,将所述第i次的K个量化参数调整为第i+1次的K个量化参数,其中,K等于1或K为小于N的正整数;使用所述第i+1次的K个量化参数对所述第i次量化后的所述K组参数执行所述第i+1次量化。

在一个示例性的实施例中,所述将所述第i次的K个量化参数调整为第i+1次的K个量化参数,包括:以所述第i次的K个量化参数为初始值,缩小所述第i次的K个量化参数中的量化输入范围;和/或以所述第i次的K个量化参数为初始值,增大所述第i次的K个量化参数中的量化位宽。

在一个示例性的实施例中,所述对所述N组参数执行M次量化,还包括:在使用所述第i+1次的K个量化参数对所述第i次量化后的所述K组参数执行所述第i+1次量化之后,获取所述第i+1次量化后所述N组参数中的各组参数对应的精度损失值,得到第i+1次的N个精度损失值,其中,所述第i+1次的N个精度损失值包括:所述第i次的N个精度损失值中除与所述K组参数对应的K个精度损失值之外的(N-K)个精度损失值,以及对所述K组参数执行了所述第i+1次量化后所述K组参数被量化所产生的K个精度损失值;根据所述第i+1次的N个精度损失值,确定所述第i+1次量化后所述N组参数被量化所产生的总精度损失值;在所述第i+1次量化后所述N组参数被量化所产生的总精度损失值大于所述精度损失阈值的情况下,根据所述第i+1次的N个精度损失值,在所述N组参数中确定待执行第i+2次量化的部分组参数;对确定出的所述待执行第i+2次量化的部分组参数执行所述第i+2次量化;在所述第i+1次量化后所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值的情况下,结束对所述N组参数执行所述M次量化。

根据本发明的另一个实施例,还提供了一种自适应模型量化装置,包括:确定模块,用于确定原始神经网络模型中的N个层中待量化的参数,得到N组参数,其中,N为大于或等于2的正整数;第一量化模块,用于对所述N组参数执行初次量化,并获取所述N组参数被量化所产生的总精度损失值,其中,所述总精度损失值用于表示所述N组参数被量化前所述N个层的输出与被量化后所述N个层的输出之间的精度损失;第二量化模块,用于在所述总精度损失值大于预设的精度损失阈值的情况下,对所述N组参数执行M次量化,直到所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值,其中,M为大于或等于1的正整数,在所述M次量化中的各次量化中,所述N组参数中的部分组参数被量化;处理模块,用于将在所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值时的所述原始神经网络模型确定为目标神经网络模型,并将待处理的媒体资源信息输入到所述目标神经网络模型,得到所述目标神经网络模型输出的所述媒体资源信息的目标处理结果。

根据本发明的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

通过本发明,由于总精度损失值用于表示所述N组参数被量化前所述N个层的输出与被量化后所述N个层的输出之间的精度损失,进而使得总精度损失值不是单独通过某一层的精度损失值确定的,解决了现有进行媒体资源信息处理的神经网络模型的模型量化方法单独通过某一层的量化误差来得到整个网络模型的总量化误差导致整个网络模块的量化误差的准确率较低的问题;同时由于本发明在总精度损失值大于预设的精度损失阈值的情况下,可以对N组参数中的部分组参数执行M次量化以使得总精度损失值小于或等于预设的精度损失阈值,进而解决了在整个网络模型的总量化误差不满足要求的时候,不能实现自适应纠偏的问题。达到了实现快速量化的时候,又同时能尽可能的减少量化误差、减少精度损失的效果。

附图说明

图1是本发明实施例的自适应模型量化方法的移动终端硬件结构框图;

图2是根据本发明实施例的一种自适应模型量化方法的流程图;

图3是根据本发明实施例的一种线性量化算法的原理图;

图4是根据本发明实施例的一种线性量化的示意图;

图5是根据本发明实施例的一种神经网络的结构示意图;

图6是根据本发明实施例的另一种自适应模型量化方法的流程图;

图7是根据本发明实施例的另一种神经网络模型量化装置的结构框图;

图8是根据本发明实施例的自适应模型量化装置的结构框图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明的实施例。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的自适应模型量化方法的移动终端硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的自适应模型量化方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

在本实施例中提供了一种自适应模型量化方法,图2是根据本发明实施例的自适应模型量化方法的流程图,如图2所示,该流程包括如下步骤:

步骤S202,确定原始神经网络模型中的N个层中待量化的参数,得到N组参数,其中,N为大于或等于2的正整数;

作为一种可选的示例,N为原始神经网络模型的层数,例如图5所示,包括卷积层,池化层、LSTM层,SoftMax层。

作为一种可选的示例,每个层对应一组参数,每组参数包括:权重值和激活值(层的输入值)。示例性的,卷积层对应的参数值包括卷积层对应的权重值和卷积层对应的输入值。

步骤S204,对所述N组参数执行初次量化,并获取所述N组参数被量化所产生的总精度损失值,其中,所述总精度损失值用于表示所述N组参数被量化前所述N个层的输出与被量化后所述N个层的输出之间的精度损失;

作为一种可选的示例,对所述N组参数执行初次量化包括对N组参数中每组参数进行量化。

作为一种可选的示例,对N组参数中每组参数进行量化包括对每组参数中的权重值进行量化和对激活值进行量化。

作为一种可选的示例,对权重值进行量化的算法和对激活值进行量化的算法可以相同也可以不同,量化的算法包括但不限于:最大范围量化、MinMax量化、Percentiles百分位量化、KL散度量化、ADMM交替方向乘子量化等。

作为一种可选的示例,对于量化权重,可以使用MinMax量化算法来对模型的每层做量化。具体的,先统计权重的浮点数值,选取浮点值域里的最小值(min

q=round(s*clip(x,min

作为一种可选的示例,对于量化激活值,可以使用的是KL散度量化算法来对模型的每层做量化。具体的,首先统计原始激活值的频率直方图,用来近似表示激活输入的真实分布p(x),然后初始化一个激活值的值域范围X∈[min

作为一种可选的示例,每一层的精度损失值是每一层的一组参数被量化前该层的输出与被量化后该层的输出之间的损失值。即针对每一层,将量化后的激活值和权重执行一次前向推理得到量化后的层输出,再将量化后的层输出进行反量化并与原始浮点层输出一起计算出各层的精度损失。

作为一种可选,可以采用公式4对量化推理得到的层输出做反量化计算,其中,c′为层输出的反量化结果,b为将量化后的激活值和权重执行一次前向推理得到的量化后的层输出:

/>

最后,使用公式5计算层输出的反量化结果c′与原始浮点层输出c的精度损失值d,即:

作为一种可选的示例,所述总精度损失值可以根据N个层中每层对应的精度损失值共同确定得到。

步骤S206,在所述总精度损失值大于预设的精度损失阈值的情况下,对所述N组参数执行M次量化,直到所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值,其中,M为大于或等于1的正整数,在所述M次量化中的各次量化中,所述N组参数中的部分组参数被量化。

需要说明的是,上述M不是预先设定的,而是满足“所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值”时所总共执行量化的次数。

在一个示例性的实施例中,上述对所述N组参数执行M次量化可以通过以下步骤S11-S12实现:

步骤S11:获取第i次量化后所述N组参数中的各组参数对应的精度损失值,得到第i次的N个精度损失值,其中,i为大于或等于1的正整数;

需要说明的是,上述实施例描述了具体如何确定N组参数中的各组参数对应的精度损失值,此处不进行赘述。

步骤S12:根据所述第i次的N个精度损失值,确定所述第i次量化后所述N组参数被量化所产生的总精度损失值;

在一个示例性的实施例中,上述步骤S12可以通过以下步骤S121-S122实现:

步骤S121:获取预先为所述N个层设置的N个权重值,其中,所述N个权重值与所述N个层具有一一对应的关系;

作为一种可选的示例,所述N个权重值中的各个权重值用于表示所述N个层中对应的层对应的精度损失值对所述N组参数被量化所产生的总精度损失值的影响程度。

作为一种可选的示例,同一类型的层,权重值相同或在同一个取值范围内。

步骤S122:对所述N个权重值和所述第i次的N个精度损失值执行加权求和操作,得到所述第i次量化后所述N组参数被量化所产生的总精度损失值。

作为一种可选的示例,考虑到一个神经网络模型各层精度损失值对整个网络模型的总精度损失值的影响程度不一样,或者认为各层的信息冗余程度不一样,因此在评估整个网络模型的总精度损失值时引入层权重值。示例性的,层的权重值可以为每层的层打分值,表示层精度损失对结果的影响度。打分值是一组按层类型被预先配置好的值,一般的,对于像卷积层、池化层等对模型推理结果影响较大的层会被赋予较大的分值。设s表示模型的层打分值,d表示模型的层精度损失值,n表示模型的层数,那么整个网络模型的总精度损失值D可表达为:

步骤S13:在所述第i次量化后所述N组参数被量化所产生的总精度损失值大于所述精度损失阈值的情况下,根据所述第i次的N个精度损失值,在所述N组参数中确定待执行第i+1次量化的部分组参数;对确定出的所述待执行第i+1次量化的部分组参数执行所述第i+1次量化;

也就是说,如果第i次量化后原始神经网络的总精度损失值大于预设的精度损失阈值,那么此时需要对模型做自适应的二次量化。具体的,需要确定具体哪几层需要做二次量化。

步骤S14:在所述第i次量化后所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值的情况下,结束对所述N组参数执行所述M次量化。

也就是说,当第i次量化后原始神经网的总精度损失值小于预设的精度损失阈值时,则模型量化结束。

在一个示例性的实施例中,上述步骤S13中的根据所述第i次的N个精度损失值,在所述N组参数中确定待执行第i+1次量化的部分组参数,可以通过以下步骤S131-S132实现:

步骤S131:在预先为所述N个层设置了N个权重值的情况下,将所述第i次的N个精度损失值与所述N个权重值进行对应相乘,得到N个加权精度损失值;

需要说明的是,所述N个权重值与所述N个层具有一一对应的关系,所述N个加权精度损失值中的第j个加权精度损失值是将所述第i次的N个精度损失值中的第j个精度损失值与所述N个权重值中的第j个权重值进行对应相乘所得到的加权精度损失值,所述第j个精度损失值和所述第j个权重值均与所述N个层中的第j层对应,j为大于或等于1、且小于或等于N的正整数;

作为一种可选的示例,假设第i次的N层对应的N个精度损失值为d

步骤S132:将所述第i次量化后的所述N组参数中所述加权精度损失值从大到小排在前K位的K组参数确定为所述待执行第i+1次量化的部分组参数,其中,K等于1或K为小于N的正整数。

作为一种可选的示例,如果K等于1,则对s

在一个示例性的实施例中,在确定出待执行第i+1次量化的部分组参数之后,需要对确定出的所述待执行第i+1次量化的部分组参数执行第i+1次量化,示例性的,可以通过以下步骤S1-S2实现:

步骤S1:在所述待执行第i+1次量化的部分组参数包括所述第i次量化后的所述N组参数中的K组参数、且所述K组参数在执行第i次量化时使用的量化参数为第i次的K个量化参数的情况下,将所述第i次的K个量化参数调整为第i+1次的K个量化参数,其中,K等于1或K为小于N的正整数;

需要说明的是,对于线性量化而言,量化参数越大量化误差将会越小,精度损失也就越小。根据公式1可知,量化参数欲变大要么增大量化位宽n,例如将8位变成16位甚至是32位;要么缩小量化输入的范围,这实际上是对第i次量化确定的量化输入的范围做进一步的寻优。

因此,在一个示例性的实施例中,上述将所述第i次的K个量化参数调整为第i+1次的K个量化参数,可以通过以下方式一和/或方式二实现:

方式一:以所述第i次的K个量化参数为初始值,缩小所述第i次的K个量化参数中的量化输入范围;

作为一种可选的示例,以所述第i次的K个量化参数对应的量化输入范围为初始范围,不断缩小第i次的K个量化参数对应的量化输入范围,直到满足预设条件(预设条件包括下述损失函数变化量是否小于ε)的情况下,根据缩小后的第i次的K个量化参数对应的量化输入范围确定第i+1次的K个量化参数。

作为一种可选的示例,求解更小的量化输入范围,进一步修正优化量化参数,其目标就是极小化量化误差。记量化输入为x,量化输入范围的差值为y,E为round函数,若采用欧式距离来衡量量化误差,则损失函数如公式7所示。可选的,量化输入x为第一量化时候,该层对应的输入:

那么,损失函数L相对于量化输入差值y的导数就是:

可选的,可以采用梯度下降法找到使得L有最小值的量化输入范围差值y,具体流程是:

1)初始化参数。利用第i次量化确定的量化输入差值初始化y,记学习率为η,损失函数变化量阈值为ε,并分别为η和ε初始化一个比较小的正数值。

2)按公式8计算当前y值的导数,记为

3)更新参数y,更新公式如下:

4)按公式7计算y更新前后,损失函数变化量是否小于ε,如果是则退出迭代,否则重复b、c步骤直至收敛退出迭代。进而根据y可以确定量化参数。

需要说明的是,通过方式一可以在进行量化的过程中使用同一量化位宽。

方式二:以所述第i次的K个量化参数为初始值,增大所述第i次的K个量化参数中的量化位宽。

作为一种可选的示例,如果某组参数已使用上述方式一的方法且在后续过程中此组参数对应的量化参数仍被标记为待量化参数的情况下,则采用增大量化位宽的方式来对该组参数做量化,例如将int8量化变成int16量化,甚至是变成fp32全精度,采用这种方式将会产生混合精度的量化模型。

步骤S2:使用所述第i+1次的K个量化参数对所述第i次量化后的所述K组参数执行所述第i+1次量化。

作为一种可选的示例,使用所述第i+1次的K个量化参数对所述第i次量化后的所述K组参数执行所述第i+1次量化的方法,与使用第i次的K个量化参数对i-1次量化后的K组参数执行第i次量化的方法相同。

需要说明的是,当i=0的时候,i-1次量化后的K组参数即为原始的N组参数中相对应的K组参数。

在一个示例性的实施例中,所述对所述N组参数执行M次量化,还包括一下步骤S21-S24:

步骤S21:在使用所述第i+1次的K个量化参数对所述第i次量化后的所述K组参数执行所述第i+1次量化之后,获取所述第i+1次量化后所述N组参数中的各组参数对应的精度损失值,得到第i+1次的N个精度损失值,其中,所述第i+1次的N个精度损失值包括:所述第i次的N个精度损失值中除与所述K组参数对应的K个精度损失值之外的(N-K)个精度损失值,以及对所述K组参数执行了所述第i+1次量化后所述K组参数被量化所产生的K个精度损失值;

为了更好的理解,以下进行具体说明,假设i为1,K为1,N为4,在原始神经网络中分别对应卷积层(对应第一组参数),池化层(对应第二组参数)、LSTM层(对应第三组参数),SoftMax层(对应第四组参数)。则在第一次使用对应的量化参数分别对第一组参数、第二组参数、第三组参数、第四组参数进行量化以后,则会获得这4组参数在第一次量化的时候分别的精度损失值,如果根据这4组参数的精度损失值确定的网络模型的总精度损失值大于预设的精度损失阈值,则需要对这4组参数中的精度损失值最大的第一组参数进行二次量化(例如:根据第一次量化的时候的量化参数确定二次量化的时候的二次量化参数,进而根据二次量化参数对第一组参数进行二次量化),在二次量化以后,得到第一组参数对应的精度损失值。即第2次的4个精度损失值包括:第二组参数、第三组参数、第四组参数在第一次量化以后分别对应的精度损失值以及第一组参数在第二次量化以后对应的精度损失值。

步骤S22:根据所述第i+1次的N个精度损失值,确定所述第i+1次量化后所述N组参数被量化所产生的总精度损失值;

作为一种可选的示例,上述步骤S22的实现方法与上述步骤S12的实现方法类型,此处不进行赘述。

步骤S23:在所述第i+1次量化后所述N组参数被量化所产生的总精度损失值大于所述精度损失阈值的情况下,根据所述第i+1次的N个精度损失值,在所述N组参数中确定待执行第i+2次量化的部分组参数;对确定出的所述待执行第i+2次量化的部分组参数执行所述第i+2次量化;

作为一种可选的示例,上述步骤S23的实现方法与上述步骤S13的实现方法类型,此处不进行赘述。

步骤S24:在所述第i+1次量化后所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值的情况下,结束对所述N组参数执行所述M次量化。

步骤S208:将在所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值时的所述原始神经网络模型确定为目标神经网络模型,并将待处理的媒体资源信息输入到所述目标神经网络模型,得到所述目标神经网络模型输出的所述媒体资源信息的目标处理结果。

需要说明的是,所述媒体资源信息包括以下至少之一:文本信息、图像信息、语音信息;所述目标处理结果包括以下至少之一:所述媒体资源信息的分类结果、所述媒体资源信息的推理结果。

作为一种可选的时候,在将在N组参数被量化所产生的总精度损失值小于或等于精度损失阈值时的原始神经网络模型确定为目标神经网络模型之后,还需要保存所述目标神经网络模型每一层的激活值对应的量化参数以及量化算法。

作为一种可选的示例,在目标神经网络模型用于识别图片中的目标类型的对象的情况下,可以将媒体资源信息(例如:图片,其中,图片中具有一种动物)输入至目标神经网络模型中,进而得到对应的分类结果(例如猫、狗等等)。

作为一种可选的示例,目标神经网络模型用于根据图片中的信息进行推理的情况下,可以将媒体资源信息(例如:图片,其中,图片中具有一个问句以及多个候选答案)输入至目标神经网络模型中,进而得到对应的推理结果(从多个候选答案中选择一个目标候选答案展示)。

通过上述步骤,由于总精度损失值用于表示所述N组参数被量化前所述N个层的输出与被量化后所述N个层的输出之间的精度损失,进而使得总精度损失值不是单独通过某一层的精度损失值确定的,解决了现有进行媒体资源信息处理的神经网络模型的模型量化方法单独通过某一层的量化误差来得到整个网络模型的总量化误差导致整个网络模块的量化误差的准确率较低的问题;同时由于本发明在总精度损失值大于预设的精度损失阈值的情况下,可以对N组参数中的部分组参数执行M次量化以使得总精度损失值小于或等于预设的精度损失阈值,进而解决了在整个网络模型的总量化误差不满足要求的时候,不能实现自适应纠偏的问题。达到了实现快速量化的时候,又同时能尽可能的减少量化误差、减少精度损失的效果。

显然,上述所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。现结合实施例对本发明进行具体说明,下面以删除ES的一个索引对应的数据为例。

在一个示例性的实施例中,为了解决现有模型量化方法不足以及筛选合适的量化模型,本申请提出一种自适应神经网络模型量化方法,具体的:

图6是根据本发明实施例的另一种自适应模型量化方法的流程图,主要包含4个步骤:

1)预设精度损失阈值和量化位宽

因为量化是不可避免的会产生精度损失,所以在量化开始前让用户自定义预设能接受的整个神经网络模型的最大总精度损失阈值以及需量化的位宽。这里的精度损失是指原始浮点值与反量化后浮点值之差,常见的量化位宽有8、16等。

2)逐层量化和计算精度损失

逐层分离原始神经网络模型的权重值和激活值(层的输入值),对权重值和激活值采用不同的量化方法迭代计算出最优量化参数以及在该最优参数下线性量化后的权重整型值和激活整型值。针对每一层,将量化后的激活值和权重执行一次前向推理得到量化后的层输出,再将量化后的层输出进行反量化并与原始浮点层输出一起计算出各层的精度损失。

对于量化权重,可以使用的是MinMax量化算法(不限于此方法,也可选择其他量化算法)来对模型的每层做量化。具体的,先统计权重的浮点数值,选取浮点值域里的最小值和最大值作为量化输入的范围,然后按公式1确定量化参数s,最后按公式2线性映射计算每个权重的量化值。

其中n是量化位宽,x是输入浮点权重值,q是权重的量化值。

/>

q=round(s*clip(x,min

对于量化激活值,可以使用的是KL散度量化算法(不限于此方法,也可选择其他量化算法)来对模型的每层做量化。具体的,首先统计原始激活值的频率直方图,用来近似表示激活输入的真实分布p(x),然后初始化一个激活值的值域范围X∈[min

作为一种可选的示例,可以采用公式4对量化推理得到的层输出做反量化计算,其中,c′为层输出的反量化结果,b为将量化后的激活值和权重执行一次前向推理得到的量化后的层输出:

最后,使用公式5计算层输出的反量化结果c′与原始浮点层输出c的精度损失值d,即:

3)评估整网精度损失

可以使用各层精度损失的加权平均值来评估整网的精度损失。考虑到一个神经网络模型各层精度损失对整个网络模型精度损失的影响程度不一样,或者认为各层的信息冗余程度不一样,因此可以在评估整个网络模型的量化损失时引入了层打分值,表示层精度损失对结果的影响度。打分值是一组按层类型被预先配置好的值,一般的,对于像卷积层、池化层等对模型推理结果影响较大的层会被赋予较大的分值。设s表示模型的层打分值,d表示模型的层精度损失,n表示模型的层数,那么整网的总精度损失值D可表达为:

当整个网络模型的总精度损失值D小于或等于预设的精度损失阈值时,则模型量化结束。如果整个网络模型的总精度损失值D,那么此时将对模型做自适应的二次量化。

4)二次量化

当整个网络模型的总精度损失值大于预设的精度损失阈值时,可以使用二次量化的方式来对精度损失大的层做误差纠偏,以期达到整个网络模型的总精度损失值小于或等于预设的精度损失阈值的目的。如图6虚线框所示,二次量化的整体思路是:首先找到模型里最需要做二次量化的层,然后在该层通过将现有量化参数作为初始值做再次迭代优化或是通过增大量化位宽的方法来完成该层的二次量化,然后计算并更新该层的精度损失,最后重新评估整个网络模型的总精度损失,重复以上过程直到小于预设阈值为止。

具体的,将模型的各层按层的打分值与该层的精度损失乘积进行排序即对s

需要说明的是,对于线性量化而言,缩放因子s(相当于上述实施例中的量化参数)越大量化误差将会越小,精度损失也就越小。根据公式1可知缩放因子欲变大要么增大量化位宽n,例如将8位变成16位甚至是32位;要么缩小量化输入的范围,这实际上是对第一次量化方法确定的输入范围做进一步的寻优。为了尽可能使用同一量化位宽,可以在对待二次量化层做量化时优先采用缩小量化输入范围的方法,在第一次量化参数的基础上进一步修正优化量化参数,当该层已使用过此方法且在后续过程中仍被标记为待二次量化层,那么此时才对该层的量化采用增大量化位宽的策略。

求解更小的量化输入范围,进一步修正优化量化参数,其目标就是极小化量化误差。记量化输入为x,量化输入范围的差值为y,E为round函数,若采用欧式距离来衡量量化误差,则损失函数可表述为:

那么,损失函数L相对于量化输入差值y的导数就是:

示例性的,可以采用梯度下降法找到使得L有最小值的量化输入范围差值y,具体流程是:

a)初始化参数。利用第一次量化确定的量化输入差值初始化y,记学习率为η,损失函数变化量阈值为ε,并分别为η和ε初始化一个比较小的正数值。

b)按公式8计算当前y值的导数,记为

c)更新参数y。更新公式如下:

d)按公式7计算y更新前后,损失函数变化量是否小于ε,如果是则退出迭代,否则重复b、c步骤直至收敛退出迭代。

如果某层已使用上述二次量化方法且在后续过程中仍被标记为待二次量化层,则采用增大量化位宽的方式来对该层做量化,例如将int8量化变成int16量化,甚至是变成fp32全精度,采用这种方式将会产生混合精度的量化模型。

作为一种可选的示例,为了获得一个既能达到精度损失要求又能具有最佳性能的量化模型,本提案还提出了一种神经网络模型量化装置用来自动生成,自适应优选量化模型。如图7所示,该装置一共包含数据采集与预处理模块、模型量化模块、性能测试模块、模型评估与生成这4个模块,具体的:

1)数据采集与预处理模块

数据采集与预处理模块包含的是一个网络通信模块以及CPU处理模块。该模块通过网络获取用户的配置信息以及对量化数据做一些必要的预处理。

通过用户的配置信息可以获取到原始全精度待量化模型,可接受精度损失阈值,期望量化位宽,模型部署平台以及模型量化校准数据集。在量化前校准数据集需要先做预处理以满足模型输入的要求,否则将影响量化模型的推理结果。预处理包括但不限于图像缩放,颜色空间转换,减均值和归一化等。

2)模型量化模块

模型量化模块包含的是一个worker管理器以及CPU处理模块。该模块使用不同的量化方法对原始全精度模型做并行量化操作,生成多个量化模型,计算并记录每个模型的整网量化误差,最后筛选出符合预设精度损失要求的多个候选量化模型。

模型量化模块包含的worker管理器用以管理多个模型量化线程,各个worker并行工作且互不干扰。每个worker配置一种量化算法,负责量化模型、计算量化误差以及管理该算法的运行时环境,可通过worker管理器自定义删除或新增量化算法及其配套的能力。该模块涉及的量化算法包括但不限于本提案涉及的模型量化方法以及各类常用量化方法,例如Percentiles百分位量化、KL散度量化、ADMM量化、MSE均方误差量化、MinMax量化等。

3)性能测试模块

性能测试模块包含的是一个设备管理器、多个平台设备以及网络通信模块。该模块由设备管理器统一分发到用户指定的模型部署平台的设备上依次测试候选量化模型的耗时,得到各模型的整网性能,同时记录性能数据。

这里用设备管理器通过网络连接统一管理多个平台的设备,以减少用户对平台的感知。设备管理器负责分发、连接到可用的目标设备,管理设备使用队列,删除或新增设备等。每个设备需要保证能提供该平台的模型推理能力,然后通过注册的方式注册到设备管理器里。

4)模型评估与生成模块

模型评估与生成模块包含一个CPU处理模块。该模块通过候选量化模型的性能数据以及量化精度误差数据为量化模型打分,以评估量化模型的综合表现,然后选出唯一的高分量化模型,最后为量化模型封装模型头打包输出最终的量化模型。综合评估方法是线性加权量化模型的性能和精度误差,如果更关注性能则赋予性能更大的权重,如果更关注精度则赋予精度误差更大的权重。

此外,本申请在每层完成精度损失计算后,新增了评估整网精度的步骤,用以评估整网精度损失,并在后续迭代过程中以整网精度损失作为优化的目标,这在一定程度上综合考虑了每层的精度损失和整网的精度损失。

本申请在当整网的总精度损失无法满足要求时,新增了二次量化的步骤。在二次量化步骤中首先寻找到精度损失最大的问题层,然后逐个对问题层在第一次量化的基础上修正、迭代量化参数或增大量化位宽来保证降低该问题层的精度损失,最终实现整网的总精度损失在可控的范围里。需要说明的是,二次量化以降低整网的总精度损失为目标回头来修正精度损失大的层,做到把控模型每一层和整网的量化误差。在第一次量化的基础上,自适应动态调整问题层,这本质上是对第一次量化方法确定的量化参数做进一步的修正、寻优。排序优先对精度损失最大的层做二次量化,这样可以节省时间。

此外,本申请还提出了一种神经网络模型量化装置,首先在不同量化算法上量化模型,然后通过精度损失阈值筛选出符合要求的候选量化模型,然后再测试候选量化模型在平台上的性能,最后综合评估量化模型在精度损失和性能这两个指标上的表现,通过这个装置能自适应优选出高分量化模型。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

在本实施例中还提供了一种自适应模型量化装置,图8是根据本发明实施例的自适应模型量化装置的结构框图,如图8所示,该装置包括:

确定模块802,用于确定原始神经网络模型中的N个层中待量化的参数,得到N组参数,其中,N为大于或等于2的正整数;

第一量化模块804,用于对所述N组参数执行初次量化,并获取所述N组参数被量化所产生的总精度损失值,其中,所述总精度损失值用于表示所述N组参数被量化前所述N个层的输出与被量化后所述N个层的输出之间的精度损失;

第二量化模块806,用于在所述总精度损失值大于预设的精度损失阈值的情况下,对所述N组参数执行M次量化,直到所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值,其中,M为大于或等于1的正整数,在所述M次量化中的各次量化中,所述N组参数中的部分组参数被量化;

处理模块808,用于将在所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值时的所述原始神经网络模型确定为目标神经网络模型,并将待处理的媒体资源信息输入到所述目标神经网络模型,得到所述目标神经网络模型输出的所述媒体资源信息的目标处理结果。

通过上述装置,由于总精度损失值用于表示所述N组参数被量化前所述N个层的输出与被量化后所述N个层的输出之间的精度损失,进而使得总精度损失值不是单独通过某一层的精度损失值确定的,解决了现有进行媒体资源信息处理的神经网络模型的模型量化方法单独通过某一层的量化误差来得到整个网络模型的总量化误差导致整个网络模块的量化误差的准确率较低的问题;同时由于本发明在总精度损失值大于预设的精度损失阈值的情况下,可以对N组参数中的部分组参数执行M次量化以使得总精度损失值小于或等于预设的精度损失阈值,进而解决了在整个网络模型的总量化误差不满足要求的时候,不能实现自适应纠偏的问题。达到了实现快速量化的时候,又同时能尽可能的减少量化误差、减少精度损失的效果。

在一个示例性的实施例中,第二量化模块806,用于通过以下方式对所述N组参数执行M次量化:获取第i次量化后所述N组参数中的各组参数对应的精度损失值,得到第i次的N个精度损失值,其中,i为大于或等于1的正整数;根据所述第i次的N个精度损失值,确定所述第i次量化后所述N组参数被量化所产生的总精度损失值;在所述第i次量化后所述N组参数被量化所产生的总精度损失值大于所述精度损失阈值的情况下,根据所述第i次的N个精度损失值,在所述N组参数中确定待执行第i+1次量化的部分组参数;对确定出的所述待执行第i+1次量化的部分组参数执行所述第i+1次量化;在所述第i次量化后所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值的情况下,结束对所述N组参数执行所述M次量化。

在一个示例性的实施例中,第二量化模块806,还用于获取预先为所述N个层设置的N个权重值,其中,所述N个权重值与所述N个层具有一一对应的关系;对所述N个权重值和所述第i次的N个精度损失值执行加权求和操作,得到所述第i次量化后所述N组参数被量化所产生的总精度损失值。

在一个示例性的实施例中,第二量化模块806,还用于在预先为所述N个层设置了N个权重值的情况下,将所述第i次的N个精度损失值与所述N个权重值进行对应相乘,得到N个加权精度损失值,其中,所述N个权重值与所述N个层具有一一对应的关系,所述N个加权精度损失值中的第j个加权精度损失值是将所述第i次的N个精度损失值中的第j个精度损失值与所述N个权重值中的第j个权重值进行对应相乘所得到的加权精度损失值,所述第j个精度损失值和所述第j个权重值均与所述N个层中的第j层对应,j为大于或等于1、且小于或等于N的正整数;将所述第i次量化后的所述N组参数中所述加权精度损失值从大到小排在前K位的K组参数确定为所述待执行第i+1次量化的部分组参数,其中,K等于1或K为小于N的正整数。

在一个示例性的实施例中,第二量化模块806,还用于在所述待执行第i+1次量化的部分组参数包括所述第i次量化后的所述N组参数中的K组参数、且所述K组参数在执行第i次量化时使用的量化参数为第i次的K个量化参数的情况下,将所述第i次的K个量化参数调整为第i+1次的K个量化参数,其中,K等于1或K为小于N的正整数;使用所述第i+1次的K个量化参数对所述第i次量化后的所述K组参数执行所述第i+1次量化。

在一个示例性的实施例中,第二量化模块806,还用于以所述第i次的K个量化参数为初始值,缩小所述第i次的K个量化参数中的量化输入范围;和/或以所述第i次的K个量化参数为初始值,增大所述第i次的K个量化参数中的量化位宽。

在一个示例性的实施例中,第二量化模块806,还用于通过以下方式对所述N组参数执行M次量化:在使用所述第i+1次的K个量化参数对所述第i次量化后的所述K组参数执行所述第i+1次量化之后,获取所述第i+1次量化后所述N组参数中的各组参数对应的精度损失值,得到第i+1次的N个精度损失值,其中,所述第i+1次的N个精度损失值包括:所述第i次的N个精度损失值中除与所述K组参数对应的K个精度损失值之外的(N-K)个精度损失值,以及对所述K组参数执行了所述第i+1次量化后所述K组参数被量化所产生的K个精度损失值;根据所述第i+1次的N个精度损失值,确定所述第i+1次量化后所述N组参数被量化所产生的总精度损失值;在所述第i+1次量化后所述N组参数被量化所产生的总精度损失值大于所述精度损失阈值的情况下,根据所述第i+1次的N个精度损失值,在所述N组参数中确定待执行第i+2次量化的部分组参数;对确定出的所述待执行第i+2次量化的部分组参数执行所述第i+2次量化;在所述第i+1次量化后所述N组参数被量化所产生的总精度损失值小于或等于所述精度损失阈值的情况下,结束对所述N组参数执行所述M次量化。

在一个示例性的实施例中,所述媒体资源信息包括以下至少之一:文本信息、图像信息、语音信息;所述目标处理结果包括以下至少之一:所述媒体资源信息的分类结果、所述媒体资源信息的推理结果。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

本发明的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术分类

06120115919783