【PTQ】PTQ4ViT (ICML 2022)Abstract以往的训练后量化方法在视觉Transformer上表现不佳即使在8位量化下也会导致准确率下降超过1%。我们观察到经过softmax和GELU函数作用后的激活值分布与高斯分布存在显著差异。同时我们发现诸如均方误差MSE和余弦距离等常见量化度量指标在确定最优缩放因子时并不准确。本文提出了一种双均匀量化方法以降低这些激活值上的量化误差并引入基于Hessian的度量来评估不同的缩放因子从而以较小的代价提升校准的准确性。为实现视觉Transformer的快速量化我们开发了一个高效的框架PTQ4ViT。实验表明量化后的视觉Transformer在ImageNet分类任务上能够实现近乎无损的预测精度在8位量化下准确率下降小于0.5%。问题: 传统 PTQ 方法假设激活服从高斯分布但 ViT 的 post-softmax 和 post-GELU 激活偏离高斯分布且 MSE/cosine 距离在 ViT 上是不准确的量化指标。核心创新:模块方法作用Twin Uniform Quantization (TUQ)对 post-softmax/post-GELU 的值在两个不同范围内分别均匀量化处理非高斯分布的激活值Hessian-guided Metric使用 Hessian 矩阵近似评估缩放因子的重要性替代 MSE/cosine更准确地确定最优缩放结果: 在 8-bit 量化下ViT/DeiT/Swin 的精度损失不到 0.5%接近无损。意义: 揭示了 MSE 作为 ViT 量化指标的局限性引入了基于 Hessian 的评估框架。Introduce尽管PTQ在CNN上取得了巨大成功但将其直接应用于视觉Transformer时即使采用8位量化也会导致精度下降超过1%[16]。因此我们分析了视觉Transformer量化中的问题。我们收集了视觉Transformer中激活值的分布并观察到存在一些特殊的分布特征softmax之后的值在[0, 1]范围内呈现出非常不平衡的分布其中大多数值非常接近零。尽管大值数量极少但它们代表了两个图块之间的高注意力这在注意力机制中至关重要。这就需要较大的缩放因子使量化范围覆盖大值。然而较大的缩放因子会将小值量化为零从而导致较大的量化误差。GELU函数具有非对称分布其中正值具有较大的分布范围而负值的分布范围非常小。使用均匀量化难以同时对正值和负值进行良好的量化。因此我们提出了一种双均匀量化方法分别对两个范围内的值进行量化。为了使其在硬件设备上能够高效处理我们设计了一种数据格式并约束了两个范围的缩放因子。第二个问题是用于确定最优缩放因子的度量标准在视觉 Transformer 上并不准确。在先前的后训练量化PTQ方法中存在多种度量标准包括量化前后层输出之间的均方误差MSE、余弦距离以及皮尔逊相关系数。然而我们观察到这些度量标准在评估不同缩放因子候选值时并不准确因为它们仅利用了局部信息。因此我们提出采用基于 Hessian 的度量标准来确定量化参数该标准具有更高的准确性。所提出的方法如图 1 所示。3 Method3.1 Base PTQ for Vision Transformer全连接层以及QKTQK^TQKT和PVPVPV的计算均使用矩阵乘法这是视觉 Transformer 中的主要操作。在本文中我们将该运算形式化为OABO ABOAB并重点研究其量化方法。矩阵 A 和 B 采用对称均匀量化将其量化为 k 位精度缩放因子分别为ΔAΔ_AΔA​和ΔBΔ_BΔB​。根据式 (2)我们有AqΨk(A,ΔA)A_q Ψ_k(A, Δ_A)Aq​Ψk​(A,ΔA​)和BqΨk(B,ΔB)B_q Ψ_k(B, Δ_B)Bq​Ψk​(B,ΔB​)。在基线后训练量化base PTQ中量化前后输出的距离被用作度量以确定缩放因子其形式化表达为与文献[27]相同我们采用余弦距离作为度量来计算距离。通过将区间[αAmax/2k−1,βAmax/2k−1][α A_{max} /2^{k-1}, β A_{max}/ 2^{k-1}][αAmax​/2k−1,βAmax​/2k−1]和[αBmax/2k−1,βBmax/2k−1][α B_{max} /2^{k-1}, β B_{max}/ 2^{k-1}][αBmax​/2k−1,βBmax​/2k−1]线性划分为 n 个候选值分别构建 ΔA 和 ΔB 的搜索空间。A_max 和 B_max 分别为 A 和 B 的最大绝对值α 和 β 是两个用于控制搜索范围的参数。我们在搜索空间中交替寻找最优的缩放因子 Δ*_A 和 Δ*_B。首先固定 ΔB搜索使距离(O, Ō) 最小的最优 ΔA其次固定 ΔA搜索使距离(O, Ō) 最小的最优 ΔB。ΔA 和 ΔB 经过多轮交替优化。 A 和 B 的值通过无标签校准图像收集得到。我们逐层搜索激活层或权重层的最优缩放因子。然而在我们的实验中基于原始PTQ后训练量化的结果导致量化后的视觉Transformer模型准确率下降超过1%。3.2 Twin Uniform Quantization卷积神经网络CNN中的激活值通常被认为服从高斯分布。因此大多数后训练量化PTQ方法基于这一假设来确定缩放因子。然而我们观察到softmax后值和GELU后值的分布具有特殊性如图2所示。具体而言1softmax之后的激活值分布非常不平衡其中大多数值非常接近于零仅有少数值接近于12GELU函数之后的值呈现出高度不对称的分布其中无界的正值较大而负值的分布范围非常小。如图3所示我们展示了使用不同缩放因子进行均匀量化时的量化点。我们提出了孪生均匀量化方法该方法可在包括 CPU 和 GPU 在内的现有硬件设备上高效处理。如图 4 所示孪生均匀量化具有两个量化范围 R1 和 R2分别由两个缩放因子 ∆R1 和 ∆R2 控制。k 位孪生均匀量化可形式化表述为在网络校准过程中我们搜索最优的ΔsR1Δs_{R1}ΔsR1​和ΔgR2Δg_{R2}ΔgR2​。均匀对称量化采用 k 位有符号整数数据格式。它由 1 个符号位和 k − 1 个表示量值的位组成。为了高效地存储双均匀量化值我们设计了一种新的数据格式。最高有效位为范围标志用于表示所使用的范围0 表示 R11 表示 R2。其余的 k − 1 位组成一个无符号数.由于同一范围内的数值符号相同因此去掉符号位为了在 CPU 或 GPU 上高效处理双均匀量化值我们将两个范围约束为∆R22m∆R1∆R2 2m∆R1∆R22m∆R1其中 m 为无符号整数。假设 aq 在范围 R1 中进行量化bq 在范围 R2 中进行量化则这两个值可以对齐aq×∆R1bq×∆R2(aqbq×2m)∆R1aq × ∆R1 bq × ∆R2 (aq bq × 2m)∆R1aq×∆R1bq×∆R2(aqbq×2m)∆R1。 (5)我们将 bq 左移 m 位这等效于将该值乘以 2m。移位操作在 CPU 或 GPU 上非常高效。如果没有这一约束则需要进行乘法运算以对齐缩放因子其成本远高于移位操作。3.3 Hessian Guided Metric接下来我们将分析各项指标以确定各层的缩放因子。先前研究[5,27,16]以贪心方式逐层确定输入和权重的缩放因子。它们采用多种指标如均方误差MSE和余弦距离来衡量原始输出与量化输出之间的距离。由于内部输出的变化被认为与任务损失正相关因此被用于计算该距离。我们在图 5 中绘制了不同指标的性能表现。我们观察到与基于任务损失交叉熵相比均方误差MSE、余弦距离和皮尔逊相关系数在视觉 Transformer 上均不够准确。基于这些指标得出的最优缩放因子与基于任务损失得出的最优缩放因子并不一致。例如在blocks.6.mlp.fc1:activation这一层这些指标表明缩放因子约为0.4Amax/(2k−1)0.4 Amax/(2^k−1)0.4Amax/(2k−1)时为最优而根据任务损失缩放因子约为0.75Amax/(2k−1)0.75 Amax/(2^k−1)0.75Amax/(2k−1)时才是最优的。使用这些指标会导致我们得到次优的缩放因子从而引起精度下降。量化前后最后一层输出之间的距离可以更准确地反映 PTQ训练后量化的效果。然而用它来确定内部各层的缩放因子是不切实际的因为为此需要多次运行网络以计算最后一层的输出这会消耗过多的时间。为同时实现高精度与快速量化我们提出利用基于海森矩阵的指导度量来确定缩放因子。在分类任务中任务损失定义为 L CE(ŷ, y)其中 CE 表示交叉熵ŷ 为网络的输出y 为真实标签5。当我们将权重视为变量时损失的期望值是权重的函数记为 E[L(W)]。量化会对权重引入微小的扰动即 Ẇ W ϵ。我们可以通过泰勒展开来分析量化对任务损失的影响。如图5所示由海森矩阵引导的指标所指示的最佳缩放因子更接近由任务损失交叉熵CE所指示的缩放因子。尽管与任务损失之间仍存在差距但海森矩阵引导的指标显著提升了性能。例如在 blocks.6.mlp.fc1:activation 上由海森矩阵引导的指标所确定的最佳缩放因子对任务损失的影响小于其他指标。3.4 PTQ4ViT Framework为实现快速的量化与部署我们提出了一种面向视觉TransformerViT的高效训练后量化框架PTQ4ViT。其流程如算法1所述。该框架支持双均匀量化和基于Hessian的评估度量。量化过程分为两个阶段1第一阶段旨在收集每一层在量化前的输出及其梯度。第l层的输出Ol通过对校准数据集进行前向传播计算得到其梯度∂L/∂Ol1, …, ∂L/∂Ola则通过反向传播计算得到传播。2第二阶段是逐层搜索最优缩放因子。在搜索空间中采用不同的缩放因子对第 l 层的激活值与权重值进行量化。然后计算该层的输出 ˆOl。我们搜索使公式7最小化的最优缩放因子 ∆∗。在第一阶段我们需要存储OlO_lOl​和∂L∂Ol\frac{\partial L}{\partial O_l}∂Ol​∂L​这会消耗大量的 GPU 显存。因此我们在生成这些数据后将其传输至主机内存。在第二阶段我们将OlO_lOl​和∂L∂Ol\frac{\partial L}{\partial O_l}∂Ol​∂L​从主机内存传输回 GPU 显存并在第lll层的量化完成后销毁这些数据。为了充分利用 GPU 的并行计算能力我们以批处理的方式计算不同缩放因子下的O^l\hat{O}_lO^l​及其对损失的贡献。结论在本文中我们分析了视觉Transformer在后训练量化中面临的问题。我们观察到经过softmax操作后的激活值和经过GELU操作后的激活值均具有特殊的分布特性。为解决上述问题我们提出了双均匀量化方法及基于海森矩阵的度量方法。它们在较小的开销下有效降低了量化误差并提升了预测精度。为实现视觉Transformer的高效量化我们开发了一个高效的框架PTQ4ViT。实验表明在ImageNet分类任务上我们实现了近乎无损的预测精度使得PTQ在视觉Transformer中成为可行的选择。