
【PTQ】IGQ-ViT (CVPR 2024)后训练量化Post-Training Quantization, PTQ是一种高效的模型压缩技术它仅利用少量未标记样本构成的小校准集对预训练的全精度模型进行量化而无需重新训练。针对卷积神经网络CNNs的 PTQ 方法能够产生与全精度模型相当的性能表现。然而将这些方法直接应用于视觉 TransformerViTs会导致严重的性能下降这主要源于 CNN 与 ViT 在架构上的差异。特别是ViT 中每个通道的激活值分布会随输入实例的不同而发生剧烈变化使得专为 CNN 设计的 PTQ 方法不再适用于 ViTs。为此我们针对 ViTs 提出了实例感知的组量化方法Instance-aware Group Quantization for ViTs, IGQ-ViT。具体而言我们提出针对每个输入实例动态地将激活图的通道划分为多个组使得同一组内的激活值具有相似的统计特性。此外我们将该方案扩展至对跨 token 的 Softmax 注意力进行量化。同时在位运算Bit-Operation, BOP约束下我们调整每一层的组数以最小化量化模型与全精度模型预测结果之间的差异。我们在图像分类、目标检测和实例分割等任务上基于多种 Transformer 架构进行了广泛的实验验证了所提方法的有效性。问题: ViT 中每个通道在不同输入实例上的激活分布差异极大层-wise 或通道-wise 量化均无法兼顾。核心创新:模块方法作用Instance-Aware Grouping对每个输入实例动态将激活通道分组确保组内通道具有相似统计特性EM-like 量化边界优化定义距离度量将通道分配到最合适的量化器组优化每组量化精度高效组数分配在 BOPbit-operation约束下最小化预测偏差动态分配每层的组数量结果: 4/4-bit 量化下ViT-S 达到 73.61%RepQ-ViT 仅为 65.05%6/6-bit 同样超越 SOTA。意义: 提出每实例分组的新范式在极低比特下保持竞争力。introduce针对 Transformer 的几种后训练量化PTQ方法 [9, 26, 40] 采用逐层量化技术即为所有激活值应用单一的量化器以提升效率。然而由于不同通道的激活值存在显著的尺度差异这些方法并不直接适用于对极低比特宽度例如 4-bit模型进行量化。采用逐通道量化器即对每个通道应用不同的量化器可能是一种潜在的解决方案但会因矩阵乘法中逐通道输出的浮点求和而带来额外的计算开销。组量化技术[7, 32] 可作为一种替代方案来解决这一问题该方法将连续通道均匀划分为多个组并为每个组应用单一的量化器如图 1a 所示。然而我们发现激活值的逐通道分布在不同的样本间存在较大差异这使得传统方法不适用于视觉 TransformerViTs。本文提出了一种针对视觉TransformerViT的实例感知组量化方法IGQ-ViT以有效且高效地解决不同输入实例间通道分布差异的问题图1b。具体而言我们将激活图的通道动态划分为多个组使得每组内的激活值具有相似的统计特性并在组内使用相同的量化参数对激活值进行量化。我们还提出将这种实例感知的分组技术应用于softmax注意力机制因为注意力值的分布会因token的不同而产生显著变化。此外我们提出了一种简单而有效的方法用于在位操作BOP约束下优化各层的组数。3. Method3.1. Uniform quantizer量化输出4. IGQ-ViT遵循文献[26]的工作我们对除位置嵌入之外的所有网络权重进行量化。同时对多层感知机MLP模块中全连接FC层的输入激活值以及多头自注意力MSA模块中的激活值包括查询、键、值以及softmax注意力进行量化。在视觉TransformerViT中我们对所有权重和激活值均采用均匀量化器。4.1 IGQ for linear operations跨通道的激活值分布。大多数量化框架 [2, 19, 26, 27] 针对激活值采用逐层量化器为所有通道应用单一的量化参数以实现高效的推理。然而我们观察到全连接FC层的输入激活值在不同通道间存在显著的尺度差异见图 2(a)。类似结论亦见于文献 [21, 23]。逐层量化器会显著降低量化性能因为它们无法处理不同通道间的尺度变化。虽然为各个通道采用独立的量化器可能是克服尺度变化问题的有效策略但这需要对每个通道的浮点输出进行求和计算开销较大。我们还发现这些激活值在每个通道上的取值范围在不同输入样本间存在巨大差异图2(b, c)这是因为与最先进的卷积神经网络如ResNet [13]、MobileNetV2 [31]不同视觉TransformerViTs没有前置的批归一化BatchNorm层 [15]。传统方法例如 [4, 7, 32, 36]为每个输入样本使用固定的量化区间即量化器的下界至上界因此无法适应不同样本间如此多样的分布。跨通道的实例感知分组。我们提出了一种用于线性运算的实例感知分组量化框架该框架在保持计算效率的同时缓解了尺度变化问题。我们根据统计特性将激活图的分量划分为 G1 个组使得每个组内的激活值使用相同的量化参数进行量化。我们将激活的分量分配到适当的组中并优化第 i 个组的尺度参数 si 和零点 zi。具体而言给定浮点激活值 X ∈ RN×C 以及一组候选量化器 {Qi}G1i1其中 N 和 C 分别表示 token 数量和通道数量我们将激活 X 的第 c 个分量记为 Xc与量化器 Qi 之间的距离定义为d(Xc,Qi)(min(Xc)−ui)2(max(Xc)−li)2(4) d(Xc, Qi) (min(Xc) − ui)2 (max(Xc) − li)2 (4)d(Xc,Qi)(min(Xc)−ui)2(max(Xc)−li)2(4)其中 ui 和 li 分别是量化器 Qi 的上界和下界。然后我们将激活 X 的每个分量分配给具有最小距离的候选量化器如下所示π(c)argminid(Xc,Qi)(5) π(c) arg mini d(Xc, Qi) (5)π(c)argminid(Xc,Qi)(5)其中 π© 表示分配给第 c 个分量的组索引。接着通过最小化距离来优化量化器的上下界如下所示u∗i,l∗iargminu,liXπ(c)id(Xc,Qi).(6) u∗i , l∗i arg minu,li X π(c)i d(Xc, Qi). (6)u∗i,l∗iargminu,liXπ(c)id(Xc,Qi).(6)我们交替求解公式 (5) 和公式 (6) 来优化 ui 和 li类似期望最大化EM算法从而保证收敛性 [38]。最后利用公式 (2) 获取每个组的量化参数即 s 和 z。在测试阶段我们固定量化参数并使用公式 (5) 将通道分配到适当的组中。计算开销。与逐层量化相比我们的方法需要执行以下操作1计算每个通道的最小值/最大值2将通道分配给距离最小的量化器以及3对各组的浮点输出求和。具体而言考虑量化激活值 Q(X) 与量化权重 Q(W) 之间的矩阵乘法其中组大小为 G1。量化激活值 Q(X) 是通过使用公式 (5) 将 X 按通道划分为若干组得到的即 X [X1, …, XG1]随后对每个 Xi 使用缩放参数 si 进行量化其中 i ∈ {1, …, G1}。Q(X) 与 Q(W) 之间的矩阵乘法可表示如下Q(X)Q(W)sw⋅(∑i1G1si⋅X^iW^i) Q(X)Q(W) sw · ( ∑_{i1}^{G1} si · X̂i Ŵi )Q(X)Q(W)sw⋅(i1∑G1si⋅X^iW^i)计算 需要对每组进行浮点矩阵求和即si⋅X^iW^isi · X̂i Ŵisi⋅X^iW^i而该求和开销可通过设置足够小的 G1 值来降低。在我们的实验中G1 的值不超过 16与通道数通常可达上千相比这一数值极小。表 1 展示了将 DeiT-B [34] 以 4 位量化时IGQ-ViT 的百亿次操作次数BOPs。可以看出与逐层量化相比当组大小为 16 时IGQ-ViT 仅引入 3.3% 的额外 BOPs。4.2 IGQ for softmax attentionsSoftmax 注意力的分布。视觉TransformerViTs通过 softmax 注意力机制捕捉词元之间的相关性。不同词元对应的注意力值分布差异显著图3。可以使用独立的量化器对各个令牌token单独处理注意力值但这需要大量量化器并且必须为每个实例调整量化参数。实例感知的跨令牌分组。我们扩展原有方法以实现对跨令牌软最大注意力softmax attentions的量化。根据注意力值的分布我们将令牌对应的软最大注意力即软最大注意力的各行划分为G2G^2G2个组。具体而言给定软最大注意力A∈RH×N×NA ∈ R^{H×N×N}A∈RH×N×N以及一组量化器Qjj1G2{Q_j}_{j1}^{G^2}Qjj1G2其中 H 表示头数我们将软最大注意力的每一行与量化器QjQ_jQj之间的距离定义为d(An,Qj)(max(An)−vj)2d(A_n, Q_j) (\max(A_n) - v_j)^2 \quadd(An,Qj)(max(An)−vj)2(8)其中AnA_nAn表示 A 的第 n 行vjv_jvj表示量化器QjQ_jQj的上界。注意到由于所有注意力值均为正值我们将下界设为 0。随后我们使用期望最大化EM算法优化vjv_jvj并通过公式2为量化器QjQ_jQj设置量化参数。4.3. 组大小分配我们观察到不同层的激活值和softmax注意力在各个通道和各个token上分别表现出不同程度的尺度变化这表明对不同层使用相同数量的组可能并非最优见图4。为解决这一问题我们在每比特运算量BOP约束下搜索使量化模型与全精度模型预测之间的差异最小化的最优组大小。然而寻找最优组大小的搜索空间随网络层数 L 呈指数增长对于大规模模型而言难以处理。为此我们提出了一种组大小分配技术能够在如此庞大的搜索空间中高效地优化每一层的组大小。具体而言我们将第 l 层的扰动度量 ψ(·) 定义为量化前后模型预测之间的KL散度Kullback-Leibler divergence如下所示ψ(g,l)DKL(yl∣∣ylg),(9) ψ(g, l) D_KL(y_l || y^g_l), (9)ψ(g,l)DKL(yl∣∣ylg),(9)其中yly_lyl和ylgy^g_lylg分别表示量化前和将第 l 层以组大小 g 量化后模型的预测结果。需要注意的是在计算yly_lyl和ylgy^g_lylg时除第 l 层外其余所有层均被量化以考虑量化对不同层的影响。对于目标 BOPNbopN_bopNbop我们将组大小分配问题形式化为一个整数线性规划ILP问题并搜索每一层的最优组大小使得模型的整体扰动最小化如下所示g∗argmingΣl1Lψ(gl,l)s.t.B(g)≤Nbop,(10) g* arg min_g Σ_{l1}^L ψ(g_l, l) s.t. B(g) ≤ N_bop, (10)g∗argmingΣl1Lψ(gl,l)s.t.B(g)≤Nbop,(10)其中ggll1Lglg {g_l}_{l1}^Lg_lggll1Lgl表示分配给第 l 层的组大小。5. 结论我们观察到ViT 中的激活值和 softmax 注意力在跨不同输入实例时分别在各个通道和各个 token 上存在显著的尺度变化。基于此我们提出了一种面向 ViT 的实例感知组量化框架 IGQ-ViT以缓解跨通道和跨 token 的尺度变化问题。具体而言我们的方法沿通道和 token 维度动态地将激活值和 softmax 注意力分割为多个组使每个组具有相似的统计特性随后为各个组分别应用独立的量化器。此外我们还提出了一种简洁而有效的方法用于为每一层自适应地分配组大小。实验表明在使用较少数量的组时IGQ-ViT 在多种基于 ViT 的架构上均优于现有最先进方法。我们还通过与层粒度量化器、通道/行粒度量化器以及现有最先进组量化器的对比进行了详细分析充分展示了 IGQ-ViT 的有效性。