CN117474052A - 分层确定神经网络量化模式的方法、系统、设备和介质 - Google Patents
分层确定神经网络量化模式的方法、系统、设备和介质 Download PDFInfo
- Publication number
- CN117474052A CN117474052A CN202311552606.1A CN202311552606A CN117474052A CN 117474052 A CN117474052 A CN 117474052A CN 202311552606 A CN202311552606 A CN 202311552606A CN 117474052 A CN117474052 A CN 117474052A
- Authority
- CN
- China
- Prior art keywords
- quantization
- layer
- neural network
- input
- network model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000013139 quantization Methods 0.000 title claims abstract description 442
- 238000000034 method Methods 0.000 title claims abstract description 183
- 238000013528 artificial neural network Methods 0.000 title description 86
- 239000013598 vector Substances 0.000 claims abstract description 153
- 238000003062 neural network model Methods 0.000 claims abstract description 137
- 239000011159 matrix material Substances 0.000 claims abstract description 126
- 238000004364 calculation method Methods 0.000 claims abstract description 54
- 238000003860 storage Methods 0.000 claims abstract description 35
- 238000012549 training Methods 0.000 claims abstract description 28
- 230000006870 function Effects 0.000 claims description 188
- 230000000694 effects Effects 0.000 claims description 31
- 239000010410 layer Substances 0.000 description 264
- 238000004422 calculation algorithm Methods 0.000 description 33
- 230000008569 process Effects 0.000 description 21
- 230000008859 change Effects 0.000 description 14
- 238000006243 chemical reaction Methods 0.000 description 10
- 238000002474 experimental method Methods 0.000 description 10
- 230000004069 differentiation Effects 0.000 description 9
- 230000014509 gene expression Effects 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 238000012937 correction Methods 0.000 description 7
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000006872 improvement Effects 0.000 description 5
- 101710092887 Integrator complex subunit 4 Proteins 0.000 description 4
- 102100037075 Proto-oncogene Wnt-3 Human genes 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000005520 cutting process Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 4
- 238000007667 floating Methods 0.000 description 4
- 102100028043 Fibroblast growth factor 3 Human genes 0.000 description 3
- 108050002021 Integrator complex subunit 2 Proteins 0.000 description 3
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 3
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 3
- 230000004913 activation Effects 0.000 description 3
- 238000001994 activation Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011002 quantification Methods 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004146 energy storage Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- -1 for example Substances 0.000 description 1
- 239000011229 interlayer Substances 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0495—Quantised networks; Sparse networks; Compressed networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
提供分层确定量化神经网络模型的量化模式的方法、系统、电子设备和非暂时存储介质。方法包括按神经网络模型的层为单位利用多个量化模式中的第j种量化模式来量化神经网络模型的第i层的输入向量和该层的权重参数,其中所述神经网络模型是利用第一数据集训练来得到的,其中i,j是正整数;利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响;求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
Description
技术邻域
本申请涉及神经网络领域,且更具体地,涉及分层确定量化神经网络模型的量化模式的方法、系统、电子设备和非暂时存储介质。
背景技术
由于当前神经网络的发展,神经网络要处理的输入数据和要达到的目标越来越复杂,因此神经网络需要更多的计算资源进行计算。例如,1998年,最先进的神经网络是LeNet-5,其应用于MNIST数据集,输入图像大小为1×28×28。20年后,常见的基准数据集是ImageNet,其输入分辨率比MNIST大200倍,这造成了模型的内存占用量更高。事实上,在很多应用中,ImageNet分辨率被认为是偏小的分辨率,例如在自动驾驶应用中,其中输入分辨率明显更大(在某些情况下超过40倍)。
对于计算和存储系统来说,现在的神经网络的存储、推理过程和训练过程的巨量计算资源的消耗对计算系统提出了更高的要求。因此,机器学习模型的压缩算法和低精度计算算法成为当前主要的研究方向。基于对噪音的计算健壮性的模型量化方法是最重要的压缩技术之一。在压缩计算和存储的过程中,噪音的主要来源是截断误差和数据类型转换带来的错误。
量化方法是指将初始高精度的原始模型的数据类型替换为较低精度数据类型进行存储和计算的方法。量化主要对深度神经网络的参数(即权重)和每层的输入(有的文献称为激活)进行量化,以减少推理期间模型的总内存占用。PyTorch和TensorFlow都有将浮点数转换为整数的量化技术。各种量化技术共享有相同的理论基础,即在存储和推理过程中用近似的低精度数据替代原始数据。较低精度的数据类型需要更少的内存,而处理器在使用较低精度数据进行计算时,会花费更少的计算机资源并使用更少的时间。
发明内容
根据本申请的一个方面,提供一种分层确定量化神经网络模型的量化模式的方法,包括:按神经网络模型的层为单位利用多个量化模式中的第j种量化模式来量化神经网络模型的第i层的输入向量和该层的权重参数,其中所述神经网络模型是利用第一数据集训练来得到的,其中i,j是正整数;利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响;求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
在一个实施例中,所述多个量化模式中的一个量化模式包括:利用多个数据精度中的一个数据精度来通过向上取整或向下取整中的一种取整方式来量化所述层的输入向量和所述层的权重参数。
在一个实施例中,所述按神经网络模型的层为单位利用多个量化模式中的一个量化模式来量化神经网络模型的一层的输入向量和该层的权重参数包括:
对于所述神经网络模型的一层,在每个量化循环中,按多个量化模式的数据精度从低到高来选择一个量化模式来量化所述神经网络模型的一层的输入向量和该层的权重参数。
在一个实施例中,所述得到量化所述影响矩阵P[i][j]包括:
至少基于神经网络模型的损失函数值l与第i层的输入向量hi的梯度神经网络模型的第i层的输入向量的量化引入的噪音∈i来得到所述影响矩阵P[i][j]。
在一个实施例中,所述得到量化所述影响矩阵P[i][j]包括利用如下公式来计算所述影响矩阵P[i][j]:
计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput;
计算slopeinput=‖(f(M)-finput(M;scaleinput;i))/scaleinput‖,其中M是含有n层的所述神经网络模型,f(M)是所述神经网络模型推理第二数据集得到的损失函数,finput(M;scaleinput;i)是所述神经网络模型M在第i层的输入向量加上最大噪音scaleinput后的量化后神经网络模型推理所述第二数据集得到的损失函数;当使用向上取整进行量化时最大噪音为scaleinput*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleinput*[-1,-1,..,-1];
计算第i层的权重参数的所述第j个量化模式导致的噪音向量δi和最大噪音scaleweight;
计算fluc=‖(f(M)-fweight(M;scaleweight;i))‖,其中fweight(M;scaleweight;i)是所述神经网络模型M在第i层的权重参数加上最大噪音scaleweight后的量化后神经网络模型推理所述第二数据集得到的损失函数,当使用向上取整进行量化时最大噪音为scaleweight*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleweight*[-1,-1,..,-1];
如果fluc<errormax,其中errormax表示fluc大于其时对损失函数的影响大于预定值,计算其中slopeinput=‖(f(M)-finput(M;scaleinput;i))‖/scaleinput;
如果fluc≥errormax,则计算其中size(∈i)求输入向量量化带来的噪音向量∈i的元素个数,size(δi)求权重参数量化带来的噪音向量δi的元素个数,其中||*||表示对*求范数。
在一个实施例中,在计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput之后:
如果scaleinput≤errormin,则确定第j种量化模式作为量化第i层的量化模式,而不进行其他后续计算步骤,
其中errormin表示所述最大值小于其时对损失函数的影响低于预定值。
在一个实施例中,所述求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式的步骤包括:
根据要满足的代价类型,确定代价矩阵W[i][j];
求解问题并得到满足该问题的第j种量化模式作为第i层的量化所采用的量化模式,
其中,Q是量化模式的个数,s.t.表示要满足预设条件C是要满足的代价类型的总代价限制。
在一个实施例中,所述求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式的步骤包括:
将所述代价矩阵W[i][j]作为分组背包问题中的重量矩阵,且将影响矩阵P[i][j]作为分组背包问题中的价值矩阵,来求解所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式。
根据本申请的另一方面,提供一种分层确定量化神经网络模型的量化模式的系统,包括:量化装置,被配置为按神经网络模型的层为单位利用多个量化模式中的第j种量化模式来量化神经网络模型的第i层的输入向量和该层的权重参数,其中所述神经网络模型是利用第一数据集训练来得到的,其中i,j是正整数;计算装置,被配置为利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响;求解装置,被配置为求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
在一个实施例中,所述量化装置被配置为:利用多个数据精度中的一个数据精度来通过向上取整或向下取整中的一种取整方式来量化所述层的输入向量和所述层的权重参数。
在一个实施例中,所述量化装置被配置为:对于所述神经网络模型的一层,在每个量化循环中,按多个量化模式的数据精度从低到高来选择一个量化模式来量化所述神经网络模型的一层的输入向量和该层的权重参数。
在一个实施例中,所述计算装置被配置为:至少基于神经网络模型的损失函数值l与第i层的输入向量hi的梯度神经网络模型的第i层的输入向量的量化引入的噪音∈i来得到所述影响矩阵P[i][j]。
在一个实施例中,所述计算装置被配置为利用如下公式来计算所述影响矩阵P[i][j]:计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput;计算slopeinput=‖(f(M)-finput(M;scaleinput;i))/scaleinput‖,其中M是含有n层的所述神经网络模型,f(M)是所述神经网络模型推理第二数据集得到的损失函数,finput(M;scaleinput;i)是所述神经网络模型M在第i层的输入向量加上最大噪音scaleinput后的量化后神经网络模型推理所述第二数据集得到的损失函数;当使用向上取整进行量化时最大噪音为scaleinput*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleinput*[-1,-1,..,-1];计算第i层的权重参数的所述第j个量化模式导致的噪音向量δi和最大噪音scaleweight;计算fluc=‖(f(M)-fweight(M;scaleweight;i))‖,其中fweight(M;scaleweight;i)是所述神经网络模型M在第i层的权重参数加上最大噪音scaleweight后的量化后神经网络模型推理所述第二数据集得到的损失函数,当使用向上取整进行量化时最大噪音为scaleweight*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleweight*[-1,-1,..,-1];如果fluc<errormax,其中errormax表示fluc大于其时对损失函数的影响大于预定值,计算其中slopeinput=‖(f(M)-finput(M;scaleinput;i))‖/scaleinput;如果fluc≥errormax,则计算其中size(∈i)求输入向量量化带来的噪音向量∈i的元素个数,size(δi)求权重参数量化带来的噪音向量δi的元素个数,其中||*||表示对*求范数。
在一个实施例中,所述计算装置被配置为在计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput之后:如果scaleinput≤errormin,则确定第j种量化模式作为量化第i层的量化模式,而不进行其他后续计算步骤,其中errormin表示所述最大值小于其时对损失函数的影响低于预定值。
在一个实施例中,所述求解装置被配置为:根据要满足的代价类型,确定代价矩阵W[i][j];求解问题并得到满足该问题的第j种量化模式作为第i层的量化所采用的量化模式,其中,Q是量化模式的个数,s.t.表示要满足预设条件/>C是要满足的代价类型的总代价限制。
在一个实施例中,所述求解装置被配置为:将所述代价矩阵W[i][j]作为分组背包问题中的重量矩阵,且将影响矩阵P[i][j]作为分组背包问题中的价值矩阵,来求解所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式。
根据本申请的另一个方面,提供一种电子设备,包括:存储器,用于存储指令;处理器,用于读取所述存储器中的指令,并执行根据本申请的实施例的方法。
根据本申请的另一个方面,提供一种非暂时存储介质,其上存储有指令,其中,所述指令在被处理器读取时,使得所述处理器执行根据本申请的实施例的方法。
如此,通过确定在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价,如此得到量化后的模型是在理论上在给定代价限制下、损失函数值最小的模型,相比于传统量化方法,极大地减少了资源消耗量,且量化模型的性能也较佳。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本邻域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本申请实施例的n层神经网络模型的各个层的函数表达形式以及神经网络的损失函数的表达形式。
图2示出了根据本申请的实施例的一种分层确定量化神经网络模型的量化模式的方法的流程图。
图3示出了根据本申请的实施例的使用割线取代切线来预测对应噪音的损失函数变化量的方法以扩展邻域的概念。
图4示出了根据本申请的实施例的考虑方向的割线的示意图。
图5示出了根据本申请的实施例的分层确定量化神经网络模型的量化模式的系统的流程图。
图6示出了适于用来实现本申请的实施例的示例性电子设备的框图。
图7示出了根据本申请的实施例的非暂时性计算机可读存储介质的示意图。
具体实施方式
现在将详细参照本申请的具体实施例,在附图中例示了本申请的例子。尽管将结合具体实施例描述本申请,但将理解,不是想要将本申请限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本申请的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
传统量化方法是将模型统一处理为单一的数据类型,这种模型量化方法的主要问题是量化方案可能会显著提高损失函数的值并降低模型的准确率。在不显著牺牲精度的情况下,用精度极低的数据类型大规模替换模型参数是非常困难的事情。事实上,在实际工程中,不可能使用相同的低精度数据类型进行存储和计算,即,所有模型参数和激活引入相同的噪音水平或使用相同精度的数据类型进行存储和计算,并获得良好的性能是不可能。
利用混合精度量化是解决这一问题的一种方法。对于更“敏感”的模型参数和激活,使用更高精度的数据类型进行存储和计算,而对于“非敏感”模型参数,则使用更低精度的数据类型。较高精度的数据类型表明原始数据只增加了较小的噪音,而较低精度的数据类型则表明近似数据和原始数据相比有更大的噪音。在实际的工程实践中,混合精度量化方法在现有的计算机架构上也有所限制,例如,在当前的体系架构中,在单次计算过程中,GPU和CPU必须使用相同的数据类型进行计算。
混合精度量化方法可以分为分层量化,分通道量化等不同的量化排布策略。不同量化策略将神经网络划分为不同部分,每一部分使用特定的数据类型进行量化。分通道量化因为其量化后的模型具有更好的准确性而被广泛使用,但这种方法对计算性能的提升有限,而分层量化因为在计算和存储过程中对计算设备更加友好,计算性能提升巨大,且准确性的损失在业务容忍范围内,而被广泛使用。
混合精度量化面对的最大问题在于搜素空间过大,搜索空间随着模型的复杂程度指数增长,同时判断神经网络中某一层是否对噪音或者量化的方法“敏感”并不容易。因此现阶段学术圈和工业界内有不同的分层量化的混合精度量化方法,这些方法一般基于经验和很强的数学假设,如神经网络对损失函数的黑森矩阵是对较块矩阵等。他们通过大量实验证明自己方法的优越性,但是现阶段没有方法可以证明他们可以达到在量化模型性能(准确率或损失函数值)的理论极限。
因此混合精度算法的当前面临了如下挑战:1.这些算法大多基于经验,实验和“微调”方法。这些算法多数是实验有效的,但是在其他数据集和模型上并不能确定其效果。2.一些算法并不去分析神经网络的数学特性或者数据集特性,他们企图给出一个通用的量化方法。这些算法主要基于硬件特征进行模型量化。因此在实践中无法确认这些算法是否真的有效,或者说这些算法性能有限性的边界是没有进行考察的。3.一些算法利用模型的黑森信息。这些方法中大多数是可分析的,有一定的数学问题表述和假设。然而,获取神经网络的黑森信息需要大量的计算资源和时间。同时,一些黑森算法的假设,如神经网络的黑森矩阵是对角块矩阵等,并不符合对现实。4.其中一些方法仅用于存储目的,或在使用伪量化,这些算法可以极大地减少存储开销,但是无法进一步提升模型在计算过程中的速度。
现阶段“微调”技术是非常火热的技术。“微调”技术是指将其他算法得到的量化模型再使用量化感知训练方法训练的方法。研究人员的共识是没有“微调”的量化技术的算法很难得到非常好的混合精度训练后量化结果,因此当前的量化技术中最后一步通常广泛使用“微调”方法进一步去训练模型。但是,没有“微调”技术在具体做什么工作,他是如何起作用的是缺少进一步研究的,同时没有人能够解释为什么他们的算法在没有“微调”的情况下无法工作,即使他们的算法有明确的数学定义。同时,现阶段也无法证明“微调”的方法能够寻找到合适要求下最优性能模型。
因此,在给定模型和数据集的前提下,现有算法并不能保证得到的混合精度量化模型是在给定要求下性能最好的模型,同时精调过程消耗了大量的时间,如压缩率要求/计算时间要求下的最优解。
如何才能利用最小或较小的计算代价来得到性能最好或较好的混合精度量化模型是本申请主要解决的问题。
本申请的目的在于克服上述现有技术的缺陷,提供一种用于基于神经网络模型梯度信息的分层混合精度量化方法,大体思想包括:
1)获得训练集和校正集,其中可以将一个训练数据集按第一比例(例如80%)和第二比例(20%)的比例进行划分来获得训练集和校正集,分别用来进行模型的训练和量化的校正;并使用训练集训练出要量化压缩的全精度模型M。当然在此,训练集和样本集可以相同的,也可以是不同的,或者相互包含的,在此不做限制,其集合大小也不限于上述比例。
2)使用全精度模型推理校正集,记录所有校正集的样本上每层神经网络的输出。并计算全精度模型的损失函数值f(M)。
3)使用如下方法构造矩阵W和P:
设神经网络一共有n层,一共有k种数据类型用于量化。选取的量化手段是向上取整或者向下取整之一,其中n和k是正整数。
代价矩阵W[i][j]是指第i层如果用第j种数据类型量化,则计算代价是多少。如果量化的目标是模型存储体积最小,则W[i][j]是第i层所占用的内存消耗;如果量化目标是计算速度,则W[i][j]是第i层的计算时间。
影响矩阵P[i][j]是指第i层如果使用第j种数据类型进行量化,则对损失函数估计影响有多大。计算方法如下:
a.使用第i层的输入向量,使用一种量化模式(第j种数据类型,例如ACIQ方法)进行量化处理,计算出该层神经网络量化带来的输入向量的最大误差scaleinput和误差向量∈i,其中第i层的输入向量中的元素包括多个输入,误差向量的元素包括与多个输入对应的多个误差,每个误差是指该层对于校正集的多个样本在同一个输入处的平均数与该层的多个样本在该输入处的量化后的输入的平均数相减得到的误差。在本文中,误差也可以称为噪音。最大误差(噪音)指的是,例如,第i层的数据向量(简化为2个数据输入,即输入向量的长度为2)为(1.1,2.2),如果数据精度为1,则向上取整为(2,3),误差(噪音)∈i为(0.9,0.8),则该数据精度下向上取整时最大误差(噪音)scaleinput=0.9。向下取整为(1,2),误差(噪音)∈i为(-0.1,-0.2),最大误差的绝对值0.2,则该数据精度下向下取整时最大误差(噪音)scaleinput=0.2。而数据精度为10时,则向上取整为(10,10),误差(噪音)∈i为(8.9,7.8),则该数据精度下向上取整时最大误差(噪音)scaleinput=8.9。向下取整为(0,0),误差(噪音)∈i为(-1.1,-2.2),最大误差的绝对值2.2,则该数据精度下向下取整时最大误差(噪音)scaleinput=2.2。
计算slopeinput=‖(f(M)-finput(M;scaleinput;i))/scaleinput‖,其中finput(M;scale;i)是全精度神经网络在第i层Layeri的输入向量加上最大估计误差(噪音)scaleinput后的损失函数。注意,加上最大估计误差的原因是要用于计算割线的范围,割线要在两个端点内才能预测准确。当使用向上取整时进行量化时最大估计误差(噪音)为scaleinput*[1,1,..,1],当使用向下取整进行量化时,最大估计噪音为scaleinput*[-1,-1,..,-1],其中1或-1的个数为输入向量的长度。其中||*||表示对*求范数。
可以使用ACIQ方法使用第j种数据类型量化本层权重,计算出该层神经网络量化带来的权重的最大误差scaleweight和误差向量δi,并在全精度模型上计算fweight(M;scaleweight;i),其是全精度模型M在第i层Layeri的每个权重加上最大误差(噪音)scaleweight后的损失函数。量化权重的方式可以是四舍五入。当权重的噪音过大时采用割线法时使用上下取整方式来量化。当使用向上取整进行量化时最大误差(噪音)为scaleweight*[1,1,..,1],当使用向下取整进行量化时,最大误差(噪音)为scaleweight*[-1,-1,..,-1]。
注意,损失函数衡量的是一个模型,即模型量化(输入和参数引入噪音后),放入损失函数来衡量该模型的好坏。具体地,可以分别在参数和输入上加上对应噪音后,正向传播神经网络,计算损失函数。
与前相同,最大误差(噪音)指的是,例如,第i层的权重参数向量(简化为2个权重参数,即权重参数向量的长度为2)为(1.1,2.2),如果权重参数量化模式为1,则向上取整为(2,3),误差(噪音)δi为(0.9,0.8),则该精度下向上取整时最大误差(噪音)scaleweight=0.9。向下取整为(1,2),误差(噪音)δi为(-0.1,-0.2),最大误差的绝对值0.2,则该精度下向下取整时最大误差(噪音)scaleweight=0.2。而精度为10时,则向上取整为(10,10),误差(噪音)δi为(8.9,7.8),则该精度下向上取整时最大误差(噪音)scaleweight=8.9。向下取整为(0,0),误差(噪音)δi为(-1.1,-2.2),最大误差的绝对值2.2,则该精度下向下取整时最大误差(噪音)scaleweight=2.2。
如此,分别求解在仅最大量化数据输入向量和仅最大量化权重参数的两种情况下的损失函数,可以衡量两种极端情况分别对损失函数的影响。
接下来,计算最大权重误差对损失函数的变化量fluc=‖(f(M)-fweight(M;scaleweight;i))‖。如果这个变化量比较小,例如fluc<errormax,则最大权重误差对损失函数的影响很小,可以忽略不计,此时可以不考虑或省略最大权重误差对损失函数的影响。也就是说,errormax表示fluc大于其时对损失函数的影响大于预定值。该值可以通过经验来确定,也可以通过实验来确定。
也就是说,如果fluc<errormax,则影响矩阵即,考虑影响矩阵只与输入向量的量化有关,以减少计算量。
其中,size(∈i)求输入向量量化带来的误差向量∈i的长度(即有几个元素),这通常等于第i层的输入向量的个数。
其中slopeinput=‖(f(M)-finput(M;scaleinput;i))‖/scaleinput,表示损失函数变化量‖(f(M)-finput(M;scaleinput;i))‖与输入向量最大误差scaleinput的比值,这可以对影响矩阵产生归一化的效果,因为不同数据精度量化的输入向量最大误差不同,都除以该最大误差则可以归一化地比较不同数据精度量化之间的输入向量量化影响损失函数的能力。
如上所述,在引入噪音求解slope的时候,引入噪音的量除了和噪音大小有关,还和多少参数加了噪音有关,因此需要将第二项去除,否则噪音的大小的影响就不单纯,因此需要除以加上噪音参数的数量scaleinput,即slope的计算过程。在估计影响矩阵的时候,‖∈i‖也和向量长度有关,因此也需要除以向量长度,即
这里,影响矩阵P[i][j]与噪音大小‖∈i‖有关,即输入向量被量化引入的噪音越大,影响矩阵P[i][j]表示越有影响。影响矩阵P[i][j]还与输入向量的多少元素被加了噪音(即size(∈i))有关。因为‖∈i‖也和∈i向量的长度有关,因此将‖∈i‖除以向量长度相关量可以消除∈i向量的长度带来的额外的损失函数影响。其中假设∈i=[e1,e2,..,eK],其中K表示第i层的输入向量的维数,ek是其中一个独立随机向量,k∈[1,…,K]。由于‖∈i‖的计算范数过程中是/>因此,将其除以/>
否则,如果fluc≥errormax,则影响矩阵的计算公式为:这是两个损失相加得到的结果,第一项是输入带来的影响,第二项是权重参数带来的影响。其中size(δi)求权重参数向量量化带来的误差向量δi的长度(即有几个元素),这通常等于第i层的权重参数的个数。这表示两个损失函数影响相加得到的结果,第一项是输入向量的量化带来的影响,第二项是权重参数的量化带来的影响,因为此时权重参数的量化带来的影响不可忽略了。
优选地,可以将errormax设置为0.1-0.3之间的特定值。
4)使用分支界限法,求解问题以及j∈Z。S.t.是数学“限制于”的写法,Z是整数集。
其中C是总计算代价限制,当代价限制为内存消耗时,C是总内存消耗限制,当代价限制为计算时间时,C是单次推理所需要的时间限制。Q是量化模式的个数,其中,S.t.是数学中限制于某个条件的写法,Z是整数集。
相比于现有量化技术,本申请优点在于:
根据本申请的方法,可以分层考察该层的量化对损失函数以及计算代价的影响,从而整体考虑在保证计算代价较小的情况下得到对损失函数的影响最小的量化方式,即得到较不影响神经网络模型的性能的量化方式。
首先,介绍要解决本申请的问题求解出发点和基本问题的构建。其中首先介绍神经网络和神经网络的量化目标。
本申请将主要利用极值点的数学性质来分析量化方法。基于极值点的稳定性分析是在不同邻域的广泛使用的,如信号分析等,由于被训练过的全精度神经网络恰好是损失函数的极值,所以量化方法对神经网络的可行性在于神经网络的极值特性。然而,研究者被广泛认可的观点是神经网络自身的特性保证了量化方法的成功。为了证明决定神经网络量化方法成功的理论基础是极值点的性质,即处理噪音的能力,而不是神经网络的其他数学性质,如下重新定义神经网络的概念。
在本申请中,神经网络可以被定义为函数实现的工程概念,而不是精确的数学定义;也就是说,神经网络是任意函数在计算机系统中的实现和表达方式。
当任意函数以复合函数的形式在计算系统中实现和表达时,则可以称该函数为神经网络。
神经网络可以被表达为如下公式(1)的形式。
model(x)=hn((hn-1,1(hn-2,1(...),...,hn-2,k,wn-1,1),hn-1,2(hn-2,k+1(...),...,wn-2),...,wn-1,2),...wn)
(1)
其中,hi,j表示神经网络n层网络中的第i层的第j个模块(即第i层的第j个函数)的等价函数(在简化情况下,每个层可以只有1个模块,即标号j可以去掉,只用hi表示该层的等价函数),i∈[1,...,n],n代表神经网络的层数,wi,j是hi,j(·)中的参数。
图1示出了根据本申请实施例的n层神经网络模型的各个层的函数表达形式以及神经网络的损失函数的表达形式。
其中,只用hi表示该层的等价函数。每层具有输入数据和输出数据。
假设,不是一般性地,参见图1,神经网络从输入数据(x,h0)开始定义这些层为第1层、第2层、……第n层,而如果抽象为函数,即为函数h1、……hn-1,hn,其中如果各个层中可能还有几个模块(也可以看做函数),用j来指代,而hn+1层是指损失函数,用于衡量模型性能,在后文中将详细表述。wi指的是每个层的权重参数(向量)。wn+1假设为神经网络输出的结果标签。
如图1所示,在对该神经网络的每层进行量化之后,量化会在神经网络模型的两个位置引入噪音,其一是神经网络的参数(权重)wi的量化会引入噪音δi,其二是由于不同层的输入数据的量化模式或者量化参数不同,在当前层的输出数据到下一层的输入数据的精度转换过程中引入的噪音∈i。
公式(1)表明,没有训练的神经网络可以是任何可被计算机所表达的函数,因为即便不能写成复合函数的函数,如果它能被计算机所表达,可以理解成只有一层的神经网络。因此通过该定义,神经网络不再仅仅是一个数学概念,而是可以在实践和科研中被广泛使用的概念。神经网络是复合函数形式的要求几乎是神经网络唯一的数学性质。
在实践中,损失函数是评估神经网络的重要方法。如果一个神经网络推理数据集得到较低的损失函数,则意味着该神经网络是准确率更好的神经网络,同时相比于准确率,通过不同的损失函数设计可以保证模型的泛化能力或者体现模型的风险偏好,所以损失函数值常常应用在评估和训练神经网络中,例如,训练过程就是使得模型的损失函数最小值的问题,即公式(2)。
其中f(·)是模型在数据集上的损失函数,w是模型参数,是数据集,M是数据集中样本(sample)的数量,l(·)是一个样本的损失函数值,(xm,ym)代表了数据集中样本的特征xm和标签ym。公式(2)就是求使得各个样本的损失函数求和再平均后得到的平均损失函数值最小的模型参数w的取值。这样训练出来的具有模型参数w的模型可以看做是训练好的最佳模型。
在本申请中,使用串行的神经网络(即,不考虑神经网络的一层中有几个模块的情况)为例进行分析,因为串行的神经网络易于描述,但是本申请实际上不限制神经网络的结构。
对于串行的n层神经网络modeln,l(·)可以使用公式(3)来描述。
l(w,xm,ym)=L(modeln(xm,w),ym)
modeln=hn(hn-1(hn-2(hn-3(…h1(h0,w1)…,wn-3),wn-2),wn-1),wn) (3)
其中l(•)是单个样本(特征xm和标签ym)的损失函数,如交叉熵(cross-entropy)函数;hi是神经网络中第i层网络的等价函数,i∈[1,...,n];wi是hi(•)中的参数,T表示转置;(xm,ym)代表了数据集中样本的特征xm和标签ym,为了表述的统一性,本申请用h0代表样本的特征x(h0可以看做神经网络的第0层、即整个神经网络的输入数据)。modeln表示n层神经网络模型可以被抽象为的函数公式。其中,假设,神经网络从输入数据开始的层被定义为第1层、第2层、……第n层,而如果抽象为函数,即为函数h1……、hn-1、hn。
由于量化的本质是性能和计算资源的平衡。发明人希望在有限的计算资源(如有限的内存成本)下,给出具有最佳量化性能的模型。模型的性能可以通过损失函数来衡量。因此,使用内存消耗作为计算资源的示例。可以设置以下问题1。
问题1:这个公式的意思是量化前后,在给定量化限制‖W‖<C、如模型大小小于多少MB的条件下,损失函数变化量最小。其中W是所有层的第j种量化模式的代价总和、即/>C是代价限制,如内存消耗限制或计算量、计算时间等,/>是量化后模型的损失函数。f(w)是量化前的全精度模型的损失函数。该问题1的目的是求解在量化所需的计算资源小于代价限制的情况下,最小化量化导致的损失函数的变化。
但是,问题1依旧缺少手段进行求解。在后文中会对该问题进一步转换,以便能够求解。
接下来介绍神经网络量化的噪音分析和理论问题的构造。
首先,量化的本质是噪音的引入,发明人分析量化对模型带来的影响时表明,量化会在神经网络模型的两个位置引入噪音,其一是神经网络的参数(权重)的量化会引入噪音,其二是不同层因为输入数据的量化模式或者量化参数不同,在精度转换过程中引入的噪音。这里第一种噪音的含义是例如当前层的某个参数是1.4,假设四舍五入量化为整数类型之后为1,则神经网络的当前层的参数(权重)的量化会引入噪音0.4。这里第二种噪音的含义是例如当前层的输出数据为3.46(即量化精度为0.01),而下一层的量化精度为0.1,则这种精度转换导致下取整量化后下一层的输入数据量化为3.4,两者相差0.06,这就是在当前层的输出数据到下一层的输入数据的精度转换过程中引入的噪音。图1示出了根据本申请的实施例的神经网络在每层的输入数据的量化带来的噪音∈以及对参数(权重)的量化带来的噪音δ的示意图。
在本申请的设置条件下(即以层为单位进行不同的量化方式),在某些情况下,如果对不同层的输入进行不同方式的量化,例如有的层向上取整,有的层向下取整,且由于权重的量化以及输入的量化模式(的向上取整和向下取整)的不同引入的噪音可能使得损失函数与全精度模型的损失函数相差无几、甚至比全精度模型的损失函数更小。也就是说,本申请正是要通过以层为单位的不同量化模式对损失函数的影响,来找到损失函数变化量较小或最小或甚至更优的那一种或几种以层为单位的量化模式。
本申请的主要内容涉及构造出找到更优损失函数的模型的算法。
图2示出了根据本申请的实施例的一种分层确定量化神经网络模型的量化模式的方法200的流程图。
如图2所示,一种分层确定量化神经网络模型的量化模式的方法200包括:步骤210,按神经网络模型的层为单位利用多个量化模式中的第j种量化模式来量化神经网络模型的第i层的输入向量和该层的权重参数,其中所述神经网络模型是利用第一数据集训练来得到的,其中i,j是正整数;步骤220,利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响;步骤230,求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
如此,通过确定在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价,如此得到量化后的模型是在理论上在给定代价限制下、损失函数值最小的模型,相比于传统量化方法,极大地减少了资源消耗量,且量化模型的性能也较佳。
具体地,在步骤210中,按神经网络模型的层为单位、利用多个量化模式中的一个量化模式(例如第j个量化模式)来量化神经网络模型的一层(例如第i层)的输入向量和该层的权重参数,其中神经网络模型是利用第一数据集训练来得到的。
假设利用第一数据集(例如训练数据集的80%的训练数据)训练来得到神经网络模型,这个神经网络模型可以看做是训练得到了对第一数据集来说比较精确或最精确的权重参数的训练好了的模型,可以称之为全精度模型。全文中称神经网络模型或全精度模型指代用具有较多训练数据的第一数据集来训练得到的精度较高的神经网络模型,而用量化后的神经网络指代对该神经网络模型或全精度模型进行量化后的模型。例如训练好的模型中的权重参数的精度是FP32的浮点数,FP32占用4字节。输入数据的类型例如是INT4,占用半个字节。
而后续的量化主要是指将初始的该全精度模型的输入数据的精度和/或权重参数的精度替换为较低精度数据类型进行存储和计算的方法。例如对权重参数的精度替换为INT2(占用1/4字节)等等。输入数据的类型替换为INT2(占用1/4字节)等等。当然上述精度类型的例子仅是示例,而非限制。在改变数据类型(精度)的时候,也可以采用特定的取整策略,例如向上取整或向下取整或四舍五入等等。也就是说,实际上量化是通过某种取整方式来转换数据类型。
当然,在此数据类型精度只是数据精度的一种表达,因为用不同数据类型可以实现不同的数据精度,但是本申请也不限于用数据类型来限制精度,也可以采用其他数据精度,而不限于已有的数据类型(例如整数型INT8、INT16等、浮点型等等),例如数据精度可以是以0.1为精度、0.2为精度等等。
假设神经网络模型有n层,本申请分层地对每层的输入数据和权重参数单独进行量化,且单独评估该层的输入数据和权重参数各自的量化分别对损失函数的影响。
在步骤220,利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响。
在此,可以通过第二数据集(例如训练数据集的剩余20%的训练数据,即先前提到的校正集)输入神经网络,来得到神经网络模型、即全精度模型M的损失函数f(M),并且通过第二数据集得到量化后的神经网络模型的损失函数。当然,这里的第一数据集和第二数据集可以相同也可以不同,有时在直接获得已训练好的全精度模型时,可能无法获得训练时的第一数据集,用与第一数据集不同的第二数据集或用更贴合实际业务场景的业务数据集来进行量化和确定最好或较佳量化模式是更可行的。
在一个实施例中,多个量化模式中的一个量化模式包括:利用多个数据精度中的一个数据精度来通过向上取整或向下取整中的一种取整方式来量化该层的输入向量和该层的权重参数。由于对数据精度的选择、以及向上取整、向下取整、四舍五入取整、各种量化方式的选择来达到该数据精度可以使得量化以及量化后的神经网络的性能产生不同的影响。
为了选择精度更低(占存储空间更小)且同时使得量化模型性能也更好的量化模式,可以从低精度的量化模式开始从低精度往高精度进行量化和计算,如果低精度的量化模式带来的噪音非常小,则采用该低精度的量化模式来进行量化。因此,在一个实施例中,按神经网络模型的层为单位、利用多个量化模式中的一个量化模式来量化神经网络模型的一层的输入向量和该层的权重参数包括:对于神经网络模型的一层,在每个量化循环中,按多个量化模式的数据精度从低到高来选择一个量化模式来量化神经网络模型的一层的输入向量和该层的权重参数。
注意,在本文中,“量化模式”表示的是在某一种“数据精度”下进行向上取整或向下取整或四舍五入取整等取整方式,而不是仅仅指一种数据精度,因为本申请针对不同数据精度,还要考虑向上取整使得损失函数值变化小,还是向下取整使得损失函数值变化小。例如一种量化模式对应于一种数据精度和向上取整以及向下取整的两种取整方式,而不是指一种量化模式对应于一种数据精度和向上取整,另一种量化模式对应于该数据精度和向下取整。
接下来介绍如何得到第j种量化模式对损失函数在第i层的影响矩阵P[i][j]。
在一个实施例中,所述得到量化所述影响矩阵P[i][j]包括:至少基于神经网络模型的损失函数值l与第i层的输入向量hi的梯度神经网络模型的第i层的输入向量的量化引入的噪音∈i来得到所述影响矩阵P[i][j]。
具体地,所述得到量化所述影响矩阵P[i][j]包括利用如下公式来计算所述影响矩阵P[i][j]:
计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput;
计算slopeinput=‖(f(M)-finput(M;scaleinput;i))/scaleinput‖,其中M是含有n层的所述神经网络模型,f(M)是所述神经网络模型推理第二数据集得到的损失函数,finput(M;scaleinput;i)是所述神经网络模型M在第i层的输入向量加上最大噪音scaleinput后的量化后神经网络模型推理所述第二数据集得到的损失函数;当使用向上取整进行量化时最大噪音为scaleinput*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleinput*[-1,-1,..,-1];
计算第i层的权重参数的所述第j个量化模式导致的噪音向量δi和最大噪音scaleweight;
计算fluc=‖(f(M)-fweight(M;scaleweight;i))‖,其中fweight(M;scaleweight;i)是所述神经网络模型M在第i层的权重参数加上最大噪音scaleweight后的量化后神经网络模型推理所述第二数据集得到的损失函数,当使用向上取整进行量化时最大噪音为scaleweight*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleweight*[-1,-1,..,-1];
如果fluc<errormax,其中errormax表示fluc大于其时对损失函数的影响大于预定值,计算其中slopeinput=‖(f(M)-finput(M;scaleinput;i))‖/scaleinput;
如果fluc≥errormax,则计算其中size(∈i)求输入向量量化带来的噪音向量∈i的元素个数,size(δi)求权重参数量化带来的噪音向量δi的元素个数,其中||*||表示对*求范数。
其中,为了要计算在第二数据集的全部样本上的损失函数差:对输入向量量化导致的损失函数差f(M)-finput(M;scaleinput;i)和对权重参数向量量化导致的损失函数差f(M)-fweight(M;scaleweight;i),下面介绍下列数学推导。
注意,在这里对输入向量和权重参数向量分别加入最大噪音的目的是得到量化最厉害、也就是性能影响最大的情况,在这种情况下得到性能较好的第j个量化模式是比较有鲁棒性的。
具体地,首先,量化后,对于第二数据集中的单个样本(xm,ym)来说,推理过程中单个样本的损失函数变化量可以被如下的公式(4)进行刻画:
其中,表示具有权重参数w的量化后的神经网络模型对单个样本(xm,ym)的损失函数值,l(w,xm,ym)表示具有权重参数w的全精度神经网络模型对单个样本(xm,ym)的损失函数值。其中•是向量内积,∈i表示神经网络的第i层的(输入)数据因为与前一层第i-1层的输出数据的量化模式或者量化参数不同、在精度转换过程中引入的噪音。例如,第1层用INT4数据类型精度,而第二层用INT2数据类型精度,则需要进行数据量化以及精度转换,这同样会引入噪音。δi表示第i层的权重参数的量化引入的噪音。
注意,上述公式里用到的符号j并非表示第j种量化模式的意思,而是只在该公式中表示j要取2到i的值。而全文中其他地方出现的j一般表示第j种量化模式。
上述公式的原理在于:由于损失函数变化量是由于损失函数的自变量(即,输入向量hi-1(因为,第i层的数据输入向量可以用第i-1层的数据输出向量符号hi-1来表示,虽然精度可能不同)和权重参数wi)从上一层精度量化到下一层精度量化的变化过程中带来的,因此,该公式利用损失函数的自变量的变化乘以其导数来计算各个自变量对损失函数变化量的影响。其中,i、j是正整数。
当然,在此数据类型精度只是数据精度的一种表达,因为用不同数据类型可以实现不同的数据精度,但是本申请也不限于用数据类型来限制精度,也可以采用其他数据精度,而不限于已有的数据类型(例如整数型int8、int16等、浮点型等等),例如数据精度可以是以0.1为精度、0.2为精度等等。
假设,f(w)表示全精度模型推理包括所有样本的第二数据集得到的整体损失函数值,表示量化后模型推理包括所有样本的第二数据集得到的整体损失函数值,/>包括finput(M;scaleinput;i)和fweight(M;scaleweight;i)。finput(M;scaleinput;i)表示仅对输入向量量化后模型推理包括所有样本的第二数据集得到的整体损失函数值,fweight(M;scaleweight;i)表示仅对权重参数向量量化后模型推理包括所有样本的第二数据集得到的整体损失函数值。在此,第二数据集可以是先前提到的“校正集”。
f(M)-finput(M;scaleinput;i)表示仅对输入向量量化后模型在数据集上的损失函数与全精度模型在数据集上的损失函数的差。f(M)-fweight(M;scaleweight;i)表示仅对权重参数量化后模型在数据集上的损失函数与全精度模型在数据集上的损失函数的差。本申请的目的是找到使得损失函数的差为最小的量化方案。
对于整个数据集上的神经网络的损失函数的变化量可以使用如下公式进行刻画,其中对不同量化模式下的神经网络的损失函数值与全精度神经网络的损失函数值的差求最小值,即
/>
其中即用量化后的神经网络模型推理所有样本得到的所有损失函数值的平均值,/>用全精度神经网络模型推理所有样本得到的所有损失函数值的平均值。/>是第二数据集,M是数据集中样本(sample)的数量。其中wi指的是神经网络模型的第i层的权重参数。∈i表示神经网络的第i层的(输入)数据因为量化模式或者量化参数不同、在精度转换过程中引入的噪音,其中E为该噪音的集合。δi表示全精度神经网络的第i层的权重因为量化而引入的噪音。l(·)是全精度模型推理数据集中的第m个样本的损失函数值,xm和ym代表了数据集中的第m个样本的特征xm和标签ym。其中/>表示损失函数值l与第i层的输入向量hi的梯度,/>表示损失函数值l与第i层的权重参数wi的梯度。
可见,输入数据向量量化对损失函数的影响总是要被考虑的。
以上公式非常清楚地表达出神经网络中从前一层的输出给后一层的输入由于精度转换带来的噪音对最终损失函数的变化产生一阶影响,而权重上的噪音对损失函数产生二阶影响。在量化过程中,应该优先考虑每层的输入和输出精度转换带来的损失,而权重的量化方法应随着激活的量化而变化。
当层间的梯度(即)较大时,应使用更精确的数据类型(即量化程度更低)去量化该层的输入和权重(即引入更小的噪音)。在这种情况下,虽然该本层的参数所需要的量化可能不需要高精度的数据类型,例如,权重的分布是二进制分布,但由于输入层量化产生的显著误差,它不能用简单的布尔数据类型存储和计算。当层间的梯度很小时,可以选择尽可能低精度的数据类型进行存储和计算,以提高计算速度,但同时,这些精度的选择带来的噪音需要满足本层参数和输入中引入的噪音大小的“邻域”的数学概念的要求。邻域的概念是:以点a为中心的任何开区间称为点a的邻域。
基于以上描述,可以得出根据本申请的该算法的主要思想:希望通过使用全微分作为基准和估计函数,在混合精度量化方案中调整的量化策略,在量化噪音满足邻域概念的情况下,本层参数的量化要随着/>的大小进行调整。
在此,具体地,可以将问题1:修改为如下问题2。
问题2:
其中C是总代价限制,如内存消耗限制或计算量、计算时间等。当然,这里用<C来表示满足代价限制,但是在某些代价中,例如计算速度,则希望大于预定计算速度阈值即>C,这种情况与<C是等同的,都是满足代价限制。
以上介绍了通过神经网络的数学概念来分析如何构建问题来使得在保证计算资源小于限制的情况下量化后的损失函数变化最小,接下来介绍如何在工程上实现上述想法。
A.从数学概念到工程概念
A1.从噪音映射到量化使用的数据类型
基于对公式(5)的分析知道对模型的损失函数波动的真正影响是层间的输入数据量化的误差∈,并且神经网络每层中参数(权重)的误差δ——如果在“邻域”内的话(或者定量为其小于某个预设阈值errormax的话)——几乎对损失函数没有影响或可以忽略不计。因此,当噪音在邻域范围内时,量化引起的损失函数值波动可以只考虑噪音∈的线性函数。因此,为了限制量化引起的损失函数的变化,∈向量的范数值应该具有最小的范数值,即不同量化参数调整的目标是min∈2。在上述目标函数的基础上,不同的量化参数选择就有了目标。在传统的对称或者非对称的均匀量化方法中,这种方法对应整数量化的解析截断(Analytical Clipping for Integer Quantization,ACIQ)方法。
传统的方法是使用库尔贝克-莱布勒(Kullback-Leibler,KL)散度来确定截断值的。问题是KL散度的近似不是范数方面的近似。它仅代表了信息理论方面两种分布之间的差异。但信息理论的差异不能直接反映在损失函数的变化上。通常,直接反映损失函数变化的数学性质是损失函数的梯度或相对于梯度的值。
A2.使用割线斜率替代切线斜率
通常,估计误差的技术是使用全微分进行误差估计。全微分是用切平面代替曲面。具体地,在可微曲面的任意点上作切平面,则在足够小的邻域内,切平面上的点是曲面上点的近似,且存在全微分关系。即,正确应用全微分的一个先决条件是引入的噪音必须足够小,以允许使用全微分进行误差估计。
然而,在实践中,使用者总是期望通过使用更低精度的数据类型进行存储,这样可以节约更多的内存。因此,在工程中,这种使用低精度数据类型的需求会使得量化过程中必须引入更大噪音,例如特征数值分布较宽的向量上用INT4的方法进行量化,或2值、3值对神经网络进行量化。这种激进的需求带来的噪音不可忽略,因此不能使用全微分来在噪音大的情况下进行误差估计。
另外,使用高阶微分对于解决这种精确预测不准的问题从理论上是完美的,但由于计算时间和内存的限制,一阶近似将更加符合实际业务的基本需求。因此,为了让一阶方法在超出邻域范围内的噪音下使用,本申请使用割线取代切线来预测对应噪音的损失函数变化量的方法以扩展邻域的概念。
图3示出了根据本申请的实施例的使用割线取代切线来预测对应噪音的损失函数变化量的方法以扩展邻域的概念。如图3所示,在较大噪音的情况下,割线的性能明显优于切线,切线的斜率为梯度,特别是对于接近极值点的点。在图3中,当预测点(xp)超出邻域范围但距离x0不远时,x0和x1之间的割线所预测的函数值明显优于切线。这里x1的选择是实际中的最大量化噪音。也就是说,接近(x0,func(x0))点的切线上的预测点(xp,y)与实际的(x,func(x))点之间的距离比割线(即,(x1,func(x1))与(x0,func(x0))之间的连线)上的预测点(xp,y)与实际的(x,func(x))点之间的距离大,即表示切线与实际func(x)曲线的距离比割线大,因此割线的性能明显优于切线。
然而,割线的选择需要考虑方向问题。图4示出了根据本申请的实施例的考虑方向的割线的示意图。如图4所示,尤其是当附近有极值点时割线的方向存在相反的差别。因此,当使用割线法进行估计时,必须规定好每个特征截断的方向。这意味着如果对数据的量化使用四舍五入方式进行截断,则由于输入向量的每个元素由于大小不同被四舍或五入的情况都不一致,因此存在指数级数量的割线需要进行计算。为了避免上述问题,当误差大于一个特定值时,本申请在量化每层的输入数据时,使用统一的向上取整,或者向下取整来简化需要估计的割线数量,进而较少地估计割线的斜率。
如图4所示,在噪音在一个数值范围内(例如,x0邻域)时,切线法预测的y值(即y=tangent(x))与真实的func(x)的距离会比割线法预测的y值(即y=secant(x))的距离小。通过实验在数据集cifar10/100上用神经网络模型resnet8/14/34进行的实验表明,在噪音<3E-3时,可以使用全微分的梯度、即切线法可以达到比较好的效果,3E-3<噪音<5E-2时,割线法远远优于切线法。
鉴于上述使用全微分进行估计还是需要面对“邻域”概念限制的问题,因此本章节内容用割线来拓展“邻域”的限制。
割线的数学概念为使用(xg-1,f(xg-1))和(xg,f(xg))两点计算的割线斜率,用数学公式表示如下:
其中,xg-1是x轴上的第g-1个点,xg是x轴上的第g个点,f(xg-1)是y轴上的xg-1的函数结果,f(xg)是y轴上的xg的函数结果。
因为在本申请要考虑割线与方向相关,在本算法中,定义两个变量进行描述:正方向的割线和负方向的割线其中scaleinput是用某种数据精度对输入数据向量中的多个输入数据进行量化时由于量化(向上取整或向下取整)所引入的最大误差(噪音)。例如,一层的数据向量(简化为2个数据输入)为(1.1,2.2),如果数据精度为1,则向上取整为(2,3),误差(噪音)∈为(0.9,0.8),则该数据精度下向上取整时最大误差(噪音)scaleinput=0.9。向下取整为(1,2),误差(噪音)∈为(-0.1,-0.2),最大误差的绝对值0.2,则该数据精度下向下取整时最大误差(噪音)scaleinput=0.2。而数据精度为10时,则向上取整为(10,10),误差(噪音)∈为(8.9,7.8),则该数据精度下向上取整时最大误差(噪音)scaleinput=8.9。向下取整为(0,0),误差(噪音)∈为(-1.1,-2.2),最大误差的绝对值2.2,则该数据精度下向下取整时最大误差(噪音)scaleinput=2.2。/>指的是一维正实数域。
Dataset表示数据集,例如在这里±表示要么向上取整+、要么向下取整-,向上取整时,都用+,向下取整时都用-,在此写成±因为+或-的公式除了符号的区别以外大体是相同的。
在本算法中使用割线secant±(·)去替代切线
具体地,如果利用向上取整来量化所述层的输入向量,则用割线来替代向上取整时的/>l+是向上取整时的量化后神经网络模型推理第二数据集中的一个样本的损失函数,其中,如果利用向下取整来量化所述层的输入向量,则用/>来替代向上取整时的l-是向下取整时的量化后神经网络模型推理第二数据集中的一个样本的损失函数,/>表示由第i层的输入数据的数量个1组成的向量,其中,f+(w)表示利用向上取整来量化所述层的输入向量的量化后神经网络模型的损失函数,+scaleinput中的scaleinput表示在向上取整的情况下量化所述层的输入向量中的各个输入数据带来的各个噪音的绝对值中的最大值,f-(w)表示利用向下取整来量化所述层的输入向量的量化后神经网络模型的损失函数,-scaleinput中的scaleinput表示在向下取整的情况下量化所述层的输入向量中的各个输入数据带来的各个噪音的绝对值中的最大值,f(w)表示(全精度)神经网络模型的损失函数。
这种定义和计算方法最大的优势是易于计算,同时,这样定义割线可以直接映射到分析变量中,即如果割线的斜率为[sec1,sec2...,secK],其中K为这以量化向量(即每层的输入或者权重)中的向量长度,则secant(hi,Δ)±=Esec。
在上文中,secant(hi,Δ)v的值就对应了算法描述中在向上向下取整过程中slope的值。在预测过程中,要使用secant(hi,Δ)±,即slope值乘以噪音的具体标量大小,即如果噪音为∈,先计算再与slope值相乘,即为割线估计的改变量。
由于神经网络中每层的影响在微分的概念下可以单独计算并累加,因此我们需要单独每层单独加噪音并计算损失函数值,即计算finput(M;scaleinput;i),而割线斜率,即slope的计算过程为slopeinput=‖(f(M)-finput(M;scaleinput;i))/scaleinput‖。
通过实验可以知道∈通常小于1E-2(即1E2),一般噪音在1E-2到5E-3这个范围内波动。这程度的噪音通过割线法在实验中是可以被包含在“邻域”的附近的。因此,在本实验中选取的基准神经网络是可以通过割线法进行量化的。
但是,基于分析知道对模型的损失函数波动的真正影响是层间数据量化的误差,并且神经网络每层中权重的误差,如果在“领域”内的话,几乎对的损失函数是没有影响的。理想情况下,使用者期望由引导的量化被神经网络该层的参数的“邻域”概念所涵盖。在这种情况下,可以求解问题时不必要去映射过大的噪音,因此可以轻松计算理论极值,更重要的是,这种情况下的计算成本很低,可以减少后续算法的计算开销。出于与上一节相同的原因,在实践中,由于计算速度/模型占用内存受限的需要或由于神经网络中每层的输入向量的量化需要,由量化引入的噪音通常变得不可控。因此,必须调整该层的量化模式以匹配权重。在实践中,本申请将首先确定由模型参数的量化引入的噪音是否会产生显著影响。权重量化中的参数设置与量化每层的输入量化方式的相同。这里需要手动设置一个errormax的值去评估“噪音较大”这个概念。当噪音(例如前面计算的fluc)大于errormax时,需要将量化模型参数的噪音影响也考虑进去。当噪音(例如前面计算的fluc)小于errormax时,则可以忽略量化模型参数的噪音影响。优选地,errormax设置为0.1-0.3的经验上合理的范围。而量化引起的损失函数变化估计将由割线法预估。
而当v接近于零(例如小于10-5)时,即使使用这种精度更高的数据类型进行量化存储和计算时,对于损失函数变化量也基本上很小(例如低于预定值),也就是说,量化对此层的性能损失或改进都很小。因此,可以不必通过上述公式计算损失函数变化量,而是用直接当前量化模式(等级)(可以不将精度进一步提高)量化这些参数和层的输入,这样可以减少用于计算损失函数变化量的计算资源消耗。
在一个实施例中,在算法设计中,可以使用参数errormin来控制这种情况,例如在某种量化模式的量化引入的最大误差(噪音)scaleinput小于或等于参数errormin时,确定第j种量化模式作为量化第i层的量化模式,且可以直接用当前第j种量化模式来对第i层进行量化,而不进行其他后续计算步骤,从而节约计算成本。而在某种量化模式的量化引入的最大误差(噪音)scaleinput大于参数errormin时,则利用上述公式计算损失函数变化量。在实验中,errormin可以取5*10-5。当然,这些数值都是举例,而非限制。
接下来,在步骤230,求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
在一个实施例中,在步骤230,可以根据要满足的代价类型,确定代价矩阵W[i][j]。代价类型可以包括内存消耗量或计算量、计算时间等。
以代价类型是内存消耗量为例,则代价矩阵W[i][j]中的元素与第i层用第j种量化模式量化后的存储量化后的输入向量和权重参数所消耗的内存消耗量相关。在这里,可以有多种计算代价的方式,例如直接用第i层用第j种量化模式量化后的内存消耗量作为代价元素,也可以将第i层用第j种量化模式量化后的内存消耗量除以未量化的全精度模型的所有层的内存消耗量,等等,只要与该代价类型相关,且能体现代价的大小定性就可以。具体地,第i层用第j种量化模式量化后的存储量化后的输入向量和权重参数所消耗的内存消耗量的计算方式可以是通过得知每个输入向量元素或权重参数元素量化后的数据精度在内存中的消耗量,例如INT8数据类型的内存消耗量为1字节,如果该层有100个输入向量元素和100个权重参数元素,则第i层用第j种量化模式量化后的内存消耗量为200*1字节=200字节。
另外,如果代价类型是计算时间,则代价矩阵的元素也可以通过计算芯片对第j种量化模式(数据精度类型)单次计算时间乘以总计算次数来得到。在此不一一举例。
然后,在一个实施例中,在步骤230,求解问题并得到满足该问题的第j种量化模式作为第i层的量化所采用的量化模式,
其中,Q是量化模式的个数,s.t.表示要满足预设条件C是要满足的代价类型的总代价限制。
其中,可以将上述问题用背包问题来解决,即可以将所述代价矩阵W[i][j]作为分组背包问题中的重量矩阵,且将影响矩阵P[i][j]作为分组背包问题中的价值矩阵,来求解所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式。
分组背包问题(例如0-1背包问题)是一个容易用分支定界或动态规划方法使用较少资源解决的问题。输入数据是背包的容量、物品的重量和价值,输出数据是能装入背包的最大价值。求解分组背包问题是一个公知的技术。其应用到本申请的情况可以是如下举例。存在K组物品和一个容量是C的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是W[i][j],价值是(1-P[i][j]),其中i是组号,j是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量C,且总价值/>最大,也就是说/>最小。当然,这仅是示例而非限制。总之,要求解上述问题可以利用很多方式。
B.工程问题和问题求解
基于上述分析,本申请提出了无损压缩神经网络的方法,总结为如下算法1。
/>
/>
总之,发明人通过分析噪音与量化模式之间的关系做了映射,得到了算法1。在这个问题转换中,映射了量化模式与噪声之间的关系以及目标数据集上模型的分析稳定性。为了扩展梯度的使用,在较大噪声的情况下使用割线进行线性预测。
通过问题的转换,将量化问题转换为低计算成本NP难题,即扩展0-1背包问题,即如下问题3。NP难题指的是在多项式时间内验证得出一个正确解的问题,0-1背包问题指的是,有几个物品,它们各自有重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和。
问题3:以及j∈Z其中C是量化的限制,如限制是内存消耗,C是最大内存消耗。
问题3和问题2是等价问题。相比于问题2,问题3中的所有项和算法3中的所有项都对应到了具体量化参数选择中。通过在价值矩阵中每行中选择且选择至少一个P[i][j]以及在重量矩阵的相同的位置的一个值W[i][j],则能保证每个层都知道他们应该选择哪个量化级别来达到量化目标。问题3的规模与神经网络层数相关,通常情况下,常用神经网络的层数很少有超过150层的,在这个问题规模上,扩展后的0-1背包问题是一个容易用分支定界方法或动态规划法使用较少资源解决的问题。输入数据是背包的容量、物品的重量和价值,输出数据是能装入背包的最大价值。
相比于传统在全精度的神经网络模型上多次正传、反传操作以用于精调重训练导致耗费大量时间和计算资源,因为本申请的方案不需要在原始神经网络上进行推理或训练,所以解决问题3资源消耗量是远远小于传统的量化方法,同时得到的模型也是在理论上在给定代价限制下,损失函数值最小的。
B.测试效果
在本节将评估本申请的性能。发明人使用MNIST、CIFAR10、CIFAR100数据集进行测试。将训练数据集分割为校准数据和训练数据集,可以分割为80%和20%。校准数据集的大小也可以与测试数据集的相同。
在MNIST数据集中使用DNN作为基准。ReLU层位于模型784-512-256-128-64-10架构中的每一层之间。ResNet8/14和VGG11/13将被用于应用于CIFAR 10数据集。在CIFAR 100数据集中使用VGG13、ResNet34作为实验对象。为了让实验结果更加显著,在Resnet模型实验中删掉了残差结构,即恒等映射。
算法参数上,设置errormax参数为0.1,这个参数可以在实验过程中调整出来。同时将算法的目标调整为产出将模型体积压缩到至少全精度模型的80%体积的量化模型,同时量化使用了INT8/INT4/FlOAT三种精度作为混合精度的排布的选择。
实验结果如下表所示,与HAWQ-v2相比,本申请的算法在损失函数值上有显著的提升。
在CIFAR10和CIFAR100数据集VGG的实验中,相比于HAWQ-v2,本申请的方法的性能提升约0.05,其中VGG11的性能提升比较大,这是因为VGG11本身的稳定性是差于VGG13的。而在CIFAR10和CIFAR100数据集的ResNet实验中,本申请的方法可以让量化模型性能提升约0.1。
相比于较为复杂的网络,在MNIST的简单网络上,量化带来的性能损失是巨大的,使用HAWQ-v2量化的损失可以达到0.2左右,但是通过合理量化,本申请可以将损失降低到0.15。
基于上述实验,本申请比HAWQ-v2算法无论在简单模型上还是较为复杂的模型上,都可以有显著的性能提升。
模型_数据集 | 全精度模型 | HAWQ-v2 | 分支界限法&算法1 |
vgg13_cifar10 | 0.0091 | 0.0457 | 0.0185 |
vgg11_cifar10 | 0.0019 | 0.1073 | 0.0651 |
res8_cifar10 | 0.3896 | 0.4418 | 0.4168 |
res14_cifar10 | 0.3964 | 0.4117 | 0.3892 |
CNN_mnist | 0.0792 | 0.2327 | 0.1564 |
vgg13_cifar100 | 1.2726 | 1.4831 | 1.2179 |
res34_cifar100 | 1.3383 | 1.4367 | 1.3432 |
实验证明,如此得到量化后的模型是在理论上在给定代价限制下、损失函数值最小的模型,相比于传统量化方法,极大地减少了资源消耗量,且量化模型的性能也较佳。
图5示出了根据本申请的实施例的分层确定量化神经网络模型的量化模式的系统500的流程图。
如图5所示,一种分层确定量化神经网络模型的量化模式的系统500包括:量化装置510,被配置为按神经网络模型的层为单位利用多个量化模式中的第j种量化模式来量化神经网络模型的第i层的输入向量和该层的权重参数,其中所述神经网络模型是利用第一数据集训练来得到的,其中i,j是正整数;计算装置520,被配置为利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响;求解装置530,被配置为求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
如此,通过确定在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价,如此得到量化后的模型是在理论上在给定代价限制下、损失函数值最小的模型,相比于传统量化方法,极大地减少了资源消耗量,且量化模型的性能也较佳。
在一个实施例中,所述量化装置510被配置为:利用多个数据精度中的一个数据精度来通过向上取整或向下取整中的一种取整方式来量化所述层的输入向量和所述层的权重参数。
在一个实施例中,所述量化装置510被配置为:对于所述神经网络模型的一层,在每个量化循环中,按多个量化模式的数据精度从低到高来选择一个量化模式来量化所述神经网络模型的一层的输入向量和该层的权重参数。
在一个实施例中,所述计算装置520被配置为:至少基于神经网络模型的损失函数值l与第i层的输入向量hi的梯度神经网络模型的第i层的输入向量的量化引入的噪音∈i来得到所述影响矩阵P[i][j]。
在一个实施例中,所述计算装置520被配置为利用如下公式来计算所述影响矩阵P[i][j]:
计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput;
计算slopeinput=‖(f(M)-finput(M;scaleinput;i))/scaleinput‖,其中M是含有n层的所述神经网络模型,f(M)是所述神经网络模型推理第二数据集得到的损失函数,finput(M;scaleinput;i)是所述神经网络模型M在第i层的输入向量加上最大噪音scaleinput后的量化后神经网络模型推理所述第二数据集得到的损失函数;当使用向上取整进行量化时最大噪音为scaleinput*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleinput*[-1,-1,..,-1];
计算第i层的权重参数的所述第j个量化模式导致的噪音向量δi和最大噪音scaleweight;
计算fluc=‖(f(M)-fweight(M;scaleweight;i))‖,其中fweight(M;scaleweight;i)是所述神经网络模型M在第i层的权重参数加上最大噪音scaleweight后的量化后神经网络模型推理所述第二数据集得到的损失函数,当使用向上取整进行量化时最大噪音为scaleweight*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleweight*[-1,-1,..,-1];
如果fluc<errormax,其中errormax表示fluc大于其时对损失函数的影响大于预定值,计算其中slopeinput=‖(f(M)-finput(M;scaleinput;i))‖/scaleinput;
如果fluc≥errormax,则计算其中size(∈i)求输入向量量化带来的噪音向量∈i的元素个数,size(δi)求权重参数量化带来的噪音向量δi的元素个数,其中||*||表示对*求范数。
在一个实施例中,所述计算装置520被配置为在计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput之后:
如果scaleinput≤errormin,则确定第j种量化模式作为量化第i层的量化模式,而不进行其他后续计算步骤,
其中errormin表示所述最大值小于其时对损失函数的影响低于预定值。
在一个实施例中,所述求解装置530被配置为:根据要满足的代价类型,确定代价矩阵W[i][j];
求解问题并得到满足该问题的第j种量化模式作为第i层的量化所采用的量化模式,其中,Q是量化模式的个数,s.t.表示要满足预设条件/>C是要满足的代价类型的总代价限制。
在一个实施例中,所述求解装置530被配置为:将所述代价矩阵W[i][j]作为0-1背包问题中的重量矩阵,且将影响矩阵P[i][j]作为0-1背包问题中的价值矩阵,来求解所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式。
如此得到量化后的模型是在理论上在给定代价限制下、损失函数值最小的模型,相比于传统量化方法,极大地减少了资源消耗量,且量化模型的性能也较佳。
图6示出了适于用来实现本申请的实施例的示例性电子设备的框图。
电子设备可以包括处理器(H1);存储介质(H2),耦合于处理器(H1),且在其中存储计算机可执行指令,用于在由处理器执行时进行本申请的实施例的各个方法的步骤。
处理器(H1)可以包括但不限于例如一个或者多个处理器或者或微处理器等。
存储介质(H2)可以包括但不限于例如,随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、计算机存储介质(例如硬碟、软碟、固态硬盘、可移动碟、CD-ROM、DVD-ROM、蓝光盘等)。
除此之外,该电子设备还可以包括(但不限于)数据总线(H3)、输入/输出(I/O)总线(H4),显示器(H5)以及输入/输出设备(H6)(例如,键盘、鼠标、扬声器等)等。
处理器(H1)可以通过I/O总线(H4)经由有线或无线网络(未示出)与外部设备(H5、H6等)通信。
存储介质(H2)还可以存储至少一个计算机可执行指令,用于在由处理器(H1)运行时执行本技术所描述的实施例中的各个功能和/或方法的步骤。
在一个实施例中,该至少一个计算机可执行指令也可以被编译为或组成一种软件产品,其中一个或多个计算机可执行指令被处理器运行时执行本技术所描述的实施例中的各个功能和/或方法的步骤。
图7示出了根据本申请的实施例的非暂时性计算机可读存储介质的示意图。
如图7所示,计算机可读存储介质720上存储有指令,指令例如是计算机可读指令710。当计算机可读指令710由处理器运行时,可以执行参照以上描述的各个方法。计算机可读存储介质包括但不限于例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。例如,计算机可读存储介质720可以连接于诸如计算机等的计算设备,接着,在计算设备运行计算机可读存储介质720上存储的计算机可读指令710的情况下,可以进行如上描述的各个方法。
当然,上述的具体实施例仅是例子而非限制,且本邻域技术人员可以根据本申请的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本申请的效果,这种合并和组合而成的实施例也被包括在本申请中,在此不一一描述这种合并和组合。
注意,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本邻域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
本公开中的步骤流程图以及以上方法描述仅作为例示性的例子并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本邻域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。
另外,本文中的各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本申请的概念来结合本文中的各个实施例中相关的部分步骤和部分装置以构思新的实施例,而这些新的实施例也包括在本申请的范围内。
以上描述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(ASIC)或处理器。
可以利用被设计用于进行在此描述的功能的通用处理器、数字信号处理器(DSP)、ASIC、场可编程门阵列信号(FPGA)或其他可编程逻辑器件(PLD)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行描述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合,多个微处理器、与DSP核协作的微处理器或任何其他这样的配置。
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、可移动碟、CD-ROM等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
在此公开的方法包括用于实现描述的方法的动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。
因此,本公开还可以包括计算机程序产品,其中计算机程序产品可以进行在此给出的方法、步骤和操作。例如,这样的计算机程序产品可以是计算机软件包、计算机代码指令、具有有形存储(和/或编码)在其上的计算机指令的计算机可读的有形介质,该指令可由处理器执行以进行在此描述的操作。计算机程序产品可以包括包装的材料。
软件或指令也可以通过传输介质而传输。例如,可以使用诸如同轴电缆、光纤光缆、双绞线、数字订户线(DSL)或诸如红外、无线电或微波的无线技术的传输介质从网站、服务器或者其他远程源传输软件。
此外,用于进行在此描述的方法和技术的模块和/或其他适当的手段可以在适当时由用户终端和/或基站下载和/或其他方式获得。例如,这样的设备可以耦接到服务器以促进用于进行在此描述的方法的手段的传送。或者,在此描述的各种方法可以经由存储部件提供,以便用户终端和/或基站可以在耦接到该设备或者向该设备提供存储部件时获得各种方法。此外,可以利用用于将在此描述的方法和技术提供给设备的任何其他适当的技术。
其他例子和实现方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,以上描述的功能可以使用由处理器、硬件、固件、硬连线或这些的任意的组合执行的软件实现。实现功能的特征也可以物理地位于各个位置,包括被分发以便功能的部分在不同的物理位置处实现。而且,如在此使用的,包括在权利要求中使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“A、B或C的至少一个”的列举意味着A或B或C,或AB或AC或BC,或ABC(即A和B和C)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。
可以不脱离由所附权利要求定义的教导的技术而进行对在此描述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上描述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此描述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。
提供所公开的方面的以上描述以使本邻域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本邻域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
Claims (18)
1.一种分层确定量化神经网络模型的量化模式的方法,包括:
按神经网络模型的层为单位利用多个量化模式中的第j种量化模式来量化神经网络模型的第i层的输入向量和该层的权重参数,其中所述神经网络模型是利用第一数据集训练来得到的,其中i,j是正整数;
利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响;
求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
2.根据权利要求1所述的方法,其中,所述多个量化模式中的一个量化模式包括:利用多个数据精度中的一个数据精度来通过向上取整或向下取整中的一种取整方式来量化所述层的输入向量和所述层的权重参数。
3.根据权利要求1所述的方法,其中,所述按神经网络模型的层为单位利用多个量化模式中的一个量化模式来量化神经网络模型的一层的输入向量和该层的权重参数包括:
对于所述神经网络模型的一层,在每个量化循环中,按多个量化模式的数据精度从低到高来选择一个量化模式来量化所述神经网络模型的一层的输入向量和该层的权重参数。
4.根据权利要求1所述的方法,其中,所述得到量化所述影响矩阵P[i][j]包括:
至少基于神经网络模型的损失函数值与第i层的输入向量hi的梯度/>神经网络模型的第i层的输入向量的量化引入的噪音∈i来得到所述影响矩阵P[i][j]。
5.根据权利要求4所述的方法,其中,所述得到量化所述影响矩阵P[i][j]包括利用如下公式来计算所述影响矩阵P[i][j]:
计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput;
计算slopeinput=||(f(M)-finput(M;scaleinput;i))/scaleinput||,其中M是含有n层的所述神经网络模型,f(M)是所述神经网络模型推理第二数据集得到的损失函数,finput(M;scaleinput;i)是所述神经网络模型M在第i层的输入向量加上最大噪音scaleinput后的量化后神经网络模型推理所述第二数据集得到的损失函数;当使用向上取整进行量化时最大噪音为scaleinput*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleinput*[-1,-1,..,-1];
计算第i层的权重参数的所述第j个量化模式导致的噪音向量δi和最大噪音scaleweight;
计算fluc=||(f(M)-fweight(M;scaleweight;i))||,其中fweight(M;scaleweight;i)是所述神经网络模型M在第i层的权重参数加上最大噪音scaleweight后的量化后神经网络模型推理所述第二数据集得到的损失函数,当使用向上取整进行量化时最大噪音为scaleweight*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleweight*[-1,-1,..,-1];
如果ffluc<errormax,其中errormax表示fluc大于其时对损失函数的影响大于预定值,计算其中slopeinput=||(f(M)-finput(M;scaleinput;i))||/scaleinput;
如果fluc≥errormax,则计算其中size(∈i)求输入向量量化带来的噪音向量∈i的元素个数,size(δi)求权重参数量化带来的噪音向量δi的元素个数,其中||*||表示对*求范数。
6.根据权利要求5所述的方法,其中,在计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput之后:
如果scaleinput≤errormin,则确定第j种量化模式作为量化第i层的量化模式,而不进行其他后续计算步骤,
其中errormin表示所述最大值小于其时对损失函数的影响低于预定值。
7.根据权利要求1-6中任一项所述的方法,其中,所述求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式的步骤包括:
根据要满足的代价类型,确定代价矩阵W[i][j];
求解问题并得到满足该问题的第j种量化模式作为第i层的量化所采用的量化模式,
其中,Q是量化模式的个数,s.t.表示要满足预设条件C是要满足的代价类型的总代价限制。
8.根据权利要求7所述的方法,其中所述求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式的步骤包括:
将所述代价矩阵W[i][j]作为分组背包问题中的重量矩阵,且将影响矩阵P[i][j]作为分组背包问题中的价值矩阵,来求解所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式。
9.一种分层确定量化神经网络模型的量化模式的系统,包括:
量化装置,被配置为按神经网络模型的层为单位利用多个量化模式中的第j种量化模式来量化神经网络模型的第i层的输入向量和该层的权重参数,其中所述神经网络模型是利用第一数据集训练来得到的,其中i,j是正整数;
计算装置,被配置为利用第二数据集推理得到影响矩阵P[i][j],其中所述影响矩阵P[i][j]表示用来量化所述第i层的所述第j种量化模式对所述神经网络模型的损失函数的影响;
求解装置,被配置为求解在代价矩阵W[i][j]在所有层的总和小于代价限制的情况下、使得所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式作为第i层的量化所采用的量化模式,其中所述代价矩阵W[i][j]表示第j种量化模式作为第i层的量化所消耗的计算代价。
10.根据权利要求9所述的系统,其中,所述量化装置被配置为:利用多个数据精度中的一个数据精度来通过向上取整或向下取整中的一种取整方式来量化所述层的输入向量和所述层的权重参数。
11.根据权利要求9所述的系统,其中,所述量化装置被配置为:
对于所述神经网络模型的一层,在每个量化循环中,按多个量化模式的数据精度从低到高来选择一个量化模式来量化所述神经网络模型的一层的输入向量和该层的权重参数。
12.根据权利要求9所述的系统,其中,所述计算装置被配置为:
至少基于神经网络模型的损失函数值与第i层的输入向量hi的梯度/>神经网络模型的第i层的输入向量的量化引入的噪音∈i来得到所述影响矩阵P[i][j]。
13.根据权利要求12所述的系统,其中,所述计算装置被配置为利用如下公式来计算所述影响矩阵P[i][j]:
计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput;
计算slopeinput=‖(f(M)-finput(M;scaleinput;i))/scaleinput‖,其中M是含有n层的所述神经网络模型,f(M)是所述神经网络模型推理第二数据集得到的损失函数,finput(M;scaleinput;i)是所述神经网络模型M在第i层的输入向量加上最大噪音scaleinput后的量化后神经网络模型推理所述第二数据集得到的损失函数;当使用向上取整进行量化时最大噪音为scaleinput*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleinput*[-1,-1,..,-1];
计算第i层的权重参数的所述第j个量化模式导致的噪音向量δi和最大噪音scaleweight;
计算fluc=‖(f(M)-fweight(M;scaleweight;i))‖,其中fweight(M;scaleweight;i)是所述神经网络模型M在第i层的权重参数加上最大噪音scaleweight后的量化后神经网络模型推理所述第二数据集得到的损失函数,当使用向上取整进行量化时最大噪音为scaleweight*[1,1,..,1],当使用向下取整进行量化时,最大噪音为scaleweight*[-1,-1,..,-1];
如果fluc<errormax,其中errormax表示fluc大于其时对损失函数的影响大于预定值,计算其中slopeinput=‖(f(M)-finput(M;scaleinput;i))‖/scaleinput;
如果fluc≥errormax,则计算其中size(∈i)求输入向量量化带来的噪音向量∈i的元素个数,size(δi)求权重参数量化带来的噪音向量δi的元素个数,其中||*||表示对*求范数。
14.根据权利要求13所述的系统,其中,所述计算装置被配置为在计算第i层的输入向量的所述第j个量化模式导致的噪音向量∈i和最大噪音scaleinput之后:
如果scaleinput≤errormin,则确定第j种量化模式作为量化第i层的量化模式,而不进行其他后续计算步骤,
其中errormin表示所述最大值小于其时对损失函数的影响低于预定值。
15.根据权利要求1-14中任一项所述的系统,其中,所述求解装置被配置为:
根据要满足的代价类型,确定代价矩阵W[i][j];
求解问题并得到满足该问题的第j种量化模式作为第i层的量化所采用的量化模式,
其中,Q是量化模式的个数,s.t.表示要满足预设条件C是要满足的代价类型的总代价限制。
16.根据权利要求15所述的系统,其中所述求解装置被配置为:
将所述代价矩阵W[i][j]作为分组背包问题中的重量矩阵,且将影响矩阵P[i][j]作为分组背包问题中的价值矩阵,来求解所述影响矩阵P[i][j]在所有层的总和最小的第j种量化模式。
17.一种电子设备,包括:
存储器,用于存储指令;
处理器,用于读取所述存储器中的指令,并执行如权利要求1-8中任一项所述的方法。
18.一种非暂时存储介质,其上存储有指令,
其中,所述指令在被处理器读取时,使得所述处理器执行如权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311552606.1A CN117474052A (zh) | 2023-11-20 | 2023-11-20 | 分层确定神经网络量化模式的方法、系统、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311552606.1A CN117474052A (zh) | 2023-11-20 | 2023-11-20 | 分层确定神经网络量化模式的方法、系统、设备和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117474052A true CN117474052A (zh) | 2024-01-30 |
Family
ID=89623711
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311552606.1A Pending CN117474052A (zh) | 2023-11-20 | 2023-11-20 | 分层确定神经网络量化模式的方法、系统、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117474052A (zh) |
-
2023
- 2023-11-20 CN CN202311552606.1A patent/CN117474052A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210256348A1 (en) | Automated methods for conversions to a lower precision data format | |
CN111652367B (zh) | 一种数据处理方法及相关产品 | |
US20190122100A1 (en) | Method and apparatus with neural network parameter quantization | |
Faraone et al. | AddNet: Deep neural networks using FPGA-optimized multipliers | |
CN111191783B (zh) | 一种自适应量化方法及装置、设备、介质 | |
Pagliari et al. | Dynamic bit-width reconfiguration for energy-efficient deep learning hardware | |
CN110717585A (zh) | 神经网络模型的训练方法、数据处理方法和相关产品 | |
Pang et al. | Using multi-objective optimization to solve the long tail problem in recommender system | |
Ndiaye et al. | Root-finding approaches for computing conformal prediction set | |
CN117474052A (zh) | 分层确定神经网络量化模式的方法、系统、设备和介质 | |
CN114462591A (zh) | 一种动态量化神经网络的推理方法 | |
Xia et al. | An energy-and-area-efficient cnn accelerator for universal powers-of-two quantization | |
CN101685436A (zh) | 计算装置与方法以及量化装置与方法 | |
Tsuji et al. | Greedy search algorithm for partial quantization of convolutional neural networks inspired by submodular optimization | |
CN117454944A (zh) | 分层确定神经网络量化模式的方法、系统、设备和介质 | |
De Silva et al. | Towards a better 16-bit number representation for training neural networks | |
Gu et al. | A new large-scale learning algorithm for generalized additive models | |
Wu et al. | DRGS: Low-precision full quantization of deep neural network with dynamic rounding and gradient scaling for object detection | |
Chikin et al. | Explicit model size control and relaxation via smooth regularization for mixed-precision quantization | |
CN114444667A (zh) | 训练神经网络的方法及装置、电子设备 | |
CN114222997A (zh) | 用于对神经网络进行后训练量化的方法和装置 | |
Jung et al. | Quantization-error-robust deep neural network for embedded accelerators | |
Przewlocka-Rus et al. | Energy efficient hardware acceleration of neural networks with power-of-two quantisation | |
Chudakov et al. | Iterative adaptation to quantization noise | |
CN109089125A (zh) | 一种视频编码中的dct系数分布特征模型优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |