| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> A Survey of Quantization Methods for Efficient Neural Network Inference---2021年 -> 正文阅读 |
|
[人工智能]A Survey of Quantization Methods for Efficient Neural Network Inference---2021年 |
A Survey of Quantization Methods for Efficient Neural Network Inference--2021年
Abstract
1、一旦抽象的数学计算适应于数字计算机上的计算,这些计算中数值的高效表示、操作和通信的问题就出现了。 2、强烈相关的数值表示的问题是量化的问题:应该以什么方式一组连续的实值数字分布在一个固定的离散的数字最小化所需的位数也最大化伴随计算的准确性? I. INTRODUCTION在过去的十年中,我们观察到神经网络(NNs)在处理各种问题时的准确性有了显著的提高,这些问题通常是通过高度参数化的模型实现的。而这些过度参数化(因此非常大)的神经网络模型的精度显著提高,这些模型的绝对尺寸意味着不可能为许多资源受限的应用程序部署它们。这就给在资源有限的环境中实现普及深度学习带来了一个问题,它需要实时推理,能耗低,精度高。这种普遍的深度学习预计将对广泛的应用产生重大影响,如实时智能医疗监控、自动驾驶、音频分析和语音识别。 要以最佳精度实现高效、实时的NNs,需要重新考虑NN模型的设计、训练和部署[71]。有大量文献致力于通过提高神经网络模型的效率(在延迟、内存占用和能耗等方面)来解决这些问题,同时仍然提供最佳的准确性/泛化权衡。这些努力大致可分为以下几类。 b) 共同设计NN架构和硬件:最近的另一项工作是为特定的目标硬件平台调整(和共同设计)NN架构。这一点很重要,因为NN组件的开销(在延迟和能量方面)取决于硬件。例如,硬件arXiv:2103。13630V3[C.CV]具有专用缓存层次结构的21 Jun 2021可以比没有这种缓存层次结构的硬件更有效地执行带宽绑定操作。与NN架构设计类似,架构硬件协同设计的初始方法是手动的,专家将调整/更改NN架构[70],然后使用自动化AutoML和/或NAS技术[22,23100252]。 c) 剪枝:减少NNs内存占用和计算成本的另一种方法是应用剪枝。在剪枝过程中,去除具有小显著性(敏感性)的神经元,从而生成稀疏的计算图。这里,显著性较小的神经元是那些去除对模型输出/损失函数影响最小的神经元。==修剪方法可以大致分为非结构化修剪[49,86139143191257]和结构化修剪[9110615616274275279]。==通过非结构化修剪,无论神经元出现在哪里,都可以移除显著性较小的神经元。使用这种方法,可以执行积极的修剪,删除大多数NN参数,对模型的泛化性能影响很小。然而,这种方法会导致稀疏矩阵运算,这种运算很难加速,并且通常是内存受限的[21,66]。 e) 量化:最后,量化是一种在神经网络模型的训练和推理方面都取得了巨大成功的方法。虽然数字表示和量化问题与数字计算一样古老,但神经网络提供了独特的改进机会。虽然这项关于量化的调查主要集中在推理上,但我们应该强调**,量化的一个重要成功在于神经网络训练[**10,35,57130247]。特别是,半精度和混合精度训练[41,72,79175]的突破是AI加速器实现更高吞吐量的主要驱动因素。然而,事实证明,如果不进行重大调整,就很难达到半精度以下,而且最近的大多数量化研究都集中在推理上。这种推理的量化是本文的重点。 f) 量化和神经科学:神经网络量化与神经科学有着松散的联系(对某些人来说,这是一种动机),它是神经科学中的一项工作,表明人脑以离散/量化的形式存储信息,而不是以连续的形式存储信息[171236240]。这种想法的一个普遍理由是,以连续形式存储的信息将不可避免地被噪声破坏(噪声总是存在于物理环境中,包括我们的大脑,并且可以由热噪声、感官噪声、外部噪声、突触噪声等诱发)[27,58]。然而,离散信号表示对这种低电平噪声更具鲁棒性。还提出了其他原因,包括离散表示的更高泛化能力[128138242],以及在有限资源下的更高效率[241]。我们请读者参阅[228],以全面回顾神经科学文献中的相关工作。 这项工作的目标是介绍量化中使用的当前方法和概念,并讨论这一研究领域当前面临的挑战和机遇。在这样做的过程中,我们试图讨论最相关的工作。不可能在一次简短调查的页数限制内讨论像NN量化这样大的领域中的每一项工作;毫无疑问,我们遗漏了一些相关文件。我们提前向读者和论文作者致歉,我们可能忽略了他们。 在本次调查的结构方面,我们将首先在第二部分提供量化的简要历史,然后在第三部分介绍量化的基本概念。这些基本概念与大多数量化算法相同,对于理解和部署现有方法是必要的。然后我们在第四部分讨论更高级的话题。这些主要涉及最新的最先进的方法,尤其是低/混合精度量化。然后,我们将在第五部分讨论硬件加速器中量化的含义,特别关注边缘处理器。最后,我们在第七节中提供了总结和结论。 二、量化的一般历史(GENERALHISTORY OF QUANTIZATION)Gray和Neuhoff写了一篇很好的关于1998年之前量化历史的综述[76]。这篇文章很好,值得通读;然而,为了方便读者,我们将在这里简要总结一些要点。量化作为一种从大(通常是连续的)集合中的输入值映射到小(通常是有限的)集合中的输出值的方法,有着悠久的历史。Rounding (舍入)and truncation截断是典型的例子。量化与微积分的基础有关,相关方法可以在19世纪早期(以及更早的时期)看到,例如,在早期关于最小二乘法和大规模(按照19世纪早期的标准)数据分析相关技术的工作中[225]。关于量化的早期工作可以追溯到1867年,当时离散化被用来近似计算积分[206];随后,在1897年,Shappard研究了舍入误差对积分结果的影响[220]。最近,量化在数字信号处理中变得很重要,因为以数字形式表示信号的过程通常涉及舍入,在数值分析和数值算法的实现中,对实数的计算是用有限精度算法实现的。 量化以一种略微不同的方式出现在算法中,该算法使用数值逼近来解决涉及连续数学量的问题,这一领域也有着悠久的历史,但随着数字计算机的出现,它也重新受到关注。在数值分析中,一个重要的概念是(现在仍然是)一个完全适定的问题,粗略地说,一个问题是适定的,如果:一个解存在;这种解决方案是独一无二的;这种解决方案持续依赖于某种合理拓扑中的输入数据。这种问题有时被称为条件问题。事实证明,即使在处理一个给定的条件良好的问题时,某些在某种理想意义上“精确”解决该问题的算法,在存在舍入和截断误差特性所引入的“噪声”的情况下,性能也非常差。这些舍入误差与只使用有限位数来表示实数有关——例如,IEEE浮点标准规定的量化;由于一个迭代算法只能进行有限次的迭代,因此会产生截断误差。后者即使在“精确算术”中也很重要,因为大多数连续数学问题在原则上甚至不能用有限的初等运算序列来解决;但前者与量化有关。这些问题导致了算法数值稳定性的概念。让我们把一个数值算法看作一个函数,将输入数据X映射到“真”解;但由于舍入和截断误差,该算法的输出实际上是另一种?. 在这种情况下,算法的正向误差为?y=y??Y算法的后向误差最小?xsuch thatf(x?x) =y?. 因此,**正向误差告诉我们精确或真实答案与算法输出结果之间的差异;反向误差告诉我们,我们运行的算法实际解决了哪些输入数据。算法的前向误差和后向误差与问题的条件数有关。**我们请感兴趣的读者参考[237]来详细讨论这些问题。 A.神经网络中的量化–Quantization in Neural Nets毫无疑问,已有数千篇关于这些主题的论文发表,人们可能会想:最近关于NN量子化的工作与这些早期的工作有何不同?当然,最近提出的许多“新算法”与文献中过去的工作有很强的联系(在某些情况下,本质上是重新发现)。然而,NNs给量化问题带来了独特的挑战和机遇。首先,神经网络的推理和训练都是计算密集型的。因此,数值的有效表示尤为重要。第二,目前大多数神经网络模型都严重过度参数化,因此有充分的机会在不影响精度的情况下降低钻头精度 。然而,一个非常重要的区别是NNs对激进的量化和极端离散化非常鲁棒。这里的新自由度与涉及的参数数量有关,也就是说,我们正在处理过度参数化的模型。这直接影响到我们是否在解决适定问题,是否对前向误差或后向误差感兴趣,等等。在推动量子化最新发展的神经网络应用中,没有一个适定或条件良好的问题得到解决。相反,人们对某种前向误差度量(基于分类质量、复杂度等)感兴趣,但由于过度参数化,有许多非常不同的模型精确或近似地优化了该度量。因此,量化模型和原始非量化模型之间可能存在较大的误差/距离,同时仍能获得非常好的泛化性能。这种增加的自由度在许多经典研究中并不存在,这些研究主要集中在寻找不会对信号造成太大改变的压缩方法,或者在数值方法中,对“精确”计算和“离散”计算之间的差异有很强的控制。这一观察结果一直是研究NN量化新技术的主要推动力。最后,神经网络模型的分层结构为探索提供了额外的维度。神经网络中的不同层对损失函数有不同的影响,这促使采用混合精度的量化方法。 III. 量化的基本概念----BASICCONCEPTS OFQUANTIZATION在本节中,我们首先简要介绍第iii - a节中常见的符号和问题设置,然后描述第iii - b - iii - f节中基本的量化概念和方法。 然后,我们在第三节- g中讨论了不同的微调方法,然后在第三节- h中讨论了随机量化。 A. Problem Setup and Notations----问题设置和注释假设具有可学习参数的NN Haslayers表示为{W1,W2,…,WL},θ表示所有此类参数的组合。在不丧失普遍性的情况下,我们关注监督学习问题,名义目标是优化以下经验风险最小化函数: B. Uniform Quantization—均匀量化We need first to define a function that can quantize NN weights and activations to a finite set of values 。 This function takes real values in floating point, and it maps them to a lower precision range, as illustrated in Figure1. A popular choice for a quantization function is as follows:
C. Symmetric and Asymmetric Quantization—对称量化和非对称量化均匀量化的一个重要因素是等式中比例因子S的选择 2.这个比例因子本质上是将给定的实值r划分为多个分区(如[113,133]中讨论的): 在这里,对于缩放因子有两个选择。在“全范围”中,对称量化S被选择为2max(|r|)2n?1(带地板舍入模式),使用全INT8范围[-128,127]。然而,在“限制范围”中,S被选择为max(|r|)2n?1?1,它只使用[-127,127]的范围。正如预期的那样,全程方法更准确。对称量化在实践中被广泛应用于权值量化,因为将零点归零可以降低推理[255]过程中的计算成本,也使实现更加简单。然而,请注意,对于激活,由于非对称激活中的偏移而占据的交叉项是一个静态数据独立项,可以在偏置[15]中吸收(或用于初始化累加器)。 使用信号的最小/最大值进行对称和非对称量化是一种流行的方法。然而,这种方法容易受到激活中异常数据的影响。这些可能会不必要地增加范围,并因此降低量化的分辨率。解决这个问题的一种方法是使用百分位数,而不是信号的最小/最大值[172]。也就是说,第i个最大值/最小值被用作β/α,而不是最大值/最小值。另一种方法是选择α和β,以最小化实际值和量化值之间的KL差异(即信息损失)[176]。我们请感兴趣的读者参考[255],其中在各种模型上评估了不同的校准方法。 总结(对称与非对称量化)
D.Range Calibration Algorithms: Static vs Dynamic Quantization----距离校准算法:静态与动态量化到目前为止,我们讨论了确定**[α,β]削波范围的不同校准方法。量化方法的另一个重要区别在于削波范围何时确定。该范围可以静态计算权重**,因为在大多数情况下,参数在推理过程中是固定的。然而,每个输入样本的激活图不同(xin公式1)。因此,量化激活有两种方法:动态量化和静态量化。 在动态量化中,这个范围是在运行时为每个激活映射动态计算的。这种方法需要实时计算信号统计信息(最小值、最大值、百分位数等),这可能会带来非常高的开销。然而,动态量化通常会导致更高的精度,因为每个输入的信号范围都是精确计算的。 另一种量化方法是静态量化,其中剪裁范围是预先计算的,并且在推断期间是静态的。这种方法不会增加任何计算开销,但与动态量化相比,它通常会导致较低的精度。一种流行的预计算方法是运行一系列校准输入来计算典型的激活范围[113267]。 已经提出了多种不同的度量来寻找最佳范围,包括最小化原始未量化权重分布和相应量化值之间的均方误差(MSE)[40221229281]。人们也可以考虑使用其他指标,如熵[189],尽管MSE是最常用的。另一种方法是在NN训练期间学习/施加该削波范围[3614627687]。这里值得注意的工作是LQNets[276]、PACT[36]、LSQ[56]和LSQ[15],它们在训练期间联合优化了神经网络中的裁剪范围和权重。 总结(动态与静态量化):动态量化动态计算每个激活的clip范围,通常达到最高精度。然而,动态计算信号的范围非常昂贵,因此,从业者通常使用静态量化,其中所有输入的限幅范围都是固定的。 E. Quantization Granularity—量化粒度在大多数计算机视觉任务中,层的激活输入被许多不同的卷积滤波器卷积,如图3所示。每个卷积滤波器都可以有不同的值范围。因此,量化方法的一个区别是如何计算权重的剪裁范围[α,β]的粒度。我们将其分类如下。 a) Layerwise Quantization(分层量化):在这种方法中,通过考虑层[133]的卷积滤波器中的所有权重来确定限幅范围,如图3的第三列所示。在这里,我们检查该层中整个参数的统计信息(例如,最小值、最大值、百分位数等),然后对所有卷积滤波器使用相同的剪裁范围。虽然这种方法很容易实现,但往往会导致次优精度,因为每个卷积滤波器的范围可能变化很大。例如,参数范围相对较窄的卷积核可能会由于同一层中范围较宽的另一个核而失去其量化分辨率。 b) Groupwise Quantization(分组量化):人们可以在一个层中分组多个不同的通道,以计算剪切范围(激活或卷积内核)。==这对于单个卷积/激活的参数分布变化很大的情况可能很有帮助。==例如,这种方法在Q-BERT[219]中被发现对由完全连接的注意层组成的变压器[243]模型进行量化非常有用。然而,这种方法不可避免地带来了考虑不同比例因子的额外成本。 c) Channelwise Quantization(通道量化):clip范围的常用选择是为每个卷积滤波器使用固定值,独立于其他通道[105,113,133,222,276,285],如图3的最后一列所示。也就是说,每个通道都指定了一个专用的比例因子。这确保了更好的量化分辨率,通常会导致更高的精度。 d) Sub-channelwise Quantization(子信道量化):前一种方法可能会被用到极端,即根据卷积或完全连接层中的任何参数组来确定剪裁范围。然而,这种方法可能会增加相当大的开销,因为在处理单个卷积或全连接层时需要考虑不同的比例因子。因此,分组量化可以在量化分辨率和计算开销之间建立良好的折衷。 总结(量化粒度)。信道量化是目前用于量化卷积核的标准方法。它使从业者能够调整每个内核的剪辑范围,而开销可以忽略不计。相比之下,子信道量化可能会导致显著的开销,并且目前不是标准选择(我们也请感兴趣的读者参考[68],了解与这些设计选择相关的权衡)。F . Non-Uniform Quantization—非均匀量化文献中的一些工作也探索了非均匀量[25,38,62,74,79,99,118,125,153,159,179,189,190,238,248,256,264,266, 对于固定的比特位宽,非均匀量化可以实现更高的精度,因为通过更关注重要的值区域或找到合适的动态范围,可以更好地捕获分布。例如,许多非均匀量化方法被设计用于权重和激活的钟形分布,通常涉及长尾[12、25、61、115、147、179]。典型的基于规则的非均匀量化是使用对数分布[179,283],其中量化步数和级别以指数而不是线性增加。
除了基于规则和基于优化的非均匀量化外,聚类还可以有利于减轻量化造成的信息损失。一些工作在不同的张量上使用[74,256]-均值来确定量化步骤和级别,而其他工作[38]对权重应用黑森加权[74,256]-均值聚类来最小化性能损失。进一步的讨论可以在第四节-f节中找到。 摘要(均匀量化与非均匀量化)。通常,非均匀量化通过分配比特和非均匀地离散参数范围,使我们能够更好地捕获信号信息。然而,非均匀量化方案通常难以有效地部署在通用计算硬件上,例如GPU和CPU。因此,均匀量化由于其简单性和有效的硬件映射,目前是事实上的方法。G.Fine-tuning Methods—微调方法在量化后,往往需要对神经网络中的参数进行调整。这可以通过重新训练模型来完成,这个过程被称为量化感知训练(QAT),也可以通过不需要重新训练来完成,这个过程通常被称为训练后量化(PTQ)。图4展示了这两种方法之间的比较示意图,并在下面进一步讨论(我们请参考感兴趣的读者[183]了解关于这个主题的更详细讨论)。 1) Quantization-Aware Training:给定一个训练的模型,量化可能会对训练的模型参数引入扰动,这可以使模型从用浮点精度训练时已经收敛的点远离。可以通过用量化参数对神经网络模型进行重新训练来解决这个问题,从而使模型能够收敛到损失较好的点。一种流行的方法是使用量化感知训练(QAT),即在浮点量化模型上进行通常的正向和向后传递,但在每次梯度更新后对模型参数进行量化(类似于投影梯度下降)。特别是,在以浮点精度执行权值更新之后进行这个projection是很重要的。 用浮点数进行向后传递是很重要的,因为在量化精度中积累梯度可以导致零梯度或具有高误差的梯度,特别是在低精度[42,80,81,107,159,186,204,231]。 反向传播的一个重要的微妙之处是不可微量化算子(Eq。2)已经被处理过了。在没有任何近似的情况下,这个算子的梯度几乎到处都是零,因为等式中的舍入运算2是一个分段的平面运算符。解决这个问题的一个流行的方法是通过所谓的直通估计器(Ste)[13]来近似这个算子的梯度。STE本质上忽略了舍入操作,并用一个标识函数来近似它,如图5所示。 尽管Ste有粗糙的近似,但它在实践中通常工作良好,除了超低精度的量化,如二进制量化[8]。[271]的工作为这一现象提供了理论证明,并发现Ste的粗梯度近似可以与种群梯度相关(为了正确选择Ste)。从历史的角度来看,我们应该注意到Ste的最初想法可以追溯到[209,210]的开创性工作,其中一个恒等算符被用来近似二进制神经元近似梯度。 虽然STE是主流方法[226289],但文献[2,25,31,59144164]中也探讨了其他方法。我们应该首先提到[13]还提出了一种随机神经元方法,作为STE的替代方法(这在第III-H节中简要讨论)。==还提出了使用组合优化[65]、目标传播[140]或Gumbelsoftmax[116]的其他方法。另一类不同的替代方法尝试使用正则化算子来强制量化权重。这就不需要使用等式2中的不可微量化算子。这些方法通常被称为非标准方法[4,8,39,99144184283]。该领域的最新研究包括ProxQuant[8],它删除了量化公式等式2中的舍入操作,而是使用所谓的DW形状、非光滑正则化函数来强制量化值的权重。其他值得注意的研究包括使用脉冲训练来近似不连续点的导数[45],或者用浮点和量化参数的仿射组合来替换量化权重[165]。[181]最近的工作还建议使用AdaRound,这是一种自适应舍入方法,作为舍入到最近法的替代方法。尽管这方面的工作很有趣,但这些方法通常需要大量调整,到目前为止,STE方法是最常用的方法。 除了调整模型参数外,之前的一些工作发现,在QA T期间学习量化参数也是有效的。PACT[36]学习均匀量化下激活的剪裁范围,而QIT[125]也学习量化步骤和级别,作为对非均匀量化设置的扩展。LSQ[56]引入了一个新的梯度估计,以学习QA T期间非负激活(如ReLU)的比例因子,LSQ[15]进一步将这一想法扩展到一般激活函数,如swish[202]和h-swish[100]产生负值。 总结(QAT)。尽管与STE近似,QA T仍被证明有效。然而,QA T的主要缺点是重新训练神经网络模型的计算成本。这种重新训练可能需要执行几百个时代才能恢复精度,尤其是对于低比特精度量化。如果量化模型将在较长时间内部署,并且如果效率和准确性特别重要,那么这种再培训投资可能是值得的。然而,情况并非总是如此,因为有些型号的寿命相对较短。接下来,我们将讨论一种没有这种开销的替代方法。2) Post-Training Quantization:昂贵的QAT方法的另一种替代方法是训练后量化(PTQ),它执行量化和权重的调整,而不需要任何微调[11,24,40,60,61,68,69,89,108,142,148,174,182,223,281]。因此,PTQ的开销非常低,而且通常可以忽略不计。QAT需要足够的数量的训练数据来进行再训练,而PTQ有一个额外的优势,即它可以应用于数据有限或未标记的情况。然而,与QAT相比,这往往以较低的精度为代价,特别是对于低精度的量化。 因此,人们提出了多种方法来缓解PTQ的精度下降。例如,[11,63]观察量化后权重值的均值和方差的固有偏差,并提出偏差校正方法;[174182]表明,均衡不同层或通道之间的权重范围(以及隐含的激活范围)可以减少量化误差。ACIQ[11]通过分析计算PTQ的最佳限幅范围和通道位宽度设置。虽然ACIQ可以实现较低的精度降低,但ACIQ中使用的信道激活量化很难有效地部署在硬件上。为了解决这个问题,OMSE方法[40]删除了激活时的信道量化,并建议通过优化量化张量和相应浮点张量之间的L2距离来进行PTQ。此外,为了更好地缓解异常值对PTQ的不利影响,在[281]中提出了一种异常值信道分割(OCS)方法,该方法将包含异常值的信道复制并减半。另一个值得注意的工作是AdaRound[181],它表明,用于量化的原始舍入到最近的方法可以反直觉地产生次优解,并且它提出了一种自适应舍入方法,可以更好地减少损失。虽然AdaRound将量化权重的变化限制在其全精度对应值的±1范围内,但AdaQuant[108]提出了一种更通用的方法,允许量化权重根据需要变化。PTQ方案可以发挥到极致,在量化过程中既不使用训练数据也不使用测试数据(也称为零炮场景),这将在下面讨论。 总结(PTQ)。在PTQ中,所有的权值和激活量化参数都是不需要再训练而确定的。因此,PTQ是一种非常快速的神经网络模型量化方法。然而,与QAT相比,这往往以较低的准确性为代价。3) Zero-shot Quantization:?????????正如到目前为止所讨论的,为了在量化后实现最小的精度下降,我们需要访问训练数据的整个部分。首先,我们需要知道激活的范围,这样我们就可以剪辑这些值并确定适当的比例因子(这在文献中通常被称为校准)。其次,量化模型往往需要进行微调来调整模型参数,恢复精度下降。然而,在许多情况下,在量化过程中是不可能访问原始训练数据的。这是因为训练数据集要么太大,无法分发,要么是专有的(例如,谷歌的JFT-300M),要么是由于安全或隐私问题(例如,医疗数据)而敏感的。人们已经提出了几种不同的方法来解决这一挑战,我们称之为零镜头量化(ZSQ)。受[182]的启发,这里我们首先描述了两个不同层次的零射击量化: ?????????ZSQ研究的一个热门分支是生成与训练目标预训练模型的真实数据相似的合成数据。然后将合成数据用于校准和/或微调量化模型。该领域的一项早期工作[28]利用生成性对抗网络(GAN)[75]生成合成数据。利用预先训练好的模型作为鉴别器,对generator进行训练,使其输出能够被鉴别器很好地分类。然后,使用从生成器中收集的合成数据样本,可以通过从全精度对应物的知识精馏来细化量化模型(有关更多详细信息,请参见第四节)。然而,这种方法无法捕捉真实数据的内部统计信息(例如,中间层激活的分布),因为它只使用模型的最终输出生成。不考虑内部统计数据的合成数据可能无法正确地代表真实的数据分布[85]。为了解决这个问题,后续的一些工作使用了批量标准化(BatchNorm)[112]中存储的统计数据,即通道平均值和方差,以生成更真实的合成数据。尤其是,[85]通过直接最小化内部统计数据的KL散度来生成数据,并使用合成数据对量化后的模型进行校准和微调。此外,ZeroQ[24]表明,合成数据可用于灵敏度测量和校准,从而实现训练后混合精度量化,而无需访问训练/验证数据。ZeroQ还将ZSQ扩展到对象检测任务,因为它在生成数据时不依赖输出标签。[85]和[24]都将输入图像设置为可训练参数,并直接对其执行反向传播,直到其内部统计信息与真实数据的统计信息相似。更进一步,最近的研究[37,90259]发现,训练和开发生成模型是有效的,这些模型可以更好地捕捉真实数据分布,生成更真实的合成数据。 总结(ZSQ)。零拍(也称为无数据)量化在不访问训练/验证数据的情况下执行整个量化。这对于机器学习即服务(MLaaS)提供商尤其重要,他们希望加快客户工作负载的部署,而无需访问他们的数据集。此外,对于安全或隐私问题可能会限制访问训练数据的情况,这一点很重要。H. Stochastic Quantization—随机量化在推理过程中,量化方案通常是确定性的。然而,这并不是唯一的可能性,一些工作已经探索了量化感知训练的随机量化以及降低精度训练[13,79]。高水平的直觉是,与确定性量化相比,随机量化可能允许神经网络探索更多。一个流行的支持论点是,小的权重更新可能不会导致任何权重变化,因为舍入操作可能总是返回相同的权重。然而,启用一个随机舍入可能为神经网络提供一个逃避的机会,从而更新其参数。 更正式地说,随机量化将float-ing数字映射为与权重更新幅度相关的概率。 例如,在[29,79]中,式2中的Int运算符定义为 最近,在量子噪声[59]中引入了另一种随机量化方法。量子噪声在每次正向传递中量化不同的权值随机子集,并用无偏梯度训练模型。这允许在许多计算机视觉和自然语言处理模型中进行低精度量化而不显著的精度下降。然而,随机量化方法的一个主要挑战是为每一个权重更新创建随机数的开销,因此它们还没有在实践中被广泛采用。 四、 ADVANCEDCONCEPTS: QUANTIZATIONBELOW8 BITS----高级概念:8位以下的量化在本节中,我们将讨论量化中更高级的主题,它们主要用于8量化的子int8。我们将在第四节中首先讨论模拟量化及其与仅整数量化的区别。IV-A.之后,我们将在第IV-B节中讨论混合精度量化的不同方法,然后在第四节中讨论硬件感知量化IV-C.然后,我们将在第IV-D节中描述如何使用蒸馏来提高量化精度,然后,我们将在第IV-E节中讨论极低的比特精度量化。最后,我们将在IV-F节简要描述矢量量化的不同方法。 A. Simulated and Integer-only Quantization—模拟和仅整数量化有两种常见的方法来部署一个量化的神经网络模型,模拟量化(又名假量化)和仅整数量化(又名定点量化)。在模拟量化中,量化的模型参数存储精度较低,但运算(如矩阵乘法和卷积)是用浮点算法进行的。因此,在进行浮点操作之前,需要对量化后的参数进行去量化,如图6(中)所示。因此,一个人不能完全受益于快速和高效的低精度逻辑与模拟量化。然而,在仅整数量化中,所有操作都使用低精度整数算法[113,132,154,193,267]执行,如图6(右)所示。这允许使用有效的整数算法来执行整个推理,而不需要对任何参数或激活进行任何浮点去量化。 一般来说,用浮点算法进行全精度推理可能有助于最终的量化精度,但这是以无法从低精度逻辑中获益为代价的。与全精度逻辑相比,低精度逻辑在延迟、功耗和区域效率方面具有多种优点。如图7(左)所示,许多硬件处理器,包括NVIDIA V100和Titan RTX,都支持低精度算法的快速处理,可以提高推断吞吐量和延迟。 此外,如图7(右)所示,对于45nm技术的[97],低精度逻辑在能量和面积方面明显更高。例如,添加INT8时,能效提高30×和116×[×97的面积效率比FP32高]。 值得注意的是,仅整数的量化工作包括[154],它将批归一化融合到之前的卷积层中,以及[113],它提出了一种具有批归一化的残差网络的仅整数计算方法。然而,这两种方法都仅限于ReLU的激活。[132]最近的工作通过用整数算法近似GELU[94]、Softmax和层归一化[6]来解决这一限制,并进一步将仅整数量化扩展到变压器[243]架构。 ==二元量化是另一类仅整数量化,其中所有的缩放都是用二进数进行的,二进数是有理数,分子为整数,分母[267]的幂为2。==这导致了一个计算图,它只需要整数加法、乘法、位移动,而不需要整数除法。重要的是,在这种方法中,所有的添加逻辑(例如,剩余连接)都被强制执行为具有相同的二进尺度,这可以使添加逻辑更简单,效率更高。 总结(模拟vs仅整数量化)。一般来说,与模拟/假量化相比,仅整数量化和二元量化更可取。这是因为整数-只使用精度较低的算法逻辑,而模拟量化则使用浮点逻辑来执行操作。然而,这并不意味着假量化从来都没有用处。事实上,假的量化方法可以有利于那些受带宽限制而不是计算限制的问题,比如在推荐系统[185]中。对于这些任务,瓶颈是内存占用空间和从内存中加载参数的成本。因此,对于这些情况,执行假量化是可以接受的。B. Mixed-Precision Quantization—混合精度量化很容易看出,随着我们使用较低精度的量化,硬件性能有所提高。然而,将模型统一量化到超低精度会导致显著的精度下降。可以用混合精度量化[51,82,102,162,187,199,211,239,246,249,263,282,286]来解决这个问题。在这种方法中,每一层都以不同的位精度进行量化,如图8所示。这种方法的一个挑战是,选择这个位设置的搜索空间在层数上是指数级的。人们提出了不同的方法来解决这个巨大的搜索空间。为每一层选择这种混合精度本质上是一个搜索问题,因此已经提出了许多不同的方法。 [246]最近的工作提出了一种基于强化学习(RL)的方法来自动确定量化策略,并使用硬件模拟器在RL代理反馈中获取硬件加速器的反馈。本文==[254]将混合精度配置搜索问题表述为神经结构搜索(NAS)问题==,并使用可微NAS(DNAS)方法有效地探索搜索空间。这些基于探索的方法[246,254]的一个缺点是,它们通常需要大量的计算资源,而且它们的性能通常对超参数甚至初始化都很敏感。 另一类混合精度方法使用周期函数正则化来训练混合精度模型,通过在学习它们各自的位宽[184]时自动区分不同的层和它们的不同的精度重要性。 与这些基于探索和规则化的方法不同,HAWQ[51]引入了一种基于模型的二阶灵敏度来自动找到混合精度设置的方法。理论上表明,二阶算子(即Hessian)的轨迹可以用来测量一层对量化[50]的敏感性,类似于最优脑损伤(Optimal Brain Damage)[139]的开创性工作中的剪枝结果。在HAWQv2中,该方法扩展到混合精度激活量化[50],比基于RL的混合精度方法[246]快100倍以上。最近,在HAWQv3中,引入了一种仅限整数的、硬件感知的量化[267],该方法提出了一种快速整数线性规划方法,以找到给定的特定应用约束(如模型大小或延迟)的最优比特精度。这项工作还解决了关于混合精度量化的硬件效率的常见问题,通过直接部署在t4gpu上,与INT8量化相比,混合精度(INT4/INT8)量化的速度提高了50%。 总结(混合精度量化)。混合精度量化已被证明是一种有效的低精度量化方法。在这种方法中,神经网络的层被分组为对量化敏感/不敏感,每一层使用高/低位。因此,可以最大限度地降低精度,仍然受益于减少内存占用和更快的加速低精度量化。最近的工作也表明这种方法是硬件效率的,因为混合精度只在操作/层中使用。C. Hardware Aware Quantization—硬件感知量化量化的目标之一是提高推理延迟。然而,并不是所有的硬件在某一层/操作被量化后都能提供相同的速度。事实上,量化的好处是依赖于硬件的,许多因素如片上内存、带宽和缓存层次结构会影响量化速度。 通过硬件感知量化[87,91,246,250,254,256,265,267]实现最佳效益是很重要的。特别地,工作==[246]使用一个强化学习代理,基于对具有不同位宽的不同层的延迟的查找表,来确定量化的硬件感知混合精度设置==。然而,这种方法使用了模拟的硬件延迟。为了解决这个问题,[267]最近的工作直接在硬件中部署了量化操作,并针对不同的量化位精度测量了每个层的实际部署延迟 D. Distillation-Assisted Quantization—蒸馏辅助量化量化中一个有趣的工作路线是加入模型蒸馏来提高量化精度[126,177,195,267]。模型蒸馏[3,95,150,177,195,207,268,270,289]是一种利用精度较高的大模型作为教师来帮助训练一个紧凑的学生模型的方法。在学生模型的训练过程中,模型蒸馏提出利用教师产生的软概率,而是只使用GT真实类的软概率,这可能包含更多的输入信息。这就是整体损失函数,它包含了学生损失和蒸馏损失,通常表述如下: 在等式中10,α和β加权系数调整的损失从学生模型和蒸馏损失,y是地面类标签,H是交叉熵损失函数,/zt日志生成的学生/老师模型,σsoftmax函数,T是其温度定义如下: E. Extreme Quantization—极端量化二值化是最极端的量化方法,其中量化的值被限制为1位表示,从而大大减少了32×的内存需求。除了内存优势外,二进制(1位)和三元(2位)操作通常可以通过位级算法有效地计算,并可以在更高的精度上实现显著的加速,如FP32和INT8。例如,NVIDIAV100gpu上的峰值二进制算法比INT8高出8倍。然而,一个简单的二值化方法会导致显著的精度下降。因此,有大量的工作提出了不同的解决方案来解决这个[18,25,47,52,77,78,83,92,93,120,122,124,129,131,135,141,149,155,160,196,198,205,217,249,251,260,262,288,290]。 这里的一项重要工作是BinaryConnect[42],它将权重限制为1或-1。在这种方法中,权重保持为真实值,并且仅在向前和向后传递期间进行二值化,以模拟二值化效果。在向前传播过程中,real value权重根据符号函数转换为1或-1。然后使用标准的训练方法和STE对网络进行训练,通过不可微符号函数传播梯度。二值化NN[107](BNN)通过对激活和权重进行二值化扩展了这一想法。联合二值化权重和激活具有改善延迟的额外好处,因为代价高昂的浮点矩阵乘法可以替换为轻量级XNOR操作,然后进行位计数。另一项有趣的工作是[45]中提出的二进制权重网络(BWN)和XNORNet,它们通过在权重中加入比例因子,并使用α或-α而不是1或-1来实现更高的精度。这里,α是选择用于最小化实值权重和结果二值化权重之间的距离的比例因子。换句话说,实值权重矩阵可以用asW表示≈αB,其中B是满足以下优化问题的二元权重矩阵: a)量化误差最小化:解的第一个分支的目的是最小化量化误差,即真实值和量化值[19,34,62,103,151,158,164,169,178,218,248]之间的差距。HORQ[151]和ABC-Net[158]不是使用单一的二进制矩阵来表示实值权重/激活,而是使用多个二进制矩阵的线性组合,即W≈α1B1+···+αMBM,来减少量化误差。受二值化激活降低了它们对后续卷积块的表征能力这一事实的启发,[178]和[34]表明,更广泛的网络(即具有大量滤波器的网络)的二值化可以在准确性和模型大小之间实现很好的权衡。 b) 改进的损失函数:另一个研究分支关注重点是损失函数[48,98,99,251,284]的选择。这里的重要工作是损失感知二值化和网络化[98,99],它们直接最小化相对于二值化/交替权值的损失。这与其他只近似权重而不考虑最终损失的方法不同。从全精度教师模型中提取的知识蒸馏也被证明是一种很有前途的方法来恢复二值化/三角化[33,177,195,260]后的精度退化。 c)改进训练方法:另一个有趣的工作分支旨在建立更好的二进制/三元模型[5,20,44,73,160,164,285,288]的训练方法。许多努力指出了STE在通过符号函数反向传播梯度方面的局限性:STE只传播在[-1,1]范围内的权重和/或激活的梯度。为了解决这个问题,BNN+[44]引入了符号函数导数的连续近似,而[198,261,272]用光滑的可微函数代替符号函数,这些函数逐渐尖锐并接近符号函数。Bi-Real Net[164]引入了连接连续块中的激活和激活的身份快捷方式,通过它可以传播32位的激活。虽然大多数研究集中在减少推理时间延迟,但DoReFa-Net[285]除了量化权重和激活之外,还量化了梯度,以加速训练。 极端量化已经成功地大大降低了许多在计算机视觉任务上的CNN模型的推理/训练延迟和模型大小。最近,有人尝试将这个想法扩展到自然语言处理(NLP)任务[7,119,121,278]。考虑到最先进的NLP模型(如BERT[46],RoBERTa[163]和GPT家族[17,200,201])的禁止模型规模和推理延迟,由于经过大量未标记数据的预训练,极端量化正在成为将NLP推理任务引入边缘的强大工具。 Summary (Extreme Quantization).极低位精度量化是一个很有前途的研究方向。然而,与基线相比,现有的方法经常导致高精度下降,除非执行非常广泛的调优和超参数搜索。但是,这种精度的下降对于不那么关键的应用程序可能是可以接受的。F . V ector Quantization—矢量量化如第二节所述,量化尚未在机器学习中发明,但在过去的一个世纪里,量化在信息论中得到了广泛的研究,特别是在数字信号处理领域作为一种压缩工具。然而,机器学习的量化方法之间的主要区别在于,从根本上来说,我们没有兴趣压缩与原始信号相比具有最小变化/误差的信号。相反,我们的目标是找到一个精度降低的表示,从而导致尽可能小的损失。因此,如果量化的权重/激活远离非量化的权重/激活,这是完全可以接受的。 话虽如此,在DSP中的经典量化方法中有很多有趣的思想已经应用于神经网络量化,特别是矢量量化[9]。特别是,[1,30,74,84,117,170,180,189,256]的工作将权重聚类到不同的组中,并在推理过程中使用每个组的质心作为量化值。如等式中所示13,i是一个张量中的权值指数,c1,…,ck是聚类得到的k个质心,cj是与wi对应的质心。聚类之后,权重wi将在代码本(查找表)中有一个与cj相关的聚类索引j。 五、 QUANTIZATION ANDHARDWAREPROCESSORS—量化和硬件处理器我们已经说过,量化不仅减少了模型尺寸,而且还可以实现更快的速度和更少的功耗,尤其是对于逻辑精度较低的硬件。因此,量化对于物联网和移动应用中的边缘部署尤为关键。边缘设备通常有严格的资源限制,包括计算、内存和重要的电源预算。对于许多深度NN模型来说,这些成本往往过高。此外,许多边缘处理器不支持浮点操作,尤其是在微控制器中。 在这里,我们简要讨论了量化背景下的不同硬件平台。 ARM Cortex-M是一组32位的RISC ARM处理器核心,专为低成本和节能的嵌入式设备设计。 例如,STM32系列是基于ARM Cortex-M内核的微控制器,也用于边缘的神经网络推理。因为一些ARM Cortex-M内核不包括专用的浮点单元,所以在部署之前,应该首先对模型进行量化。CMSIS-NN[136]是ARM的一个库,它有助于将NN模型量化并部署到ARM Cortex-M内核上。具体而言,该库利用具有两个缩放因子幂的定点量化[113154267],以便可以通过位移位操作有效地执行量化和去量化过程。GAP-8[64]是一种RISC-V SoC(片上系统),用于边缘推断,带有专用CNN加速器,是仅支持整数运算的边缘处理器的另一个示例。虽然可编程通用处理器因其灵活性而被广泛采用,但专门构建的ASIC芯片Google Edge TPU是另一种在边缘运行推理的新兴解决方案。与在拥有大量计算资源的谷歌数据中心中运行的云TPU不同,Edge TPU是为小型低功耗设备设计的,因此它只支持8位算法。神经网络模型必须使用张量流的量化感知训练或训练后量化进行量化。 图9显示了广泛用于边缘神经网络推断的不同商用边缘处理器的吞吐量。在过去几年中,边缘处理器的计算能力有了显著的提高,这使得以前只能在服务器上使用的昂贵NN模型的部署和推断成为可能。量化,加上高效的低精度逻辑和专用的深度学习加速器,已经成为这种边缘处理器发展的一个重要驱动力。 虽然量化是许多边缘处理器不可或缺的技术,但它也可以为非边缘处理器带来显著的改进,例如,满足服务水平协议(SLA)要求,如第99百分位延迟。最近的NVIDIA图灵GPU提供了一个很好的例子,尤其是T4 GPU,其中包括图灵张量核。张量核是专门为高效低精度矩阵乘法设计的执行单元。 六、 FUTUREDIRECTIONS FORRESEARCH IN QUANTIZATION—量化研究的未来方向在这里,我们简要讨论了量化领域未来研究的几个高层次挑战和机遇。这被分解为量化软件框架、硬件和神经网络体系结构共同设计、组合压缩方法和量化训练。 6.1、Quantization Software(量化软件框架):使用目前的方法,可以直接将不同的NN模型量化和部署到INT8中,而不会损失准确性。有几个软件包可以用于部署INT8量化模型(例如,英伟达的TensorRT,TVM等),每一个都有很好的文档。此外,这些实现也是相当最优的,人们可以很容易地观察到加速与量化。然而,用于低比特精度量化的软件并不广泛使用,有时也不存在。例如,Nvidia的TensorRT目前并不支持子int8的量化。此外,对INT4量化的支持直到最近才被添加到TVM[267]中。最近的研究表明,INT4/INT8的低精度和混合精度量化在实践[51,82,102,108,187,199,211,239,246,246,249,263,267,286]中工作。因此,开发高效的软件和低精度量化api将产生重要的影响。 6.2、Hardware and NN Architecture Co-Design(硬件和NN架构共同设计:):如上所述,低精度量化中的经典工作与机器学习中的最新工作之间的一个重要区别是,NN参数可能具有非常不同的量化值,但仍然可以很好地推广。例如,通过量化感知训练,我们可能会收敛到不同的解,远离具有单一精度参数的原始解,但仍能获得良好的精度。人们可以利用这种自由度,并在量化时调整神经网络结构。例如,最近[34]的研究表明,改变神经网络结构的宽度可以减少/消除量化后的泛化差距。未来的一项工作是在模型量化时,联合调整其他架构参数,如深度或单个内核。未来的另一项工作是将这种协同设计扩展到硬件架构。这对于FPGA部署可能特别有用,因为人们可以探索许多不同的可能硬件配置(例如乘法累加元素的不同微体系结构),然后将其与NN体系结构和量化协同设计结合起来。 6.3、Coupled Compression Methods(组合压缩方法):如上所述**,量化只是有效部署NNs的方法之一。其他方法包括有效的神经网络体系结构设计、硬件和神经网络体系结构的联合设计、剪枝和知识提炼。**量化可以与这些其他方法相结合。然而, **目前很少有研究探索这些方法的最佳组合.**例如,剪枝和量化可以一起应用于模型以减少其开销[87152],了解结构化/非结构化剪枝和量化的最佳组合非常重要。类似地,未来的另一个方向是研究这些方法与上述其他方法之间的组合。 6.4、Quantized Training:也许量化最重要的用途是以半精度加速神经网络训练[41,72,79175]。这使得训练能够使用更快、更节能的低精度逻辑。然而,很难将其进一步推广到INT8精度训练。虽然在这一领域存在一些有趣的工作[10,26,123137173],但所提出的方法通常需要大量的超参数调整,或者它们只适用于相对简单的学习任务中的少数神经网络模型。基本问题是,在INT8精度下,训练可能会变得不稳定和分散。应对这一挑战可能会对多个应用程序产生重大影响,尤其是边缘训练。 七. SUMMARY ANDCONCLUSIONS—总结和结论一旦抽象数学计算适应了数字计算机上的计算,这些计算中数值的有效表示、操作和通信问题就出现了。与数值表示问题密切相关的是量化问题:一组连续实数应该以何种方式分布在一组固定的离散数上,以最小化所需的位数,并最大限度地提高伴随计算的准确性?虽然这些问题与计算机科学一样古老,但这些问题与高效神经网络模型的设计尤其相关。这有几个原因。首先,NN是计算密集型的。因此,数值的有效表示尤为重要。其次,目前大多数神经网络模型都严重过度参数化。因此,有充分的机会在不影响精度的情况下降低精度。第三,神经网络模型的分层结构提供了一个额外的探索维度。因此,神经网络中的不同层对损耗函数有不同的影响,这激发了有趣的方法,比如混合精度量化。 从浮点表示转换为8/4位或更少的低精度固定整数值可以减少内存占用和延迟。[157]表明,使用TVM[32]量化库对流行的计算机视觉模型,包括ResNet50[88]、VGG-19[224]和inceptionV3[230]进行INT8推理,可以实现分别在NVIDIA GTX 1080上加速3.89倍, 3. 32倍,5.02倍速度。[213]进一步表明,与INT8相比,ResNet50的INT4推断可以在NVIDIA T4和RTX上带来额外50-60%的加速,强调了使用较低位精度以最大化效率的重要性。最近,[267]利用混合精度量化来实现ResNet50的23%加速,与不降低精度的INT8推理相比,[132]将仅INT8推理扩展到BERT模型,以支持推理速度比FP32快多达4.0倍。虽然上述工作侧重于GPU上的加速。通过对各种计算机视觉模型进行INT8量化,分别在Intel Cascade Lake CPU和Raspberry Pi4(均为非GPU架构)上[114]也获得了2.35倍和1.40倍延迟加速。因此,正如我们的参考文献所证明的,神经网络模型中的量化问题一直是一个非常活跃的研究领域。 在这项工作中,我们试图为这些非常多样化的工作带来一些概念结构。我们首先讨论了许多量子化应用中常见的主题,如均匀、非均匀、对称、非对称、静态和动态量子化。然后,我们考虑了NNs量化更独特的量化问题。这些包括分层、分组、通道和子通道量化。我们进一步考虑了训练和量化之间的相互关系,并讨论了量化感知训练与训练后量化相比的优缺点。量化和训练之间关系的讨论进一步细化了数据的可用性问题。这种情况的极端情况是,由于隐私等各种合理原因,培训中使用的数据不再可用。这就引发了zero-shot量化的问题。 由于我们特别关注针对边缘部署的高效NNs,我们考虑了这种环境特有的问题。其中包括量化技术,其结果是参数由少于8位表示,可能低至二进制值。我们还考虑了仅整数量化的问题,这使得NNs能够部署在通常缺少浮点单元的低端微处理器上。 通过这项调查及其组织,我们希望对神经网络量化的当前研究提供一个有用的快照,并提供一个智能组织,以便于对该领域未来研究的评估。 什么是模型量化?以及量化知识点集合学习视频:商汤泰坦,模型量化哪些事:https://www.bilibili.com/video/BV1t54y1d777?spm_id_from=333.337.search-card.all.click
二值化,在模型的激活值和weight上只有两个数来表示:正1和负1。信息的损失非常大,针对二值化模型信息的损失,提出了一个信息熵的视角,来衡量二值模型携带信息的能力,可以直观的想,某一层的二激活值不平衡,全多是正的。那么,二值化后只有正1这个数,信息丢失了。所以我们引入信息熵来衡量信息损失。如何来减少信息损失,保持信息熵?对weight做一个平衡二值化,换句话说就是means std,类似于模型里面的weight normalization,这个技术非常简单,确实有效能提升二值模型参数信息,同时可以隐含值提升激活值信息 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:21:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |