蒸馏 vs 剪枝 vs 量化:模型压缩三件套的定位
前置知识:本文是系列第 5 篇(L1 入门总览)。建议先读《知识蒸馏是什么》《能解决什么》。本文帮你把”蒸馏”放进模型压缩整体工具箱里,避免和剪枝、量化混为一谈。
一、模型压缩三件套
当大模型跑不动时,工程师手里有三把常用”刀”:
| 手段 | 作用对象 | 做了什么 | 典型收益 |
|---|---|---|---|
| 蒸馏 Distillation | 模型”知识/功能” | 用大模型教出小模型 | 换结构、保能力 |
| 剪枝 Pruning | 模型”参数/连接” | 删掉冗余权重/通道/层 | 减参数量 |
| 量化 Quantization | 模型”数值精度” | 高精度→低精度(如 FP32→INT8) | 减体积、加速 |
三者回答的是不同问题:蒸馏问”能不能换个更小的模型还这么聪明”;剪枝问”原模型里哪些东西是多余的”;量化问”表示每个数一定要用那么多 bit 吗”。
二、蒸馏(Distillation):迁移知识,而非压缩表示
蒸馏(Hinton et al. 2015, arXiv:1503.02531)的本质是训练一个新的、更小的学生模型。它不修改教师本身,而是借教师的软标签(暗知识)从头/半头训一个轻量网络。
特点:
- 可以改变模型结构:学生不必和教师同构(如 FitNets 让”瘦深”学生模仿”宽浅”教师)。
- 收益来自”重新学习”:学生通过模仿获得比硬标签训练更好的泛化。
- 代价:需要额外的训练过程(有训练数据/教师推理成本)。
DistilBERT(Sanh et al. 2019, arXiv:1910.01108)是典型:重新训出一个更小的 BERT 变体,体积 -40%、速度 +60%、保 ~97% 性能。
三、剪枝(Pruning):删冗余
剪枝不动”训练一个新模型”这件事的目标,而是在现有模型里做减法:
- 非结构化剪枝:把接近零的权重置零(稀疏化),需要专用稀疏算子才能真提速。
- 结构化剪枝:删整通道/整层,硬件友好,能直接减 FLOPs。
- 剪完通常还要微调恢复精度。
剪枝回答”这个已经训好的模型能不能更瘦”,但它不改变模型家族,只是”瘦身”。
四、量化(Quantization):降精度
量化把权重/激活从高精度(如 FP32)换成低精度(如 FP16、INT8、INT4):
- 直接减小模型文件体积(存储位宽减半或更多);
- 在支持低精度计算的硬件上显著加速;
- 通常几乎无损,或只需少量校准/微调。
量化不动模型结构、也不重新学知识,只是”用更省的数表示同样的东西”。NVIDIA TensorRT Model Optimizer 即支持训练时蒸馏与量化感知训练的配合(见事实库官方文档条目)。
五、三者可以组合,且常常组合
重要认知:它们不是三选一,而是可叠加的流水线。
一个常见落地顺序:
- 蒸馏:把大模型压成结构更小、精度接近的学生(换模型);
- 剪枝:在学生上删冗余通道(再瘦身);
- 量化:把最终权重转 INT8/FP16(再压缩存储与加速)。
每一刀切在不同维度(知识 / 参数 / 精度),叠加收益而互不冲突。例如先 DistilBERT 再量化,是工业界非常现实的组合。
六、蒸馏的独特价值
和剪枝、量化比,蒸馏的不可替代之处:
- 结构性自由:学生可以是完全不同的轻量架构(适合端侧定制),剪枝/量化受原结构束缚。
- 跨模型家族迁移:可把 CNN 教师的知识迁到轻量网络,或把大模型能力”下放”到小模型。
- 精度保持能力强:通过暗知识监督,小模型能在大幅减量的同时保住泛化,这正是 DistilBERT 守住 ~97% 的原因。
反过来,蒸馏的短板是需要训练。若你只想”快速把模型变小一点、不想重训”,剪枝+量化往往更快;若你追求”小结构还聪明”,蒸馏才是关键一刀。
七、选型决策树
- 只想快速变小、不愿重训 → 剪枝 + 量化(不动训练流程)。
- 想要换更轻的结构还聪明 → 蒸馏(需要训练)。
- 既要小结构又要再瘦身 → 蒸馏 → 剪枝 → 量化,串联三刀。
- 端侧极致优化 → 通常三件套全上:蒸馏出学生,剪冗余通道,量化到 INT8/FP16。
一句话:剪枝量化是”在原有模型上做减法”,蒸馏是”另起炉灶训个更聪明的小模型”。需求决定先用哪把刀,现实工程常常三把一起用。
八、小结
- 蒸馏 = 换小模型并迁移知识;剪枝 = 删冗余参数;量化 = 降数值精度。
- 三者作用维度不同,可组合成”蒸馏 → 剪枝 → 量化”的压缩流水线。
- 蒸馏的独特价值在于结构自由与跨家族知识迁移,代价是需要再训练。
延伸阅读 / 参考文献
- Hinton, G., Vinyals, O., Dean, J. (2015). Distilling the Knowledge in a Neural Network. arXiv:1503.02531.
- Sanh, V., et al. (2019). DistilBERT, a distilled version of BERT. arXiv:1910.01108(NeurIPS 2019 Workshop on Energy Efficient ML).