南开大学提出 ADFQ-ViT,解决 ViT 在低比特量化时显著准确性损失的问题 !

2024-08-08 11:18:42 浏览数 (2)

视觉 Transformer (ViTs)在各种计算机视觉任务中表现出卓越的性能,但其庞大的参数规模显著增加了内存和计算需求,阻碍了在资源受限设备上的有效推理。量化已成为缓解这些挑战的有前景的解决方案,然而现有方法在低比特位时仍遭受显著的准确度损失。 作者将这一问题归因于ViTs中后层归一化(post-LayerNorm)和后GELU激活的独特分布,这使得传统的硬件友好量化器在低比特位场景中无效。 为了解决这个问题,作者提出了一种新颖的框架,称为针对视觉 Transformer 的激活分布友好后训练量化(ADFQ-ViT)。 具体来说,作者引入了逐块异常值感知量化器(Per-Patch Outlier-aware Quantizer)来处理后层归一化激活中的不规则异常值。 该量化器将均匀量化器的粒度细化到逐块 Level ,同时在全精度下保留超过阈值的值的最小子集。为了处理后GELU激活在正负区域之间的非均匀分布,作者设计了移位对数2量化器(Shift-Log2 Quantizer),它将所有元素移至正区域,然后应用对数2量化。 此外,作者还提出了一个注意力分数增强的模块优化(Attention-score enhanced Module-wise Optimization),通过重建误差来调整每个量化器的参数,以进一步减轻量化误差。 广泛的实验表明,在4比特位时,ADFQ-ViT在图像分类、目标检测和实例分割任务上比各种 Baseline 提供了显著的改进。 特别是,当将ViT-B模型量化到4比特位时,作者在ImageNet数据集上的Top-1准确度提高了10.23%。

1 Introduction

视觉 Transformer (ViTs)[(7)] 在各种计算机视觉任务中,如图像分类、目标检测和实例分割,都取得了卓越的性能。尽管如此,与之前常见的视觉基础网络如卷积神经网络(CNNs)[(18)] 相比,ViTs 由于其大量的参数,需要显著更多的内存和计算资源。因此,在资源受限的环境下或实时推理的约束下部署ViTs仍然是一个挑战。

模型量化[(17)] 通过将模型权重和激活从全精度转换为低比特表示,有效地减轻了推理时的内存和计算需求,其中通常分为量化感知训练(QAT)[(13)] 和后训练量化。尽管QAT通常能获得更高的准确度,但它需要重新训练整个原始训练数据集上的模型,这使得它非常资源密集。相比之下,PTQ只需要一小部分 未标注 的训练数据用于校准,就能有效地量化预训练模型。

当前的ViTs量化方法主要关注PTQ;然而,现有方法在低比特(尤其是4比特)时仍然经历显著的准确度下降。作者发现低比特下的准确度下降主要归因于ViTs中激活的分布。具体来说,后层归一化(LayerNorm)的激活表现出不规则、偶发的异常值,而后高斯误差线性单元(GELU)的激活显示出正负值的非均匀分布。在量化方面,硬件友好的量化器因其实际部署效率而受到青睐。然而,这些量化器对数据分布施加了严格的限制。当数据分布未能与量化器的要求对齐时,显著的量化错误随之产生,这在低比特表示能力受限时被放大。ViTs中激活的不友好分布特性为在低比特下使用这些量化器带来了重大挑战,最终导致准确度损失。

在本文中,作者提出了一种新颖的激活分布友好型后训练量化框架,称为 ADFQ-ViT,以解决ViTs量化中的上述激活分布挑战,旨在增强低比特的可使用性。作者引入了一种针对后LayerNorm激活量身定制的逐块异常值感知量化器,通过细化量化粒度和保留原始全精度中的异常值,有效地减少了量化误差。为了解决后GELU激活中正负值非均匀分布的挑战,作者设计了创新的移位-对数2量化器,它将所有元素移至正区域,应用对数2量化器进行量化,然后再移回。此外,作者还提出了关注分数增强的模块化优化,以进一步最小化量化误差,优化每个模块量化前后的权重和激活量化器的参数,以最小化关注分数和输出误差差异。通过整合这三种组件,作者的ADFQ-ViT框架有效地减轻了由ViTs独特激活分布引起的量化误差,从而增强了4比特量化的可行性。广泛的实验结果表明,在图像分类、目标检测和实例分割任务上,作者的ADFQ-ViT在量化后比所有 Baseline 在不同ViT、DeiT和Swin Transformer上的准确度都有显著提高。特别是,在ImageNet数据集的4比特量化设置下,与 Baseline 相比,作者的方法在七个不同模型上实现了最大10.23%的准确度提升和平均3.82%的提升,突显了ADFQ-ViT在低比特场景下的有效性。此外,在6比特量化下,ADFQ-ViT量化后的准确度与原始全精度模型的准确度接近。

作者的主要贡献总结如下:

  • 作者设计了逐块异常值感知量化器和移位-对数2量化器,有效地解决了后LayerNorm激活中的异常值和不规则分布的挑战,以及后GELU激活中正负值非均匀分布的问题。
  • 作者引入了关注分数增强的模块化优化,优化权重和激活量化器的参数以进一步减少量化前后的误差。
  • 作者提出了一种新颖的激活分布友好型后训练量化框架ADFQ-ViT,通过有效地结合上述三种方法,实现了低比特下ViTs的高效量化。
  • 实验结果表明,ADFQ-ViT有效地量化了各种ViT变体,与量化后所有 Baseline 相比,在多个计算机视觉任务上取得了提高的准确度。特别是在4比特量化下,图像分类任务上的准确度提升显著。

2 Related work

Vision Transformers

ViTs因其在计算机视觉任务中的卓越性能而被广泛应用。最初,ViT 利用Transformer [36]模型完全取代了在视觉领域中常用的CNN [9; 34],通过在大规模数据集上的预训练取得了优异的性能。DeiT [35] 通过引入教师-学生蒸馏[11]训练策略,解决了早期ViTs对大量数据的需求,仅通过在ImageNet [18] 数据集上的训练就能实现相似的性能。Swin Transformer 通过其移位窗口机制解决了ViT对高分辨率图像的高计算需求。

除了在主干网络方面的进步,DETR [3] 利用ViT进行目标检测,创建了一个端到端的检测网络。Segment Anything Model (SAM) [15] 通过在超大规模SA-1B数据集上的预训练,为图像分割建立了一个基础模型。CLIP [33] 通过结合视觉和语言Transformer,并通过对比学习进行训练,实现了一个有效的多模态模型。

尽管ViTs在计算机视觉领域取得了巨大成功,但其参数大小导致了巨大的计算和内存需求,这使得在实时和资源受限的场景中应用仍然具有挑战性[31]。

Quantization for Vision Transformers

作者在这篇论文中主要关注PTQ ,因为它比QAT更具普遍适用性,并且在当前的ViTs量化中占据主导地位。PTQforViT [27]利用排序损失来保持量化前后的自注意力顺序。此外,它采用混合精度方法,最终在8位以下实现了精确量化。FQ-ViT [23]采用二进制因子来解决预LayerNorm中的通道间变化,并使用Log-Int-Softmax处理注意力图中的极端非均匀分布问题,从而实现了完全8位量化的ViTs。PTQ4ViT [38]引入了双均匀量化用于后Softmax和后GELU激活,将激活分为两个不同的量化范围,每个范围由一个独特的缩放因子控制,从而实现了近乎无损的8位量化。APQ-ViT [6]结合了Bottom-elimination 块状校准和 Matthew 效应保持量化来减少量化误差,显著提高了6位量化的性能。NoisyQuant [25]通过添加固定的均匀噪声来解决长尾激活分布的量化问题,进一步提高了6位量化的准确性。RepQ-ViT [21]通过缩放再参数化分离量化与部署过程,提高了4位量化的准确性。在部署过程中,它将每个通道的量化器和log量化器转换为每张量和log2量化器。然而,当前的ViTs量化方法在4位时仍然面临显著的准确性损失。例如,RepQ-ViT在某些模型上的精度损失超过15%。追求4位PTQ对于ViTs是一个具有挑战性但极具价值的目标,因为更低位的量化为部署场景带来了实质性的性能提升。

3 Methodology

在本节中,作者全面介绍了作者的ADFG-ViT框架,其概览如图1所示。ADFG-ViT包括三个关键组成部分:逐块异常感知量化器、移位对数2量化器和注意力分数增强的模块化优化。具体来说,第3.2节介绍了逐块异常感知量化器,它解决了在ViT量化中后层归一化激活的分布不规则的问题。在第3.3节中,作者描述了移位对数2量化器,它有效地解决了后GELU激活中负值和正值非均匀分布的问题。第3.4节提出的注意力分数增强的模块化优化旨在通过优化量化器的参数来减少量化误差。最后,作者在第3.5节详细介绍了ADFG-ViT的完整量化过程。

Preliminaries

ViT的架构。 ViT [7]的网络架构主要由个级联的 Transformer 块[36]组成。给定一个输入图像,其中表示图像的分辨率,表示通道数,在将送入 Transformer 块之前,需要将图像预处理成序列形式。具体方法是将分割成个 Patch ,其中表示每个 Patch 的分辨率。这些 Patch 然后被线性投影到维向量中,并添加位置嵌入以获得最终的嵌入 Patch 。最终,这些嵌入 Patch 构成了后续 Transformer 块的输入(为简单起见,在此描述中省略了类嵌入)。

在每个 Transformer 块内部,存在一个多头注意力(MHA)模块和一个多层感知器(MLP)模块。对于第个 Transformer 块,MHA模块包含了个注意力头。每个头的计算过程如下:

其中和表示QKV线性层的权重和偏置,,表示头的注意力分数。MHA模块的输出表示为:

其中和表示MHA模块中输出投影层的权重和偏置。

在MLP模块中,存在两个线性层,即FC1和FC2。具体的计算过程如下:

其中 和 分别代表FC1线性层的权重和偏置,而 和 表示FC2线性层的权重和偏置。第 个 Transformer 块的最终输出由以下公式给出:

PTQ的量化器。 PTQ [30] 主要涉及使用量化器 将原始浮点值 转换为 位固定点整数 :

不同的量化器 采用不同的映射策略,对准确性和性能产生显著影响。因此,根据数据分布和实践应用场景选择合适的 至关重要。考虑到ViTs的激活分布特征和实际部署性能,先前的ViTs量化方法通常采用均匀量化器和log2量化器。

均匀量化器 特别适合于数据分布相对均匀且受益于高效硬件实现的场景。计算过程如下:

(10)

其中 是缩放因子, 是零点,而 表示四舍五入到最近的整数。在PTQ中, 和 通常是通过从 未标注 的训练数据的小子集进行校准来确定的。相应的反量化过程如下:

log2量化器 将量化过程重新定义为指数格式,特别适合于长尾数据分布的场景。此外,由于它的位移操作能力,它的性能异常出色。假设 中只有正值,计算过程如下:

相应的反量化过程如下:

遵循先前关于ViTs量化的研究[21],作者专注于均匀量化和对数2量化,考虑到它们在真实部署场景中的优越性能。

Per-Patch Outlier-aware Quantizer

对于ViT中的每个MHA和MLP模块,输入通过一个LayerNorm层[1]进行样本内标准化,得到结果激活,称为后LayerNorm激活。然而,作者观察到的分布明显不规则,如图2所示,只有一小部分值的幅度异常大。虽然早期的工作[21]已经确定了在ViT特定层中,如图2所示的12个块的第二个后LayerNorm激活中的异常值存在“通道间变异”分布模式,但作者的发现揭示,异常值的分布在多个层中实际上是规则的,如图2中额外三个后LayerNorm激活所示。

中不规则分布的一小部分异常值直接影响量化器中的量化参数,包括比例因子和零点。以为例,异常值的存在扩大了数据统计范围,导致更大的比例因子。因此,这会在量化过程中引发加高的四舍五入误差。相反,采用特定方法截断统计范围可能会在量化过程中引发更大的截断误差。在低比特具有受限表示能力的情况下,量化误差进一步加剧。因此,有效降低来自中异常值的量化误差对于缓解低比特下的准确度下降至关重要。

在ViT中,后LayerNorm激活主要作为QKV和FC1线性层的输入,这些层主要执行通用矩阵乘法(GEMM),计算为。这一独特属性使得可以使用按张量或按块粒度对其输入进行量化,因为量化参数可以在矩阵计算时预先提取,使得剩余操作可以使用整数算术进行。基于前面提到的规则分布异常现象,作者设计了针对的按块粒度均匀量化器。与先前ViT量化方法中常用的按张量粒度不同,作者将量化参数的统计粒度从整个缩小到每个块,并最终获得个不同的和:

通过将量化粒度细化到 Patch 维度,没有异常值的 Patch 可以避免由异常值引起的量化误差,从而有效减轻准确度损失。除了每张量(per-tensor)和每 Patch (per-patch)之外,另一种常见的量化粒度是每通道(per-channel),其差异如图3所示。尽管每通道量化同样可以显著减轻异常值的影响,但前面提到的QKV和FC1线性层中的的GEMM计算形式使得在量化后层归一化激活时难以提取量化参数,导致部署挑战[30]。尽管每 Patch 量化通过将异常值的影响限制在单个 Patch 内来减轻其影响,但 Patch 内的异常值仍然可能引入量化误差。然而,如图4所示,作者观察到中异常值的比例极小,大多数块的比例低于,最大仅为。受此发现启发,作者提出将分割成两个矩阵,一个包含超过预定义阈值的异常值,记为,另一个包含非异常值,表示为。作者将量化限制在上,同时保留全精度的异常值矩阵。这种策略产生的额外计算和存储开销可以忽略不计,然而它被证明在减少由异常值引起的量化误差方面非常有效。

结合每 Patch 粒度量化和保持全精度的异常值矩阵,作者提出了如图1所示的每 Patch 异常感知量化器(Per-Patch Outlier-aware Quantizer)。具体来说,作者首先按照以下方式获得和:

随后,中的每个 Patch 单独进行量化和相应的去量化:

量化后的矩阵与权重矩阵相乘(GEMM)得到,而稀疏矩阵也与相乘(稀疏矩阵乘法,SpMM)得到。最后,将这两个结果相加得到最终输出。

Shift-Log2量化器

MLP模块内部使用了GELU[10]激活函数,定义如下:

其中是标准正态分布的累积分布函数(CDF),其输出称为后GELU激活。图5说明后GELU激活的值分布在负域显著集中,而正域则呈现更广泛的值范围。这一特性使得使用统一量化器进行有效量化变得具有挑战性。较大的缩放因子增加了GELU激活负区域的舍入误差,而较小的则在正域导致显著的截断误差,如图6所示。PTQ4ViT[38]通过实现双统一量化来减轻此问题,为正负值分配不同的尺度因子,并通过优化最小化量化误差。然而,这种方法涉及到相当大的搜索优化和部署开销,使得在实际场景中难以应用。

尽管的负区域和正区域分布不均匀,但将值从小到大排列显示出数据分布的长尾特征。这一特征与log2量化器很好地吻合,后者策略性地为更密集的小值区域分配更多的量化箱,从而最小化舍入误差。此外,log2量化器在解析器中巧妙地减轻了大值区域的截断误差,同时确保了整个数据范围的全面覆盖。然而,传统的log2量化器为正负值分配相等数量的量化箱。鉴于正值分布的更广泛范围,将更多的量化箱分配给正值更为有效。因此,作者将所有元素变为正值,并在量化过程中随后使用仅正值的log2量化器,如第3.1节所述。

基于这些见解并最大化量化箱的利用,作者引入了Shift-Log2量化器。作者首先将的所有元素进行移位,以确保它们大于0,变为:

其中是一个非常小的正常数。移位后的值然后使用log2量化器进行量化:

然后在反量化过程中将其移回原始值:

通过使用这种量化器,作者有效地保持了激活的内在特性,显著减少了量化误差,并避免了过度的计算开销。与均匀量化器相比,Shift-Log2量化器更好地保持了原始值的分布,如图6所示。### 注意力得分增强的模块优化

为了进一步减轻在低比特量化下ViTs的准确度损失,作者采用了一种误差重构方法来优化权重和激活量化的参数。与之前的工作[20]不同,作者将重构粒度从块级转变为模块级。在此背景下,“块级”指的是针对整个 Transformer 块的调优,而“模块级”分别针对MHA和MLP模块进行优化。通过细粒度调优,作者可以更好地最小化量化误差。

对于权重量化器,作者采用AdaRound[29]中的方法引入一个可优化的矩阵来决定是向上还是向下舍入,具体的量化过程如下:

是向下舍入,作者定义修正的sigmoid[28]为:

其中是sigmoid函数;和分别固定为1.1和-0.1。作者的主要优化是权重量化器中的。关于激活量化器,作者主要优化缩放因子,作者将其定义为以区分。

具体来说,在量化MLP模块时,作者的优化目标定义为:

其中:

Quantization Procedure

作者的ADFQ-ViT框架的量化过程本质上分为两个关键阶段。首先,该过程开始时,将原始模型中的特定模块替换为相应的量化模块。这些模块配备了权重和激活量化器所需的功能,包括初始化适当的参数,如图1中间部分所示。随后,过程包括选择一定量的 未标注 数据,并通过特定的迭代步骤来优化量化器的参数,如图1右侧部分所示。完成这些阶段后,最终的量化模型就可以准备部署了。

4 Experiments

Experimental Setup

任务、模型和数据集。 作者在多种视觉任务上评估了ADTFQ-ViT,包括图像分类、目标检测和实例分割。对于图像分类,作者选择了三种不同的模型:ViT [7]、DeiT [35] 和 Swin Transformer [26],并在 ImageNet [18] 数据集上评估了它们的Top-1准确率。对于目标检测和实例分割,作者使用了 Mask R-CNN [8] 和 Cascade Mask R-CNN [2],以 Swin Transformer 作为基础模型,并在 COCO [22] 数据集上使用 和 指标评估了它们的性能。此外,作者还评估了 SAM 在 COCO 数据集上的零样本实例分割性能,使用 作为评估指标。

实现细节。 由于作者的ADTFQ-ViT框架属于PTQ类别,因此在量化之前获取相应的预训练模型至关重要。对于图像分类任务,所有预训练模型均来自Timm库2。对于目标检测和实例分割,预训练模型来自基于mm-detection库3的官方Swin Transformer实现。SAM来自Prompt-Segment-Anything库4。关于量化过程中校准样本的选择,作者从ImageNet训练集中选择了1,024个样本作为图像分类任务的校准集。对于目标检测和实例分割(包括SAM),作者从COCO数据集中选择了1个样本作为校准集。与之前的工作[38]一致,作者对所有矩阵乘法层的权重和输入激活进行量化,但不包括LayerNorm和Softmax层。所有权重量化器都是按通道的均匀量化器。对于后LayerNorm激活,应用了Per-Patch Outlier-aware量化器,而后GELU激活使用Shift-Log2量化器。后Softmax激活使用log2量化器,其他所有激活都使用按张量的均匀量化器进行量化。在关注增强的模块级优化过程中,权重量化器参数的学习率设置为3e-3,激活量化器参数的学习率设置为4e-5。这两个参数都使用Adam优化器[14]进行优化,整个过程运行3000次迭代。实验实现是在NVIDIA 3090 GPU上使用PyTorch[32]进行的。

与 Baseline 方法的比较

为了证明作者的ADTFQ-ViT框架的有效性,作者在三个计算机视觉任务上选择了六种多样且具代表性的量化方法作为 Baseline 进行比较。这些 Baseline 包括三种CNN量化方法:BRECQ、QDrop和PD-Quant,以及三种ViT量化方法:APQ-ViT、PTQ4ViT和RepQ-ViT。

图像分类。 首先,作者在ImageNet数据集上评估了作者的方法及六种 Baseline 方法,比较了在4位和6位量化后,具有不同架构和参数规模(将Vision Transformer表示为ViT,DeiT,以及将Swin Transformer简称为Swin;T代表Tiny参数规模,S代表Small,B代表Base)的七个不同模型的Top-1分类准确度。实验结果如表1所示。在4位量化下,与所有模型对应的最佳 Baseline 方法相比,作者的方法在准确度上有显著提升,平均增加了3.82%。值得注意的是,先前的方法在量化ViT-S和ViT-B时准确度下降严重,而作者的方法与RepQ-ViT相比,分别提高了7.09%和10.23%的准确度。此外,在6位量化下,作者的方法在所有 Baseline 上都实现了持续的准确度提升。与全精度模型相比,作者的方法平均准确度仅下降0.67%,非常接近无损性能。同时,作者观察到在DeiT和Swin Transformer上,卷积神经网络(CNN)量化方法实现了与之前ViT量化相当的性能,这是因为所有这些CNN量化方法都使用重建优化来调整量化参数,说明了优化量化参数的有效性。然而,这些CNN量化方法在ViT模型上的性能与ViT量化方法相比仍有不足,主要是因为它们是为CNN设计的,而ViT与DeiT和Swin Transformer相比,表现出更独特的分布特性。作者的方法考虑了ViT的分布特性,并结合了重建优化的优点,实现了最优性能。

目标检测和实例分割。 接下来,作者在COCO数据集上使用Mask R-CNN和Cascade Mask R-CNN评估了作者的方法以及三种ViT量化方法在目标检测和实例分割任务上的表现。作者选择了两种不同的模型Swin-T和Swin-S作为评估的主干网络。4位和6位量化的实验结果如表2所示。与图像分类相比,目标检测和实例分割任务更具挑战性,这导致大多数方法在量化到4位时准确度显著下降。尽管面临这些挑战,但作者的方法在大多数模型中,在4位量化下与 Baseline 相比,一致地实现了准确度的提升。值得注意的是,作者的方法在采用Swin-T或Swin-S作为主干网络的Cascade Mask R-CNN上超越了 Baseline ,分别在和上实现了1.3和1.1的提升,特别是对于Swin-T主干网络。虽然APQ-ViT在采用Swin-S作为主干网络的Mask R-CNN上实现了0.8的提升,但与作者的方法相比,这个方法缺乏稳定性,在应用不同主干网络的其它模型中经历了严重的准确度损失。在6位量化下,作者的方法在所有模型上与 Baseline 相比都实现了最佳性能。此外,与原始的全精度模型相比,作者的方法在上平均准确度仅下降0.3,在上下降0.17。特别是在准确度最高的采用Swin-S模型的Cascade Mask R-CNN上,作者的方法在和上的下降仅为0.1。这使得在现实环境中部署量化模型成为可能,提高了在实时和资源受限场景中的效率和可行性。

分割任何模型(SAM) 最后,为了验证作者方法的广泛适用性,作者在SAM上进行了实验,SAM因其卓越的零样本实例分割性能而受到了广泛关注。SAM模型由三个组件组成:图像编码器、 Mask 解码器和提示解码器。作者将重点量化SAM的图像编码器,而其他组件保持全精度。具体来说,作者在表3中评估了在4位和6位量化下,使用ViT-B和ViT-L作为图像编码器的SAM在COCO数据集上的。在4位量化下,与RepQ-ViT相比,作者的方法将带有ViT-B的SAM的提高了1.0,将带有ViT-L的SAM提高了4.0。在6位量化下,作者的方法分别展示了0.2和0.4的提升,与全精度模型相比,仅下降了0.3和0.1。此外,如图7所示,作者可视化了经过4位和6位量化后SAM的分割结果。即使在4位量化下,分割质量也与原始的全精度模型保持一致。这些结果表明,作者的方法在SAM上保持了卓越的性能,并突显了其适用于以ViT为基础结构的复杂模型的潜力。

Ablation Study

各组件的效果。作者的ADFQ-ViT包含三个核心组件:每块异常感知量化器、移位对数2量化器和注意力分数增强的模块优化。为了展示每个组件的有效性,作者在图像分类任务中选择DeiT-S模型进行消融实验,以分析每个组件的影响。表4的结果突显了每个组件的贡献。当所有组件被禁用时,准确度大幅下降至24.79%,这反映了ViTs低比特量化的挑战。启用单一组件后,注意力分数增强的模块优化显示出最显著的改进,达到了61.17%的准确度。这强调了调整量化器参数的有效性,但仍然存在相当大的损失,这表明需要针对ViTs的独特分布特性进行优化。当启用两个组件时,结合每块异常感知量化器和移位对数2量化器,准确度达到了70.37%。这表明,重点关注解决后LayerNorm和后GELU激活的独特分布问题,可以有效减少在低比特量化下ViTs的准确度损失。最终,当所有三个组件都被启用时,准确度达到了75.06%,证实了ADFQ-ViT在考虑ViTs的分布特性设计合适量化器的同时调整量化器参数的有效性。

异常感知的效果。作者对ADFQ-ViT中的每块异常感知量化器进行了深入分析,主要关注在原始全精度下保留异常值的效果。首先,作者选择了ViT-B和DeiT-S,并评估了在图像分类任务中,启用和未启用异常感知的4比特量化准确性。结果如表5所示。根据结果,启用异常感知量化可以提高ViT-B的准确度1.96%,DeiT-S的准确度提高1.54%,这证明了其有效性。由于"异常感知"机制受到预定义阈值的影响,作者分析了不同的值对4比特量化下DeiT-S图像分类的异常值比例和准确度的影响。这项分析适用于QKV线性层和FC1线性层,如图8所示。当调整一层中的时,另一层的保持恒定,QKV线性层为5,FC1线性层为10。随着的增加,异常值的比例持续下降;特别是当设置为5时,异常比例已经低于0.05%。同样,当设置为10时,异常比例接近0.1%。较小的异常比例提高了效率。然而,由于量化范围的扩大,随着和的增加,准确度会下降。因此,在考虑了权衡之后,为了保持最优的量化准确度,作者将设置为5,设置为10。

Efficiency Analysis

作者的ADFQ-ViT框架包括量化参数校准和重建优化过程,这些过程在实际推理之前的量化过程中引入了额外的开销。为了评估ADFQ-ViT的效率,作者比较了现有量化方法在4位量化下DeiT-S的量化运行时间,如图9所示。ADFQ-ViT的量化运行时间大于RepQ-ViT,主要是因为RepQ-ViT不涉及量化参数的重建过程,而ADFQ-ViT应用了注意力分数增强的模块化优化来进一步更新分配的量化参数,以实现最小的量化误差。相比之下,ADFQ-ViT与其他几种也执行量化参数优化的方法的量化运行时间要小得多。这种效率主要是由于作者将粒度转移到模块化,并将关键属性——注意力分数作为优化损失包含进来。总的来说,ADFQ-ViT在可接受的量化运行时间内,在量化后的DeiT-S模型中实现了最高的准确度,凸显了在实际场景中的有效性和效率。

5 Conclusion

在本文中,作者提出了ADFG-ViT来解决ViT在低比特量化时显著准确性损失的问题。

更具体地说,后层归一化激活中的异常值的不规则分布以及后GELU激活的正负区域的不均匀分布导致了传统量化器中的量化误差。

作者应用了逐块异常值感知量化器、移位对数2量化器以及注意力评分增强的模块级优化来解决激活分布的挑战,并且大量的实验结果证明了这一量化框架的有效性。

在未来,作者旨在进一步探索ViT在更具体任务下的量化性能,例如实时目标检测或大型多模态模型。

参考

[1].ADFQ-ViT: Activation-Distribution-Friendly Post-Training Quantization for Vision Transformers.

0 人点赞