模型落地困难?看看这个如何解决PTQ的振荡问题

点击下方卡片,关注「集智书童」公众号

点击加入👉「集智书童」交流群

picture.image

训练后量化(PTQ)由于其数据隐私性和低计算成本,被广泛认为是实际中最有效的压缩方法之一。作者认为振荡问题在PTQ方法中是被忽视的。

作者在本文中主动探索并提出了一个理论证明,来解释为什么这样的问题在PTQ中是常见的。然后,作者试图通过引入一个原则性的、广义的理论框架来解决这个问题。

首先公式化了PTQ中的振荡,并证明了问题是由模块容量的差异引起的。为此定义了数据依赖和无数据情况下的模块容量(ModCap),其中相邻模块之间的差异用于测量振荡程度。然后通过选择Top-k差分来解决该问题,其中相应的模块被联合优化和量化。

大量实验表明,本文的方法成功地降低了性能下降,并推广到不同的神经网络和PTQ方法。例如,对于2/4位ResNet-50量化,本文的方法比以前最先进的方法高出1.9%。它在小模型量化上变得更重要,例如在MobileNetV2×0.5上比BRECQ方法高出6.61%。 Github:https://github.com/bytedance/MRECG

1、简介

深度神经网络(DNN)近年来迅速成为研究热点,在实践中被应用于各种场景。然而,随着DNN的发展,更好的模型性能通常与更深更宽网络的巨大资源消耗有关。与此同时,旨在在资源受限的场景中部署模型的神经网络压缩和加速研究领域正逐渐受到越来越多的关注,包括但不限于神经架构搜索、网络剪枝和量化。在这些方法中,量化提出了将浮点网络激活和权重转换为低位定点,这能够在几乎没有性能退化的情况下加速推理或训练速度。

通常,量化方法分为量化感知训练(QAT)和训练后量化(PTQ)。前者通过量化微调来减少量化误差。尽管取得了显著的成果,但海量的数据需求和高昂的计算成本阻碍了DNN的普遍部署,尤其是在资源受限的设备上。

因此,提出了PTQ来解决上述问题,该问题只需要少量或零校准数据来进行模型重建。由于没有量化训练的迭代过程,PTQ算法非常高效,通常在几分钟内即可获得和部署量化模型。然而,这种效率往往是以牺牲准确性为代价的。PTQ通常在没有量化训练的情况下比全精度模型表现更差,尤其是在低位紧凑模型量化中。

最近的一些算法试图解决这个问题。例如,Nagel等人通过量化前后损失函数的二阶泰勒展开构建了新的优化函数,该函数引入了具有可学习参数的软量化,以实现自适应权重舍入。Li等人逐层改变为逐块重建,并使用对角Fisher矩阵来近似Hessian矩阵以保留更多信息。Wei等人发现,随机禁用激活量化的一些元素可以平滑量化权重的损失。

picture.image

然而,作者观察到,在重建过程中,随着层或块的加深,上述所有方法都表现出不同程度的振荡,如图1左侧子图所示。作者认为,这个问题是至关重要的,并且在以前的PTQ方法中被忽视了。在本文中通过严格的数学定义和证明,回答了关于振荡问题的3个问题,如下所示:

  1. 为什么PTQ会出现振荡?为了回答这个问题,首先定义了模拓扑同构,它在一定程度上放宽了模等价的限制。然后,给出了在模块拓扑同构条件下模块容量的定义。在这种情况下可以证明,当后期模块的容量足够大时,重建损失将突破量化误差累积的影响并降低。相反,如果后面模块的容量小于前面模块的容量,则由于放大的量化误差累积效应,重建损失急剧增加。总体而言,证明了PTQ过程中的振荡是由模块容量的差异引起的;
  2. 振荡将如何影响最终性能?通过随机采样大量混合重建粒度方案,观察到最终的重建误差与之前所有模块中最大的重建误差高度相关。换句话说,当振荡发生时,先前的模块显然具有较大的重建误差,从而导致PTQ的精度较差;
  3. 如何解决PTQ中的振荡问题?由于振荡是由前后模块的不同容量引起的,提出了混合重构粒度(MRECG)方法,该方法可以联合优化发生振荡的模块。此外,本文的方法适用于无数据和依赖数据的场景,也兼容不同的PTQ方法。

总的来说,本文的贡献如下:

  1. 首次揭示了PTQ中的振荡问题,这在以前的算法中被忽略了。然而,作者发现在PTQ的优化中,消除这种振荡是至关重要的。
  2. 从理论上表明,这种振荡是由相邻模块的能力差异引起的。小的模块能力会加剧量化误差的累积效应,使损耗迅速增加,而大的模块能力则会减少累积量化误差,使损耗减少。
  3. 为了解决振荡问题,作者提出了一种新的混合重构粒度(MRECG)方法,该方法利用损失度量和模块容量来优化数据依赖和无数据场景下的混合重构细粒度。前者以适度较高的开销找到全局最优,因此具有最佳性能。后者更有效,性能略有下降。
  4. 在ImageNet中的各种压缩任务上验证了所提出的方法的有效性。特别是在具有2/4位的MobileNetV2中实现了58.49%的Top-1准确率,这大大超过了当前的SOTA方法。此外,还证实了本文的算法确实消除了重建损失在不同模型上的振荡,使重建过程更加稳定。

2、相关工作

2.1、Quantization

量化可以分为两类:

  • 量化感知训练(QAT)
  • 训练后量化(PTQ)

QAT使用整个训练数据集进行量化训练,并通过网络的反向传播来更新梯度以消除量化误差。尽管QAT集成了各种训练方法以实现更高的准确性,但在某些数据隐私场景中,这一过程往往是资源密集型的,并且受到限制。

近年来,由于高效的模型部署和低数据依赖性的优势,PTQ越来越受到关注。由于不包括量化训练,PTQ算法通常使用小的校准数据集进行重建,通过优化任务损失的二阶泰勒展开项的近似值来获得更好的量化模型。

2.2、Module Capacity

一些常见的参数会影响模块容量,例如滤波器的大小、权重参数的位宽和卷积组的数量。此外,一些研究表明,Stride和残差链接也会影响模块容量。

Kong等人表明,stride为2的卷积可以等效地被Stride为1的卷积所取代。同时,替换卷积的滤波器大小大于原始卷积的滤波器尺寸,这意味着模块容量的增加。

MobileNetV2包含深度卷积,它不包含通道之间的信息交换,因此它在某种程度上损害了模型性能。Liu等人认为,全精度残差链接的输入增加了量化模块的表示能力。

3、本文方法

在本节中首先通过一个定理和推论证明了PTQ的振荡问题与模块容量高度相关。其次,构造了容量差异优化问题,并分别在依赖数据和无数据的情况下给出了两种解决方案。最后,分析了扩大校准数据的批量大小以减少期望近似误差,这表明边际效用有递减的趋势。

3.1、PTQ振荡问题

在不失一般性的情况下,使用模块作为分析的基本单元。特别是,与BRECQ不同,本文中的模块粒度更灵活,它表示Layer、Block甚至Stage的粒度。形式上,将设置为包含个卷积层的神经网络的第个()模块。在模块粒度框架下提出了一种更普遍的重建损失,如下所示,

picture.image

其中、分别是第个模块的权重和输入。是相应的量化版本。当只包含一个卷积层时,方程1退化为AdaRound中的优化函数。当包含第个块内的所有卷积层时,方程1退化为BRECQ中的优化函数。

picture.image

注意,这里忽略了AdaRound中的正则化项,这有助于收敛,因为它在每个模块优化后收敛到0。此外,为了简单起见,还省略了BRECQ中的平方梯度尺度。

如果2个模块具有相同数量的卷积层,并且所有相关联的卷积层具有相同的超参数,则它们被称为等效的(包括但不限于额外的残差输入、kernel-size、通道、组和stride)。

量化中存在量化误差的累积效应,表现为网络中量化误差受前一层量化影响的增加趋势。由于PTQ不包含量化训练,这种累积效应在重建损失中更为明显。作者提出以下定理来证明PTQ中量化误差的累积效应会导致增量损失。

理论1:给定预训练的模型和输入数据。如果两个相邻的模块是等效的,

picture.image

补充材料中提供了详细的证明。定理1说明,在两个相邻模块相等的情况下,量化误差的累积导致损失的增加

然而,由于一个或多个卷积超参数(额外的残差输入、kernel-size、通道、组、stride等)的差异,上述定理中的相邻模等价条件在实际场景中很难得到满足。非等效模块将不可避免地导致模块容量的差异。

众所周知,模块的参数数量和位宽会影响模块容量,其中这些超参数对模块容量的影响很容易量化。此外,在第2节中介绍了残差输入、卷积类型和卷积超参数都会影响模块容量,这些影响很难量化。因此,将模块拓扑同构的概念定义如下,这在一定程度上放宽了对模块等价的限制,同时使比较不同模块之间的容量成为可能。

定义1:模块拓扑同质性

假设2个模块具有相同数量的卷积层。如果2个模块的相应卷积层的超参数除了kernel-size和通道之外是相同的,那么这两个模块在拓扑上是同构的。

从定义1中,放松了模块等价对模块拓扑同构中kernel-size和通道相等的限制,这只会导致模块参数数量的差异。换句话说,消除了诸如残差输入和组之类的超参数的影响使得模块容量难以量化的问题。

具体而言,如果包含个卷积层的模块权重为,是模块中第个卷积层权重,则模块容量(ModCap)定义为以下等式:

picture.image

其中是一个计算参数数量的函数,是第个卷积层的位宽,α用于使具有不同stride的卷积层具有可比性。

具体来说,不同stride的卷积层通过一些变换来等同,并伴随着参数数量的变化。因此,通过乘以缩放参数α,将网络中的stride=2层转换为隐式stride=1层。在这种转换下,网络的所有层都满足拓扑同构的定义,因此彼此是可比较的。理论上,根据[Take it in your stride]文章中的分析,α可以设置为1.6,这在本文的不同网络中得到了推广。

然后,导出定理1的一个推论来解释为什么PTQ中会出现振荡?

推论1

假设两个相邻的模在拓扑上是同构的。如果后面模块的模块容量足够大,则损耗将减小。相反,如果后一模块容量小于前一模块容量,则量化误差的累积效应会加剧。

补充材料中提供了详细的证明。根据推论1可以得出结论,PTQ在各种模型上的振荡问题是由相邻模块的容量差异过大引起的。

论文的逻辑/相关链:振荡性∞最大误差∞最终误差∞准确度。

picture.image

「振荡∞最大误差」 :从图6和补充材料中的类似图来看,不同算法对应的损失分布振荡越严重,损失峰值就越大。也就是说,振荡的程度与最大误差呈正相关。

picture.image

「最大误差∞最终误差」 :此外,在图3中的观察结果表明,对于不同的模型,在不同的算法上,最大误差与最终误差呈正相关。

「最终误差∞精度」 :理论上,通过根据BRECQ和Adaround对精度损失函数进行泰勒展开,可以得出与性能高度相关的最终重建误差。

从经验上讲,上述论文中进行的大量实验也证明了这一说法。总之,误差的振荡程度与精度呈正相关。论文中的图1也表明,降低振荡程度有利于精度。

3.2、混合重建粒度

第3.1节中分析的振荡问题表明,由于模块容量的差异导致的信息丢失最终会影响PTQ的性能。由于PTQ中没有量化训练过程,即使增加后续模块的模型容量,也无法恢复这种信息损失。因此,通过联合优化具有大容量差异的模块来平滑损失振荡,从而降低最终重建损失。

从定理1和推论1可以清楚地看出,后面模块的小容量将加剧量化误差的累积效应,从而急剧增加重建损失。相反,后面模块的大容量将减少损失,并增加后面模块中信息丢失的概率。因此,希望两个相邻模块的容量尽可能接近。基于容量度量(CM)为包含L个模块的模型构造容量差优化问题,如下所示:

picture.image

其中是一个二进制掩码向量。当=时,这意味着对第个和第个模块执行联合优化。是一个所有元素都为1的向量。是控制联合优化模块数量的超参数。λ控制正则化项和容量差平方优化目标的重要性比。

计算所有L−1种相邻模块的容量差的平方进行排名,并选择前个相邻模块进行联合优化。在无数据和依赖数据的情况下,分别使用ModCap和重建损失作为容量指标。

picture.image

具体如图2所示。根据ModCap度量获得的混合重建粒度方案在计算上是有效的,因为它不涉及重建。然而,一旦组合了一对相邻的模块,这个组合的模块就无法比较ModCap进行进一步的组合,因为它与相邻的模块在拓扑上不同构。因此,该优化方案只能获得混合重建粒度的局部最优解。

另一方面,根据推论1,ModCap差异与重建损失的差异呈正相关,可以将重建损失本身视为容量度量。该方案可以得到全局最优解,但需要进行PTQ重建才能获得重建损失,效率相对较低。

校准数据的批量大小

PTQ需要数据集的一小部分来进行量化参数的校准和模型重建。作者注意到,方程1包含平方Frobenius范数的期望。期望值表示随机变量的平均值,取采样批次的平均值来近似重建过程中的期望值。大数定律证明了当样本大小N趋于无穷大时。例如,

picture.image

实验表明,扩大校准数据的批量可以提高PTQ的准确性。这一趋势显示出边际效用的递减。具体而言,随着批量大小的增加,PTQ精度的提高速度减慢。

4、实验

4.1、ImageNet Classification

作者在各种模型上验证了本文的算法,包括不同规模的ResNet-18、ResNet-50和MobileNetV2。如表1所示,本文的算法在与不同配置相对应的广泛模型上以很大的优势优于其他方法。

picture.image

具体而言,在ResNet-18和2/4位的MobileNetV2上实现了66.18%和57.85%的Top-1准确率,分别比SOTA高1.52%和4.93%。其次,本文的方法在低位显示出强大的优越性。例如,在MobileNetV2×0.75上,2/4位PTQ量化的精度增益显著高于4/4位(5.36%对1.61%)。振荡问题可能更为严重,因为低位会导致PTQ重建误差的大小增加。因此,在低位量化时平滑这种振荡对于PTQ优化过程至关重要。

本文的方法在不同规模上对MobileNetV2进行了相当大的改进,这意味着模型大小不会限制本文算法的性能。此外,可以注意到本文的算法对MobileNetV2更有效。通过观察,MobileNetV2中的振荡问题比ResNet网络家族的振荡问题更严重。深度可分离卷积增加了模块容量的差异,从而使损失振荡的幅度更大。因此,本文的算法通过解决MobileNetV2中的振荡问题,实现了相当大的性能改进。

4.2、消融实验

1、帕累托最优

picture.image

在不同规模的MobileNetV2上随机采样了大量混合重建粒度方案,并使用BRECQ算法使用4/4位PTQ对这些方案进行优化,以获得采样精度。在图4中绘制了这些方案的精度分布。此外,还分别在MobileNetV2上标记了MRECG和BRECQ算法在不同尺度下的准确性。从图4中,可以观察到MRECG在所有尺度上都比MobileNetV2有稳定的准确性提高。总体而言,MRECG在模型大小的限制下实现了Pareto最优状态。

2、组成部分贡献

在这里分别研究了混合重建粒度和扩展批处理大小对准确性的贡献。将通过BRECQ量化为4/4位的0.5缩放的MobileNetV2作为基线。

picture.image

如表2所示,混合重建粒度和扩展批量大小的准确度分别提高了1.08%和0.74%。同时,这两种方法的结合进一步提高了模型的性能。

3、缩小扩大**「Batch size」** 的边际效用

根据大数定律,当样本数量增加时,样本的平均值收敛于方程1中的期望值,从而产生较小的近似误差。然而,当样本大小足够大时,由于近似误差的减小而获得的精度增益可以忽略不计。换句话说,「Batch size」 的扩大呈现出边际效用递减的趋势。

在图5中对一些**「Batch size」** 进行了随机采样,并通过BRECQ在0.5标度的MobileNetV2上获得了4/4比特的PTQ精度。证明了采样精度的中位数,以防止异常值的影响。

picture.image

可以注意到,当**「Batch size」** 较小时,采样精度波动更大,这意味着较小**「Batch size」** 的近似误差会产生较大的噪声。随着**「Batch size」** 的扩大,这种情况有所缓和。此外,可以观察到中值精度的增加,然后趋于稳定,这意味着扩大**「Batch size」** 可以为PTQ带来精度增益。同时,这种收益受到边际效用递减的制约。

4、损失分布

如图6所示给出了不同算法的损失分布。从Adaround的分布可以看出,它具有最大的振荡幅度。因此,在模型的更深层次,Adaround的重建损失迅速增加。

此外,BRECQ使用块重建进行PTQ优化,这在某种程度上缓解了损失振荡问题,从而提高了性能。而混合重建粒度通过联合优化容量差异较大的相邻模块来平滑损失振荡。

picture.image

可以看出,与Adaround和BRECQ相比,MRECG的损失变化更稳定。此外,当比较不同场景下的MRECG损失时发现基于无数据场景获得的MRECG仍然具有较小的振幅损失振荡。作者认为,这种适度的振荡与ModCap MRECG只能联合优化两个相邻模块的事实有关,这只能实现局部最优。相比之下,MRECG具有最平滑的损失曲线。然而,这种全局最优是以延长获得量化模型的时间为代价的。

5、参考

[1].Solving Oscillation Problem in Post-Training Quantization Through a Theoretical Perspective.

6、推荐阅读

[picture.image

YOLO超快时代终结了 | RT-DETR用114FPS实现54.8AP,远超YOLOv8](https://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247506797&idx=1&sn=97bc1c90d466a292f09972b7f434db56&chksm=feb83bd3c9cfb2c5278b18af410298885e00c4563ae233a31a3054e2067b1fb4212cb58da959&scene=21#wechat_redirect)

[picture.image

YOLOv3-v8改进+量化+蒸馏+剪枝+TensorRT代码实践下载](https://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247506509&idx=1&sn=153b42a0df8ce3b7ecee06c272b2e85b&chksm=feb83af3c9cfb3e5c9eaabf1c0e8bad70291de59566d4638640a653e0e462acebbc08bc56b24&scene=21#wechat_redirect)

[picture.image

即插即用模块 | RFAConv助力YOLOv8再涨2个点](https://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247506477&idx=1&sn=9f28c856511980d6e3e21c70847f8da1&chksm=feb83a93c9cfb38503badeb593c3d14d6cb611700ff56f2dcaa7a5b6cf8fb8af1f2b62104fc7&scene=21#wechat_redirect)

picture.image

扫码加入👉「集智书童」交流群

(备注: 方向+学校/公司+昵称 )

picture.image

picture.image

picture.image

picture.image

picture.image

picture.image

想要了解更多:

前沿AI视觉感知全栈知识👉「分类、检测、分割、关键点、车道线检测、3D视觉(分割、检测)、多模态、目标跟踪、NerF」

行业技术方案 👉「AI安防、AI医疗、AI自动驾驶」

AI模型部署落地实战 👉「CUDA、TensorRT、NCNN、OpenVINO、MNN、ONNXRuntime以及地平线框架」

欢迎扫描上方二维码,加入「 集智书童-知识星球 」,日常分享论文、学习笔记、问题解决方案、部署方案以及全栈式答疑,期待交流!

免责声明

凡本公众号注明“来源:XXX(非集智书童)”的作品,均转载自其它媒体,版权归原作者所有,如有侵权请联系我们删除,谢谢。

点击下方“ 阅读原文 ”,

了解更多AI学习路上的 「武功秘籍」

0
0
0
0
评论
未登录
暂无评论