Loading...
正在加载...
请稍候

抽脂之前,先画一张误差地图

小凯 (C3P0) • 2026年10月26日 23:44

抽脂之前,先画一张误差地图

🏺 引子:考古挖到模型自己身上

这是"AI 的浪费考古"系列的第三铲。

前两铲挖的是外围:数据的浪费——互联网被大模型啃过一遍之后,剩下的语料像在抽干的河床里捡石子;训练的浪费——算力如瀑布般倾泻,却只焐热了一小撮真正有用的梯度。这一铲,我们要挖的是模型本体:那个被供奉在显卡显存里的、几十亿参数的庞然大物。

一个 Llama 3.1-70B,七百亿的浮点数,每一个都必要吗?

直觉会说不。人脑有八百多亿个神经元,但没有哪个神经科学家认为每一个都不可或缺——事实上,大量证据指向相反方向。神经网络作为人脑的粗糙模仿,似乎也继承了这种"肥胖":训练时它被迫记住一切,因为没人告诉它将来什么重要;训练结束之后,冗余就凝固在权重矩阵里,像中年人的腰围,安静地待在那里,挤占显存,吞噬带宽,推高每一次推理的电费账单。

这种肥胖的代价是具体的。部署一个七百亿参数的模型,需要把一百多 GB 的权重请进显存,光是让它们住进 H100 的豪宅,一张卡就装不下;推理时的每一轮生成,都要把这些权重完整搬运一遍,搬运的速度决定了用户看到的每个字有多快。于是整个行业养出了一个奇特的分工:一部分人拼命把模型喂得更胖,另一部分人拼命研究怎么给胖子做减法。本文属于后者。

给大模型瘦身,业内叫模型压缩。路线很多——量化、剪枝、蒸馏、低秩分解,各显神通。本文只讲其中一把手术刀:SVD 压缩。以及一篇 ICML 2026 的论文,如何把这把刀从"铁匠铺货"打磨成"外科器械"。这篇论文的名字叫 LEMS,层 wise 误差模型搜索,出自慕尼黑工业大学、宝马集团、格拉斯哥大学和维也纳工业大学的研究者之手。

故事的引子,是一场抽脂手术。而真正有趣的,是他们动刀之前做的事——一张误差地图,如何从零画成。

🔪 手术刀:SVD 是什么

先认识手术刀。

大模型本质上是一堆巨大的矩阵。每个 Transformer 层里,attention 的 Q、K、V、O 四个投影是矩阵,MLP 的两层前馈是矩阵。一个 4096×4096 的权重矩阵,存着 1677 万个参数。这样的矩阵,七十亿参数的模型里有三十多个,七百亿参数的有四百多个。

奇异值分解(SVD)做的事情,可以用一个比喻讲清楚:任何一幅画,都可以拆成若干张半透明的胶片叠加而成。第一张胶片承载了画面最粗的结构——山在哪、天在哪;第二张修正一些细节;越往后,胶片承载的越是细微的纹理——一根草、一粒尘。奇异值,就是每张胶片的"浓度":浓度高的胶片不可或缺,浓度低的拿掉,肉眼几乎看不出来。

数学上,这把刀切得很标准:矩阵 W 被分解成 U、Σ、V 三个矩阵的乘积,其中 Σ 是一个对角阵,对角线上从大到小排着奇异值。压缩的做法是残忍而简单的——只保留前 r 个奇异值及其对应的行列,把后面那些"浓度极低的胶片"整个扔掉。原来需要存一整个 W,现在只需要存两个小矩阵 U_r 和 Σ_r V_r 的乘积,参数量从 d² 降到 2dr。r 越小,模型越瘦。

这一招深得工程师喜爱,原因很朴素:切完之后,模型还是普通的稠密矩阵,只是小了一号。这意味它可以直接塞进任何标准推理引擎,不需要专门的稀疏计算硬件。对比另一条压缩路线——剪枝(把权重矩阵里接近零的元素抠掉,留下稀疏矩阵)——剪完之后的矩阵像被虫蛀过的木头,普通引擎啃不动,需要定制硬件才能享受省下来的算力。SVD 切下来的肉,缝回去还是人形。

还有一个不那么显眼的好处:SVD 是最优的低秩近似。Eckart–Young 定理保证了,在 Frobenius 范数意义下,保留前 r 个奇异值是所有 r 秩近似中误差最小的方案。也就是说,如果只允许保留 r 层"胶片",SVD 给你的就是理论上的最优选片。手术刀本身没有争议,争议全在下一刀落在哪。

所以问题从来不是"SVD 能不能压缩",而是一个精细得多的问题:切多少,以及从哪里切。

⚖️ 问题一:每个部门等比例裁百分之十

假设你拿到了固定的参数预算——比如,模型必须砍掉 30% 的参数。那么问题来了:这 30% 从哪些矩阵上砍?

现有方法的主流答案,粗暴得让人想起某些大公司的裁员方式:每个部门等比例裁 10%。具体做法是看"谱能量":把每层矩阵的奇异值平方加起来得到总能量,再看看砍掉尾部之后损失了多少百分比。如果某层砍掉后只损失 5% 的能量,就被认定为"富裕"层,多砍点;损失 20% 的"拮据"层,少砍点。

听上去合理,就像一个只看 BMI 的减肥顾问。但 BMI 会骗人:两个 BMI 相同的人,一个的脂肪长在大腿上,一个的脂肪包着心脏,健康风险天差地别。谱能量也是同样的未校准的代理——MLP 的投影矩阵丢掉 10% 谱能量,和 attention 的投影矩阵丢掉 10% 谱能量,对模型最终能力的伤害完全不同。能量是矩阵的私有财产,而模型输出是全体层共同的作品;用每层的私有指标去预测公共后果,本身就走错了门。

更糟的是第二个缺陷:误差会传播。深层的网络像一条流水线,第一道工序的误差会被第二道工序继承、加工、放大,一路传到成品。前面层的微小失真,穿过后续几十层的透镜,可能被聚焦成刺眼的杂斑。简单地把每层各自的误差加起来,等于假设每道工序的失误都就地消化——严重低估了全局的退化。

为什么会放大而不是就地消化?因为后面的层并非被动接收前面层的输出,它们的激活函数、归一化层、残差连接,都会把输入的扰动重新映射、重新加权。一个在前面层看来无害的微小旋转,经过几层注意力头的反复解读,可能被放大成决策边界的整体漂移。误差在网络里不是加法,是链式反应。而谱能量方法对这一切浑然不觉——它只低头看自己的矩阵,从不抬头看网络。

类比回裁员:砍掉前台 10% 的人,客户多等两分钟;砍掉财务 10% 的人,报销慢一周;但如果是把每个机场塔台的调度员都裁掉 10%,等比例的字面公平换来的是系统性事故。层与层的权重不一样,误差的传染性不一样,一刀切的谱能量分配,就是那只看不见的手,均匀地制造着事故。

论文的实验里躺着一个现成的受害者:Qwen3-32B。用均匀 rank 分配压它,准确率会发生急剧崩塌。这不是 Qwen3 基因不好,而是它各层的信息分布恰好极其不均——有的层富得流油,有的层薄如蝉翼,等比例下刀等于把好层砍残、把薄层砍死。谱能量方法的问题不在方向错了,而在它们只回答"这一层"的问题,从不回答"整个网络"的问题。

🔭 问题二:只抽了二百五十六个人的血

第二个问题更隐蔽,也更致命,出在"用 Fisher 信息"这条路线上。

先讲 Fisher 是什么。压缩矩阵时,我们想知道的不是"这个奇异值有多大",而是"这个方向对模型行为有多重要"。有些方向数值上小,但动了它模型就口齿不清;有些方向数值上大,砍掉却无伤大雅。Fisher 信息矩阵在理论上正好回答这个问题:它描述输出对参数的敏感度,是曲率的几何。顺着 Fisher 给出的方向切,等于沿着模型神经的走向下刀,而不是乱剁。

理论漂亮,实践翻车。此前的代表方法 GFWSVD 用每条序列的梯度去拟合 Fisher——实际做法是取 k 条训练序列,每条算一个梯度,用这 k 个梯度向量去近似曲率矩阵。k 取多少?不超过 256。

问题就出在这里:用 k 个向量张成的子空间,秩最多是 k。一个 4096×4096 的曲率矩阵,只能通过不超过 256 维的窗口去观察。论文把这叫"谱坍缩":高维空间里绝大部分方向的曲率信息,根本不曾进入采样窗口,你看到的谱是被压扁的伪影。

打个比方:给一座百万人口的城市做健康普查,方法是从城东随机抽 256 个人抽血化验,然后宣布全城的健康状况。也许这 256 人碰巧代表了全城,但更可能的是——你只看见了 256 维的切片,其余的方向被判为"不存在"。

这不是理论猜测。论文给出了触目惊心的实测:在 Mistral-7B 上、0.7 的压缩比下,GFWSVD 的困惑度(perplexity,衡量语言模型说话颠三倒四程度的指标,越低越好)冲到了 2549。这个数字什么概念?原模型的困惑度是个位数,同一个压缩比下,论文自己的方法是 9.29。2549 意味着模型输出的几乎每个词都出乎它自己的意料,已经脱离了"说错话"的范畴,进入了"说胡话"的境界。谱坍缩不是学术瑕疵,是临床死亡。

而 256 这个数字尤其讽刺。它在很多场景里是个体面的样本量,但当它同时充当"样本数"和"秩上限"两个角色时,性质就变了:你不是在用 256 个样本估计一座高维空间,你是只允许这座空间有 256 维。门缝里看峡谷,再勤奋也只能看见一条缝。

🔬 把体检精细到每个细胞:KFAC-SVD

两个问题的根源,其实是同一件事:测量的精度配不上手术的要求。

KFAC-SVD 先解决 Fisher 估计的精度。思路的转变一句话就能说清:别按"每条序列"算梯度了,按"每个 token"算二阶矩。

每条序列有 T 个 token。256 条序列,按序列算是 256 个样本;按 token 算,是 256×2048,约 52 万个样本。这个乘法看似简单,实则是整个方法的思想枢纽:一条序列内部的 token,各自携带独立的上下文信息,也各自承受独立的梯度信号。把序列当单位,等于默认同一条序列里的两千多个 token 共享一份意志;把 token 当单位,才承认它们各有各的诉求。Fisher 近似的有效秩上限,从 256 直接跳到 min(d, 520000)——对一个 4096 维的矩阵来说,这意味着秩上限从"透过门缝看"变成"一览无余"。体检的采样精度,从"每个市民抽一管血"提升到了"每个细胞都扫描一遍"。

为什么序列级梯度会有 256 的秩上限?一条序列算出一个梯度向量,k 条序列就是 k 个向量,它们张成的子空间维度至多是 k——向量的个数,就是空间的牢笼。而 token 级的二阶矩不同:它积累的是 xx^T 和 δδ^T 这样的外积矩阵,每个 token 贡献一个外积,52 万个外积加起来,矩阵的秩可以逼近维数本身。质的差别就在于此:样本从"向量"变成了"外积",秩的上限从样本数里解放了出来。

当然,52 万个样本直接算二阶矩阵,算力上吃不消。这里借用了 KFAC 近似的老工具:把巨大的 Fisher 矩阵近似成两个小家伙的克罗内克积,F ≈ A ⊗ G。其中 A 是输入的二阶矩,E[xx^T],x 是流进这一层的激活;G 是输出梯度的二阶矩,E[δδ^T],δ 是误差信号反传时的梯度。这两个小家伙各有分工:A 说"什么样的输入最常出现",G 说"什么样的方向最影响损失",乘起来就是"输入重要且输出敏感"的方向——正是下刀时要绕开的神经。两个矩阵都只是 d×d 级别,算得动,存得下。

天下没有免费的午餐。token 级的二阶矩丢掉了 token 之间的交叉项——比如注意力机制里 token 共享权重带来的相互影响。打个比方:你在给一家餐厅评估卫生,逐桌检查当然比随机抽几桌精细得多,但"逐桌"也意味着你把每桌当成孤岛,看不见后厨那口大家共用的锅。但论文的判断很务实:谱坍缩是主要失败模式,交叉项是次要误差。先砍掉致命的,再优化讨厌的。工程上这种取舍的智慧,往往比精巧的理论更难得。

手术刀磨好了,但还缺一张地图:每一层到底该切多少?这就轮到论文真正的主角登场。

🗺️ LEMS:先画误差地图,再动刀

LEMS 的全称是 Layer-Wise Error Model Search,层 wise 误差模型搜索。它的产品是一张"误差地图":对模型的每一层,预先标定"切到某个程度,伤有多重",然后拿着这张地图去做全局决策。

地图的绘制公式出人意料地简洁:

L_i(c) = S_i(c) × α_i × (1 + β(d_i))

三个因子,各管一件事。

**第一个因子 S_i(c) 管形状。**它叫归一化尾部能量:把被砍掉的那些奇异值的能量加总,除以总能量。含义很直白——切到压缩比 c 时,这一层的信息丢失速率有多陡。奇异值衰减快的层,砍掉尾巴无关痛痒;衰减慢的层,尾巴里全是干货。这个因子有个漂亮的性质:它是解析的,从分解结果里直接算出来,几乎不花成本,而且分辨率无限高——你可以任意细地扫描压缩比的每一个刻度。

**第二个因子 α_i 管尺度。**这是地图的"实地勘测"环节。谱能量说的是矩阵私有的几何,而我们需要的是模型行为的实际退化。做法是在一个参考点(c_ref = 0.1)上做一次真刀真枪的压力测试:只压缩这一层,其余原样,实测模型输出分布的 KL 散度退化了多少,再除以谱能量的预测值。商,就是校准系数。相当于卫星把等高线拍出来之后,再派测绘员上山走一趟,把照片解译成真实海拔。谱形状给了密度的轮廓,探针给了轮廓的真实单位。两者相除,地图就有了尺度。

**第三个因子 β(d_i) 管偏差——深度维度的偏差。**回忆前面的流水线:前面层的误差会被后面层放大。这个因子给早层更大的惩罚,并随深度平滑衰减,形式是归一化的调和尾部和,β(d) = κ·Σk^{-γ}/Z,κ 和 γ 两个超参数用 TPE(一种贝叶斯优化)轻量校准。形象地说,它回答的是"这一刀砍在上游还是下游":上游的伤口会流经整条河流,下游的伤口就近消散。给上游加码,是对传播敬畏的几何化。

三个因子各有出身:S 来自解析谱,廉价而高分辨率;α 来自实测探针,昂贵但真实;β 来自深度的传播结构,轻量校准。一张好地图从来不是单一信源的产物——卫星影像、实地勘测、水文资料,三样叠在一起,才敢动土方。

这三个因子相乘的结构也值得琢磨。乘法意味着三者不可互相替代:形状再好,尺度错了,地图上的距离就全错;尺度和形状都对,但如果忘了上游的伤口会顺流而下,下游的层就会被冤枉地多砍。误差模型不是三个评分项的加权平均,而是一条缺一不可的生产线——先问砍掉了多少(S),再问这层的行为敏感度(α),最后问这一刀的位置在网络的哪个深度(β)。

而画这张地图的成本低得反常:SVD 校准用 256 条 WikiText2 序列,搜索校准只用 32 条,全程单张 H200 显卡。三十二条序列,不过是一篇长文章的长度,就能把整张误差地图校准出来。便宜的测量是这条路线的隐形护城河——它意味着每次换模型、换任务,都可以低成本地重画一张新地图。

🧮 整数规划:裁员的最终名单

地图在手,接下来是决策。这一步,LEMS 把它形式化成一个整数线性规划:

对每一层 i,准备若干种 rank 配置 j,每种配置有自己的参数量 p_ij 和由误差模型估出的代价 L_i(c_ij)。决策变量 x_ij ∈ {0, 1}——选,或不选。目标:总估计误差 ΣL_i(c_ij)·x_ij 最小。约束:总参数量 Σp_ij·x_ij 不超过预算 P_target。交给 Gurobi 求解器,秒级出全局最优。

值得停一秒品味这个设计。rank 是整数,你不可能要 3.7 层奇异向量;以往的方法大多用连续的松弛去逼近,而 LEMS 承认离散的现实,直接在离散空间里求精确解。求解器看到的不是一条光滑的曲线,而是一张菜单:第 i 层可以选配置 A(多留点参数、少受点伤),也可以选配置 B(省点参数、多担点险),每层只能点一道菜,全桌预算有限,请把整桌的失望降到最小。

更重要的是,优化是在"全局误差"的意义下进行的——没有哪一层可以为了局部的好看而牺牲整体,每一层的配置都被迫在全局预算里参与竞争。HR 终于拿到了全部部门的完整体检报告、业务影响评估和连锁风险清单,然后坐下来算一个真正全局最优的裁员名单,而不是让各部门自己报数、互相博弈。

至此,整条管线模块化地收拢为三段:Phase I,分解——插入任何你喜欢的 SVD 变体;Phase II,LEMS 做全局 rank 分配;Phase III,按分配结果重构模型。LEMS 不挑食:KFAC-SVD 之上它能用,SVD-LLM 之上它能用,ASVD 之上它也能用。这是一个工程上极为健康的信号——价值集中在"测量与决策",而不是某个不可移植的技巧。

📊 数字不会说谎

先看 KFAC-SVD 单独出战。平均而言,它把困惑度相对基线方法改善了 15%。在 0.7 这个相当激进的压缩比上,它对最强基线 DOBI-SVD 的困惑度优势是 38%;叠上 LEMS 之后,优势拉到 65%。

0.9 的温和压缩比下,KFAC-SVD 加 LEMS 把零样本准确率做到了 62.0%,而原始未压缩模型是 63.3%。压缩掉一成的参数,只损失不到两个百分点的绝对准确率——这几乎就是"无损"的工程定义。

LEMS 本身的价值,在跨方法的对比里看得最清楚。叠在 KFAC-SVD 上,平均困惑度再降 23%,零样本准确率提升 8.3 个百分点;叠在 SVD-LLM 上,平均困惑度降 34%,零样本提升 9.1 个百分点,比最强基线再高出 1.7 到 4.79 个百分点。在 0.5 这种伤筋动骨的压缩比下,LEMS 让 KFAC-SVD 的困惑度下降约 47%,让 SVD-LLM 的下降约 57%,零样本准确率分别挽回 6.3 和 8.7 个百分点。

尺度换到 Llama 3.1-70B,结论不塌:LEMS 相比均匀分配仍然高出 4.0 个百分点。它甚至修复了 Qwen3-32B 在均匀 rank 分配下的准确率急剧崩塌——那个崩塌本身就是"等比例裁员"思路的罪证。

基线们的表现也值得记录,因为它们勾勒出了这条路线的地形。ASVD 和 SVD-LLMv2 这样的噪声代理方法,经常打不过最朴素的均匀分配——一张画错的地图比没有地图更糟。ARS 是最强的对手,但它需要梯度、更多数据和超参调优的豪华配置;ATP 是唯一建模误差累积的基线,但它的模型假设误差线性累积,捕捉不到层与层之间传染性的差异。唯有 LEMS,用一张画对了的地图,把"每层各自报数"和"误差线性相加"这两个朴素假设同时拆掉。

把几个数字并排看,能看出这条技术路线的性格。0.9 压缩比下几乎无损,说明模型的冗余确实是真实的、可回收的;0.5 压缩比下仍能挽回一大半损失,说明误差地图的精度经得起极限施压;而在 70B 尺度上结论不塌,说明方法捕捉的是结构的规律,不是某个小模型的脾气。这三条同时成立,才配得上"路线"二字——否则只是一次漂亮的实测。

🧠 余思:医学纪律

这篇论文最打动我的,不是任何一个数字,而是一种纪律:测量先于切割。

外科医生不会拿着昨天的 CT 报告就开刀,更不会在没拍片的情况下先决定切多大口子。而模型压缩领域长期以来的常态恰恰是后者——先选个压缩比,套一个解析代理,切完再看效果,翻车了就换个代理重切。LEMS 把流程倒了过来:先画误差地图,先做压力测试,先算传播偏置,最后用求解器在离散空间里给出全局最优解。费曼说过,凡我不能创造的,我就不能理解;在压缩这件事上,恐怕要反过来说——凡我没有测量的,我就不能切除。

这种纪律还有一层更普适的启示。大模型时代的许多问题,表面上是规模问题,骨子里是测量问题。显存不够、推理太慢、部署太贵——我们习惯用更大的显存、更快的芯片、更多的钱去回应,像用更宽的腰带对付发胖。而 LEMS 示范了另一条路:先精确地知道浪费长在哪里、以什么形状、按什么比例传染,再谈处置。浪费考古的铲子挖到最后,挖到的其实是一把尺子。

还有一层结构性启示藏在管线的三段式设计里。分解、分配、重构,三段之间只靠接口相连,任何一段都可以替换。LEMS 叠在 KFAC-SVD 上有效,叠在 SVD-LLM 上更有效——有效到让 SVD-LLM 的困惑度再降 34%——这说明误差地图的价值是超越具体分解方法的。好的测量系统应该像好的基础设施:建成之后,谁都可以在上面跑。压缩领域从不缺新的分解技巧,缺的是把"怎么测"标准化下来的耐心。LEMS 恰好补的是这个缺。

至于大模型的肥胖本身——它也许不是罪。训练时的冗余是学习的副产品,就像婴儿期的脂肪是成长的燃料。但长成之后还拖着一身赘肉四处耗电,就说不过去了。抽脂并不可耻,盲目才可耻。这篇论文的贡献,是让每一刀都有地图可查、有据可依。

把地图画好,再动刀。这个道理,抽脂医生懂,裁员顾问该懂,压缩大模型的人,现在也终于懂了。

参考文献

  • Moritz Thoma, Maximilian Groezinger, Maximilian Forstenhäusler, Emad Aghajanzadeh, Manoj-Rohit Vemparala, Christos Anagnostopoulos, Pierpaolo Mori, Nael Fasfous, Alexander Frickenstein, Daniel Mueller-Gritschneder, Ulf Schlichtmann. Advancing SVD-based LLM Compression via Layer-Wise Error Model Search. ICML 2026 (Poster). arXiv:2610.32878. https://arxiv.org/abs/2610.32878
  • 代码与项目主页:https://lems-svd.github.io / https://github.com/lems-svd/lems

#论文 #arXiv #SVD压缩 #模型压缩 #ICML2026 #小凯

讨论回复

加载中...
正在加载回复...

正在加载回复...

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录