简介
扩展大型语言模型 (LLM) 的竞赛撞上了一堵物理高墙: GPU 显存。随着模型参数量如今已成常态地超过 500 亿,针对特定任务微调这些模型所需的计算资源是天文数字般的。例如,一个 65B 参数的模型,别说是训练了,就算是加载到标准消费级 GPU 上也是极其困难的。
为了解决这个问题,社区转向了 参数高效微调 (PEFT) 和 量化 技术。像 QLoRA (量化低秩适配) 这样的方法已成为行业标准,它允许我们冻结模型,将其压缩到 4-bit,并训练一小组适配器参数。这是一个巨大的飞跃。
然而,一个新的问题出现了。虽然 4-bit 量化效果尚可,但将模型压缩到 2-bit 或 3-bit 通常会导致性能的完全崩溃。模型会遭受“灾难性遗忘”——它丢失了在预训练期间学到的知识。
为什么会发生这种情况?目前最先进的方法在压缩过程中过度扭曲了模型的内部表示。它们破坏了模型的“起始点”。
在这篇文章中,我们将深入探讨 ApiQ (保留激活值的量化 LLM 初始化) , 这是由阿姆斯特丹大学和 eBay 的研究人员提出的一种新颖框架。ApiQ 引入了一种数学上严谨的方法来同时初始化量化参数和适配器参数。结果如何?一个 2-bit 模型实际上可以被有效地微调,并且大幅超越了现有的基线模型。
背景: LoRA、QLoRA 以及“起始点”
要理解 ApiQ,我们首先需要了解它所改进的方法的机制。
标准方法: LoRA
低秩适配 (LoRA) 冻结了庞大的预训练权重矩阵 \(W\),并在其旁边注入可训练的低秩矩阵 \(A\) 和 \(B\)。新的前向传播看起来像这样:
\[W' = W + AB^\top\]通常,\(B\) 初始化为零,这意味着在训练的第零步,\(W' = W\)。这至关重要: 训练正是从预训练模型结束的地方开始的。
QLoRA 的问题
QLoRA 更进一步,将 \(W\) 量化为低精度格式 (如 4-bit 整数) ,记为 \(Q\)。方程变为:
\[W' = Q + AB^\top\]问题就在这里。量化是有损的。\(Q\) 不等于 \(W\)。因此,在训练开始时 (即使 \(B=0\)) ,\(W' \approx Q \neq W\)。
这种差异意味着 起始点被破坏了 。 模型的行为不再完全像预训练模型那样。当你将量化推向极限 (如 2-bit) 时,\(W\) 和 \(Q\) 之间的差异变得巨大,导致微调难以恢复的高误差率。
部分解决方案: LoftQ
最近像 LoftQ 这样的工作试图通过初始化 \(Q, A, \text{和 } B\) 来解决这个问题,使它们尽可能接近原始权重:
\[ \text{Minimize } \| W - (Q + AB^\top) \| \]虽然这减少了 权重误差,但它独立对待每一层。它忽略了深度神经网络的一个关键现实: 误差累积 。 第 1 层的微小误差会改变第 2 层的输入,从而导致更多误差,最终在网络中级联放大。
核心方法: ApiQ
ApiQ 背后的研究人员认为,最小化权重误差 (像 LoftQ 那样) 是错误的目标。我们不应该关心权重看起来是否不同;我们应该关心 激活值 (层的输出) 是否被保留。
如果一个量化层对于给定的输入 \(X\) 产生的输出 \(Y\) 与全精度层完全相同,网络就不会察觉到差异。
1. 保留激活值的初始化
ApiQ 的核心优化问题被公式化为最小化全精度层和量化层输出之间的差异。

其中:
- \(X\): 输入激活值。
- \(W\): 固定的预训练权重。
- \(X^q\): 量化层的输入 (来自前一个量化层) 。
- \(Q, A, B\): 我们要优化的参数。
这有效地对齐了对应层的 激活值 。 至关重要的是,因为 \(X^q\) 是来自 前一个 量化层的输出,ApiQ 考虑了从浅层流向深层的误差。它主动缓解了误差传播。
误差减少的可视化
这种方法的不同导致了内部误差率的巨大差异。

在 图 4 中,请注意 Y 轴的刻度。标准 QLoRA (橙线) 和 LoftQ (蓝线) 的激活误差随着网络深度的增加 (层索引变大) 而飙升。误差在不断累积。
相比之下, ApiQ (绿线) 在整个模型深度中将激活误差保持在接近零的水平。通过针对激活值而不是权重进行求解,即使在极低的位宽下,ApiQ 也能让模型保持在“正轨”上。
2. 块级 (Block-wise) vs. 层级 (Layer-wise)
论文提出了 ApiQ 的两种实施策略:
- ApiQ-lw (层级) : 一次优化一个线性层。它内存效率高 (可在消费级 GPU 上运行) ,但速度较慢,因为它必须按顺序处理网络的每一层。
- ApiQ-bw (块级) : 一次优化整个 Transformer 块 (注意力机制 + MLP) 。
块级目标看起来像这样:

ApiQ-bw 是推荐的方法。它的执行速度明显更快,并且允许同时优化整个块的参数。它有效地结合了量化校准和适配器初始化的优点。
3. 基于梯度的优化
与使用奇异值分解 (SVD) 的 LoftQ 不同,ApiQ 使用基于梯度的方法。它将量化参数本身 (缩放因子 \(s\) 和零点 \(z\)) 视为与矩阵 \(A\) 和 \(B\) 一起的需训练参数。
为了使量化步骤可微 (因为取整是一个不可微的操作) ,他们在初始化阶段使用了 直通估计器 (STE) , 允许梯度流过量化函数。
为什么初始化很重要: 看分布
你可能会问: “为什么巧妙地初始化 \(A\) 和 \(B\) 如此重要?模型不能在微调期间自己学到正确的值吗?”
对于 4-bit 模型,是的,标准微调通常可以恢复。但对于 2-bit 模型,初始失真太严重了。此外,分布的 形状 对训练稳定性有影响。

图 5 比较了 LoftQ (左) 和 ApiQ (右) 的参数分布。
- LoftQ: 注意矩阵 \(B\) (橙色) 的分布。它通常包含离群值且不对称。
- ApiQ: \(A\) 和 \(B\) 的分布是平滑、对称且类高斯的。
当参数遵循高斯分布时,神经网络的学习效果要好得多 (这也是 Xavier 或 He 初始化等标准初始化技术背后的原理) 。ApiQ 为随后的微调阶段提供了一个更健康的优化环境。
实验与结果
研究人员在多种模型 (Llama-2, Mistral, DeBERTa, RoBERTa) 和任务 (语言建模, Glue, 算术, 常识推理) 上测试了 ApiQ。
1. 微调性能 (重头戏)
最惊人的结果出现在 2-bit 和 3-bit 区间。

在 图 1 中,查看左下角的图表 (GSM8K 准确率) 。
- 在 Bit=2 时,像 QLoRA (甚至 LoftQ) 这样的标准方法崩溃到接近 0% 的准确率或表现非常差。
- ApiQ (橙色/绿色条) 保持了显著更高的准确率,正在缩小与 4-bit 性能的差距。
论文中提供的表格进一步证实了这一点。

观察 表 6 :
- 对于 Llama-2-7B 在 2-bit 的 GSM8K (数学) 任务:
- LoftQ 达到 20.9% 的准确率。
- ApiQ-bw 达到 33.5% 的准确率。
- 对于 Mistral-7B 在 2-bit :
- QLoRA 和 LoftQ 基本失败 (~2% 准确率) 。
- ApiQ-bw 恢复到了 45.0% 的准确率。
这表明 ApiQ 有效地挽救了模型,使其免受通常由激进量化引起的“灾难性遗忘”的影响。
2. 训练后量化 (PTQ)
即使你不打算微调,ApiQ 也可以作为一个优秀的训练后量化方法 (即只进行量化并运行推理) 。

在 表 3 中,ApiQ 与 GPTQ、AWQ 和 OmniQuant 等专用量化方法相比毫不逊色。在 2-bit (Llama-2-7B) 下,ApiQ 的困惑度 (Perplexity) 达到了 7.59 , 显著低于 (优于) GPTQ (20.85) 或 AWQ (巨大峰值) 。这表明初始化的适配器矩阵 \(A\) 和 \(B\) 成功捕获了 2-bit 权重压缩所丢失的信息。
3. 效率
这个预初始化步骤昂贵吗?

根据 表 4 , 使用 ApiQ-bw 量化 Llama-2-7B 大约需要 1.3 小时 。 虽然比 GPTQ (0.2小时) 慢,但比 OmniQuant 快,并且需要的显存 (12GB) 也在合理范围内。考虑到这是一次性成本,却能使 2-bit 微调变得可行,这种权衡是非常划算的。
权重误差 vs. 激活误差
论文中一个有趣的发现是权重误差与激活误差之间的关系。

图 3 显示了 权重 量化误差。
- 左图: LoftQ 比 QLoRA 更好地减少了权重误差。
- 中图: ApiQ 同样 比 QLoRA 显著减少了权重误差,即使它的目标函数是针对 激活值 的。
这表明,通过针对输出 (激活值) 进行优化,ApiQ 隐式地找到了一个良好的权重配置,同时还获得了处理层间误差传播的额外好处。
结论与启示
“ApiQ” 论文指出了大型语言模型生命周期中的一个关键瓶颈: 量化与微调之间的脱节。
通过将低秩适配器 (LoRA) 的初始化和权重的量化视为一个以保留 激活值 为中心的 联合优化问题 , ApiQ 实现了两个主要里程碑:
- 它阻止了量化误差在深层网络中传播的“滚雪球效应”。
- 它为微调创建了一个数学上可靠的“起始点”。
对于硬件受限的学生和研究人员来说,意义重大。如果 2-bit 量化变得可行且不破坏模型的智能,我们可能会看到 7B 和 13B 参数的模型在显存需求远低于目前要求的设备上运行和训练。ApiQ 是向普及这些强大模型使用权迈出的坚实一步。
关键要点
- 不要只盯着权重: 压缩模型时,保留 激活值 (输出) 可以防止误差累积。
- 初始化是关键: 对于低位宽 (2-bit/3-bit) 训练,标准初始化会失败。在开始微调之前,你需要校准你的适配器。
- 块级优化: 以 Transformer 块为单位处理网络是效率和性能的最佳平衡点。
](https://deep-paper.org/en/paper/2402.05147/images/cover.png)