Skip to content

Latest commit

 

History

History
162 lines (149 loc) · 53.7 KB

神经网络与有效推理的量化调查研究2023.md

File metadata and controls

162 lines (149 loc) · 53.7 KB

神经网络有效推理的量化调查研究(2023年版本)

概要

一旦抽象数学计算适用于数字计算机上的计算在这些计算中出现了数值通信。与数值问题密切相关表示是量化的问题。一组连续实值数应该以什么方式分布在一组固定的离散数上以最小化所需的位数并保证计算的准确性?每当内存和/或计算资源受到严格限制时,这种长期存在的量化问题就尤为重要,并且由于神经网络模型在计算机视觉、自然语言处理和相关领域的卓越性能,近年来它已成为最前沿的问题。从浮点表示移到四位表示的低精度固定整数值或更少具有减少内存占用的潜力延迟为16倍;事实上在这些应用中可以获得4x到8x倍的提升。因此,最近作为计算的高效实现研究与神经网络相关——量化的出现是不足为奇的。在本文中,我们调研了数值量化问题并探讨深度神经网络中的量化方法,包括当前方法的优点/缺点。用这个调查及其组织,我们希望量化研究现状对于神经网络组织以简化对未来研究的评估该领域。

一、介绍

在过去十年中,我们观察到提高神经网络(NN)的准确性对于广泛的问题,通常通过高度在参数化模型上。尽管这些过度参数化(因此非常大)的神经网络模型的准确性显著提高,但这些模型的规模意味着不可能为许多人部署它们资源受限的应用程序。这会产生问题为了实现普及的深度学习实时推理,能耗低在资源受限的环境中。这普遍的深度学习预计将具有对实时等广泛应用的影响智能医疗监控、自动驾驶,音频分析和语音识别。实现具有最佳精度的高效实时神经网络需要重新思考神经网络模型的设计、训练和部署[71]。有大量文献集中于通过以下方式解决这些问题:使得NN模型更有效(在延迟方面,内存占用和能耗等),而仍然提供最佳的准确性/通用性权衡。这些努力大致可分为以下几类。 A) 设计高效的神经网络模型架构:一项工作集中于优化神经网络模型根据其微结构[101、111,127、167、168、212、253、280](例如,内核类型深度卷积或低秩因子分解)作为其宏架构[100、101、104、110、214、233](例如,模块类型,如剩余模块或初始模块)。这里的经典技术大多找到了新的架构模块使用手动搜索,这是不可扩展的。因此,一项新的工作是设计自动化机器学习(AutoML)和神经结构搜索(NAS)方法。这些目标是以自动化的方式找到正确的在给定的模型大小约束下,深度和/或宽度[161、194、232、245、252、291]。我们有关NAS的最新调查,请参考[54]方法。 B) 设计NN架构和硬件的协同设计:最近的另一项工作是适应(并共同设计)特定目标的神经网络架构硬件平台。这一点的重要性在于NN组件的开销(以延迟和能量)取决于硬件。例如,硬件使用专用缓存层次结构可以执行带宽绑定操作比硬件更有效没有这样的高速缓存层次结构。类似于NN架构设计,架构(architecture)硬件协同设计的初始方法是手动的,由专家进行调整/更改NN架构[70],然后使用自动化AutoML和/或NAS技术[22,23,100,252]。 c) 修剪:减少NN的内存占用和计算成本应用修剪。在修剪中,具有小显著性的神经元(灵敏度)被移除,导致稀疏的计算图。这里,具有小显著性的神经元是其移除对模型输出/损失的影响最小作用修剪方法可大致分类进入非结构化修剪[49,86,139,143,191,257]和结构化修剪[91,106,156,166,274,275,279]。通过非结构化修剪,可以使用无论发生在何处,其显著性都很小。用这个方法,可以进行积极的修剪大多数NN参数,对模型的泛化性能。然而这种方法导致稀疏矩阵运算已知难以加速通常为内存绑定[21,66]。另一方面通过结构化修剪整个卷积滤波器)。这有更改层的输入和输出形状的效果和权重矩阵,因此仍然允许密集矩阵操作。然而,积极的结构化修剪通常导致显著的精度下降。培训和具有高度修剪/稀疏性的推理,而保持最先进的性能一个公开的问题[16]。我们推荐感兴趣的读者至[66,96,134]对相关工作进行全面调查修剪/稀疏。 d) 知识蒸馏:模型蒸馏[3,95,150,177,195,207,269,270]涉及训练模型,然后将其作为教师来训练更为紧凑的模型。在学生模型的培养,模型的核心思想蒸馏是利用产生的“软”概率因为这些概率可以包含更多关于输入的信息。尽管在蒸馏方面,一个主要挑战是实现单独蒸馏的高压缩比。相比于量化和修剪,这可以保持性能与≥ 4×压缩(带INT8和较低的精度),知识蒸馏方法倾向于具有不可忽略的精度退化压缩。然而,知识蒸馏与现有方法(即量化和修剪)已显示出巨大的成功[195]。 e) 量化:最后,量化是一种方法,在神经网络模型的训练和推理。而数值表示与量化问题与数字计算一样古老,神经网络提供了独特的改进的机会。本次调查量化主要集中在推理上,我们应该强调量化的重要成功参加过NN培训[10,35,57,130,247]。特别地,半精度和混合精度的突破培训[41,72,79,175]是在AI加速器。然而,事实证明在没有显著调整的情况下,达到一半精度以下,以及最近的量化研究大多集中在推论这种用于推断的量化是这篇文章。 f) 量化与神经科学:松散相关NN量化神经科学的研究表明大脑以离散/量化形式存储信息,而不是以连续形式[171,236,240]。A.这种想法的流行理由是存储信息在连续的形式中,不可避免地会被噪声所破坏(其总是存在于物理环境中,包括我们的大脑热、感觉、外部、突触噪声等)[27,58]。然而,离散信号表示可能更多对这样的低噪声是鲁棒的。其他原因,包括离散表示[128,138,242]的更高的泛化能力及其在以下条件下的更高效率有限的资源[241]。我们请读者参考[228],以全面了解相关神经科学文献工作。 这项工作的目标是介绍当前的方法以及量化中使用的概念这方面的当前挑战和机遇研究在这样做的过程中,我们试图讨论相关工作。不可能讨论在短期调查;毫无疑问,我们错过了一些相关论文。我们提前向我们可能拥有的论文的读者和作者被忽视。

二、量化历史

Gray和Neuhoff写了一篇关于1998年的量化历史[76]。文章是一篇非常好,值得全文阅读;然而为了方便读者,我们将简要总结这里的一些要点。量化,作为一种方法从大的(通常是连续的)集合中的输入值映射要在一个小的(通常是有限的)集合中输出值历史舍入和截断是典型的例子。量化与微积分的基础有关,相关的方法可以在19世纪早期看到(以及更早的),例如,在早期关于最小二乘法和大规模相关技术的工作中(由19世纪早期的标准)数据分析[225]。一早期的量化工作可以追溯到1867年离散化用于近似计算积分[206];随后,在1897年Shappard调查了舍入误差对积分结果[220]。最近,量化在数字信号处理中通常以数字形式表示信号的过程包括舍入,以及数值分析以及数值算法的实现,其中实现了对实数的计算使用有限精度算法。直到1948年,数字时代的到来当Shannon在通信的数学理论[215]量化的影响及其在编码理论中的应用正式提交。特别是,Shannon在他的使用相同数量的当感兴趣的事件具有不均匀的概率时,比特是浪费的。他认为方法是根据事件的概率,这个概念现在被称为可变速率量化。特别是霍夫曼编码受此激励[109]。在随后的工作中1959[216],Shannon引入了失真率函数(这提供了信号失真的下限编码之后)以及矢量量化的概念。(也在第IV-F节中简要讨论)。这个概念是扩展并在[53,55,67,208]中成为现实通信应用。其他重要历史当时信号处理中的量化研究周期包括[188],它引入了脉冲码调制(PCM)概念(提出的脉冲方法以近似/表示/编码采样的模拟信号),以及高分辨率量化的经典结果[14]。我们请感兴趣的读者参考[76],详细讨论这些问题。 在对涉及连续数学量的问题使用数值近似的算法中,量化以略有不同的方式出现,该领域也有悠久的历史,但随着数字计算机的出现也重新引起人们的兴趣。 在数值分析中,一个重要的概念曾经是(现在仍然是)适定问题——粗略地说,一个问题是适定的,如果: 该解决方案是独一无二的; 并且该解决方案持续依赖于某种合理拓扑中的输入数据。 此类问题有时称为条件良好的问题。 事实证明,即使在处理给定的条件良好的问题时,某些在某种理想化意义上“准确”解决该问题的算法在存在由舍入和截断误差的特性引入的“噪声”的情况下表现也很差。 这些舍入误差与仅用有限多位表示实数有关——一种指定的量化,例如,由 IEEE 浮点标准; 和截断错误的出现是因为实际上只能执行迭代算法的有限次数的迭代。 后者甚至在“精确算术”中也很重要,因为大多数连续数学问题在原则上什至不能通过有限的基本运算序列来解决; 但前者与量化有关。 这些问题导致了算法的数值稳定性的概念。 让我们将数值算法视为试图将输入数据 x 映射到“真实”解 y 的函数 f; 但由于舍入和截断错误,算法的输出实际上是其他一些 y 。 在这种情况下, 算法的前向误差为 ∆y = y∗ − y; 算法的后向误差是满足 f(x + Δx) = y 的最小 Δx。 因此,前向误差告诉我们准确或真实的答案与算法输出的结果之间的差异; 向后误差告诉我们我们实际运行的算法是什么输入数据准确解决。 算法的前向误差和后向误差与问题的条件数相关。 我们建议有兴趣的读者参考 [237] 以详细讨论这些问题。

B.均匀量化

我们首先定义一个可以量化神经网络的权重和激活值的函数,这个函数将浮点数值映射到一个低精度范围,如图1所示。一个流行的定义如下: $$Q(r)=Int(r/S)-Z \tag{2}$$ $Q$是量化函数,$r$输入的浮点数据,$S$表示尺度,$Z$表示整型数据所在的0值,$Int$表示取整操作。当尺度$S$不变时,可以认为这种方式为均匀量化,否则为非均匀量化,如图2所示。另外可以将量化后地整型数据反映射为浮点数据,这种操作成为反量化,定义如下: $$\hat{R}=S(Q(r)+Z) \tag{3}$$ 必须指出经过反量化的数据一定程度上存在着失真现象。

C.对称量化与非对称量化

均匀量化的一个重要因素是等式中比例因子$S$的选择。这个比例因子本质上将给定范围的实数值$r$ 划分为若干分区(如 [113, 133] 中所讨论): $$S=\frac{\beta-\alpha}{2^b-1} \tag{4}$$ 其中 $[α, β]$表示裁剪范围,我们用来裁剪实际值的有界范围,$b$是量化位宽。因此,为了定义比例因子,裁剪范围 $[α, β]$应首先确定。 选择的过程限幅范围通常称为校准。一个直接的选择是使用的最小值/最大值限幅范围的信号,即$α = r_{min}$,以及$β=r_{max}$最大。这种方法是一种非对称量化方案,因为裁剪范围不一定关于原点对称,即$α=-β$,如图 2(右)所示。 也可以通过选择一个使用对称量化方案$α = −β$的对称剪裁范围。 热门之选是根据的最小值/最大值来选择这些信号:$-α = β = max(|rmax|, |rmin|)$。不对称量化通常会导致更严格的限幅范围,因为与对称量化相比。 这是特别当目标权重或激活是重要的不平衡,例如 ReLU 之后的激活总是具有非负值。 使用对称量化,然而,简化了方程式中的量化函数。用$Z = 0$替换公式2中的零点: $$Q(r)=Int(\frac{r}{s}) \tag{5}$$ 这里,缩放因子有两种选择。第一种是覆盖全范围的$S$,如XX,对于全INT8来说就是[-128,127]。第二种是限制范围的$S$,即XX,这种得到的整型数据范围是[-127,127],全范围方法要更精确一点。对于权重量化,在实际应用中使用更广泛的方法是对称量化,因为将零值归零,可以减少计算成本。但是,对于激活值来说,由于量化所带来的偏移值可以被吸收在偏置值中,或是将这个作为累加器的初始化值。使用数据的min/max值来确定量化范围在对称和非对称量化范围比较受欢迎。然而这种方法在激活函数量化是容易收到奇异值影响,从而增加了不必要的量化范围,最终降低了量化的分辨率。而百分比校准方法可以解决这些问题[172].也就是说,用第i个最大/最小值用作 β/α来代替最大/最小值。 另一种方法是选择 α 和β 最小化 KL 散度(即信息损失)在实际值和量化值之间 [176]。我们建议有兴趣的读者参考 [255],其中不同的校准方法在各种模型上进行了评估。

对称量化与非对称量化的总结 对称量化将数据截断到一个对称范围,这种方法有利于硬件的实现,因此在公式2中会令Z=0,然而对于非对称的数据情况时,采用非对称量化方法会取得更好的效果。

D.校准算法:动态校准和静态校准

截至目前,我们讨论了确定截断范围的不同的校准方法。量化方法另一个重要区别时当截断范围确定后,这个范围可以计算静态的权重,在大多数情况下参数在推理过程中是固定不变的。然而对于激活函数来说,会因为输入样本的不同而不同(例如公式1),因此可以分为动态量化和静态量化。 在动态量化中,对于激活函数映射时是动态改变,这需要实时统计和计算相关参数(例如最大值,最小值,百分比……等等),但也增加了计算负担。然而动态量化能活得一个更好的准确率对于每一个输入样本。 另外一个量化被称之为静态量化,即在推理前完成截断范围的计算,需要校准数据集来实现,这种方法不会增加潜在的计算量,但获得的准确率会低一点。截至目前,有很多不同的量化评估指标被提出,如用均值方差(MSE)来比较原始模型与量化模型的的权重分布[40,221,229,281],以及被称作是交叉熵的方法[189],另一种方案的构思是在训练网络期间进行截断,如LQNets [276], PACT [36], LSQ [56], and LSQ+ [15]。

动态量化与静态量化总结 虽然采用动态量化的截断方式可以获得更高的量化精度,但其缺点是会增加计算量。与之相对的是静态量化方式,会将所有输入样本截断到一个固定范围,不会增加计算量,但精度略逊一点。 E.量化粒度

在大多数计算机视觉任务中,一个数据输入到一层后,会被不同卷积滤波器卷积,如图3所示。每一个卷积滤波器有不同的数据范围。因此另一个重要区别是对于权重来说,根据截断范围的粒度,可分为如下几种: a)层级量化:在这种方法中,截断范围是通过该层的卷积权重分布来确定的[133],如图三所示中的第三列,显示统计该层所有权重分布的范围,针对所有卷积层的权重使用同样一个范围来截断。尽管这种方法实现起来很简单,但是通常情况下效果不是特别好。例如,对于同一个参数来说,可能适用于较窄的范围分布的卷积核,但是会在较宽的范围分布丢失一定的分辨率。 b)分组量化:将同一层内的多个卷积滤波器进行分组后进行截断,这样有助于处理卷积滤波器分配不均匀的情况。这样的方法在Q-BERT[219],Transformer[243]中活得不错的效果。然而这种方法会增加额外的计算量来计算不同的尺度因子。 c)通道量化:裁剪范围的一个主流选择是为每个卷积滤波器使用固定值,独立于其他通道 [105,113, 133, 222, 276, 285],如图 3 最后一列所示。也就是说,每个 通道被分配了一个专用的比例因子。 这确保了更好的量化分辨率,并且通常会导致更高的精度。 d)子通道量化:之前的方法可以发挥到极致,其中裁剪范围是根据卷积层或全连接层中的任何参数组确定的。 然而,这种方法可能会增加相当大的开销,因为在处理单个卷积层或全连接层时需要考虑不同的缩放因子。 因此,分组量化可以在量化分辨率和计算开销之间建立良好的折衷。

量化粒度总结:逐通道量化是目前量化卷积核的标准选择。它能够根据不同的卷积核选择不同的截断范围。

F.非均匀量化 诸如 [25, 38, 62, 74, 79, 99, 118, 125,153, 159, 179, 189, 190, 238, 248, 256, 264, 266, 276,284]等一些工作在探索非均匀量化,所谓非均匀量化就是允许量化的间隔值非恒等的。公式6所示,式中Xi表示量化后的数据,$\delta_i$ 表示量化的步进(间隔值): $$Q(r)=X_i,r\in [\delta_i, \delta_i+1)\tag{7}$$ 具体来说,当实数值落在detai与detai+1之间时,量化器将其映射到Xi,而Xi是程非均匀分布的。 非均匀量化可以在一个固定的比特宽度下获得更高的准确率,因为它能准确捕捉到浮点数据的分布特征。例如许多非均匀量化方法被设计用于权重和激活的钟形分布,典型的基于规则的非均匀量化案例是使用对数分布[179,283],其中量化的步进和级别呈指数增长的,而不是线性。另一个主流的方式就是二进制量化.

非均匀量化总结:通常,非均匀量化使我们能够更好地捕获信号信息,通过分配位和非均匀地离散化参数范围。然而,非均匀量化方案通常难以在一般计算上有效部署硬件,例如 GPU 和 CPU。 因此,制服量化是目前事实上的方法,因为它简单性及其与硬件的有效映射。

G.微调方法

通常情况下在量化之后有必要调整参数,如果在量化后的训练过程中进行调参,这种方式叫做量化感知训练(QAT);另一种方式就不需要重训练,被称为训练后量化(PTQ)。一个简单的对比如图4所示,下面将针对这种两种方式展开详细的讨论。 1)QAT:给定一个预训练模型,量化可能对这个模型引入扰动使得它降低准确率,这样可以通过量化参数重新训练NN模型来解决这个问题,使模型可以收敛到一个可以接受的范围内。一种主流的方法是使用量化感知训练(QAT),其中通常的前向和后向传播在量化的浮点模型,但模型参数是在每次梯度更新后量化(类似于投影梯度下降)。特别是,在以浮点精度执行权重更新后进行此投影很重要。 使用浮点执行反向传递很重要,因为累积量化精度的梯度会导致零梯度或具有高误差的梯度,特别是在低精度下 [42、80、81、107、159、186、204、231 ]。 反向传播的一个重要微妙之处是不可微分量化算子(等式 2)对待。 在没有任何近似的情况下,该算子的梯度几乎处处为零,因为方程式中的舍入操作。 2 是分段平面算子。 解决这个问题的一种流行方法是通过所谓的直通估计器 (STE) [13] 来近似该算子的梯度。 STE 基本上忽略了舍入操作并使用恒等函数对其进行近似,如图 5 所示。尽管 STE 的粗略近似,它经常在实践中效果很好,除了超低精度量化,如二进制量化 [8]。 [271] 的工作为这种现象提供了理论依据,它发现 STE 的粗梯度近似可以预期与种群梯度相关(对于 STE 的正确选择)。 从历史的角度来看,我们应该注意到 STE 的最初想法可以追溯到 [209, 210] 的开创性工作,其中使用恒等算子来近似二元神经元的梯度。 虽然 STE 是主流方法 [226、289],文献中也探索了其他方法 [2、25、31、59、144、164]。 我们首先应该提到 [13] 也提出了一个随机神经元作为 STE 的替代方法(这在第 III-H 节中进行了简要讨论)。 还提出了其他使用组合优化 [65]、目标传播 [140] 或 Gumbel softmax [116] 的方法。 另一类不同的替代方法尝试使用正则化运算符来强制量化权重。 这消除了在方程式中使用不可微分量化运算符的需要。 2.这些经常被提到作为非 STE 方法 [4、8、39、99、144、184、283]。该领域的最新研究包括 ProxQuant [8]它删除了量化公式等式中的舍入操作。而是使用所谓的 W 形非平滑正则化函数将权重强制为量化值。 其他值得注意的研究包括使用脉冲训练来近似不连续点的导数 [45],或者用浮点和量化参数的仿射组合替换量化权重 [165]。 [181] 最近的工作也提出了 AdaRound,这是一种自适应舍入方法,可以替代舍入到最近的方法。 尽管这一领域的工作很有趣,但这些方法通常需要大量调整,到目前为止,STE 方法是最常用的方法。 除了调整模型参数外,一些先验工作发现在 QAT 期间学习量化参数也很有效。 PACT [36] 学习均匀量化下激活的裁剪范围,而 QIT [125] 也学习量化步骤和级别作为非均匀量化设置的扩展。 LSQ [56] 引入了一种新的梯度估计来学习 QAT 期间非负激活(例如 ReLU)的缩放因子,并且LSQ+ [15] 进一步将这一想法扩展到产生负值的一般激活函数,例如 swish [202] 和 h-swish [100]。 QAT量化方法总结: QAT 已被证明有效尽管 STE 的粗略近似。 然而QAT 的主要缺点是重新训练 NN 模型的计算成本。 这种重新训练可能需要执行数百个 epoch 以恢复精度,特别是对于低位精度量化。 如果要长期部署量化模型,并且效率和准确性特别重要,那么重新训练的这种投资可能是值得的。 然而,情况并非总是如此,因为某些型号的使用寿命相对较短。 接下来,我们讨论没有这种开销的替代方法。 2)训练后量化(PTQ): 与QAT相对应的就是训练后量化,在量化时它没有微调的过程 [11, 24, 40,60, 61, 68, 69, 89, 108, 142, 148, 174, 182, 223, 281],因此他的开销非常低。同样地与QAT不同地时,它不需要用于重新训练的训练集数据,并且有一个优势就是PTQ可以应用于数据受限或者是未标注的数据集上。然而这种情况可能会导致更低的精度,尤其是在低精度量化的场合。 对于上诉问题,研究人员已经提出了许多方法来解决PTQ精度下降的问题。例如,[11, 63] 观察到均值和量化后权重值的方差并提出偏差校正方法; [174、182] 表明均衡不同层或通道之间的权重范围(和隐式激活范围)可以减少量化误差。ACIQ [11] 分析计算最佳限幅范围和 PTQ 的通道位宽设置。 虽然ACIQ可以达到低精度退化,ACIQ 中使用的逐通道激活量化很难有效地部署在硬件。 为了解决这个问题,OMSE 方法 [40]删除激活时的通道量化和提出通过优化L2距离来进行PTQ在量化张量和对应的张量之间浮点张量。 此外,为了更好地减轻异常值对 PTQ 的不利影响,[281] 中提出了一种异常值通道拆分 (OCS) 方法,该方法将包含的通道复制并减半离群值。 另一个值得注意的工作是 AdaRound [181]这表明朴素的舍入到最近的方法量化可能会反直觉地导致次优解决方案,并提出了一种自适应舍入方法,可以更好地减少损失。 虽然 AdaRound 将量化权重的变化限制在与其全精度同行的 ±1 以内,但 AdaQuant [108] 提出了一种更通用的方法,允许量化权重根据需要变化。 PTQ 方案可以发挥到极致,在量化过程中既不使用训练数据也不使用测试数据(也称为零镜头场景),这将在接下来讨论。 PTQ量化总结:在 PTQ 中,所有权重和激活量化参数都是在没有对 NN 模型进行任何重新训练的情况下确定的。 因此,PTQ 是一种非常快速的神经网络模型量化方法。 然而,与 QAT 相比,这通常是以较低的准确性为代价的。3)零样本量化:如前所述,在为了实现最小的精度下降后量化,我们需要访问整个分数训练数据。 首先,我们需要知道范围激活,以便我们可以裁剪值并确定适当的比例因子(通常称为文献中的校准)。 二、量化模型经常需要微调来调整模型参数并恢复精度下降。 在许多情况下,但是,无法访问原始训练数据在量化过程中。 这是因为训练数据集太大而无法分发,专有(例如,谷歌的 JFT-300M),或敏感由于安全或隐私问题(例如医疗数据)。 一些已经提出了不同的方法来解决这个问题挑战,我们称之为零样本量化(ZSQ)。 受[182]的启发,这里我们首先描述两个不同级别的零样本量化。 • 级别1:无数据且无微调(ZSQ + PTQ) • 级别2:无数据但需要微调(ZSQ +QAT) 级别 1 允许更快、更容易的量化,无需任何微调。 微调通常很耗时,并且通常需要额外的超参数搜索。但是,2 级通常会产生更高的精度,因为微调有助于量化模型恢复精度下降,特别是在超低位精度设置中 [85]。 [182] 的工作使用 1 级方法,该方法依赖于均衡权重范围和纠正偏差误差,使给定的 NN 模型更适合在没有任何数据或微调。 然而,由于此方法基于(分段)线性激活函数的尺度等方差特性,因此对于具有非线性激活的 NN,例如具有 GELU [94] 激活的 BERT [46] 或 MobileNetV3,它可能不是最优的 [100] 带有 swish 激活 [203]。 ZSQ 中一个流行的研究分支是生成类似于训练目标预训练模型的真实数据的合成数据。 然后将合成数据用于校准和/或微调量化模型。 该领域的一项早期工作 [28] 利用生成对抗网络 (GAN) [75] 获取合成数据一代。 使用预训练模型作为鉴别器,它训练生成器,使其输出可以被鉴别器很好地分类。 然后,使用从生成器收集的合成数据样本,量化模型可以通过全精度对应的知识蒸馏进行微调(更多详细信息,请参见第 IV-D 节)。 但是,此方法无法捕获内部真实数据的统计数据(例如,中间层激活的分布),因为它仅使用模型的最终输出生成。 不考虑内部统计数据的合成数据可能无法正确代表真实数据分布 [85]。 到为了解决这个问题,许多后续工作使用存储在批归一化 (BatchNorm) [112] 中的统计数据,即通道均值和方差,以生成更真实的合成数据。 特别是,[85]通过直接最小化内部统计的 KL 散度来生成数据,并使用合成数据来校准和微调量化模型。 此外,ZeroQ [24] 表明合成数据可用于灵敏度测量和校准,从而在无需访问训练/验证数据的情况下实现混合精度训练后量化。 ZeroQ 还将 ZSQ 扩展到目标检测任务,因为它不依赖于生成数据时在输出标签上。 [85] 和 [24] 都将输入图像设置为可训练参数,并直接对其进行反向传播,直到它们的内部统计数据变得与真实数据相似。更进一步,最近的研究 [37, 90, 259] 发现 训练和利用生成模型是有效的可以更好地捕捉真实的数据分布,生成更真实的合成数据。

ZSQ 总结: 零镜头(又名无数据)量化执行整个量化,无需访问训练/验证数据。 这对于想要加速部署机器学习即服务 (MLaaS) 的提供商来说尤为重要客户的工作量,而无需访问他们的数据集。 此外,这对于安全或隐私问题可能会限制对训练数据的访问的情况很重要。 H.随机量化 在推理过程中,量化方案通常是确定性的。 然而,这不是唯一的可能性,一些工作探索了用于量化感知训练的随机量化以及降低精度的训练 [13, 79]。 高层的直觉是,与确定性量化相比,随机量化可能允许神经网络探索更多。 一个受欢迎的支持的论点是,小的权重更新可能不会导致任何权重变化,因为舍入操作可能总是返回相同的权重。 然而,启用随机舍入可能会为 NN 提供逃逸的机会,从而更新其参数。 更正式地说,随机量化将浮点数向上或向下映射,概率与权重更新的幅度相关联。 例如,在 [29, 79] 中,方程式中的 Int 运算符。 2 定义为 $$ \operatorname{Int}(x)= \begin{cases}\lfloor x\rfloor & \text { with probability }\lceil x\rceil-x \ \lceil x\rceil & \text { with probability } x-\lfloor x\rfloor\end{cases} \tag{8} $$ 然而这种定义不能应用于二进制量化,因此可以拓展为: $$ \operatorname{Binary}(x)= \begin{cases}-1 & \text { with probability } 1-\sigma(x), \ +1 & \text { with probability } \sigma(x)\end{cases} \tag{9} $$ 最近,QuantNoise [59] 中引入了另一种随机量化方法。 QuantNoise 在每次前向传递期间量化不同的随机权重子集,并使用无偏梯度训练模型。 这允许较低位精度的量化,而不会在许多计算机视觉和自然界中出现明显的精度下降语言处理模型。 然而,随机量化方法的一个主要挑战是为每次权重更新创建随机数的开销,因此它们尚未在实践中得到广泛采用。

高级概念:8位以下的量化

在本节中,我们将讨论更高级的量化主题,这些主题主要用于 sub-INT8 量化。 我们将首先在第 IV-A 节中讨论模拟量化及其与仅整数量化的区别。 之后,我们将讨论不同的第 IV-B 节中的混合精度量化方法,随后是第 IV-C 节中的硬件感知量化。然后我们将在第 IV-D 节中描述如何使用蒸馏来提高量化精度,然后我们将在第 IV-E 节中讨论极低位精度的量化。 最后,我们将在第 IV-F 节中简要描述矢量量化的不同方法。 A.模拟和仅整数量化 部署量化 NN 模型有两种常见方法,模拟量化(也称为伪量化)和仅整数量化(也称为定点量化)。 在模拟量化中,量化后的模型参数以低精度存储,但是操作(例如矩阵乘法和卷积)是用浮点运算进行的。 因此,量化参数需要在浮点运算之前进行反量化,如图 6(中)所示。 因此,人们无法充分受益于具有模拟量化的快速高效的低精度逻辑。 然而,在纯整数量化中,所有这些运算是使用低精度整数运算 [113、132、154、193、267] 执行的,如图 6(右)所示。 这允许使用高效的整数算法执行整个推理,而无需对任何参数或激活进行任何浮点反量化。 一般来说,使用浮点运算进行全精度推理可能有助于最终的量化精度,但这是以无法从低精度逻辑中受益为代价的。 与全精度对应物相比,低精度逻辑在延迟、功耗和面积效率。 如图 7(左)所示,许多硬件处理器,包括 NVIDIA V100 和 Titan RTX,都支持低精度算法的快速处理,可以提高推理吞吐量和延迟。 此外,如图 7(右)所示,对于 45 纳米技术 [97],低精度逻辑明显更多在能源和面积方面高效。 例如,与 FP32 加法相比,执行 INT8 加法的能效提高 30 倍,面积效率提高 116 倍 [97]。 值得注意的纯整数量化工作包括 [154],它将批量归一化融合到之前的卷积层中,以及 [113],它提出了一种针对具有批量归一化的残差网络的纯整数计算方法。 然而,这两种方法都仅限于 ReLU 激活。 [132]地址的近期工作通过使用整数算法逼近 GELU [94]、Softmax 和层归一化 [6] 并将仅整数量化进一步扩展到 Transformer [243] 架构来实现这一限制。 值得注意的纯整数量化工作包括 [154],它将批量归一化融合到之前的卷积层中,以及 [113],它提出了一种针对具有批量归一化的残差网络的纯整数计算方法。 然而,这两种方法都仅限于 ReLU 激活。 [132] 最近的工作通过使用整数算法逼近 GELU [94]、Softmax 和层归一化 [6] 解决了这一限制,并进一步将仅整数量化扩展到 Transformer [243] 架构。 二元量化是另一类纯整数量化,其中所有缩放都是用二元数执行的,二元数是有理数,其分子为整数值,分母为 2 的幂 [267]。 这导致计算图只需要整数加法、乘法、位移位,不需要整数除法。 重要的是,在这种方法中,所有的加法(例如残差连接)都被强制具有相同的二元尺度,这可以使加法逻辑更简单,效率更高。 总结(模拟与仅整数量化)。 通常,与模拟/伪量化相比,仅整数和二元量化更可取。 这是因为仅整数使用较低精度的逻辑进行算术运算,而模拟量化使用浮点逻辑来执行运算。 然而,这并不意味着假量化永远没有用。 事实上,伪量化方法对于带宽限制而非计算限制的问题可能是有益的,例如在推荐系统中 [185]。 对于这些任务,瓶颈是内存占用和从内存加载参数的成本。 因此,对于这些情况,执行伪量化是可以接受的。 B.混合精度量化 很容易看出,当我们使用较低精度的量化时,硬件性能会提高。 然而,将模型统一量化为超低精度会导致精度显着下降。 可以通过混合精度量化来解决这个问题 [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)的迹可用于测量 a 的灵敏度量化层[50],类似于修剪的结果在 Optimal Brain Damage 的开创性工作中 [139]。 在 HAWQv2 中,这种方法被扩展到混合精度激活量化 [50],并被证明比基于 RL 的混合精度方法快 100 倍以上 [246]。 最近,在 HAWQv3 中,引入了仅整数、硬件感知量化 [267]提出了一种快速整数线性规划方法来为给定的应用程序特定约束(例如,模型大小或延迟)找到最佳位精度。 这项工作还通过直接将它们部署在 T4 GPU 上解决了有关混合精度量化硬件效率的常见问题,显示速度高达 50% 与 INT8 量化相比,采用混合精度 (INT4/INT8) 量化。 摘要(混合精度量化)。 混合精度量化已被证明是一种有效且硬件效率高的方法,可用于不同神经网络模型的低精度量化。 在这种方法中,神经网络的层被分为对量化敏感/不敏感,并且每一层都使用较高/较低的位。 像这样,人们可以最大限度地减少精度下降,并且仍然受益于减少的内存占用和更快的低精度量化速度。 最近的工作 [267] 也表明这种方法是硬件高效的,因为混合精度仅用于跨操作/层。 量化的目标之一是改善推理延迟。 然而,并不是所有的硬件在某个层/操作被量化后都提供相同的加速。 事实上,量化的好处是硬件相关,片上内存、带宽和缓存层次结构等许多因素都会影响量化速度。 重要的是要考虑这一事实,以便通过硬件感知量化实现最佳收益 [87,91, 246, 250, 254, 256, 265, 267]。 特别是,工作 [246] 使用强化学习代理来确定量化的硬件感知混合精度设置,基于具有不同位宽的不同层的延迟查找表。 但是,这种方法使用模拟的硬件延迟。 为了解决这个问题,[267] 最近的工作直接在硬件中部署量化操作,并测量不同量化位精度的每一层的实际部署延迟。 D.蒸馏辅助量化 量化中一个有趣的工作是结合模型蒸馏来提高量化精度 [126, 177, 195, 267]。 模型蒸馏 [3, 95, 150,177, 195, 207, 268, 270, 289] 是一种使用精度更高的大型模型作为教师的方法帮助训练一个紧凑的学生模型。 $$ \mathcal{L}=\alpha \mathcal{H}\left(y, \sigma\left(z_s\right)\right)+\beta \mathcal{H}\left(\sigma\left(z_t, T\right), \sigma\left(z_s, T\right)\right) \tag{10} $$ 在此期间训练学生模型,而不是仅仅使用ground-truth 类标签,模型蒸馏建议利用教师产生的软概率,其中可能包含输入的更多信息。 那是整体损失函数包括学生损失和蒸馏损失,通常表示为: $$ p_i=\frac{\exp \frac{z_i}{T}}{\sum_j \exp \frac{z_j}{T}} \tag{11} $$ 以前的知识蒸馏方法侧重于探索不同的知识源。 [95、150、192] 使用 logits(软概率)作为知识来源,而 [3、207、269] 试图利用中间层的知识。 教师模型的选择也得到了很好的研究,其中 [235、273] 使用多个教师模型共同监督学生模型,而 [43, 277] 在没有额外教师模型的情况下应用自蒸馏。 E.极端量化 二值化是最极端的量化方法,其中量化值被限制为 1 位表示,从而大大减少了 32 倍的内存需求。 除了内存优势外,二元(1 位)和三元(2 位)运算,通常可以使用按位算法进行有效计算,并且可以在更高的精度(例如 FP32 和 INT8)上实现显着的加速。 例如,NVIDIA V100 GPU 上的峰值二进制算法比 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。 在这种方法中,权重保持为真实值,并且仅在前向和反向传递期间进行二值化以模拟二值化效果。 在正向传播过程中,实值权重根据符号函数转换为+1或-1。 然后可以使用带有 STE 的标准训练方法训练网络,以通过不可微分的符号函数传播梯度。 Binarized NN [107] (BNN) 通过对激活和权重进行二值化来扩展这个想法。 联合二值化权重和激活有额外的好处改善延迟,因为昂贵的浮点矩阵乘法可以用轻量级 XNOR 代替操作之后是位计数。 另一个有趣的工作是二进制权重网络 (BWN) 和 [45] 中提出的 XNORNet,它们通过将比例因子合并到权重并使用 +α 或 -α 而不是 +1 或 -1 来实现更高的精度。 α是比例因子,即选择最小化实值之间的距离权重和由此产生的二值化权重。换句话说,实值权重矩阵 W 可以表示为 W ≈ αB,其中 B 是满足以下优化问题的二进制权重矩阵: $$ \alpha, B=\operatorname{argmin}|W-\alpha B|^2 . \tag{12} $$ 此外,受到许多学习权重接近于零的观察的启发,已经尝试通过使用三元值(例如 +1、0 和 -1)约束权重/激活来三元化网络,从而明确允许量化值是 零 [145, 159]。 三元化还通过像二值化那样消除昂贵的矩阵乘法来大大减少推理延迟。 后来,三元-二元网络 (TBN) [244] 表明结合二元网络权重和三元激活可以在准确性和计算效率之间实现最佳折衷。 由于朴素的二值化和三值化方法通常会导致严重的精度下降,特别是对于 ImageNet 分类等复杂任务,已经提出了许多解决方案来减少极端量化中的精度下降。 [197] 的工作将这些解决方案大致分为三个分支。 在这里,我们简要讨论每个分支,我们请感兴趣的读者参考 [197] 以了解更多详情。 a) 量化误差最小化:解决方案的第一个分支旨在最小化量化误差,即真实值与量化值之间的差距 [19、34、62、103、151、158、164、169、178、218 , 248]。 HORQ [151] 和 ABC-Net [158] 不是使用单个二进制矩阵来表示实值权重/激活,而是使用多个二进制矩阵的线性组合,即 W ≈ α1B1 + · · · + αMBM,以减少 量化误差。 受激活的二值化会降低它们对后续卷积块的表示能力这一事实的启发,[178] 和 [34] 表明,更广泛的网络(即具有更多过滤器的网络)的二值化可以在 准确性和模型大小。 b)Improved Loss function:另一个分支的工作侧重于损失函数的选择[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 推理任务带到边缘端。 极端量化总结:极低位精度量化是一个非常有前途的研究方向。 然而,与基线相比,现有方法通常会导致高精度下降,除非执行非常广泛的调整和超参数搜索。 但对于不太关键的应用程序,这种精度下降可能是可以接受的。 E.向量量化 正如第二部分所讨论的,量化并不是在机器学习中发明的,但在过去的一个世纪里在信息论中得到了广泛的研究,特别是在数字信号处理领域作为一种压缩工具。 然而,机器学习量化方法之间的主要区别在于,从根本上说,我们与原始信号相比,对以最小变化/误差压缩信号不感兴趣。 相反,我们的目标是找到一种精度降低的表示,以尽可能减少损失。 因此,如果量化的权重/激活远离非量化的权重/激活,这是完全可以接受的。 话虽如此,DSP 中的经典量化方法中有很多有趣的想法已应用于 NN 量化,特别是矢量量化[9]。 特别是,[1, 30, 74,84, 117, 170, 180, 189, 256] 的工作将权重聚类为不同的组,并在推理过程中使用每个组的质心作为量化值。 如方程式所示。 13、i是张量中权重的索引,c1,...,ck是聚类找到的k个质心,cj是wi对应的质心。 聚类后权重wi将在码本中有一个与 cj 相关的簇索引 j (查找表)。 $$ \min _{c_1, \ldots, c_k} \sum_i\left|w_i-c_j\right|^2 . \tag{13} $$ 已经发现,使用 k 均值聚类是足以将模型尺寸减小多达 8 倍而无需精度显着下降 [74]。 在此之上,联合应用基于 k-means 的矢量量化剪枝和霍夫曼编码可以进一步减少模型大小 [84]。 乘积量化 [74, 227, 256] 是向量量化的扩展,其中权重矩阵被划分为子矩阵,向量量化应用于每个子矩阵。 除了基本的产品量化方法外,更细粒度的聚类使用可以进一步提高准确性。 例如,在 [74] 中,k 均值乘积量化后的残差被进一步递归量化。 在 [189] 中,作者对更重要的量化范围应用了更多的集群,以更好地保存信息。

五、量化与硬件处理器

我们已经说过,量化不仅可以减小模型大小,还可以实现更快的速度和更少的功耗,特别是对于具有低精度逻辑的硬件。 因此,量化对于物联网和移动应用程序中的边缘部署尤为重要。 边缘设备通常具有严格的资源限制,包括计算、内存和重要的功率预算。 对于许多深度 NN 模型来说,这些通常成本太高而无法满足。 此外,许多边缘处理器不支持浮点运算,尤其是在微控制器中。 在这里,我们在量化的背景下简要讨论不同的硬件平台。 ARM Cortex-M 是一组 32 位 RISC ARM 处理器内核,专为低成本和高能效的嵌入式设备而设计。 例如,STM32 系列是微控制器 基于也用于边缘神经网络推理的 ARM Cortex-M 内核。 由于某些 ARM Cortex-M 内核不包含专用浮点单元,因此应在部署前首先对模型进行量化。 CMSIS-NN [136] 是 ARM 的一个库,可帮助量化 NN 模型并将其部署到 ARM Cortex-M 内核上。 具体来说,该库利用具有两个缩放因子的幂的定点量化 [113、154、267],以便可以通过移位操作有效地执行量化和反量化过程。 GAP-8 [64],一个 RISC-V SoC(片上系统)使用专用 CNN 加速器进行边缘推理,是另一个仅支持整数运算的边缘处理器示例。 虽然可编程通用处理器因其灵活性而被广泛采用,但 Google Edge TPU 是一种专用 ASIC 芯片,是另一种用于在边缘运行推理的新兴解决方案。与运行在拥有大量计算资源的谷歌数据中心的 Cloud TPU 不同,Edge TPU 专为小型低功耗设备设计,因此仅支持 8 位运算。 NN 模型必须使用 TensorFlow 的量化感知训练或训练后量化进行量化。 图 9 绘制了广泛用于边缘神经网络推理的不同商业边缘处理器的吞吐量。 在过去几年中,边缘处理器的计算能力有了显着提高,这使得以前只能使用昂贵的神经网络模型进行部署和推理成为可能 在服务器上。 量化与高效的低精度逻辑和专用深度学习加速器相结合,一直是此类边缘处理器发展的重要推动力。 虽然量化是许多边缘处理器不可或缺的技术,但它也可以为非边缘处理器带来显着的改进,例如,满足服务水平协议 (SLA) 要求,例如 99% 的延迟。 一个很好的例子是由最近的 NVIDIA Turing GPU,特别是 T4 GPU,其中包括 Turing Tensor Core。 Tensor Core 是专为高效低精度矩阵乘法而设计的专用执行单元。

六、未来的研究方向量化

在这里,我们简要讨论了未来量化研究的几个高级挑战和机遇。 这被分解为量化软件、硬件和神经网络架构的协同设计、耦合压缩方法和量化训练。 量化软件:使用当前的方法,可以直接量化不同的 NN 模型并将其部署到 INT8,而不会损失准确性。 有几个软件包可用于部署 INT8 量化模型(例如,Nvidia 的 TensorRT、TVM、 等),每个都有很好的文档。 此外,实现也非常优化,可以很容易地观察到量化速度加快。 然而,用于较低位精度量化的软件并不广泛,有时甚至不存在。 例如,Nvidia 的 TensorRT 目前不支持 sub-INT8 量化。 此外,对 INT4 量化的支持最近才添加到 TVM [267]。 最近的工作有 表明 INT4/INT8 的低精度和混合精度量化在实践中有效 [51、82、102、108,187、199、211、239、246、246、249、263、267、286]。 因此,开发用于低精度量化的高效软件 API 将产生重要影响。 硬件和 NN 架构协同设计:如上所述,低精度量化中的经典工作与机器学习中最近的工作之间的一个重要区别是,NN 参数可能具有非常不同的量化值,但仍然可以很好地泛化。 例如,具有量化感知在训练中,我们可能会收敛到一个不同的解决方案,远离具有单精度参数的原始解决方案,但仍然可以获得很好的准确性。 人们可以利用这种自由度,并在量化时调整神经网络架构。 例如, [34] 最近的工作表明,改变 NN 架构的宽度可以减少/消除量化后的泛化差距。 未来的一项工作是在模型被量化时联合调整其他架构参数,例如深度或单个内核。 未来的另一项工作是将这种协同设计扩展到硬件架构。 这可能特别有用对于 FPGA 部署,因为可以探索许多不同的可能硬件配置(例如乘法累加元素的不同微体系结构),然后将其与神经网络体系结构和量化协同设计相结合。 耦合压缩方法:如上所述,量化只是有效部署神经网络的方法之一。 其他方法包括高效的神经网络架构设计、硬件和神经网络架构的协同设计、剪枝和知识蒸馏。量化可以与这些其他方法相结合。然而,目前很少有工作探索这些方法的最佳组合是什么。 例如,修剪和量化可以一起应用于模型以减少其开销 [87、152],了解结构化/非结构化修剪和量化的最佳组合很重要。 同样,另一个未来的方向是研究之间的耦合这些方法和上述其他方法。 量化训练:也许量化最重要的用途是用半精度加速神经网络训练 [41、72、79、175]。 这使得能够使用更快、更节能的低精度逻辑进行训练。 然而,很难将其进一步推向 INT8 精度训练。 虽然该领域存在一些有趣的工作 [10、26,123、137、173],但所提出的方法通常需要大量超参数调整,或者它们仅适用于一些相对简单的学习任务的 NN 模型。 基本问题是,对于 INT8 精度,训练会变得不稳定和发散。 应对这一挑战可能会对多种应用产生重大影响,尤其是对于边缘训练。

七、总结与结论

一旦抽象数学计算适用于数字计算机上的计算,这些计算中的数值的有效表示、操作和通信问题就出现了。 与数值表示问题密切相关的是量化问题:在什么方式应该是一组连续的实数值分布在一组固定的离散数字上以尽量减少所需的位数,也最大限度地提高伴随计算的准确性?虽然这些问题与计算机科学一样古老,这些问题与设计特别相关高效的神经网络模型。有几个原因首先,神经网络是计算密集型的。 所以数值的有效表示尤其重要的。 其次,大多数当前的 NN 模型都非常依赖 过度参数化。 因此,有充足的机会在不影响准确性的情况下降低位精度。第三,NN 模型的分层结构提供了探索的额外维度。 因此,不同层NN对损失函数有不同的影响,这激发有趣的方法,例如混合精度量化。 从浮点表示转向以八位/四位或更少位表示的低精度固定整数值有可能减少内存占用和延迟。[157] 显示流行计算机视觉模型的 INT8 推理,包括使用 TVM [32] 的 ResNet50 [88]、VGG-19 [224] 和 inceptionV3 [230]量化库,可以在 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 加速,但 [114] 还通过各种计算机视觉的 INT8 量化,在 Intel Cascade Lake CPU 和 Raspberry Pi4(均为非 GPU 架构)上分别获得了 2.35 倍和 1.40 倍的延迟加速楷模。 因此,正如我们的参考书目所证明的那样,NN 模型中的量化问题一直是一个非常活跃的研究领域。 在这项工作中,我们试图为这些非常不同的工作带来一些概念结构。 我们首先讨论了许多量化应用所共有的主题,例如均匀、非均匀、对称、非对称、静态和动态量化。 然后我们考虑了更独特的量化问题NN 的量化。 这些包括分层、分组、通道和子通道量化。 我们进一步考虑了训练和量化之间的相互关系,并讨论了量化感知训练与训练后量化相比的优缺点。 对量化和训练之间关系的进一步讨论是数据可用性的问题。 极端情况其中一个是训练中使用的数据,由于隐私等各种合理原因,不再可用。 这激发了零镜头量化的问题。 由于我们特别关注针对边缘部署的高效神经网络,因此我们考虑了该环境独有的问题。 这些包括导致参数由少于 8 位表示的量化技术,可能低至二进制值。 我们还考虑了仅整数量化的问题,这使得神经网络能够部署在通常缺少浮点单元的低端微处理器上。 通过本次调查及其组织,我们希望提供当前神经网络量化研究的有用快照,并提供一个智能组织来简化对该领域未来研究的评估。