【论文分享】A White Paper on Neural Network Quantization【4、5】QAT部分和总结讨论

本文详细探讨了量化感知训练(QAT)在深度学习模型量化中的应用,包括反向传播的模拟量化、批量归一化折叠、QAT初始化以及QAT流程。QAT通过在训练中模拟量化噪声,能够在保持高精度的同时,减少模型的位宽。实验结果显示,QAT可以有效地处理各种模型,尤其是在低比特量化时。QAT流程包括跨层均衡化、量化器的添加、范围设置和可学习的量化参数。
摘要由CSDN通过智能技术生成

本文大部分是翻译,就算是翻译读下来也很吃力,建议粗读。我自己会更关注💡部分,可以细读一下。

4. QAT训练时量化(量化感知)

上一节中描述的训练后量化(PTQ)技术是我们量化工具包中的第一个首选工具。它们非常有效并且计算速度非常快,因为它们不需要使用带标签的数据重新训练网络。但是它们有局限性,尤其是在针对激活的低bit位量化时,例如 4 位及以下。训练后量化(PTQ)技术可能不足以缓解低bit位量化产生的巨大量化误差。

在这些情况下,我们采用量化感知训练(QAT)。QAT 在训练期间对量化噪声源进行建模(参见第 2.3 节)。这允许模型找到比训练后量化(PTQ)更优的解决方案。然而更高的准确性也要求更多的训练成本,更长的训练时间,需要带标签的数据集,超参数搜索等。

在本节中,我们将探讨反向传播如何在具有模拟量化的网络中工作,并为有效地使用 QAT 训练模型提供标准流程。我们还将讨论 QAT 中批量归一化折叠和按通道(per-channel)量化的影响,并提供广泛的任务和模型结果。

4.1 反向传播的模拟量化

在第2.3节中,我们了解到如何在深度学习框架中使用浮点来模拟量化过程。然而如果我们看一下图4的计算图,为了训练这样一个网络,我们需要通过模拟的量化器模块进行反向传播。这个就带来一个问题,最接近舍入运算的梯度要么为0,要么处处未定义,使得梯度训练无法正常进行。解决这个问题的一种方法时使用直通估计器(straight-through estimator STE,Bengio et al. 2013)来近似梯度,它将舍入算子的梯度近似为 1。

利用这个近似值,现在我们可以从方程(7)中计算出量化操作的梯度。为了清楚起见,我们默认使用对称量化,即 z = 0,但同样的结果适用于非对称量化,因为零点是一个常数。我们使用 n 和 p 来定义整数量化范围,如 n = qmin/s , p = qmax/s。方程(7)的梯度与它的输入xi被如下定义:

在这里插入图片描述

利用这个梯度定义,现在我们可以为量化模块进行反向传播。图 10 显示了用于量化感知训练的前向和反向传播的简单计算图。前向传播与图 4 相同,但在后向传播中,由于 STE 假设,我们有效地跳过了量化器模块。

在这里插入图片描述

在早期的 QAT 工作中,权重和激活值的量化范围在每次迭代时更新,最常用的是最小-最大(min-max)范围。在最近的工作中,STE被用来计算梯度,量化参数的z和s。为了使用链式法则和STE,我们首先计算缩放系数s的梯度

在这里插入图片描述

在前面我们限制零点是一个整数。为了使零点可学,我们将其转换为实数,并应用四舍五入运算。修改后的量化函数被定义为:
在这里插入图片描述

对Z的梯度是通过再次对四舍五入算子应用STE来计算的。

在这里插入图片描述

4.2 批量归一化折叠和QAT

在第 2.3.1 节中,我们介绍了批量归一化折叠,它将缩放和偏移吸收到线性层中,以实现更有效的推理。在量化感知训练期间,我们希望尽可能模拟推理行为,这就是为什么我们必须在训练期间考虑到BN折叠的原因。请注意,在一些QAT文献中,BN折叠的影响被忽略了。虽然当我们采用按通道(per-channel)量化时(本节下面有更多内容)还不错,但为按张量(per-tensor)量化保持BN的展开将导致以下两种情况之一:

  1. BN层在推理过程中应用了按通道(per-channel)的重新缩放。在这种情况下,还不如从一开始就按通道(per-channel)量化。
  2. 在部署期间将 BN 折叠到权重张量中,当我们训练网络以适应不同的量化噪声时,会导致潜在的显着精度下降。

在QAT中建立BN折叠模型的一个简单而有效的方法是将BN缩放和偏移量静态地折叠到线性层的权重和偏置中。这相当于权重的重新参数化,并有效地从网络中完全删除了批量规范化操作。当从一个收敛的预训练模型开始时,静态折叠是非常有效的,我们可以从表7的结果看出。
在这里插入图片描述

Jacob等人的另一种方法既更新了QAT期间的运行统计,又使用了修正的BN折叠。这种方法更加繁琐并且计算成本也更高,因为它涉及到双重前向传递:一个是批量统计,一个是量化的线性操作。然而,根据我们的实验(见表7),静态折叠法简单有效。

Per-channelquantization 按通道量化 在2.4.2节中我们提到,当硬件支持时,按通道量化的权重可以提高精度。。静态折叠重新参数化也适用于按通道量化,其中按通道量化提供了额外的灵活性,因为它允许我们将批量归一化的缩放操作吸收到按通道量化的缩放因子中。

在这里插入图片描述

我们可以看到,现在有可能将批量归一化的缩放参数吸收到按通道的缩放因子中。对于QAT来说,这意味着我们可以在训练过程中保持BN层的完整性,并在之后将BN的缩放系数合并到按通道量化参数中。在实验表 7 的最后两行可以看出,与静态折叠相比,这种建模方法对于按通道量化具有同等或更好的效果。

4.3 QAT 初始化

在本节中,我们将探讨初始化对QAT的影响。文献中常见的做法是从预训练的FP32模型开始,虽然从FP32模型开始多数情况是有益的。但是量化初始化对最终QAT结果的影响却研究得较少,在这里,我们探讨了在QAT之前使用几种PTQ技术作为初始步骤的效果。

Effect of range estimation 量化范围的影响

为了评估初始范围设置(参见第 3.1 节)对权重和激活的影响,我们进行了两组实验,总结在表 8 中。

在这里插入图片描述

  • 在第一个实验中,将权重量化为4比特,并将激活保持在8比特。我们比较了min-max初始化和基于MSE初始化的权重量化范围。虽然MSE初始化的模型有一个明显较高的起始精度,但在训练了20轮(epoch)后,差距就缩小了。

  • 在第二个实验中,将权重量化为4比特,并将激活保持在4位比特,比较最小-最大初始化和基于MSE的初始化,由表8来看效果都差不多。在下图11中展示了实验的完整训练曲线,在最初的几个epoch中,使用MSE初始化有明显的优势,但是在训练的后期几乎消失了。

在这里插入图片描述

总之,更好的初始化可以导致更好的QAT结果,但是收益通常很小,并且在训练持续的时间越长,收益就会微弱甚至消失。

Effect of CLE CLE的影响

在表9中比较了其他PTQ改进的效果,如CLE和偏差校正。

  • 对于ResNet18来说,没有看到最终的QAT性能有明显的区别

  • 对于MobileNetV2来说,观察到在没有CLE使就不能进行训练。这可能是由于按张量(per-tensor)量化造成的灾难性性能下降,在第3.2节中讨论了这一点。

在这里插入图片描述

总之,对于那些使用普通PTQ有严重问题的模型,可能需要更先进的PTQ技术,如CLE来初始化QAT。但是在大多数其它情况下,改进的PTQ初始化只对最终QAT性能有着微小的改善。

总结 💡

其实这CLE和量化范围设置对QAT的影响都不大,除非这个模型(权重分布不平衡)用PTQ量化都有问题,也就是按张量量化会对模型性能影响巨大的时候QAT需要加入CLE才能有效。

4.4 标准的QAT流程( Standard QAT pipeline)💡

该流程在各种计算机视觉和自然语言处理模型和任务中产生了良好的 QAT 结果,并且可以被视为实现低比特量化性能的首选工具。如前几节所述,我们总是从预先训练的模型开始,并遵循一些 PTQ 步骤,以实现更快的收敛和更高的准确度。

在这里插入图片描述

Cross-layer equalization 跨层均衡化(CLE) 与 PTQ 类似,我们首先将 CLE 应用于全精度模型。正如我们在表 9 中看到的,对于遇到不平衡权重分布的模型(例如 MobileNet 架构),此步骤是必要的。对于其他网络或在按通道(per-channel)量化的情况下,此步骤可以是可选的。

Add quantizers 使用量化模块 接下来,我们选择量化器并在网络中添加量化操作,如 2.3 节所述。量化器的选择可能取决于特定的目标硬件,对于常见的 AI 加速器,我们建议对权重使用对称量化器,对激活使用非对称量化器。如果硬件/软件堆栈支持,那么对权重使用按通道(per-channel)量化是有利的。在这个阶段,我们还将注意对批量标准化(BN)的模拟是否正确,如 4.2 节所述。

Range estimation 范围设置 在训练之前,我们必须初始化所有的量化参数。更好的初始化将有助于更快的训练,并可能提高最终的准确性,尽管这种提高往往是很小的(见表8)。一般来说,我们建议使用基于层的MSE标准来设置所有量化参数。在按通道(per-channel)量化的特定情况下,使用最小-最大设置有时可能是更有利的。

Learnable Quantization Parameters 量化参数可学习 建议让量化器参数变得可学习,正如第4.1节所讨论的。直接学习量化参数,而不是在每个epoch中更新它们,会带来更高的性能,特别是在处理低比特量化时。但是,在为任务设置优化器时,使用可学习的量化器需要特别小心。当使用 SGD 类型的优化器时,与其他网络参数相比,量化参数的学习率需要降低。如果我们使用具有自适应学习率的优化器(例如 Adam 或 RMSProp),则可以避免学习率调整。

4.5 实验

使用我们的QAT流程,我们对3.6节中用于PTQ的相同模型进行量化和评估,在表10中列出了不同位宽和量化粒度的结果。

  • DeepLabV3在Pascal VOC上训练了80个epoch;

  • EfficientDet在COCO 2017上训练了20个epoch;

  • 所有其他视觉模型在ImageNet上训练了20个epoch。

  • BERT-base根据不同任务和量化粒度,在GLUE上训练了3到12个epoch。

对所有模型都使用Adam优化器,以每个量化配置的最佳学习率来展示结果,并没有进一步进行超参数调整。

在这里插入图片描述

结果:

  • 对于没有深度可分离卷积的网络(表10的前3行),W8A8和W4A8量化的表现与浮点模型相当,在某些情况下甚至超过了浮点模型。这可能是由于量化噪声训练的正则化效应,或者是由于QAT期间的额外微调。对于更激进的W4A4情况,我们注意到有小幅性能下降,但仍在浮点精度的1%以内。

  • 对具有深度可分离层的网络(MobileNetV2、EfficientNet lite、DeeplabV3、EfficientDet-D1)进行量化更具挑战性;我们从3.6节的PTQ结果中也观察到了这一趋势,并在文献中进行了讨论。8位量化几乎不产生精度下降,而将权重量化到4位会导致较大的精度下降,例如对于EfficientNet lite的按张量(per-tensor)量化,大约下降4%。按通道(per-channel)量化可以显著提高性能,使DeepLabV3达到浮点精度,并将MobileNetV2和EfficientNet lite的差距缩小到1.5%以下。将权重和激活量化为4位,对这类网络来说仍然是一个挑战,即使采用按通道(per-channel)量化,也会导致高达5%的下降。EfficientDet-D1仍然比该组中的其他网络更难量化。

  • 对于 BERT-base,观察到具有范围学习的 QAT 可以有效地处理高动态范围,允许将所有激活保持在 8 位(与 PTQ 不同)。 W4A8 保持在原始 GLUE 分数的 1% 以内,表明低bit权重量化对于 Transformer 模型来说不是问题。我们注意到将其(W4)与低位激活量化 (W4A4) 相结合时性能显著下降。

5. 总结和结论

深度学习已成为许多机器学习应用程序不可或缺的一部分,现在可以在无数电子设备和服务中找到,从智能手机和家用电器到无人机、机器人和自动驾驶汽车。随着深度学习在我们日常生活中的普及和影响力的增加,对快速且高效的神经网络推理的需求也在增加。神经网络量化是在推理过程中降低神经网络能耗和延迟要求的最有效方法之一。

量化允许我们从浮点表示转移到定点格式,并与利用高效定点操作的专用硬件相结合,具有实现显著功率增益和加速推断的潜力。然而,为了利用这些优势,我们需要健壮的量化方法,可以保持高精度,同时减少权值和激活的位宽。为此,我们考虑了两大类量化算法:训练后量化(PTQ)和训练后量化(QAT)。

训练后量化(QAT)技术采用预训练的FP32网络,并将其转换成定点网络,而不需要原始训练流程。这使得它们成为一种轻量级的、一键式的量化方法,具有较低的工程工作量和计算成本。我们描述了PTQ最近的一系列进展,并介绍了一种PTQ流程,它可以为广泛的模型和机器学习任务带来接近浮点精度的结果。特别地,使用所提出的流程,我们可以在所有网络的浮点精度的仅1%内实现权重和激活的8位量化。我们进一步表明,许多网络甚至可以量化到4位权重,而性能只有很小的额外下降。此外,我们引入了一个调试工作流程,以有效地识别和修复量化新网络时可能出现的问题。

训练后量化(QAT)通过模拟量化操作对训练期间的量化噪声进行建模。与 PTQ 相比,此训练过程可以找到更好的量化解决方案,同时实现更有效和更激进的激活量化。与 PTQ 类似,我们引入了使用该领域最新算法的标准训练流程。我们还特别关注 QAT 期间的批量归一化折叠,并表明简单的静态折叠优于其他计算成本更高的方法。我们证明,通过我们的QAT流程,我们可以实现权重的4位量化,对于某些模型甚至可以实现4位激活量化,而且与浮点运算相比,精度只有小幅下降。

在PTQ和QAT之间的选择取决于应用的精度和功耗要求。这两种方法都是任何模型工具包的重要组成部分,我们希望我们提出的流程将帮助工程师以更少的时间和精力部署高性能的量化模型。

系列文章索引

  1. 【论文分享】A White Paper on Neural Network Quantization【1,2】引言和基础知识
  2. 【论文分享】A White Paper on Neural Network Quantization【3】PTQ部分
  3. 【论文分享】A White Paper on Neural Network Quantization【4、5】QAT部分和总结讨论

参考资料

  • https://blog.csdn.net/Just_do_myself/article/details/124350921
  • https://zhuanlan.zhihu.com/p/462971462
  • https://arxiv.org/abs/2106.08295
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoetu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值