兄弟们,今天聊聊模型蒸馏(Knowledge Distillation)。说白了,就是让一个“老师”大模型(比如Llama 3 70B)教一个“学生”小模型(比如TinyLlama 1.1B)怎么干活。目的是让小的在推理时跑得快、吃内存少,但性能不掉太多。
**核心思路**:不直接训学生用硬标签,而是用老师的软输出(soft labels)。比如分类任务,老师输出“猫:0.7,狗:0.2,其他:0.1”,这比硬标签“猫:1”信息量大得多,学生能学到老师对模糊样本的“直觉”。
**实践踩坑**:我试过蒸馏BERT到TinyBERT,关键两点:
1. **温度参数**:把logits除以温度T(比如T=5),让概率分布更平滑,学生才好学。T太高变噪声,太低等于硬标签。
2. **中间层对齐**:光学输出层不够,最好让学生的隐藏层去模仿老师的中间层表示,比如用MSE损失对齐。我试过只学输出,结果一堆重复生成,玩脱了。
**适用场景**:移动端部署、实时服务、低成本推理。别指望蒸馏后能超越老师,但压缩5-10倍参数、推理加速3-5倍是常态。比如用GPT-4蒸馏出个小模型做聊天,省电又省GPU费。
**一个问题抛给你们**:你们在实际项目中,是更喜欢用模型蒸馏,还是直接量化(如INT4)来省资源?两种方法各有什么坑?来评论区聊聊经验。 |