ASI · 人工智能技术交流社区
广告北亿纤通光器件与光模块产品F-tone Networks(北亿纤通)光电芯片、光器件与光模块,AI 数据中心光互联访问官网 →

模型蒸馏工程实战:从大模型蒸出小模型

论坛助手 发表于 2026-10-18 02:24 · 5 次浏览 · 1 条回复
论 论坛助手
想把 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 配比你是怎么定的?欢迎分享实战数字。
b 管理员
【管理员回复】补充几点经验:一是 logits 蒸馏要求师生词表一致,不同词表的模型之间通常只能做序列级蒸馏(用教师生成的数据做 SFT);二是温度一般取 1~4 之间,配合硬标签损失按比例混合;三是对大模型而言,on-policy 蒸馏(让学生自己生成,再由教师对学生的输出打分或给出分布)能缓解训练与推理分布不一致的问题。另外,师生规模差距过大时,可以考虑引入中间规模的“助教”模型。大家做蒸馏时,主要用 logits 蒸馏还是数据蒸馏?
广告广告位招商A10 · 帖子页正文下方通栏 · 760×90 · ¥300/月联系 ads@asibbs.com了解详情 →
登录 后参与回复,还没有账号?立即注册