Scalable Kronecker-Fisher 阅读笔记:压缩一层之后,另一层还安全吗?

笔记日期: 2026 年 9 月 26 日
作者: Zhongzhu Zhou
Paper reviewed: Scalable Kronecker-Fisher Approximation: Efficient Hessian Analysis for Billion-Parameter Language Models Compression
Paper authors: Viacheslav Yusupov, Daria Cherniuk, Evgeny Frolov
arXiv: 2609.02451v1,2026 年 9 月 2 日提交
本文依据完整 12 页 v1 及附录 A—C。

1. 从逐层压缩走到跨层关系

做模型压缩时,我们常给每一层算一个分数:这一层能压多少、损失有多大、应该保留多少秩。再把这些分数放进预算分配器,选择一个整模型方案。这套思路很清楚,但里面藏着一个假设:几层一起修改时,逐层测出来的分数仍然有用。

问题在于,层与层并不独立。注意力的 value 投影改变了传递给后续模块的内容,MLP 又依赖这些表示。单独压缩两个模块可能都能接受,合起来却损失明显;反过来,适当调整另一层,也可能补偿已发生的压缩误差。因此,逐层分数之间的关系有时与分数本身一样重要。

这篇论文试图让这些关系变得可观察,同时避免构造一个“每个参数对应一行一列”的巨大矩阵。它用少量 Kronecker 积表示梯度二阶统计,再单独保存对角线。由于表示不限定在每层内部,它能够保留不同参数组之间的条目。

我把论文分成三件事来读。第一件是数学与数值方法:怎样表示并估计这个大矩阵。第二件是经验观察:哪些投影在量化、稀疏化时更脆弱。第三件是用途:能不能根据这些关系决定在哪里微调,以修复别处的损伤。第一件成立,并不自动保证后两件在所有模型上成立。

图 1:依据原论文第 3 节整理的原创流程图。曲率表示之后还要用实际压缩与修复结果检验;表示得到一个矩阵,并不等于已经得到最优压缩策略。

接着昨天读过的逐层 Fisher 加权 SVD,这篇文章很自然地追问:我们把每一层分开处理时,丢掉的是什么?它提供的是诊断方法与一组用途证据,没有给出一个经过完整比较的联合秩分配系统。因此,下文会始终区分“知道哪些关系值得关注”和“已经解决预算分配”。

我最在意的一个细节在实验指标里。论文用联合压缩后的困惑度增长,减去两次单独压缩的增长,解释“额外交互”。但困惑度是平均负对数似然的指数,即使后者严格相加,前者的差也可以为正。这个问题并不否定作者测到的质量下降,却会改变我们能从中推出多强的因果结论。后面会把推导写完整。

2. 前置知识:损失不仅有陡峭程度,还有方向

2.1 压缩误差为什么会相互影响

把选中的模型参数展平成向量 w∈Rdw\in\mathbb R^d,压缩造成的变化记作 δ\delta。对可微损失做局部二阶展开,有

L(w+δ)−L(w)=∇L(w)⊤δ+12δ⊤Hδ+O(∥δ∥3).(1)L(w+\delta)-L(w) =\nabla L(w)^\top\delta+\frac12\delta^\top H\delta +O(\|\delta\|^3). \tag{1}

HH 是损失对参数的 Hessian,即二阶导数组成的矩阵。它描述在当前点附近,沿不同方向走动时损失如何弯曲。模型接近驻点时,一阶项可能很小,但这不意味着任意大的压缩误差都可以用二阶项准确描述。“梯度小”和“扰动足够小”是两个条件。

如果只改变两组参数 PP 和 QQ,把 Hessian 按组切成四块,二次型就能展开成

12δ⊤Hδ=12δP⊤HPPδP+12δQ⊤HQQδQ+δP⊤HPQδQ.(2)\frac12\delta^\top H\delta =\frac12\delta_P^\top H_{PP}\delta_P +\frac12\delta_Q^\top H_{QQ}\delta_Q +\delta_P^\top H_{PQ}\delta_Q. \tag{2}

这里用了 HQP=HPQ⊤H_{QP}=H_{PQ}^\top。前两项是两组各自的局部代价,最后一项是交叉项。只保留块对角矩阵的做法,相当于直接删掉最后一项。它的影响既可能是放大,也可能是抵消,取决于实际误差方向。

考虑一个完全人为构造、方便看清机制的例子:

H=(20.80.82).(3)H=\begin{pmatrix}2&0.8\\0.8&2\end{pmatrix}. \tag{3}

若两组变化为 (1,1)(1,1),二阶损失是 2.82.8;若变化为 (1,−1)(1,-1),则是 1.21.2。只看对角线,两种情况都会被预测为 22。它们的扰动范数相同,差别全部来自方向与交叉项的配合。

图 2:原创二元二次型例子,不是语言模型实验。同样大小的扰动,方向相反时可以部分抵消;仅看耦合块“亮不亮”无法决定具体损伤。

这说明热力图只是第一步。一个跨层块的数值大,不代表所有压缩方法都会在它上面造成同样损失。均匀量化、剪枝、低秩截断会产生不同形状与符号的误差,最终相关的是它们与曲率块的收缩结果。

2.2 Hessian、经验 Fisher 与模型 Fisher

论文实际估计的是梯度外积的平均:

J=Ex∼D[gxgx⊤],gx=∇wℓ(w;x).(4)J=\mathbb E_{x\sim\mathcal D}[g_xg_x^\top], \qquad g_x=\nabla_w\ell(w;x). \tag{4}

对任何向量 zz,都有 z⊤Jz=E[(gx⊤z)2]≥0z^\top Jz=\mathbb E[(g_x^\top z)^2]\geq0,因此经验 Fisher 是半正定的。真实 Hessian 在一般位置不一定半正定。模型 Fisher 则还涉及按模型分布生成标签,与直接使用数据里已有标签计算的经验统计不是同一回事。

原论文以预训练模型接近局部最优为理由,将经验 Fisher 当作 Hessian 的近似。我会把它当成需要验证的建模选择,而不是由“已经收敛”自动保证的等式。一个简单反例是平方误差模型:如果每个样本都恰好拟合,样本梯度可以全部为零,经验 Fisher 也为零;但损失的二阶曲率仍然可以非零。

这个区别影响后面的实验解释。增加 Kronecker 项数,可以改善对所选梯度统计的拟合,却不能自动修复该统计与真实 Hessian 之间的差距。小模型上能直接比较真实 Hessian,是有价值的;它仍不能替代大语言模型上的用途验证。

3. 矩阵重排:不是直接给 Fisher 做低秩截断

3.1 从元素下标一步步推导

先固定参数顺序,再把梯度改排成 G∈Rn×mG\in\mathbb R^{n\times m},其中 nm=dnm=d。为了避开向量化约定带来的歧义,下面使用按行展平的成对下标:参数坐标 (i,a)(i,a) 对应 GiaG_{ia}。换用按列展平也可以,但所有置换都必须跟着一致地改变。

原二阶统计的一项为

J(i,a),(j,b)=E[GiaGjb].(5)J_{(i,a),(j,b)}=\mathbb E[G_{ia}G_{jb}]. \tag{5}

现在不改变这个数值,只改变它存放的位置:把 (i,j)(i,j) 作为新的行下标,把 (a,b)(a,b) 作为新的列下标,得到

M(i,j),(a,b)=J(i,a),(j,b).(6)M_{(i,j),(a,b)}=J_{(i,a),(j,b)}. \tag{6}

MM 的形状是 n2×m2n^2\times m^2。在上述约定下,它就是 E[G⊗G]\mathbb E[G\otimes G]。这个操作保留了所有元素,因此保留 Frobenius 范数;但它通常不是相似变换,不保留通常意义的特征值。矩阵形状甚至可以从方形变成长方形。

对重排后的矩阵做 SVD:

M=∑s=1Rσsusvs⊤.(7)M=\sum_{s=1}^{R}\sigma_su_sv_s^\top. \tag{7}

把左奇异向量还原成 Us∈Rn×nU_s\in\mathbb R^{n\times n},右奇异向量还原成 Vs∈Rm×mV_s\in\mathbb R^{m\times m}。每个外积的元素恰好是 (Us)ij(Vs)ab(U_s)_{ij}(V_s)_{ab},所以按原来的位置放回去,就有

J=∑s=1Rσs(Us⊗Vs).(8)J=\sum_{s=1}^{R}\sigma_s(U_s\otimes V_s). \tag{8}

保留所有项时是精确分解;只保留前 rr 项才是近似。这一步最容易混淆的是“秩”的含义:rr 是 Kronecker 项数,不是 JJ 的普通矩阵秩。因为 rank⁡(U⊗V)=rank⁡(U)rank⁡(V)\operatorname{rank}(U\otimes V)=\operatorname{rank}(U)\operatorname{rank}(V),一个 Kronecker 积本身就可能在参数空间满秩。

图 3:原创下标重排示例。一个 2×3 梯度产生 6×6 的参数二阶统计,重排后是 4×9;数值集合相同,矩阵组织方式不同,不应把它当作保谱变换。

3.2 截断最优究竟最优在哪里

根据截断 SVD 的性质,在普通矩阵秩至多为 rr 的候选中,MrM_r 最小化 ∥M−Mr∥F\|M-M_r\|_F。换回原坐标,可以说:在固定重排约定、至多 rr 个不受额外约束的 Kronecker 项中,它取得对应的 Frobenius 误差最优。

∥J−Jr∥F2=∥M−Mr∥F2=∑s>rσs2.(9)\|J-J_r\|_F^2=\|M-M_r\|_F^2 =\sum_{s>r}\sigma_s^2. \tag{9}

“不受额外约束”很重要。如果还要求因子半正定、满足某种层结构、占用特定硬件内存,问题就变了。同样,拟合经验 Fisher 最优,也不是实际压缩准确率最优,更不是拟合真实 Hessian 最优。

为什么这个拟合仍然有意义?因为对一个具体扰动,可以写出

∣12δ⊤(J−Jr)δ∣≤12∥J−Jr∥2∥δ∥2≤12∥J−Jr∥F∥δ∥2.(10)\left|\frac12\delta^\top(J-J_r)\delta\right| \leq\frac12\|J-J_r\|_2\|\delta\|^2 \leq\frac12\|J-J_r\|_F\|\delta\|^2. \tag{10}

这给了一个整体控制:拟合误差小,对任意固定范数扰动的最坏二次型误差也受限。但这个界通常比较松,而压缩真正关心的是少数候选方向。某些平均意义上不起眼的元素,恰好可能决定两个接近方案的排序。

因此,我更希望看到“候选压缩方向的预测质量”随 rr 如何变化,而不只是整幅矩阵图越来越像。参数顺序也应固定并报告,因为改变重排方式会改变一个矩阵在少量 Kronecker 项下的可表示程度。

4. 不存大矩阵,如何求出它的主方向

4.1 把矩阵换成一个可调用的乘法

重排解决了表达方式,却没有消灭维度:MM 仍然包含 d2d^2 个元素。作者进一步利用一个事实:迭代奇异值求解器不一定需要读到整个矩阵,只要能反复计算它乘一个向量,以及转置乘一个向量,就有机会提取少量主方向。

把输入向量还原成 V∈Rm×mV\in\mathbb R^{m\times m},直接展开第 (i,j)(i,j) 个输出:

[M(V)]ij=E∑a,bGiaVabGjb=[E(GVG⊤)]ij.(11)[\mathcal M(V)]_{ij} =\mathbb E\sum_{a,b}G_{ia}V_{ab}G_{jb} =[\mathbb E(GVG^\top)]_{ij}. \tag{11}

右边只涉及梯度矩阵与一个较小矩阵的乘法。对应的伴随算子为

M∗(U)=E[G⊤UG].(12)\mathcal M^*(U)=\mathbb E[G^\top UG]. \tag{12}

可以用迹内积检查这两式是否配对:tr⁡(U⊤GVG⊤)=tr⁡((G⊤UG)⊤V)\operatorname{tr}(U^\top GVG^\top)=\operatorname{tr}((G^\top UG)^\top V)。两侧应该相同。这既是推导里的必要条件,也解释了为什么不能随意混用不同向量化约定。

论文使用隐式重启 Arnoldi 方法求所需的奇异方向。“不显式构造矩阵”省掉的是巨大的存储,不是所有乘法成本。求解器要多次调用这些乘法,梯度矩阵如何取得、是否缓存,仍然影响实际运行时间。

这里还有一个容易被“矩阵自由”这个名字遮住的条件:各次调用原则上应该对应同一个算子。如果每次乘法都重新随机采样一批不同数据,求解器看到的就不再是固定的 MM,除非另有专门处理随机算子的设计。缓存固定梯度、确定性地重放相同校准数据,都可以让统计量保持一致;前者用内存换时间,后者反过来。论文没有充分展开这项工程权衡,不能把它当成零成本。

4.2 “精确对角线”到底精确到什么程度

记梯度逐元素平方的均值为 dJ=E[g⊙g]d_J=\mathbb E[g\odot g]。先求出截断表示 JrJ_r,再把它的对角线换成 dJd_J,可以写成

J~=Jr+Diag⁡(dJ−diag⁡(Jr)).(13)\widetilde J=J_r+ \operatorname{Diag}\big(d_J-\operatorname{diag}(J_r)\big). \tag{13}

这个写法把两个部分分得很清楚:Kronecker 项负责结构,单独的向量负责坐标级的方差或二阶矩信息。对固定的 JrJ_r,替换会消除它相对于所选梯度统计的对角线误差,非对角误差则原样保留。

但此时表示类已经变成“若干 Kronecker 项加一条对角线”,不能继续不加限定地称其为纯粹的 rr 项截断最优解。它也没有得到真实 Hessian 的精确对角线;精确只针对当前估计的梯度二阶统计。

若只想给一个扰动方向打分,不需要把校正向量展开成矩阵:

δ⊤J~δ=δ⊤Jrδ+∑t[(dJ)t−(Jr)tt]δt2.(14)\delta^\top\widetilde J\delta =\delta^\top J_r\delta +\sum_t\left[(d_J)_t-(J_r)_{tt}\right]\delta_t^2. \tag{14}

这就是对角校正很有吸引力的原因:只增加 dd 个数,得分时再增加一次逐元素求和,就能保留坐标级信息。

更细的统计问题在“一个梯度样本”的定义里。论文先用逐样本梯度介绍 Fisher,后面又描述了按批次累计的梯度。如果批梯度是 bb 个独立样本梯度的平均,设单样本梯度均值为 μ\mu,则有

E[gˉgˉ⊤]=μμ⊤+1bCov⁡(g),E[gg⊤]=μμ⊤+Cov⁡(g).(15)\mathbb E[\bar g\bar g^\top] =\mu\mu^\top+\frac1b\operatorname{Cov}(g), \qquad \mathbb E[gg^\top] =\mu\mu^\top+\operatorname{Cov}(g). \tag{15}

可以从 gˉ=b−1∑igi\bar g=b^{-1}\sum_i g_i 展开外积推导:bb 个同样本项包含二阶矩,b(b−1)b(b-1) 个跨样本项在独立假设下只有 μμ⊤\mu\mu^\top。合并以后,协方差前面就多了一个 1/b1/b。因此,“先平均再平方”和“先平方再平均”不同。

只有在 μ=0\mu=0 且独立采样等条件成立时,两者才简化为整体尺度差异。若均值不为零,均值方向和波动方向的相对权重也会改变。语言序列里的 token 又往往相关,不能随手把 token 数当成独立样本数。因此,所谓精确对角线,必须连同样本单位、损失的求和或平均方式一起说明。

4.3 算法 1:构造可用于诊断的表示

下面是对原文第 3 节的解释性伪代码,补出了理解算法必需的记账条件。它不表示原文已经给出了所有这些运行细节。

01 固定模型权重、参数顺序、重排形状和损失归约方式。
02 收集选定的梯度样本,或确定性重放同一批样本。
03 累积 d_J = 梯度逐元素平方的平均。
04 定义 M(V) = mean_b(G_b V G_b^T)。
05 定义 Mt(U) = mean_b(G_b^T U G_b)。
06 用两个算子运行奇异值求解器,保留 r 个奇异三元组。
07 把左右奇异向量分别还原为 U_s 和 V_s。
08 保存奇异值及因子,不展开 Kronecker 积。
09 保存 d_J 与该表示对角线的差,作为校正向量。
10 记录求解残差、校准统计约定和参数范围。
11 用留出数据及实际压缩结果检验得分是否有用。

最后两步不能省略。数值求解收敛,是“确实算到了想要的统计表示”;留出实验有效,才是“这个表示值得拿来做压缩决策”。一幅结构清楚的热力图无法替代其中任何一个条件。

5. 这张图和这份表示应该怎样读

5.1 小网络验证:对角线有帮助,整体误差仍不小

为了能直接构造真实 Hessian,论文使用输入与输出维度均为 500、隐藏维度为 8 的两层感知机,参数约 8,000 个,在含 500 个高斯簇的合成数据上训练,损失为二元交叉熵,优化器为 AdamW。这是一个能够做真值比较的小规模环境。

表 1 使用的拟合分数是

Rpaper2=1−∥H−J~∥F2∥H∥F2.(16)R_{\mathrm{paper}}^2 =1-\frac{\|H-\widetilde J\|_F^2}{\|H\|_F^2}. \tag{16}

分母是 HH 自身的平方范数,没有减去元素均值,所以不要直接套用普通回归里“中心化决定系数”的解释。16 项时,带对角校正的分数是 42.3%,不带校正是 29.9%,差了 12.4 个百分点;前者仍有相当于 ∥H∥F2\|H\|_F^2 的 57.7% 平方残差。

图 4:重绘原论文表 1。对角校正在所有给出的项数上都改善了论文定义的拟合分数;这是小网络验证,不是十亿参数模型真实 Hessian 的拟合结果。

更完整地看,项数为 1、2、4、8、16 时,不带校正分别是 3.2%、9.8%、15.6%、24.5%、29.9%;加上校正则为 17.8%、26.3%、32.7%、36.1%、42.3%。小项数时单独保留对角线很划算,这是表里相当直接的结论。

但这个实验把几类误差合在了一起:经验 Fisher 代替 Hessian 的偏差,有限数据的统计误差,Kronecker 截断误差,还有迭代求解误差。如果想知道增加项数到底改善了哪一部分,最好同时画两条基准:相对于同一批样本 Fisher 的拟合,以及相对于真实 Hessian 的拟合。否则,一条越来越好的曲线仍然不告诉我们最终瓶颈在哪里。

5.2 热力图里的一个像素,不是一个统一的块范数

对由 (i,j)(i,j) 指定的块,表示是 ∑sσs(Us)ijVs\sum_s\sigma_s(U_s)_{ij}V_s。把这个块所有元素平均,得到

(Jvis)ij=∑sσs(Us)ij(1m2∑a,b(Vs)ab),i≠j.(17)(J_{\mathrm{vis}})_{ij} =\sum_s\sigma_s(U_s)_{ij} \left(\frac1{m^2}\sum_{a,b}(V_s)_{ab}\right), \quad i\ne j. \tag{17}

但可视化的对角位置,使用的是相应组里真实统计对角元素的平均,而不是整个块的平均。也就是说,对角像素和非对角像素汇总的元素集合不同。不能看到它们使用同一个色条,就默认两个像素具有同一种“强度”意义。

此外,有正有负的均值可能抵消。矩阵 (1−1−11)\begin{pmatrix}1&-1\\-1&1\end{pmatrix} 的元素均值是零,Frobenius 范数却是 2,对方向 (1,−1)(1,-1) 的作用也不为零。因此,一个暗块不等于没有重要关系,一个亮块也不能直接推出具体压缩误差的交互强弱。

原论文附录 A 展示 OPT-350M 的第 4–6、8–10、20–22 组 block,后面一组的数值较弱,还给出了 OPT-125M 全模型视图。这些图说明所展示模型存在值得研究的深度结构。它们尚不足以推出“所有模型后层都可以更大胆压缩”的普遍规则。

我会把热力图定位成帮助提出假设的工具:它告诉我们下一步值得测哪几组。真正用于预算分配的分数,最好再补上块范数、绝对值统计,或直接对实际误差方向做收缩。

5.3 线性存储不等于只多存一份参数

表示需要 r(n2+m2)r(n^2+m^2) 个因子元素,加上 d=nmd=nm 个对角元素。如果两个维度尽量平衡,

n≈m≈d⟹r(n2+m2)+d≈(2r+1)d.(18)n\approx m\approx\sqrt d \quad\Longrightarrow\quad r(n^2+m^2)+d\approx(2r+1)d. \tag{18}

平衡形状为何合算,可以从 (n−m)2≥0(n-m)^2\geq0 看出来:固定乘积 nmnm 时,两边越接近,平方和越小。这里的“线性”是随 dd 的增长阶数,不是一个可以忽略的常数。

举例说,d=109d=10^9、每个元素 4 字节时,单是表示本身,r=1r=1 大约需要 12 GB,r=16r=16 大约需要 132 GB,采用十进制单位。这些是公式推算,不是论文测得的显存峰值。模型权重、激活、梯度缓存和求解器工作区都还没算进去。

图 5:原创存储量计算,按平衡因子、单独对角线和每元素 4 字节估算。它比较表示的大小,不代表真实程序显存占用。

时间也需要单独看。每次算子调用遍历 BB 个梯度样本,大约需要 O(Bd(n+m))O(Bd(n+m)) 的乘法成本。若求解迭代次数为 NAN_A,每批 token 数为 TT,原文的简化模型为

O ⁣(Bd[T+NA(n+m)])≈O ⁣(Bd[T+NAd]).(19)O\!\left(Bd[T+N_A(n+m)]\right) \approx O\!\left(Bd[T+N_A\sqrt d]\right). \tag{19}

所以平衡重排下,时间并不随 dd 线性增长。若缓存全部梯度,还会多出 O(Bd)O(Bd) 存储;若每次重新生成,节省的缓存又会变成额外计算。把 BB 或工作区当常数,足以讨论渐近复杂度,却不足以决定一台具体 GPU 是否装得下。

6. 论文真正测了什么工作负载

6.1 构造曲率的时间,不是推理加速比

表 2 测的是在单张 H100 上,对所有 Transformer block 构造单项近似,使用 20 批、每批 10 条 WikiText2 序列。OPT-125M、OPT-350M、Qwen2-0.5B、OLMo2-1B 的总耗时分别是 157.64、1563.07、1090.61、2428.25 秒;其中梯度部分是 50.73、272.94、200.09、218.64 秒。

图 6:重绘原论文表 2。蓝色部分由总时间减去梯度时间得到,不能把它写成单独测量的 Arnoldi 时间。

OLMo2-1B 大约耗时 40.47 分钟,梯度部分约占 9.0%。这说明该设置有一定可操作性,但表里没有 7B 模型耗时,不能进一步写成“7B 全模型不到一小时”。单项的时间,也不能直接套到小模型验证里的 16 项配置。

OPT-350M 比 Qwen2-0.5B 更慢,还提醒我们不要仅用参数量拟合一个万能的时间曲线。矩阵形状、纳入哪些参数、序列长度、数值收敛,都可能影响结果。论文没有给出该时间测试里的完整序列长度与显存峰值,做实际资源预算时还需要这些信息。

最关键的概念区别是:这是一项准备成本。表示本身既没有减少部署权重,也没有缩短生成延迟。只有后续压缩策略真的利用了它,产生一个更小或更快、质量合格的模型,才能把这笔准备成本与推理收益放到同一张账上。

6.2 “一层”常常是一类投影跨多个 block

主要破坏实验使用 OPT-350M、Qwen2-0.5B、OLMo2-1B 和 Qwen2.5-7B。作者对中间 Transformer block 中某一类投影统一施加 4-bit 均匀量化或 50% 稀疏化,排除最前和最后三个 block,然后看 WikiText2 困惑度。

因此,这里的“一层”经常指很多 block 里同一类投影的集合,而不是一个具体权重矩阵。例如“压 V”可能同时改动所有被选中间 block 的 value 投影,里面既有 block 内关系,也可能有跨 block 关系。读实验时必须保留这个分组范围。

前后边界被排除,是因为论文观察到它们的行为不同、与诊断的对应较弱。这是合理的分析取舍,但也意味着实验里的排序不能直接覆盖一个必须压缩所有 block 的整模型策略。

原文还有一个命名不一致:图 2 的小 Qwen 标成 Qwen2.5-0.5B,而实验描述、后续图表使用 Qwen2-0.5B。我保留各结果的原始名称,不默认它们是完全相同的检查点,也不把这个差异自行修补成确定事实。

6.3 每参数敏感度与总损伤是两种问题

图 3 把困惑度增长除以被修改的参数数量。在这个归一化口径下,V 投影很敏感;OLMo2 的量化实验里 down 投影更突出,稀疏化时则是 V 更突出。作者也讨论了 V 相对较小,因此每参数得分可能更大的情况。

这相当于在看“损伤密度”。如果要在固定内存预算下分配压缩程度,还必须同时知道总损伤和省下的字节数。一个大模块总损伤更大,但每省一字节的代价可能更低;一个很小却脆弱的模块,完整保留反而很便宜。单看原始损伤或者单看归一化损伤,都没有直接解决这个预算问题。

后面的两组联合实验使用未经参数量归一化的困惑度增长,所以不能把配对热力图的亮度与图 3 的柱高直接比较。大层组合可能因为规模而造成大损伤,不一定意味着更强的统计耦合。这个口径差异需要一直带到结论里。

7. 联合压缩与定向修复

7.1 先把“额外损伤”的数算明白

论文用困惑度增长定义交互差:

DI(P,Q)=ΔPPL(P,Q)−ΔPPL(P)−ΔPPL(Q).(20)D_I(P,Q)=\Delta_{\mathrm{PPL}}(P,Q) -\Delta_{\mathrm{PPL}}(P)-\Delta_{\mathrm{PPL}}(Q). \tag{20}

附录 B 的图 11 给出了具体数字,比单看颜色更容易判断。以 OPT-350M 为例,单独破坏 V 的困惑度增长是 1.283,单独破坏 FC1 是 2.373,联合则是 4.743。依照定义相减,得到 4.743−1.283−2.373=1.0874.743-1.283-2.373=1.087。

同一模型的 O 与 FC1 给出 3.028−0.346−2.373=0.3093.028-0.346-2.373=0.309;Q 与 K 给出 0.945−0.468−0.510=−0.0330.945-0.468-0.510=-0.033;FC1 与 FC2 给出 4.423−2.373−1.111=0.9394.423-2.373-1.111=0.939。正负号并不统一。这些计算使用图中已经四舍五入的值,结果最后几位也不应该被赋予超过原图的精度。

图 7:依据原论文图 11 的显示值做减法得到的配对残差。纵轴是困惑度口径的差,不是直接测量的跨层 Hessian 元素;不同模型也没有共同基线可供横向排名。

其他例子包括 OLMo2 的 V/down:2.535−0.609−1.620=0.3062.535-0.609-1.620=0.306;Qwen2 的 V/up 残差为 0.352;Qwen2.5-7B 的 V/up 为 0.017。它们说明联合损伤可以偏离两次单独损伤的算术和,但不能只凭这些数比较“哪个模型的层间耦合最强”。不同基线困惑度、不同参数规模和不同误差方向都混在其中。

O 投影尤其值得保留在讨论里。曲率图上的 O 区域相对较弱,可涉及 O 的联合破坏仍可能明显。作者猜测,有限幅度扰动可能破坏残差流里的异常通道,而局部梯度统计没有充分捕捉这种效应。这个解释有道理,但论文没有通过控制干预把它确立为唯一机制。遇到不吻合的案例时,合理做法是缩小结论范围,再提出可验证的解释。

7.2 为什么跨层关系也可能告诉我们去哪里修复

恢复实验先损伤 MLP 投影,再分别微调某一类注意力投影。图 7 和图 8 展示了 Qwen2-0.5B 与 OLMo2-1B 的全量微调及 LoRA 结果,V 的恢复通常优于 Q 或 K。这里不从柱形高度猜测没有标出的精确数值,也不把两组展示扩展成四种模型都有同等完整的恢复验证。

可以用一个局部二次模型解释这件事。设组 CC 已产生固定压缩误差 eCe_C,允许组 RR 做修复更新 zRz_R。忽略原始一阶项后,目标写成

q(zR)=12eC⊤HCCeC+zR⊤HRCeC+12zR⊤HRRzR.(21)q(z_R)= \frac12e_C^\top H_{CC}e_C +z_R^\top H_{RC}e_C +\frac12z_R^\top H_{RR}z_R. \tag{21}

第一项已经发生,无法直接撤回;第二项让修复有机会抵消原损伤;第三项表示修复自身也有代价。如果 HRRH_{RR} 正定,对 zRz_R 求导并令其为零:

HRCeC+HRRzR=0⟹zR∗=−HRR−1HRCeC.(22)H_{RC}e_C+H_{RR}z_R=0 \quad\Longrightarrow\quad z_R^*=-H_{RR}^{-1}H_{RC}e_C. \tag{22}

把最优更新代回去,二次模型允许的最大损失减少为

12eC⊤HCRHRR−1HRCeC.(23)\frac12e_C^\top H_{CR}H_{RR}^{-1}H_{RC}e_C. \tag{23}

这是本文为了理解机制补充的推导,不是原论文已证明并测量的新结论。它比“找最大的跨层块”多了两个条件:修复组自己有多硬,也就是 HRRH_{RR};当前损伤朝哪个方向,也就是 eCe_C。两组耦合很强,却可能因为可更新方向不合适而难以恢复。

一个标量例子能看清代价:令 HCC=2H_{CC}=2、HRR=4H_{RR}=4、HRC=1H_{RC}=1、eC=1e_C=1,原代价为 1。最优更新为 zR=−0.25z_R=-0.25,代回得到 0.875,下降 0.125。如果修复方向更硬,同样的跨组关系也会带来更少收益。

LoRA 又增加了子空间约束:最优的完整更新不一定能用给定秩表示。比较候选修复位置时,不仅要匹配训练 token 和步数,还应控制可训练参数量与更新容量。否则,恢复得更好可能部分来自“给了更多可训练自由度”,未必全部来自选中了更恰当的耦合对象。

7.3 算法 2:我会怎样验证诊断是否真的有用

以下是建议的后续实验协议,不是本笔记已经运行过的模型实验:

01 固定模型、校准数据、留出数据和压缩规则。
02 定义参数组 P、Q,并明确包含哪些 block。
03 记录基线平均 NLL 和各下游任务准确率。
04 分别测试只压 P、只压 Q、同时压 P 与 Q。
05 同时计算 NLL 口径与困惑度口径的交互差。
06 用实际带符号的误差方向收缩近似曲率。
07 改变压缩强度,重复独立校准采样。
08 与对角、块对角、参数量等较便宜基线比较。
09 固定压缩损伤,在相同预算下比较修复位置。
10 同时报告留出收益、准备成本和不确定性。

这个协议把三件事分开:参数组实验与单个矩阵实验,指标残差与真实曲率交叉项,以及有效修复与固定预算下的最优修复。分开之后,结论会稍窄,却更容易被后续工作直接使用。

8. 附录改变了“最敏感层”的强表述

附录 C 把稀疏度提高到 90%,测试 PIQA、WinoGrande、HellaSwag、ARC-Easy、ARC-Challenge。它与主要实验的 50% 稀疏化不是同一个强度。表 3 的基线行是准确率百分数,投影行则是准确率下降的百分点数。两者若读反,会得到完全错误的解释。

按五项任务的简单平均,最大下降来自不同组件:

模型稠密模型平均准确率(%)最大平均下降V 的下降(百分点)
OPT-350M43.44FC1:6.79 点1.21
Qwen2-0.5B51.04V:11.71 点11.71
OLMo2-1B63.77Up:16.20 点5.34
Qwen2.5-7B70.75Gate:34.12 点3.18

这些数字来自原论文表 3。比如 Qwen2.5-7B 的 Gate 行意味着平均剩余准确率约为 70.75−34.12=36.63%70.75-34.12=36.63\%,允许原表舍入误差;34.12 不是剩余准确率,也不是相对下降 34.12%。

图 8:重绘原论文表 3 的平均准确率下降。各子图使用各自的纵轴范围;在 90% 稀疏化下,损伤最大的投影类别随模型变化。

看任务细项,Qwen2.5-7B 的 Gate 稀疏化使 HellaSwag 下降 49.16 点、ARC-Easy 下降 47.01 点,WinoGrande 则下降 21.70 点。一个平均数很方便快速扫描,但会隐藏不同任务受损程度的差异。如果部署任务的权重不同,压缩预算的最优分配也可能不同。

OPT 的一些格子为负,例如 Q 行的 ARC-Challenge 为 -1.45 点。这表示该次结果略有改善,不能据此宣称稀疏化可靠地提升能力。没有多次运行或评估不确定性,小差值的符号不适合承担宽泛结论。

因此,我不会把文章概括成“V 永远最脆弱”。更准确的说法是:在一些主要实验口径下,V 的单位参数敏感性突出,也展示了修复价值;换成更强稀疏化、原始准确率下降、不同模型时,最敏感组件会改变。

这不一定是主文与附录互相矛盾,因为强度、指标、归一化都变了。但它清楚限制了排序的可迁移范围。一个可用的敏感度诊断应该同时带着模型、参数组、压缩算子、强度、校准分布和目标指标,而不是只留下一个组件名称。

9. 局限与失败边界

第一类边界来自代理链条。真实损失 Hessian 被替换成样本梯度二阶矩,再变成截断的重排表示,有时还继续变成一个块均值像素。每一步都丢掉了一部分信息。最后一张图看起来有道理,不意味着前面每个替换都已经得到独立证明。

第二类是有限扰动。二阶展开只是在参考点附近的近似。均匀量化或高比例稀疏化可以一次移得很远,进入局部曲率解释不了的区域。O 投影的不吻合正是有价值的边界案例。更好的分析是观察预测误差如何随扰动强度增长,而不是把最难解释的点略去。

第三类是参数组织方式。组大小、参数排列、重排形状、是否合并投影,以及带符号平均,都会影响最终图像。一个真正用于选层的策略,应当说明采用了什么分数,并检验合理组织变化下结论是否稳健,不能只凭颜色深浅做决定。

第四类是不确定性报告。本文读到的“强相关”证据主要是若干可视化对应和选择性的实验比较,没有形成跨多次校准抽样、带置信区间的完整留出排序研究。一个工具可能把最明显的几个案例分得很好,却在预算分配最困难的相邻候选之间不稳定。

第五类是成本口径还不完整。梯度归约与缓存方式、时间实验里的序列长度、求解容差、具体稀疏化规则、恢复训练预算,都关系到能否公平比较。原文未充分给出时,笔记不靠经验替作者补齐,也不把已报告的单一设置延伸成确定的部署承诺。

最后,不能默认近似经过截断和对角替换后仍半正定。一般截断 SVD 并没有施加因子半正定约束;即使一个候选原本半正定,直接换对角线也可能破坏这个性质。例如

(21.51.52)⟶(11.51.51)\begin{pmatrix}2&1.5\\1.5&2\end{pmatrix} \quad\longrightarrow\quad \begin{pmatrix}1&1.5\\1.5&1\end{pmatrix}

左边的两个特征值均非负,右边则为 2.5 和 -0.5。这是反驳“自动保证”的通用例子,不是在声称论文某次运行得到了这个矩阵。如果后续优化器依赖一个非负曲率惩罚,就必须另外检查或约束该性质。

这些局限不会抹去方法的价值。它们更像使用说明:哪些东西是表示层面的数学结论,哪些是已测工作负载下的经验观察,哪些仍然需要用途验证。把这三类说清楚,才方便真正把方法接到压缩流程中。

10. 独立批判性分析:把交互放回损失坐标里

10.1 困惑度残差为正,不足以证明损失有交互

这是我认为最值得单独讨论的问题。设基线的平均负对数似然为 ℓ0\ell_0,困惑度为 p0=eℓ0p_0=e^{\ell_0}。两个破坏分别让 NLL 增加 aa 和 bb,并假设联合破坏恰好增加 a+ba+b。这个设定里,NLL 完全可加,没有额外交互。

但是把论文的差值放到困惑度口径,有

DPPL=p0(ea+b−1)−p0(ea−1)−p0(eb−1)=p0(ea+b−ea−eb+1)=p0(ea−1)(eb−1).(24)\begin{aligned} D_{\mathrm{PPL}} &=p_0(e^{a+b}-1)-p_0(e^a-1)-p_0(e^b-1)\\ &=p_0(e^{a+b}-e^a-e^b+1)\\ &=p_0(e^a-1)(e^b-1). \end{aligned} \tag{24}

推导的第一行分别代入三次困惑度增长,第二行合并常数,最后一行因式分解。只要 a,ba,b 都是正数,结果就严格大于零。取 p0=10p_0=10、a=0.1a=0.1、b=0.2b=0.2,就得到约 0.233,尽管 NLL 上根本没有交互。

图 9:原创解析反例。整张图都假设 NLL 损伤严格可加,但经过指数映射后,困惑度交互差在坐标轴外为正。这不是对原论文模型的复现或新增训练实验。

问题出在指标的曲率,而不是某个特殊神经网络结构。对可加变量做指数变换,再用原始差值检查可加性,天然会得到额外项。基线 p0p_0 还会直接放大这个项,这也是不能拿不同模型的残差绝对值直接排名的另一个原因。

这并不否定联合压缩的模型质量更差,也不证明原论文里的真实交互全部为零。它限制的是一种推论:仅靠困惑度增长相减,无法把所有正残差都归因于跨层 Hessian。残差中可能混有指标变换本身造成的部分。

如果要与 token 平均 NLL 的 Hessian 对应,更直接的量是

DNLL=log⁡pPQ−log⁡pP−log⁡pQ+log⁡p0.(25)D_{\mathrm{NLL}} =\log p_{PQ}-\log p_P-\log p_Q+\log p_0. \tag{25}

在相同评估 token、相同损失归约、足够小的固定扰动下,二阶展开给出 DNLL≈δP⊤HPQδQD_{\mathrm{NLL}}\approx\delta_P^\top H_{PQ}\delta_Q,剩余差异再讨论高阶项和近似误差。

这里“相同归约”并不是形式细节。如果先算每条序列的困惑度再取平均,最后对这个均值取对数,一般不会恢复按 token 平均的 NLL。必须先明确原评估量,才能做相应变换。

我会先补算这个量,再把联合实验解释成直接的曲率证据。附录图给的是困惑度变化,没有在同一处为每个具体设置给出完整基线困惑度表;只凭那些变化值,不能可靠恢复全部 NLL 交互。因此,本笔记把这一点保留为待验证问题,不虚构基线值来得出一个看似完整的数表。

10.2 不只测块大小,还要测误差方向

即使某个 HPQH_{PQ} 的范数很大,也可能恰好与当前两组压缩误差近乎正交。量化误差、剪枝误差和低秩截断误差的结构不同,用同一张块热力图指导三者,未必获得同样效果。

我会固定两条误差方向 u,vu,v,令 δP=tu\delta_P=tu、δQ=tv\delta_Q=tv,然后逐渐增大或减小 tt。局部展开应给出

DNLL(t)=t2u⊤HPQv+O(t3).(26)D_{\mathrm{NLL}}(t) =t^2u^\top H_{PQ}v+O(t^3). \tag{26}

把观测结果除以 t2t^2,在局部有效范围内应逐渐靠近一个稳定值。如果只在较大 tt 时偏离,很可能是有限扰动越过了局部近似范围;如果很小的 tt 就对不上,则要检查代理曲率、统计估计或表示误差。

这项实验把两个经常混在一起的问题分开了:“曲率算得准不准”和“压缩走得太远以后曲率还有没有用”。也应包含预测为负或接近零的配对,不能只挑最亮的正例。安全组合恰恰可能是实际预算分配最想找的结果。

10.3 与更便宜的决策规则比,才能判断准备成本值不值

诊断表示最终应当服务于选择压缩方案。因此,公平比较的终点是同一保留资源预算下的模型质量,而不只是矩阵拟合或图像细节。

有意义的对照包括对角敏感度、逐层块近似、参数量、激活尺度、少量直接压缩试验,以及这些信息的组合。如果已有便宜分数足以选中同一组层,那么更精细的跨层表示未必为该次任务带来净收益。

举个决策上的例子:固定校准预算,可以花在增加 Kronecker 项数,也可以花在直接评估更多候选配对。哪一种更合算,取决于未来是否会反复使用这份统计。如果要搜索很多压缩率、很多恢复配置,一次昂贵准备可能被摊薄;如果只是做一次小改动,少量直接试验可能更经济。

论文已经给了小模型的项数扫描和大模型的单项时间。下一步最有帮助的是把两端接起来:在多个项数下,同时报告峰值内存、校准遍数、求解时间、方向预测质量和最终选中模型的质量。这样读者才能看到多一项究竟买到了多少决策收益。

10.4 修复实验需要相同机会,而不只是相同秩

前面的二次模型说明,可恢复损伤与 HRCH_{RC}、HRRH_{RR} 和实际误差共同有关。因此,可以尝试用“预计能恢复多少”来选位置,并与始终选 V 的经验规则,以及少量验证集试选比较。

对 LoRA,给不同形状矩阵相同的秩,不等于给相同可训练容量。对一个 n×mn\times m 矩阵,秩 rr 的增量通常需要 r(n+m)r(n+m) 个因子参数。总是选更大的矩阵,可能仅因为可训练参数更多而占优;反过来,小 V 投影也可能有很高的每参数恢复效率。两者都值得报告,而不是默认相同秩已完成公平控制。

作者关于异常通道的解释也可以变成一个可检验干预:先施加合适的异常值缓解变换,确认通道统计确实改变,再重复方向化的 NLL 测量和同预算修复。如果目标交互随之减弱,才更支持提出的机制。仅仅最终质量变好,还不能区分异常通道被修复和整体量化难度降低这两种解释。

以上都是建议的延伸实验。本笔记实际完成的是论文与附录阅读、公式推导、原表数值复算以及文档排版检查,没有报告新的语言模型训练或压缩跑分。

11. 结论

这篇论文最有价值的贡献,是把全组参数的梯度信息变成一个还能保留跨层结构的表示:重排带来少量 Kronecker 项的表达,矩阵自由乘法避免构造巨大矩阵,独立对角线改善小网络上的拟合。每一步的作用和成本都可以分开理解。

对压缩实践的启发是有条件的,却很有用:几组参数同时改动时,损伤未必能从独立分数相加得到;另一组参数的更新,也可能成为修复已发生损伤的通道。联合破坏与 V 投影恢复实验把这个想法变得具体。

需要保留的边界同样清楚:经验 Fisher 是代理,Kronecker 项数不是原矩阵普通秩,线性存储带有不小的常数,敏感层排序会随模型与实验口径改变。尤其是困惑度上的正残差,还不足以单独证明 NLL 上存在相应交互。

如果沿这项工作继续做,我会优先看实际误差方向上的 NLL 预测,以及相同准备预算、相同修复预算下,最终决策是否比便宜基线更好。这比单纯追求更精细的热力图,更接近压缩系统真正需要回答的问题。

参考资料与资源

  1. Yusupov, V., Cherniuk, D., Frolov, E. Scalable Kronecker-Fisher Approximation: Efficient Hessian Analysis for Billion-Parameter Language Models Compression,2026。本文依据第 3–5 节、表 1–3、图 2–11 及附录 A–C。
  2. 所读版本的全文 HTML。公式与图表读数同时对照了原 PDF。
  3. 所读 arXiv 条目与论文中没有确认到本论文的官方代码资源;相关 GFWSVD 仓库不应被当作本论文的资源入口。

图 1–3、5、9 是原创解释性图示;图 4、6、8 重绘明确标注的原论文表格;图 7 对原图 11 的显示值做算术复算。本文公式编号为本地编号,不代替原论文编号。