2、模型压缩技术全景:梳理剪枝、量化、蒸馏、低秩分解等主流压缩技术,对比其适用场景
说到模型压缩,我脑子里第一个蹦出来的画面,是几年前在某个边缘设备项目里,MobileNetV2 跑起来都卡成 PPT 的场景。那时候我就意识到,光有好的模型结构还不够,你得学会给它「瘦身」。
今天咱们就把主流的压缩技术挨个捋一遍。剪枝、量化、蒸馏、低秩分解……这些名字你可能都听过,但什么时候用哪个?哪个效果最好?我结合自己的踩坑经验,给你讲明白。
2.1 剪枝:把模型里「摸鱼」的参数干掉
剪枝,说白了就是砍掉不重要的连接或通道。神经网络里其实有很多参数是冗余的,去掉它们对精度影响很小。
非结构化剪枝 vs 结构化剪枝
- 非结构化剪枝:把单个权重置零。稀疏度高,但硬件不友好。我在项目里试过,模型文件是小了,但推理速度几乎没变——因为 CPU/GPU 不支持稀疏矩阵加速。
- 结构化剪枝:直接砍掉整个通道或卷积核。硬件友好,速度提升明显。我建议你优先考虑这个。
我的经验:剪枝比例不是越高越好。我曾经把 MobileNetV2 的通道剪掉 70%,结果精度掉了 8 个点,怎么调都回不来。后来控制在 40%-50%,精度只掉了 1-2 个点,速度却快了 30%。
2.2 量化:用更少的比特表示参数
量化,就是把 FP32 的权重变成 INT8 甚至 INT4。你想想看,参数占用的内存直接变成 1/4,推理速度也能翻倍。
量化方式对比:
| 类型 | 精度损失 | 硬件要求 | 适用场景 |
|---|---|---|---|
| 训练后量化 (PTQ) | 较小 | 低 | 快速部署,精度要求不高 |
| 量化感知训练 (QAT) | 极小 | 需要微调 | 精度敏感场景,如人脸识别 |
| 混合精度量化 | 可控 | 中等 | 关键层保留 FP16,其余 INT8 |
避坑指南:我曾经在 MobileViT 上直接做 PTQ,结果精度掉了 5%。后来换成 QAT,只掉了 0.5%。记住:带注意力机制的模型对量化更敏感,QAT 几乎是必选项。
2.3 知识蒸馏:让「小模型」学「大模型」
蒸馏的思路很巧妙:用一个大的 Teacher 模型去教一个小的 Student 模型。Student 不仅学真实标签,还学 Teacher 的「软标签」——也就是概率分布。
为什么会有效?因为软标签里包含了类别之间的相似性信息。比如一张猫的图片,Teacher 可能输出「猫 0.9,狗 0.08,老虎 0.02」,这种分布比硬标签「猫 1.0」信息量大多了。
蒸馏的三种方式:
- 离线蒸馏:先训好 Teacher,再训 Student。最常用,我推荐新手先试这个。
- 在线蒸馏:Teacher 和 Student 一起训练。效果好,但训练成本高。
- 自蒸馏:自己教自己。嗯,这个有点意思,适合没有大模型的情况。
我的习惯:蒸馏时温度参数 T 很关键。T 太小,软标签接近硬标签;T 太大,分布太平滑。我一般从 T=4 开始调,效果不错。
2.4 低秩分解:把大矩阵拆成小矩阵
低秩分解,说白了就是把一个大的权重矩阵,拆成两个或多个小矩阵的乘积。比如一个 1000x1000 的矩阵,拆成 1000x100 和 100x1000 两个矩阵,参数量直接减少 80%。
这个方法对全连接层特别有效。我在 MobileViT 的 MLP 层上试过,参数量减少了 60%,精度只掉了 0.3%。
常用分解方法:
- SVD 分解:最经典,适合全连接层
- CP 分解:适合卷积层,但实现复杂
- Tucker 分解:平衡了效果和复杂度
注意:低秩分解对卷积层的加速效果有限,因为卷积本身已经是稀疏计算了。我建议你优先对全连接层和 Embedding 层做分解。
2.5 技术对比与选型建议
好了,四种技术都讲完了。你可能会问:到底该用哪个?
我的建议是:组合使用。单一技术往往有天花板,但组合起来效果 1+1>2。
典型组合方案:
| 场景 | 推荐组合 | 压缩比 | 精度损失 |
|---|---|---|---|
| 移动端部署 | 剪枝 + 量化 | 4-8x | 1-3% |
| 云端推理 | 蒸馏 + 量化 | 2-4x | 0.5-1% |
| 极致压缩 | 剪枝 + 蒸馏 + 量化 + 低秩分解 | 8-16x | 3-5% |
我的建议:别一上来就搞全套。先做剪枝,看看效果;再量化,看看精度;如果还不够,再加蒸馏。每一步都验证,别跳步。
2.6 本章知识体系图
下面这张图,帮你把四种技术的关系理清楚:
这张图把四种技术放在一起对比。你可以看到,剪枝和量化是「硬压缩」,直接减少参数量;蒸馏是「软压缩」,通过知识迁移来缩小模型;低秩分解则是「数学压缩」,利用矩阵分解来降维。
我个人习惯是:先做剪枝,再做量化,最后用蒸馏来弥补精度损失。低秩分解我一般只在全连接层特别多的时候才用。
好了,这一章的内容就到这里。四种技术各有千秋,关键是根据你的场景和硬件条件来选。下一章咱们会深入 MobileViT 的具体结构,看看哪些地方最适合动刀。
一句话总结:剪枝砍参数,量化降精度,蒸馏传知识,分解拆矩阵。组合起来用,效果翻倍。