一种让你的大语言模型更“轻”、更“快”、不失真的技术突破

B站影视 内地电影 2025-06-04 16:25 3

摘要:想象一下,你有一本厚重的百科全书(原始模型),但携带和翻阅都很不方便。传统方法是简单地缩小字体和页面(基本量化),虽然书变轻了,但内容可能变得模糊难辨。而YAQA就像是一种神奇的压缩术,不仅能让书变得轻便,还能尽可能保留原书的全部知识和表达方式,让读者在阅读"

想象一下,你有一本厚重的百科全书(原始模型),但携带和翻阅都很不方便。传统方法是简单地缩小字体和页面(基本量化),虽然书变轻了,但内容可能变得模糊难辨。而YAQA就像是一种神奇的压缩术,不仅能让书变得轻便,还能尽可能保留原书的全部知识和表达方式,让读者在阅读"压缩版"时获得与原书几乎一致的体验。

训练后量化(PTQ)是一种在模型训练完成后将其压缩的技术,不需要重新训练,可以大幅降低模型的存储和计算需求。目前最先进的PTQ方法可以将模型压缩到原来的1/8大小,比如把16位精度的模型压缩到2位精度,而且性能损失很小。然而,现有的大多数PTQ方法都专注于最小化"局部激活误差",也就是说,它们只关注模型中每一层的单独表现,而忽略了整体模型输出分布的变化。

这就像是一个大型乐团,传统方法只关注每个乐手独自演奏时的音准,却忽略了整个乐团合奏时的和谐程度。YAQA的创新之处在于,它直接关注整个模型的输出分布,确保量化后的模型能最大程度地保持原始模型的行为特性。

研究团队提出的YAQA算法包含两个核心组件:一是针对百亿参数级大语言模型可行的Kronecker分解Hessian矩阵估计方法,二是利用这些Hessian矩阵的理论保证的自适应舍入算法。在广泛的模型和量化器测试中,YAQA平均将模型与原始模型之间的KL散度(衡量两个概率分布差异的指标)降低了约30%,同时在下游任务上取得了最先进的性能。

一、深入理解模型量化的核心挑战

大语言模型的规模正在不断增长,这给高效部署带来了巨大挑战。以Llama 3.1 70B模型为例,它的参数量达到了700亿,需要消耗大量的存储空间和计算资源。量化技术可以大大减少模型的尺寸和计算需求,使模型能够在更多设备上高效运行。

训练后量化(PTQ)本质上是一种广义的舍入算法,它将高精度模型参数θ*舍入到一组可表示的低精度点C。PTQ的目标是最小化原始模型输出M(θ*, X)和量化模型M(θ, X)之间的距离。理想情况下,我们希望最小化KL散度:

θ ← arg min[θ∈C] E[X~D]DKL(M(θ*, X)∥M(θ, X))

但这个优化问题在实际中难以直接求解。因此,几乎所有当前最先进的量化算法(如LDLQ和GPTQ)都退而求其次,改为最小化每个线性层W*的局部激活误差:

arg min[W∈C] E[x∈Rn~D]∥x(W* - W)T∥2F

这就像是在装修一栋房子时,只关注每个房间的独立效果,而不考虑房间之间的协调性。这种局部优化方法虽然简单实用,但忽略了后续层对当前层量化的影响,因此不一定能减少整体模型的输出差异。

二、YAQA:全局视角的自适应量化方法

YAQA的核心思想是将每个线性层的量化问题重新定义为关于整体模型KL散度的二阶展开:

arg min[W∈C] E[X~D]DKL(M(Θ*, W*, X)∥M(Θ*, W, X)) ≈ 1/2(W - W*)T(?2W*L)(W - W*)

其中L = DKL(M(Θ*, W*, X)∥M(Θ*, W, X)),Θ* = θ* \ W*表示除了W*以外的所有原始参数。

这个公式可能看起来很复杂,但它的含义其实很直观:想象你在调整一台精密仪器,传统方法只关注每个旋钮独立的调整效果,而YAQA则关注当你调整某个旋钮时,它对整个仪器工作状态的影响。

由于KL散度的Hessian矩阵(二阶导数)就是Fisher信息矩阵,我们可以将?2W*L简化为E[vec(?W*l)vec(?W*l)T],其中l是根据模型输出分布计算的损失。虽然完整的Hessian矩阵太大而无法直接计算,但我们可以使用Kronecker分解的方法来近似它:?2W*L ≈ (HO ∈ Rm×m) ? (HI ∈ Rn×n)。

三、Kronecker分解Hessian矩阵估计

想象一下,Hessian矩阵就像是一张巨大的表格,记录了模型中每个参数与其他参数之间的相互影响。对于现代大语言模型,这张"表格"可能有数万亿个元素,直接计算是不可能的。YAQA提出了两种不同的Hessian矩阵估计方法,两者都能在百亿参数规模的模型上有效计算。

第一种方法(Sketch A)假设序列中的token(词元)在线性层内是相互独立的,这样可以将方差降低到O(1/T),其中T是token的数量。虽然这个假设带来了一些偏差,但大大减少了计算的复杂性。具体来说,Sketch A执行以下计算:

(HI)i ← E[x~D][xTx · ((HO)i-1, (?yl)T(?yl)) / ∥(HO)i-1∥2F] (HO)i ← E[x~D][(?yl)T(?yl) · ((HI)i-1, xTx) / ∥(HI)i-1∥2F]

这个过程就像是在一个大型拼图中,我们不是一次看整个拼图,而是分别检查行和列的模式,然后组合这些信息来重建整个图案。为了加速收敛,我们初始化(HI)0 ← H1 = E[xTx]和(HO)0 ← I。实验表明,这种方法通常在≤3次完整迭代后收敛,对于一个拥有100亿参数的模型和2000万token的校准集,大约需要30个GPU小时。

第二种方法(Sketch B)直接计算从单位矩阵初始化开始,在?2W*L上进行一轮幂迭代的结果。我们观察到,对?2W*L进行幂迭代涉及计算以下更新:

(HI)i ← E[s~D][(?W*l)T(HO)i-1(?W*l) / ∥(HO)i-1∥2F] (HO)i ← E[s~D][(?W*l)(HI)i-1(?W*l)T / ∥(HI)i-1∥2F]

如果(HI)0和(HO)0都是I,那么(HI)1 = E[s~D][(?W*l)T(?W*l) / m]和(HO)1 = E[s~D][(?W*l)(?W*l)T / n],其中期望和?W*l是在单个序列上计算的。这两个表达式可以在同一个反向传播过程中轻松计算,使我们能够在单次数据集遍历中对HO和HI进行一轮幂迭代。对于一个拥有100亿参数的模型和64,000个长度为2,000的序列,Sketch B大约需要50个GPU小时。

通过实验比较,研究团队发现Sketch A和Sketch B都比简单的I?H1(对应于局部激活误差)具有更高的余弦相似度,两种方法的结果也很接近。有趣的是,在某些情况下,例如Llama 3.1 8B Instruct模型的第24个下投影层,Sketch A实际上可能比使用小数据集的Sketch B具有更高的余弦相似度。这说明Sketch A的偏差有时可能小于Sketch B的方差,在这种情况下可能更适合使用Sketch A。

四、基于Kronecker分解Hessian矩阵的自适应舍入

获得了Hessian矩阵的Kronecker分解近似后,下一步是利用这些信息进行模型量化。YAQA提出了一种自适应舍入算法,它对每个参数的舍入方式如下:

Wi,j = Q(W*i,j + aiT(W*:i,:j - W:i,:j)bj + aiT(W*:i,j - W:i,j) + (W*i,:j - Wi,:j)bj)

其中ai是一个m×m严格上三角矩阵LO的第i列,bj是一个n×n严格上三角矩阵LI的第j列,Q是执行最近舍入或随机舍入的量化器。

这个舍入过程看起来复杂,但其实很像是在打高尔夫时,考虑风向、坡度等因素来调整你的击球方向和力度,以便球能准确地落在目标位置。传统量化方法就像是忽略这些因素直接击球,而YAQA则充分考虑了各种因素的影响。

如果我们选择LO作为HO的LDL分解(HO = (LO + I)DO(LO + I)T,其中LO是单位下三角矩阵,DO是对角矩阵),LI作为HI的LDL分解,那么我们可以证明自适应舍入过程的误差有界:

?W(HO ? HI)?WT ≤ tr(DI) tr(DO)σ2 ≤ (μI2μO2 / mn) · tr(HI1/2)2 tr(HO1/2)2 σ2

其中?W = W* - W,μO和μI分别是HO和HI的不相干性(incoherence)。

这个理论结果告诉我们,YAQA的误差受到迹乘积tr(DO) tr(DI)的限制,而这又可以通过HO和HI的不相干性来限制。这表明,与LDLQ类似,我们应该在量化前通过不相干性处理(incoherence processing)来降低所有Hessian矩阵的不相干性。

研究团队进一步证明,对于"真实"的层级代理误差?W H?WT(我们真正关心的东西),YAQA可以提供比当前最先进的自适应舍入方法LDLQ更紧的界限,特别是当HO具有足够低的秩时。实验证明,实际世界中的HO矩阵确实具有强烈的谱衰减,近似为低秩矩阵。

五、实验结果与分析

为了验证YAQA的有效性,研究团队对Llama 3.1和3.2 Instruct模型进行了量化,并评估了下游困惑度(perplexity)、零样本准确率以及与原始模型输出的KL散度。

在主要实验中,研究团队使用QTIP量化器,应用了不相干性处理,没有进行微调。结果显示,无论是YAQA-A还是YAQA-B,都在KL散度和下游性能方面一致优于LDLQ基线。YAQA-B通常优于YAQA-A,这是因为它的Hessian估计更准确,尽管计算成本更高。

具体来说,对于Llama 3.1 70B Instruct模型,当使用2位量化时,LDLQ的KL散度为0.497,而YAQA-B仅为0.335,降低了约33%。在零样本任务上,YAQA-B的平均准确率为66.19%,高于LDLQ的65.45%。对于Llama 3.1 8B Instruct模型,YAQA-B在2位量化下将KL散度从0.356降低到0.241,同时将零样本平均准确率从62.51%提高到64.32%。

有趣的是,在4位量化下,所有方法都获得了相似的困惑度,但YAQA仍然能够降低KL散度,这表明YAQA更好地保留了目标下一个token之外的输出分布。

研究团队还测试了INT4量化器的效果,结果同样显示YAQA优于LDLQ和DiscQuant。有趣的是,LDLQ也优于DiscQuant,这表明与YAQA不同,现有的优化端到端KL的方法并不总是优于基于代理目标的方法。

六、恢复微调的影响及与量化感知训练的比较

多个最近的PTQ研究都包含了"恢复微调"步骤,该步骤在量化前调整未量化的参数,以补偿已量化参数的影响。这提出了一个问题:恢复微调能在多大程度上弥补LDLQ与YAQA之间的差距?

研究团队进行了一项实验,使用QuIP#的恢复微调算法对比了LDLQ和YAQA的性能。结果显示,恢复微调确实减小了LDLQ和YAQA之间的差距。然而,YAQA仍然将KL散度降低了约10-20%,并在下游任务上保持了领先,这表明YAQA使用了恢复微调过程中不可用的全局信息。

研究团队还将YAQA与更昂贵的量化感知训练(QAT)方法进行了比较。他们比较了使用INT4且不进行微调的YAQA与Google官方的Gemma 3 12B Instruct QAT版本,后者使用4.5位数据类型。虽然QAT模型在下游任务上表现优于原始模型,但YAQA模型与原始模型的KL散度更低。这表明QAT过程实际上产生了与原始模型相当不同的模型。

七、结论与影响

YAQA为大语言模型的训练后量化提供了一种新的思路,它通过考虑端到端KL散度而不仅仅是局部激活误差,显著改进了现有最先进的PTQ方法。YAQA由两部分组成:可以为百亿参数级LLM高效计算的Kronecker分解Hessian矩阵估计,以及利用这些估计并附带理论保证的自适应舍入算法。

实验表明,YAQA将与原始模型的KL散度降低了约30%,同时在下游任务上取得了最先进的性能。这意味着使用YAQA量化的模型能更好地保持原始模型的行为特性,这对于许多依赖于模型输出分布的下游应用至关重要。

对于AI研究人员和实践者来说,YAQA提供了一种更有效的方法来部署大型语言模型,特别是在资源受限的环境中。通过将16位模型压缩到2位,YAQA可以实现8倍的大小减少,同时保持接近原始模型的性能。这不仅降低了存储需求,在支持低精度数据类型的硬件上还能提高吞吐量。

总之,YAQA代表了PTQ领域的一个重要进步,它为研究人员和工程师提供了一种新工具,可以在不显著牺牲质量的情况下大幅减少模型尺寸和计算需求。随着大语言模型规模的不断增长,这类技术将变得越来越重要,使AI能够在更广泛的设备和环境中高效部署。

来源:至顶网一点号

相关推荐