趋近智
理解基础训练后量化 (PTQ) 的局限性是必要的。像将权重四舍五入到最近整数值这样的简单方法,通常无法保持模型精度,尤其是在 INT4 等极低位宽下。大型语言模型对此特别敏感,因为在一个层中的小错误可能会在通过后续层传播时累积放大。
GPTQ (广义训练后量化) 的发展旨在解决这种精度损失问题。GPTQ 并非独立量化每个权重,而是同时对整个层的权重矩阵进行优化量化过程,以尽量减少该层输出中引入的误差。这是一种更精密的方案,比基础 PTQ 方法能获得显著更好的精度,通常可媲美原始 FP32 模型的性能,且无需重新训练。
GPTQ 每次操作一个层。考虑 LLM 中的一个线性层,其运算由矩阵乘法定义:
Y=WX这里,W 是原始全精度权重矩阵,X 是输入激活(来自前一层或初始嵌入),而 Y 是输出激活。当我们把权重量化到较低精度,例如 INT4 时,得到量化权重矩阵 WQ。PTQ 的目标是找到一个 WQ,使得输出 WQX 尽可能接近原始输出 WX。
该层中由量化引入的误差可以通过原始输出与量化输出之间的均方误差 (MSE) 来衡量:
误差=∣∣WX−WQX∣∣F2其中 ∣∣⋅∣∣F2 表示平方 Frobenius 范数(所有元素平方差之和)。基础 PTQ 方法,例如四舍五入 (RTN),独立确定 WQ 中的每个元素,通常仅仅通过对 W 中对应元素进行四舍五入。这种贪婪方法在最小化整体输出误差时,没有考虑输入数据 X 的结构或权重之间的互相影响。
GPTQ 采用一种更细致的迭代方法。它按序列量化层内的权重,通常是逐列(有时是逐行,或以小块形式)。核心思想是误差补偿:在量化特定权重(或一组权重)后,GPTQ 会计算此量化步骤引入的误差,并立即更新层中剩余尚未量化的权重,以抵消该误差。
设想逐一量化权重矩阵 W 的列。
这种序列过程确保早期做出的量化决定在后期得到补偿,从而使该层的整体重建误差远低于独立四舍五入方法。
剩余权重究竟如何更新?简单地按比例加回误差可能并非最佳方案。GPTQ 使用关于误差函数的近似二阶信息,具体来说是运用 Hessian 矩阵。
The objective is to minimize the squared error ∣∣(W−WQ)X∣∣2. The Hessian of this objective function with respect to the weights W provides information about the curvature of the error surface. For a linear layer, this Hessian H is directly related to the input activations X:
H=2XXT该矩阵 XXT 代表输入特征的协方差。从直观上说,它根据校准数据,告诉我们输入空间中哪些方向最为重要或变化最大。
GPTQ 使用此 Hessian 矩阵的逆矩阵 H−1 来指导误差补偿步骤。当量化权重引入误差 E 时,应用于剩余权重的更新与 H−1E 成比例。使用逆 Hessian 有助于根据输入数据统计信息,优先调整最敏感的方向。它允许进行更具针对性的补偿,将调整集中在对减少最终输出误差影响最大的位置。
计算和求逆完整的 Hessian 矩阵可能计算成本高昂,特别是对于大型层。GPTQ 采用高效的数值方法和近似法(通常按块操作或使用迭代求解器,如 Cholesky 分解)来处理此问题,使过程变得可行。此方案受到先前工作(如 Optimal Brain Surgeon 和 Optimal Brain Quantizer (OBQ))的启发,这些工作也使用 Hessian 信息进行模型剪枝和量化。
以下是针对单个层权重矩阵 W 的 GPTQ 过程概述:
单个层内 GPTQ 算法的简化流程。它迭代地量化权重,计算误差,并使用 Hessian 信息通过更新剩余权重来进行补偿。
与基础 PTQ 类似,GPTQ 需要一小部分校准数据集(输入激活 X 的样本)来计算 Hessian H=2XXT。此数据集的质量和代表性会影响最终量化精度。通常,只需几百到一千个样本。
GPTQ 通常以分组粒度应用。权重不是单独量化或逐列量化,而是分块处理(例如,每组 128 个)。这降低了 Hessian 计算和更新的计算开销,同时仍提供比逐张量或逐通道量化显著更好的结果。误差补偿机制应用于这些分组。
通过考虑层的重建误差并运用输入统计信息(通过 Hessian)来指导误差补偿,GPTQ 比简单方法更有效地最小化精度损失,使其成为在 LLM 中实现准确低位权重量化的常见方案。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造