蒸馏 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 即支持训练时蒸馏与量化感知训练的配合(见事实库官方文档条目)。

五、三者可以组合,且常常组合

重要认知:它们不是三选一,而是可叠加的流水线

一个常见落地顺序:

  1. 蒸馏:把大模型压成结构更小、精度接近的学生(换模型);
  2. 剪枝:在学生上删冗余通道(再瘦身);
  3. 量化:把最终权重转 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).
本文累计阅读