蒸馏是怎么做的:从老师到学生
上一节讲了为什么要把模型做小。这一节看具体怎么做。整个过程比想象中朴素:让老师去答题,把答题过程记下来,拿这批材料去训练学生。难点不在流程,在细节。
准备问题集
收集覆盖目标领域的问题。问题可以人工整理,也可以让模型自己生成。这一步决定了学生模型能力的上限:没被问到的领域,学生就学不到。
教师模型作答,保留完整推理过程
关键在「完整」两个字。只保留最终答案,学生学到的是背结论;保留中间的推理链条,学生才有机会学到怎么想。这也是推理类模型特别适合当老师的原因,它们本来就会把思考过程写出来。
取出概率分布,而不只是最终答案
模型每输出一个词,内部其实是一整张候选词的概率表。只取排第一的那个会丢掉大量信息,把整张表留下来,传递的信息量完全不同。下一段展开讲。
用这批材料训练学生模型
训练数据由三部分组成:原始问题、教师的完整回答、以及每一步的概率分布。学生模型的目标是让自己的输出分布尽量贴近老师的。
评估并迭代
在测试集上看学生跟老师差多远,再回头调整问题集的覆盖面和训练配置。通常要来回好几轮。
假设有一道图片分类题,正确答案是猫。传统训练的做法是告诉模型:猫对,其他全错。蒸馏的做法是把老师的判断原样交给学生。
实际操作时还有一个小技巧。老师如果太自信,概率分布会非常尖锐,比如 98% / 1% / 1%,这跟硬标签就没多大区别了,软标签的优势体现不出来。
做法是在计算概率时除以一个数 T,也就是温度系数。T 越大分布越平缓,词与词之间的相对关系就越明显。这跟第二篇章讲过的 Temperature 是同一个机制,只是用途不同:那里是为了让输出多样,这里是为了让信息更充分地传给学生。
这一段是本节最难凭空想象的地方,直接拖给你看。下面是老师看一张猫的图片时给出的判断,你来调 T。
光讲流程比较抽象。看一个公开的例子:DeepSeek 在 2025 年 1 月发布 R1 时,同时开源了六个蒸馏版模型,都是用 R1 生成的推理数据训练出来的。
这个清单里有一处值得留意的细节:学生模型的底座不是自家的,是从别人开源的模型里挑的。六个里四个选了 Qwen2.5,两个选了 Llama3。
为什么这么挑,官方没有解释。但可以反推出几个条件:底座必须权重开放且许可允许再训练,否则做出来不能发布;尺寸谱系要足够全,才能一次覆盖从 1.5B 到 70B 的多个档位;社区工具链要成熟,训练和部署才不用重造轮子。这三条同时满足的选项当时并不多。
DeepSeek 公布的评测里,32B 的蒸馏版在数学和代码几项基准上超过了 OpenAI o1-mini,官方称其在同期稠密模型中达到新的最好成绩。
到这里,蒸馏的好处讲得差不多了:便宜、快、能本地跑。下一节讲代价。学生学的是老师的全部,包括老师的毛病。