
最近大模型圈子里流传一份名单说有7家国内公司因为“蒸馏”被点了名。我看了好几个群都在转讨论很快分成两派一派觉得“蒸馏嘛技术而已谁不用谁吃亏”另一派直接开骂“这就是偷”。说实话两边都有点道理但大多数人都没搞清楚一件事——蒸馏到底“偷”走了什么是参数吗是训练数据吗还是某种看不见摸不着的东西这篇文章我想把这件事拆开聊透。我会从技术原理讲起告诉你蒸馏的本质是什么被迁移的到底是哪些能力然后给出一套可以用开源工具跑通的最小蒸馏实操最后聊聊行业里怎么判断一个模型“是不是被蒸馏过的”。不管你是算法工程师、AIGC创业者还是只是好奇大模型背后那些事看完应该都能有自己的判断。1. 先搞清楚蒸馏到底“偷”走了什么1.1 “偷”的是知识吗不是行为习惯很多人第一次听说“模型蒸馏”第一反应是把大模型的权重复制一份到小模型里。这是最大的误解。蒸馏这个概念最早由Hinton在2015年的论文《Distilling the Knowledge in a Neural Network》里系统提出它的核心不是传递权重而是传递“行为”。打个比方老钳工带徒弟不会把自己的肌肉和手指传给徒弟而是让徒弟在旁边看他怎么锉、怎么量、怎么判断余量。徒弟学到的不是老师的身体而是老师做判断的方式。大模型蒸馏也是这个逻辑——教师模型Teacher输出一堆带有概率分布的预测结果学生模型Student通过模仿这些概率分布学会教师模型的“判断习惯”。为什么模仿概率分布比直接学正确答案更好因为正确答案只有一个但概率分布里藏着大量信息。比如模型看到“11”时如果教师模型输出“2”的概率是95%、“11”的概率是2%、“3”的概率是1%这个分布本身就告诉学生这个问题接近标准答案但模型内部其实也在纠结其他可能性。这种“纠结”就是知识的一部分它反映了模型对问题难度的感知、对歧义的处理方式甚至对语言习惯的偏好。所以严格说蒸馏“偷”走的不是一个具体的知识条目而是一整套行为习惯。这也是为什么后来大家发现蒸馏出来的小模型不仅答案像教师模型连说话的语气、分点列举的习惯、遇到不会的问题时开始胡编的方式都高度相似。1.2 被带走的还有边界感幻觉和拒答也会被复制我见过最典型的一个例子有人用某个大模型的API蒸馏了一个小模型跑完测试发现小模型在几个特定问题上也会像教师模型一样给出同样的错误答案连错误原因都一脉相承。这不是巧合而是因为蒸馏把“错误模式”也作为知识传递了下去。教师模型在训练过程中形成了自己的决策边界哪些问题能答、哪些问题答不好、哪些问题直接拒答、哪些问题会触发幻觉。这些边界不是显式写在某个文件里的而是藏在成千上万个参数的互动里。当学生模型通过蒸馏去拟合教师模型的输出分布时它拟合的不只是正确答案的分布还包括错误答案的分布、拒答的分布、胡编的分布。这就引出一个很微妙的问题如果教师模型经过大量安全对齐训练那么蒸馏出来的学生模型也会继承这种对齐倾向这当然是好事。但如果教师模型本身有一些偏见、歧视或者幻觉倾向蒸馏也会把这些“坏习惯”完完整整复制给学生。很多团队只关注学生模型的准确率指标却忘了检查它是不是连教师模型的“坏脾气”一起学走了。1.3 为什么这件事让人坐不住成本剪刀差“偷走什么”的问题之外更让人坐不住的是“成本剪刀差”。训练一个模型有多贵蒸馏一个模型有多便宜两者之间差了一个数量级不止。我自己做过粗略估算从头预训练一个70亿参数级别的模型哪怕只在高质量中文语料上做二次预训练也需要几十张A100跑上好几周GPU成本轻松上百万。而如果用蒸馏路线只需要向教师模型的API发起推理请求生成几百万条“问题-答案-概率分布”数据然后拿这些数据去训练一个小模型。API调用虽然也要花钱但和预训练相比是九牛一毛。更关键的是时间。预训练一次可能要一个月中间还得不停调整、重启蒸馏一次可能只需要几天学生模型参数少训练快迭代周期大大缩短。这种效率差异让蒸馏成了很多创业公司的首选路线也成了争议的焦点——当你的产品很快赶上了别人的效果而你只花了几分之一成本别人自然会问你到底“偷”了什么2. 蒸馏和微调、投机采样根本不是一回事2.1 三种技术的分界线目标不同手段不同聊蒸馏之前必须先把几个容易混淆的概念掰开蒸馏Distillation、微调Fine-tuning、投机采样Speculative Decoding。我见过不少人在讨论里把这几个词混着用结果越聊越糊涂。微调是什么是在已经预训练好的模型基础上用特定领域的数据继续训练让它更擅长某个任务。比如拿一个通用大模型用法律文书数据接着训练让它变成法律助手。微调改的是模型本身的权重目的是“让已有能力更专精”而不是“把另一个模型的能力搬过来”。投机采样又不一样。它是在推理阶段用一个小模型快速生成草稿再用大模型验证核心目的是加速推理不是改变小模型的能力。它更像一个“提词器”小模型负责快大模型负责准。蒸馏则站在中间它拿教师模型的输出做监督信号训练一个全新的、更小的学生模型。学生模型可以有不同的架构、不同的词表、不同的参数量唯一的要求是输出分布要尽量靠近教师模型。这也是为什么蒸馏被称为“模型压缩之王”——它能把一个175B模型的能力压缩进一个7B甚至1B的模型里虽然做不到百分百还原但能做到“神似”。2.2 温度系数T蒸馏里最核心的一个旋钮要理解蒸馏绕不开一个参数温度系数Temperature记作T。在Hinton的蒸馏框架里教师模型的输出要先经过一个带温度T的Softmax再交给学生模型学习。如果不带温度Softmax会输出一个非常“尖锐”的分布——正确答案概率趋近于1其他答案趋近于0。这种分布虽然信息量大但学生模型很难从中学到“次优答案”的排序因为概率都太小了。而把温度调高之后Softmax的分布会变得平滑那些原本只有1%概率的答案会被放大到5%、10%学生模型就能看到完整的“候选答案排序”。T值怎么选网上很多教程直接让你试我建议先理解背后逻辑。T太高分布过于平滑所有答案概率都趋于一致学生模型学不到有效信息产物就是一个“什么都会一点什么都不精”的模型T太低分布又回到了尖锐状态蒸馏退化成普通的知识蒸馏甚至退化成“模仿标准答案”。实践中0.5到5之间比较常用但我个人经验是先跑一个10分钟的小实验看学生模型在验证集上的表现随T值的变化曲线再决定最终值。2.3 从“API蒸馏”到“全量蒸馏”现实世界的操作变体我们日常听到的“蒸馏”在真实操作里其实有好几个变体。第一种是“API蒸馏”。这是最常见的做法通过调用某个商业大模型的API批量构造数据拿返回结果当标签训练自己的模型。因为不需要接触模型权重技术门槛最低也因此成为争议最大的方式——相当于你雇了一个顶级师傅让他给你做了一堆样板然后你照着样板训练自己的徒弟。第二种是“全量权重蒸馏”。前提是你手里有教师模型的权重可以直接在本地加载教师模型逐层提取中间特征来指导学生模型。这种方式信息利用率更高但门槛也高普通团队很难拿到商业模型的权重。第三种是“黑盒蒸馏”介于两者之间。你拿不到权重但可以通过大量精心构造的查询间接探索教师模型的行为边界从而让学生模型模仿得更彻底。这个方向近几年学术研究很多也催生了大量“越蒸馏越像”的案例。3. 实操笔记如何用常见开源工具完成一次小规模蒸馏3.1 最小可行方案教师模型、学生模型和数据集怎么选聊了不少理论下面上点能直接抄作业的东西。我最近用一套非常轻量的方案跑过一次蒸馏全套代码加数据准备一个人一台机器就能完成。教师模型我选了Llama-3.1-8B-Instruct学生模型选了Qwen2.5-1.5B-Instruct。为什么不选同源模型因为蒸馏的一个关键验证就是“不同家族模型能否学会另一家族的行为”选不同源能更好观察蒸馏效果。如果你的目的是最快产出也可以用同源的小模型比如直接用Llama-3.2-1B。数据集方面别上来就整百万级的大规模数据。我先用Alpaca的英文指令集子集再自己混入500条中文技术问答凑了大概1万条指令数据。每一条数据要包含instruction、input、output三个字段。关键是output不是我自己写的而是让教师模型现生成的。你要先运行一遍教师模型把每条指令的回复跑出来连同logits一起保存这才是真正的“蒸馏信号”。3.2 关键步骤Logits对齐、Loss配比、训练轮数流程分四步。第一步用教师模型对训练集做批量推理保存每条数据的输出文本和soft logits。这一步计算量大建议用vLLM做加速不然1万条数据也要等很久。第二步加载学生模型改造它的forward输出让它别只计算CrossEntropy而是同时计算和教师logits之间的KL散度。Hinton原始公式是L α * KL(teacher || student) (1 - α) * CE(student, hard_label)其中CE部分是让学生也别偏离真实答案太远α控制蒸馏信号和真实标签的配比。我实际用下来α取0.7左右效果最好。太小学生基本只学会标准答案没有任何“教师气质”太大学生会被教师的错误带跑出现幻觉复制。第三步是训练。我只用了2张消费级显卡batch size调到4梯度累积8步等价于单次更新32条数据学习率设成5e-5训练了3个epoch。这里要注意学生模型参数量只有教师模型的五分之一训练轮数千万别多3-5个epoch就够了多了容易过拟合到教师的特定语气上。第四步是评估。不要只看BLEU或者ROUGE要看“行为相似度”——拿一组教师模型从来没见过的刁钻问题分别问教师和学生看回答风格、拒答方式、推理步骤是不是相似。我跑完之后最直观的感受是1.5B模型说话的“口气”确实有8B模型的影子但深度明显不足。3.3 我踩过的坑温度太高、脏软标签、学生变成复读机坑一温度值拍脑袋设成5。我第一版T5学生模型学出来答什么都模棱两可问它“今天天气怎么样”它回“可能是晴天也可能是阴天具体取决于你看的是哪个城市的天气预报”。这就是温度过高的典型症状分布过于平滑模型失去了做出确定判断的勇气。后来把T降到1.5才正常。坑二软标签里混进了脏数据。因为教师模型是现生成的答案有些指令它明显没理解对输出了一堆胡话。这些胡话也被当成软标签喂给了学生。等学生模型训练完我让它复述一段原文它居然也开始胡言乱语。排查后发现是某批数据里教师模型输出的logits分布是混乱的相当于“脏师傅带徒弟”。解决方案很简单在生成训练数据时先做一轮启发式过滤去掉教师模型输出置信度过低的样本。坑三学生模型变成“复读机”。有一次我训练后发现学生模型面对任何问题都倾向于把问题里的关键词重新组织一遍作为回答看起来流利实际什么都没说。后来定位是KL散度权重太高学生发现“复述问题”能最小化和教师分布的差异学会了偷懒。把α从0.7调回0.5并且适当增加hard label的约束这个问题就缓解了。4. 怎么判断一个模型是不是“被蒸馏”过4.1 行为指纹风格、幻觉、边界一致性回到开头那个争议“被点名”这件事从技术上说有没有办法判断一个模型是不是另一个模型的“蒸馏产物”我自己的经验是有痕迹但很难下定论。最直观的是“行为指纹”。如果你拿同一个刁钻问题去问教师模型和学生模型发现它们的回答结构惊人一致——同样的分点方式、同样的转折词、同样的开头结尾甚至同样在某个特定话题上莫名自信地胡说八道那就高度可疑。单一问题说明不了什么但几百个问题里出现系统性一致就不是巧合了。更隐蔽的是“错误一致性”。教师模型会在哪些话题上出现幻觉是有规律的。如果你发现某个小模型幻觉的触发点、触发方式、错误内容都和某个大模型如出一辙那基本可以确定它们之间存在“师徒关系”。前提是你能拿到教师模型做对照实验。4.2 量化手段KL散度、梯度相似度、水印检测除了行为层面的对比学术界和工业界也发展了一些量化方法。最简单的是计算两个模型在大量测试样本上输出分布的KL散度。如果KL散度小到一定程度说明两个模型的输出分布高度重合这就是蒸馏的强信号。更严谨一点的做法是梯度相似度分析对同样的输入计算两个模型的梯度方向蒸馏过的模型在梯度方向上会和教师模型高度一致。这个方法需要能接触到两个模型的参数和推理过程实操门槛高但确凿性更强。还有一个思路是“水印检测”。有些团队会在自己的模型输出里嵌入特殊标记比如罕见的词组组合、不自然的标点习惯用来追踪自己的模型输出是否被大规模抓取去训练其他模型。这有点类似图片里藏隐水印但文本水印更隐蔽、更抗删除。4.3 行业争议技术中立与“偷”的边界坦白说我的看法是蒸馏技术本身是中立的但围绕它的“偷”字主要有三层争议。第一层是数据层面。如果为了蒸馏大量调用别人的API生成数据可能违反服务条款。这属于商业协议问题不是技术问题。第二层是竞争层面。蒸馏的最大价值是降低研发成本。一个团队如果自己没有核心预训练能力完全靠蒸馏别人的模型快速推出产品本质上就是在“搭便车”。这在商业道德上会引发争议但技术圈很难给出统一答案。第三层是能力边界层面。蒸馏不能无中生有它复制的是教师模型已有的行为模式。如果一个模型自己不具备某种推理能力靠蒸馏也学不会。我在实操中反复验证过学生模型的幻觉模式可以被复制但推理能力的上限由自身参数量决定。所以“偷”得走风格偷不走真正的智能。5. 写在最后蒸馏不会消失只会越来越普遍聊到最后说点我自己的判断。无论争议怎么继续蒸馏这种技术在大模型生态里只会越来越普遍。原因很简单算力贵的现实下大家都想让小模型获得大模型的能力蒸馏就是性价比最高的一条路。连端侧AI、手机上的离线助手、企业私有化部署的小模型背后很多都是蒸馏产物。我自己也一直用Ollama跑本地小模型做实验那些能在普通笔记本上流畅跑的模型十有八九都经过蒸馏压缩。但我也想说一句容易被忽略的话如果你准备用蒸馏做产品最好保留完整的训练日志、数据来源说明和模型架构差异记录。不是为了应付谁而是当别人质疑“你是不是蒸馏的”时你能拿出东西证明自己做了哪些独立优化。我在真实项目中吃过这个亏模型发布后被追问数据来源因为没有记录花了整整一周去补救。最后再分享一个判断技巧拿一个经过蒸馏的小模型去问它的“知识边界”之外的问题。教师模型不懂的问题蒸馏出来的学生模型大概率也不懂而且“不懂的方式”会一模一样。这个细节比任何指标都能更快暴露模型的来历。