一个训练好的大模型,参数动辄几十亿甚至上千亿。但研究发现:其中相当一部分参数,去掉三成到五成之后,效果也几乎没变化。模型剪枝要做的,就是识别并移除这些「不干活」的部分,让模型变小、变快。
一句话说清:删掉「不干活」的部分
模型剪枝(Model Pruning)是识别并移除那些对结果影响很小的参数或结构,让模型变小、变快。一个模型的参数量动辄几十亿,其中大量数值极小的权重贡献微乎其微,剪掉它们,输出质量几乎不变,计算和显存占用却明显下降。
一个直观类比:给树修剪枝叶
剪枝像给一棵树修剪枝叶:剪掉那些不结果、还耗养分的枝条,剩下的果实反而长得更好。关键在「剪对地方」——剪错了,整棵树就废了。这个类比对应到模型上,就是「哪些参数真的可有可无」并不总是一眼能看出来的。
三种做法:按大小、按结构、剪后再训练
按大小剪(非结构化剪枝):把数值很小的参数当作「不重要」直接删掉。这种剪法粒度细,但剪出来的稀疏结构不规则,硬件不一定能因此加速。
按结构剪(结构化剪枝):整块地删除,比如去掉某些神经元、某些通道或注意力头。这种剪法让模型结构保持规整,硬件加速才真正有效,代价是可能一次删掉太多。
剪完再训练:删掉之后效果会掉,需要用数据再训练一轮「补回来」。这一步常被忽略,却是决定剪枝成败的关键——不补训练,效果损失会很大。
这些被删掉的参数,本质上就是权重文件里那些接近零的数值;删掉之后再补训练,思路和模型蒸馏里「用训练把能力补回来」也有相通之处。
它和量化、蒸馏有什么不同
| 手段 | 核心动作 | 结果 | 主要代价 |
|---|---|---|---|
| 剪枝 | 删掉不重要的参数 | 模型变小变快 | 剪过头效果下降 |
| 量化 | 降低数值精度 | 体积缩小、计算更快 | 复杂任务精度损失 |
| 蒸馏 | 大模型教小模型 | 得到更小的学生模型 | 学生能力有上限 |
四个常见误区
误区一:以为剪得越多越好。剪过头,效果会明显下降,省下的成本抵不上质量损失。
误区二:只按数值大小剪。数值小不等于不重要,粗暴剪会伤到关键能力。
误区三:忽略硬件。不规则的稀疏结构,理论省算力,实际可能跑不快。
误区四:忘了补训练。不重新训练,效果损失可能很大。
它做不到什么:剪过头就伤筋动骨
剪枝的边界很清楚:它只能去掉「冗余」,无法凭空创造能力。如果模型本身能力不足,剪枝只会让它更弱。剪的比例越高,效果下降的风险越大,而且这种下降不一定均匀——某些任务可能突然失准,另一些任务却还正常。所以剪枝通常要配合评估,逐项验证关键能力还在不在。
另一个边界是部署成本:剪枝省的是推理开销,这是持续支出,模型小一点、快一点,长期省下的开销可观,也能部署到更普通的设备上。但它不改变模型的知识来源和训练成本,训练阶段的开销一分不少。剪枝后的模型对训练数据之外的分布漂移也更敏感,之前能应付的边界情况,剪完可能就不稳。
为什么你会在意剪枝
速查:剪枝与你的关系
- 同一模型有「轻量版」和「完整版」,往往就是剪枝、量化后的产物
- 手机、边缘设备能跑的模型,多数经过压缩
- 选轻量版时,重点验证你最关心的那几类任务
对普通用户来说,剪枝的意义是解释了一个现象:为什么同一个模型会有「轻量版」和「完整版」,以及为什么轻量版在大多数场景够用、在少数复杂任务上会掉链子。它和模型量化、蒸馏同属「用可接受的效果损失,换取更低成本」的模型压缩家族。


