你手上有个大模型效果不错,但线上推理成本压不下来,或者端侧根本放不进去,于是想到蒸馏。可一上手就卡住:到底是拿软标签还是硬标签、教师模型的输出怎么批量造、学生模型训完怎么判断没白干。这篇按操作顺序把每一步拆开,给你判断标准和排查顺序,不讲玄学。
你手上有个大模型效果不错,但线上推理成本压不下来,或者端侧根本放不进去,于是想到蒸馏。可一上手就卡住:到底是拿软标签还是硬标签、教师模型的输出怎么批量造、学生模型训完怎么判断没白干。这篇按操作顺序把每一步拆开,给你判断标准和排查顺序。
先说清楚前提:蒸馏不是一个按钮,它是一条流水线,里面百分之七十的功夫花在造数据和验收上,训练反而没那么玄。如果你只是想让模型多懂一个领域,那先去看微调那条路,别绕到蒸馏上来。
先搞清楚蒸馏在干什么
一句话:让一个小模型去模仿一个大模型的输出分布,而不是只学原始标注。教师给出的「概率分布」携带了类别之间的相对关系,比如它认为某两个答案都不错、只是其中一个略胜,这种暗知识是硬标签给不了的。判断你该不该动手,主要看任务边界和成本瓶颈是否真的存在。
- 输出层蒸馏:学生直接对齐教师的软标签,最通用、最容易跑通,工程上优先选它
- 中间层特征对齐:让学生的隐层去逼近教师的表示,效果上限高,但要求学生容量别差太远
- 数据蒸馏:只拿教师生成的数据当监督,几乎不掺损失设计,上手最快但丢掉的信息也最多
- 判断标准:任务有明确输入输出、教师已稳定可用、且推理成本或延迟确实是瓶颈,三条都满足再往下走
选教师、造数据:量最大的一步
教师模型不一定要最强,关键要跟学生同任务、同语言,并且输出格式稳定。教师自己都答不对的题,蒸馏下去只会把错误教给学生。所以先定好教师,再谈数据规模。
- 教师选型
- 看同任务同语言表现、输出格式稳定性和调用成本,不必盲目追最强档
- 软标签
- 教师给的完整输出分布,或退一步取 top-k 候选及概率
- 兜底标注
- 每条样本保留原始标注,防止学生被教师带偏时没有校准锚点
- 小批量试跑先跑几百到几千条,人工抽查教师输出,统计答错率、格式跑偏率、重复啰嗦比例,三项都过关再批量化
- 批量生成固定提示词模板和解析脚本,输出落盘时把输入、分布、原始标注三者对齐存好,方便后续复现和排查
- 清洗过滤把教师答错、格式错乱、截断的样本剔掉,比例过高就回头改提示词或换教师,别硬着头皮训
- 控制规模先做能覆盖任务类型的最小集,训一轮看趋势再扩,一上来冲海量最容易返工
这一步没有捷径,抽检比例和过滤规则要提前定死并写进脚本,否则后面发现数据脏了,返工成本极高。想对照不同教师的公开数据,可以到 /sites 看各家官方资料页给出的模型能力说明。
训学生模型:温度、损失与常见坑
软标签要配温度系数使用。温度调高会让分布更平滑、类别间关系更明显,但同时会稀释主要信号,需要配合损失权重一起调。常见的坑是只调温度不调权重,结果学生在教师不确定的地方学歪。
| 现象 | 可能原因 | 先查什么 |
|---|---|---|
| 学生与教师一致性高但绝对效果差 | 教师在部分样本上本身就错 | 抽检教师输出,看错误是否集中在同一类 |
| 训练早期就发散 | 温度过高或软标签权重过大 | 把温度调低、监督损失权重大幅上调再跑 |
| 整体涨但长尾不涨 | 数据分布被头部主导 | 按子类统计样本数,给长尾补量 |
| 效果接近基线没逼近教师 | 学生容量太小或对齐层数过多 | 先只做输出层蒸馏,砍掉中间层损失 |
- 损失通常把蒸馏损失和原始标注的监督损失按权重相加,只用软标签容易在教师不确定处学歪
- 学生容量太小时不要硬塞中间层对齐,先保证输出层蒸馏跑通再逐步加码
- 容量差距过大时蒸馏收益会明显衰减,需要先判断是不是该换更大一点的底座
- 训练中盯两个指标:学生与教师在同一批样本上的输出一致性,以及学生相对基线的绝对效果
- 一致性涨而效果不涨,基本可以判定在抄教师的错,回去查数据而不是继续调参
验收与上线前该核对的清单
验收不要只看一个总指标。对照三组:原始小模型基线、蒸馏后学生、教师模型,看学生是缩小了和教师的差距,还是只是逼近了基线。前者说明有效,后者说明基本白干。
| 核对项 | 看什么 | 不达标怎么办 |
|---|---|---|
| 整体效果 | 学生 vs 基线 vs 教师的差距变化 | 差距没缩就回查数据质量和损失权重 |
| 分场景 | 长尾类别、高频类别分开对比 | 某一类塌了就针对性补样本重训 |
| 推理侧 | 延迟、吞吐、显存占用实测 | 效果达标但速度没省,回头调结构或换底座 |
| 一致性 | 学生与教师输出的重合度 | 重合度异常高要警惕过拟合教师噪声 |
- 跑三组对照在同一批固定测试集上测基线、学生、教师,记录差距变化,别用不同测试集对比
- 拆分子类按业务场景或标签分层统计,长尾类别单独拉出来看,整体持平常掩盖局部塌陷
- 实测推理部署到目标环境量延迟、吞吐、显存,效果达标但速度没省下来,要回头调结构
- 并行灰度蒸馏版与教师版并行跑一段,用线上反馈决定是否全量切,同时留好回退开关
常见问题
蒸馏和微调到底有什么区别,能不能一起用?
微调是拿标注数据调参数,蒸馏是拿教师模型的输出当学习目标。两者不冲突,常见做法是先用教师造数据,再在这个数据上微调学生,等于把蒸馏当数据生产手段。如果你已经有高质量标注,微调往往更直接;标注稀缺而教师可用时,蒸馏更划算。
学生模型比教师小很多,蒸馏还有意义吗?
参数差距越大,学生能吸收的东西越少,收益衰减明显。差距过大时,优先考虑先蒸馏到一个中间规模、再对中间模型做量化或裁剪,分两步走比一步到位更稳。具体能压到多小,要看任务复杂度,建议先用小批数据试训一轮看趋势再决定。
蒸馏出来的模型效果不如预期,先查哪里?
按这个顺序排查:一看教师样本里有没有大量错答和格式噪声;二看软标签温度与损失权重是不是调得过激;三看学生容量是否根本不够;四看评测集本身是否和训练分布不一致。多数情况问题出在第一步,先抽样人工看数据比反复调参有效。