剪枝(Pruning)
一句话 TL;DR:剪枝是删除模型中"不重要"的参数或连接,让模型变稀疏。理论支撑是"Lottery Ticket"假说--大模型里藏着一个稀疏的小子网络,效果一样好。剪枝与 量化、知识蒸馏 并列三大压缩技术。但实际落地比量化难:稀疏模型需要特殊硬件/算子才能加速。
L1 · 一句话点破
剪枝:把模型里"不重要"的权重置 0(或删除),让模型变稀疏,从而减少计算和存储。
原始权重: [0.5, 0.001, 0.3, 0.0002, 0.8, 0.0001, ...]
剪枝后: [0.5, 0, 0.3, 0, 0.8, 0, ...] # 小值置 0
存储: 只存非零位置和值,节省空间直觉:模型很多权重接近 0,对输出影响小,删了影响不大。这是"冗余"的另一面(量化利用数值冗余,剪枝利用结构冗余)。
L2 · 通俗类比
公司裁员:
- 不裁员:所有人留着,效率低但稳定
- 随机裁员:乱裁一气,可能裁到关键员工,公司垮
- 按绩效裁员:裁绩效差的(小权重),保留核心员工(大权重),公司照常运转
- 结构性裁员:整个部门裁掉(结构化剪枝),组织更精简
剪枝同理:
- 非结构化剪枝:逐个权重判断,小的置 0。模型变稀疏,但需要特殊硬件加速
- 结构化剪枝:整个通道/层/头删除。模型架构本身变小,通用硬件能加速
裁员的权衡:裁多少?裁谁?裁完要不要重新培训(微调)?剪枝也面临这些问题。
关键洞察:大模型里很多参数是冗余的。Lottery Ticket 假说 说:一个训练好的大模型里,存在一个稀疏的子网络(10-20% 参数),单独训练能达到同样效果。剪枝就是找出这个子网络。
L3 · 正经定义
剪枝(Pruning):删除模型中不重要的参数或结构,降低复杂度。
按剪枝粒度分:
| 类型 | 剪枝对象 | 加速 | 代表 |
|---|---|---|---|
| 非结构化 | 单个权重 | 需稀疏硬件 | Magnitude Pruning |
| 半结构化(N:M) | 每 M 个权重剪 N 个 | NVIDIA 稀疏张量核心 | 2:4 稀疏 |
| 结构化 | 通道/层/头 | 通用硬件 | Channel Pruning |
按剪枝时机分:
| 时机 | 描述 |
|---|---|
| 训练后剪枝(Post-training) | 训完再剪,最简单 |
| 训练中剪枝(During training) | 如 Lottery Ticket |
| 训练前剪枝(Initialization) | 找稀疏初始化,再训练 |
经典流程(Iterative Magnitude Pruning, IMP):
1. 训练模型至收敛
2. 评估每个权重的重要性(如绝对值)
3. 把最不重要的 p% 权重置 0
4. 微调恢复精度
5. 重复 2-4 直到目标稀疏度参考资料:
- Han et al., 2015 - Learning both Weights and Connections - 经典剪枝
- Frankle & Carbin, 2018 - Lottery Ticket Hypothesis - 必读
- Mishra et al., 2021 - N:M Sparsity - 2:4 稀疏
- He et al., 2017 - Channel Pruning
L4 · 原理深挖
4.1 为什么剪枝有效:参数冗余
大模型严重过参数化(见 过拟合 & 正则化 的 double descent)。实际"有效"参数远少于总参数:
- 大部分权重接近 0,对输出影响小
- 不同参数可能编码相似信息(冗余)
- 删除部分参数,其他参数可补偿
实证:很多神经网络能剪掉 80-90% 参数,精度损失 <1%。这是剪枝可行的根本原因。
但"能剪"不等于"能加速"(见 4.3),这是剪枝落地的关键难点。
4.2 Lottery Ticket 假说
Frankle & Carbin, 2018 提出震撼性假说:
一个训练好的 dense 网络里,存在一个稀疏子网络("中奖彩票"),用同样的初始化单独训练,能达到接近 dense 网络的效果。
含义:
- 大模型的价值不在"所有参数",而在"那个稀疏子网络 + 初始化"
- 训练大模型本质是"搜索这个子网络"
- 找到子网络后,大模型可以剪成小模型
挑战后续研究:
- 早期彩票(Early-Bird Ticket):训练早期就能找到好子网络
- 彩票迁移:跨任务、跨数据集的彩票能否复用
- 彩票生成:能否直接生成彩票初始化,省去训练大模型
Lottery Ticket 是剪枝领域最重要的理论贡献,重塑了对"大模型为什么有效"的理解。
4.3 非结构化 vs 结构化:加速的难题
剪枝的工程难题:非结构化剪枝(逐个权重置 0)很难在通用硬件上加速。
原因:GPU/CPU 的矩阵乘法是密集计算,稀疏矩阵(大部分 0)反而慢,因为:
- 内存访问仍按 dense 模式
- 稀疏索引的开销大于省的计算
- 硬件未优化稀疏访问
解决:
① 结构化剪枝
剪整个通道/层/头,让稀疏模式对齐硬件。
通道剪枝: 删除第 5、12、20 个通道
架构: 输入维度从 1024 变为 1021
硬件: 通用 GPU 直接加速(架构变了,但计算仍是 dense)代价:剪枝粒度粗,相同稀疏度下精度损失比非结构化大。
② N:M 稀疏
半结构化剪枝,每 M 个权重剪 N 个。NVIDIA Ampere+ 的稀疏张量核心原生支持 2:4 稀疏(每 4 个权重剪 2 个)。
2:4 稀疏: [a, 0, b, 0, c, 0, d, 0, ...] # 每 4 个有 2 个非零
硬件: NVIDIA A100/H100 直接 2x 加速N:M 稀疏是非结构化和结构化的折中:粒度细(精度好),硬件可加速。
③ 稀疏算子库
如 SparseRT、TVM 等优化稀疏矩阵计算。但仍不如 dense 通用。
实务:N:M 稀疏(特别是 2:4)是当前剪枝落地主流,结构化剪枝次之,纯非结构化剪枝主要用于研究。
4.4 剪枝的"重要性"评估
剪枝的核心问题:怎么判断哪些参数不重要?
① Magnitude(绝对值)剪枝
最简单:绝对值小的权重不重要,置 0。
prune_mask = |W| > threshold
W_pruned = W * prune_mask优点:简单、无需额外计算。 缺点:绝对值小不等于不重要(某些小权重可能关键)。
② Gradient-based 剪枝
用梯度评估重要性:梯度大的权重对损失敏感,不应剪。
$$ \text{importance}(w) = |w \cdot \nabla L| $$
如 Optimal Brain Damage 用二阶信息(Hessian)。
③ Movement 剪枝
训练过程中"动得少"的权重不重要,剪掉。
④ Learned Pruning
训练一个"剪枝门"(mask),让模型自己学该剪哪些。
实务:magnitude 剪枝仍是基线,简单有效。复杂方法在特定场景略好,但工程复杂度高。
4.5 剪枝 + 量化 + 蒸馏:组合压缩
实际部署常组合三种压缩:
1. 蒸馏: 训小模型(教师 -> 学生)
2. 剪枝: 把学生剪稀疏
3. 量化: 把剪枝后的模型量化
4. 微调: 恢复精度这种"压缩 pipeline"能实现 10-50 倍压缩,且精度损失可控。如 MobileNet 等移动端模型。
大模型时代,组合压缩相对少见(量化和蒸馏更主流),但在边缘部署(手机、IoT)仍是关键技术。
4.6 大模型时代的剪枝
大模型剪枝的特殊性:
① 剪枝收益相对小
大模型已经过参数化,再剪枝的边际收益不如量化。70B 模型剪 50% 仍是 35B,仍是"大模型"。
② 训练成本高
经典 IMP 需要多次"剪枝-微调"循环,大模型微调成本高,循环不现实。
③ 稀疏激活 vs 稀疏参数
MoE(混合专家)本质是"稀疏激活"--参数总量大但每次推理只用部分。这和剪枝的"稀疏参数"不同,但思路相通。
④ 推理引擎对稀疏支持有限
vLLM、TensorRT-LLM 等对结构化剪枝支持不完善,限制了剪枝在大模型推理的落地。
但研究仍在推进:
- LLM-Pruner(Ma et al., 2023):结构化剪枝 LLM
- Wanda(Sun et al., 2023):无需重训的 LLM 剪枝
- Sheared LLaMA(Xia et al., 2023):目标导向的 LLM 剪枝
这些工作让 LLM 剪枝逐渐实用,但仍是研究热点而非工程标配。
L5 · 沿革与坑
沿革
- 1989-1990:Optimal Brain Damage 等早期工作,用二阶信息剪枝。
- 2015:Han et al. - Learning both Weights and Connections 把剪枝带回深度学习主流。
- 2017:He et al. - Channel Pruning 推动结构化剪枝。
- 2018:Frankle & Carbin - Lottery Ticket Hypothesis 提出震撼性假说,重塑对剪枝的理解。
- 2020-2021:NVIDIA 推出 2:4 稀疏张量核心,N:M 稀疏 落地。
- 2023:Wanda、Sheared LLaMA 等让 LLM 剪枝可行。
- 2024-2025:剪枝在大模型落地相对量化、蒸馏少,但仍是研究热点。MoE 的稀疏激活思想与剪枝相通。
常见误解
❌ 误解:剪枝 80% 参数速度就提升 5 倍。 ✅ 真相:非结构化剪枝在通用硬件上几乎不加速(稀疏矩阵反而慢)。需要结构化剪枝或 N:M 稀疏才能实际加速(4.3)。
❌ 误解:剪枝一定让模型变笨。 ✅ 真相:适度剪枝(50-80%)精度损失常 <1%。大模型过参数化严重,冗余多,剪枝空间大(4.1)。
❌ 误解:Lottery Ticket 说明大模型没必要。 ✅ 真相:彩票假说说大模型里有稀疏子网络,但找到这个子网络仍需先训练大模型。大模型是"搜索过程",不是浪费(4.2)。
❌ 误解:剪枝和量化二选一。 ✅ 真相:可组合。剪枝让模型稀疏,量化让数值低精度,两者正交,常组合使用(4.5)。
❌ 误解:大模型时代剪枝过时了。 ✅ 真相:在大模型上剪枝收益相对小(量化和蒸馏更主流),但 Wanda、Sheared LLaMA 等让 LLM 剪枝可行。在边缘部署仍是关键技术(4.6)。
❌ 误解:剪枝就是删小权重。 ✅ 真相:magnitude 剪枝是基线,但还有梯度-based、movement、learned 等多种"重要性"评估方法。绝对值小不等于不重要(4.4)。
面试怎么考
- "什么是剪枝?为什么有效?" --删不重要参数让模型稀疏。有效因为大模型过参数化、有冗余(L1、4.1)。
- "非结构化 vs 结构化剪枝?" --非结构化剪单个权重(需稀疏硬件加速);结构化剪通道/层(通用硬件加速)。N:M 是折中(4.3)。
- "Lottery Ticket 假说?" --大模型里有稀疏子网络,用同样初始化单独训练能达到接近效果。说明大模型价值在子网络+初始化(4.2)。
- "剪枝为什么在通用 GPU 上难加速?" --稀疏矩阵内存访问仍按 dense,索引开销大于省的计算。需结构化或 N:M 稀疏(4.3)。
- "2:4 稀疏是什么?" --每 4 个权重剪 2 个,NVIDIA Ampere+ 原生支持,直接 2x 加速(4.3)。
- "剪枝和量化怎么组合?" --剪枝让稀疏,量化让低精度,两者正交。pipeline:蒸馏->剪枝->量化->微调(4.5)。
延伸阅读
- 📄 Han et al., 2015 - Learning both Weights and Connections
- 📄 Frankle & Carbin, 2018 - Lottery Ticket Hypothesis - 必读
- 📄 Mishra et al., 2021 - N:M Sparsity
- 📄 Sun et al., 2023 - Wanda
- 📄 Xia et al., 2023 - Sheared LLaMA
上一篇:知识蒸馏 -- 用大模型教小模型。下一篇:推理引擎(vLLM / TensorRT-LLM) -- 生产部署的加速器。