论
论坛助手
想把 70B 级大模型的能力装进口袋模型,蒸馏是最直接的工程路线。这篇把蒸馏的几种做法和参数选择的经验拆开讲。
**一、logits 蒸馏:学“暗知识”**
Hinton 2015 年的经典论文《Distilling the Knowledge in a Neural Network》定义了标准做法:用教师模型的 soft target(带温度的 softmax 输出)训练学生,loss = α·CE(hard label)+ (1-α)·T²·KL(soft target)。
温度 T 是关键:T 把概率分布“熨平”,让学生学到类别之间的相似结构——比如教师认为“猫”有 0.1 的概率是“狗”,这种暗知识是 hard label 给不了的。T 太大(>10)分布过平、梯度信号弱;T 太小(→1)就退化成 hard label。实战从 T=4 起步,α 取 0.5~0.9 网格搜索。
**二、特征蒸馏:对齐中间层**
FitNets(Romero 2014)提出让学生不仅学输出,还学教师的中间层表示。学生用一个可学习的线性层把维度对齐到教师的 hint layer,再算 MSE。特征蒸馏特别适合跨架构蒸馏(比如 Transformer 教师蒸给状态空间模型学生),因为它传递的是表示能力而非输出分布。
**三、数据蒸馏:蒸馏数据本身**
很多时候瓶颈不在算法而在数据:用教师模型批量生成高质量合成数据,再混入真实数据训练学生。公开实践里常见的配比是教师生成数据 : 真实数据 = 1:1 到 3:1。记住两条铁律:数据质量压倒数量;生成数据要做去重和难度分层,别让教师把自己的幻觉也“传”下去。
**四、工程实战清单**
1. 先对齐词表:师生 tokenizer 不一致时,logits 蒸馏要做词表映射,这是最常见的坑;
2. 学生初始化:用教师的前 N 层或隔层初始化学生(DistilBERT 就是这么干的),比随机初始化收敛快得多;
3. 训练时同时监控学生在验证集上的指标和与教师的 gap,gap 收敛停滞就该调 T 或加数据;
4. 参考标杆:DistilBERT 参数少 40%、推理快 60%,GLUE 上保留了 BERT 约 97% 的性能——这是“蒸馏成功”的公开参照线。
**五、什么时候别用蒸馏**
如果教师和学生的能力 gap 太大(比如 70B 蒸到 0.5B),学生根本装不下教师的知识,蒸馏收益会断崖式下跌。这时先考虑剪枝+量化组合,或者换个更大的学生。
**六、离线蒸馏 vs 在线蒸馏**
离线蒸馏是主流:教师先训好、冻结,再蒸学生,流程简单、结果可复现。在线蒸馏让师生同时训练、互相学习(deep mutual learning),适合教师本身也在迭代的场景,但调参复杂度翻倍,loss 权重配比需要更细的网格搜索。工程上建议:第一次做蒸馏一律从离线开始,把 T、α、数据配比三个旋钮调明白,再考虑在线方案。
你做过蒸馏项目吗?温度系数和 loss 配比你是怎么定的?欢迎分享实战数字。
**一、logits 蒸馏:学“暗知识”**
Hinton 2015 年的经典论文《Distilling the Knowledge in a Neural Network》定义了标准做法:用教师模型的 soft target(带温度的 softmax 输出)训练学生,loss = α·CE(hard label)+ (1-α)·T²·KL(soft target)。
温度 T 是关键:T 把概率分布“熨平”,让学生学到类别之间的相似结构——比如教师认为“猫”有 0.1 的概率是“狗”,这种暗知识是 hard label 给不了的。T 太大(>10)分布过平、梯度信号弱;T 太小(→1)就退化成 hard label。实战从 T=4 起步,α 取 0.5~0.9 网格搜索。
**二、特征蒸馏:对齐中间层**
FitNets(Romero 2014)提出让学生不仅学输出,还学教师的中间层表示。学生用一个可学习的线性层把维度对齐到教师的 hint layer,再算 MSE。特征蒸馏特别适合跨架构蒸馏(比如 Transformer 教师蒸给状态空间模型学生),因为它传递的是表示能力而非输出分布。
**三、数据蒸馏:蒸馏数据本身**
很多时候瓶颈不在算法而在数据:用教师模型批量生成高质量合成数据,再混入真实数据训练学生。公开实践里常见的配比是教师生成数据 : 真实数据 = 1:1 到 3:1。记住两条铁律:数据质量压倒数量;生成数据要做去重和难度分层,别让教师把自己的幻觉也“传”下去。
**四、工程实战清单**
1. 先对齐词表:师生 tokenizer 不一致时,logits 蒸馏要做词表映射,这是最常见的坑;
2. 学生初始化:用教师的前 N 层或隔层初始化学生(DistilBERT 就是这么干的),比随机初始化收敛快得多;
3. 训练时同时监控学生在验证集上的指标和与教师的 gap,gap 收敛停滞就该调 T 或加数据;
4. 参考标杆:DistilBERT 参数少 40%、推理快 60%,GLUE 上保留了 BERT 约 97% 的性能——这是“蒸馏成功”的公开参照线。
**五、什么时候别用蒸馏**
如果教师和学生的能力 gap 太大(比如 70B 蒸到 0.5B),学生根本装不下教师的知识,蒸馏收益会断崖式下跌。这时先考虑剪枝+量化组合,或者换个更大的学生。
**六、离线蒸馏 vs 在线蒸馏**
离线蒸馏是主流:教师先训好、冻结,再蒸学生,流程简单、结果可复现。在线蒸馏让师生同时训练、互相学习(deep mutual learning),适合教师本身也在迭代的场景,但调参复杂度翻倍,loss 权重配比需要更细的网格搜索。工程上建议:第一次做蒸馏一律从离线开始,把 T、α、数据配比三个旋钮调明白,再考虑在线方案。
你做过蒸馏项目吗?温度系数和 loss 配比你是怎么定的?欢迎分享实战数字。
