蒸馏不是「能力复制」,而是「行为复制」。真正值钱的东西,往往蒸不走。
2025 年下半年开始,一个现象越来越刺眼。
一个 7B 参数的小模型,在 MMLU、GSM8K 这些主流榜单上,分数追平甚至超过了千亿参数的大模型。参数差了一百多倍,跑分只差几个点。评论区一片欢呼:「小模型时代来了」「大模型的护城河不存在了」。
但真拿它去做生产,又不是那么回事。写长代码容易出 bug,做复杂推理会在某一步悄悄拐错方向,遇到稍微偏门一点的问题就开始胡说——而且说得特别像那么回事。
反差在哪?答案几乎都指向同一个词:知识蒸馏(Knowledge Distillation)。
这些小模型不是自己从零学出来的。它们是「抄」大模型的作业抄出来的。
但「抄作业」这个比喻太粗糙了。抄选择题答案是一种抄法,抄解题步骤是另一种,连老师的错题思路一起抄下来,又是另一种。不同的抄法,最后得到的东西完全不一样。
这篇文章想回答七个问题,沿着一条主线推进:蒸馏到底蒸走了什么,又蒸不走什么?那些蒸不走的部分,恰恰是理解大小模型差距的钥匙。
不是把大模型的参数压缩进小模型。是让小模型模仿大模型的「输出分布」。
先回到源头。2015 年,Hinton 带着 Vinyals 和 Dean 发了篇文章,叫《Distilling the Knowledge in a Neural Network》。这篇论文把「蒸馏」这个概念正式带进了深度学习的语境。
它的核心想法朴素到有点反直觉:
一个训练好的大模型(老师),面对一张图片,输出的不是「这是猫」这一个答案,而是一个概率分布——猫 90%,狗 7%,马 2%,其他 1%。那个 90% 叫硬标签(hard label),也就是标准答案。剩下的 10% 呢?没人在乎,训练小模型的时候直接忽略掉了。
Hinton 说,不对。那 10% 里藏着东西。
举个例子就懂了。
给模型看一张博美犬的照片。大模型的输出分布大概是:博美 70%,萨摩耶 15%,金毛 8%,猫 3%,汽车 2%……
你用硬标签训练小模型,只告诉它「这是博美」。小模型学到的就是「博美 = 1,其他 = 0」。它不知道博美和萨摩耶长得像,也不知道金毛虽然也是狗但差别要大一些。它只知道一个正确答案,其他全是「错误」,没有远近之分。
你用软标签(soft label)训练呢?你告诉它:「这是博美,但你也得知道,它跟萨摩耶有几分像,跟金毛也沾点边,跟猫完全没关系,跟汽车更没关系。」
小模型学到的就不只是答案本身,还有答案之间的关系。
硬标签只有一个 1,其余全是 0。软标签保留了所有类别的概率,类别之间的远近关系一目了然。
这里有个问题。大模型通常很自信。对于一张清晰的图片,正确类别的概率可能是 99.9%,剩下所有类别加起来才 0.1%。那点微弱的差异,小模型几乎学不到什么。
所以 Hinton 引入了一个叫「温度」(temperature)的东西。在计算 softmax 之前,把 logits 除以一个温度 T。T 越大,输出分布越「软」——原来 99.9% 的主峰降下来,旁边那些小峰抬起来,类别间的差异被放大了。
就像把一杯浓缩咖啡兑了水。味道淡了,但层次更清楚。
训练完之后,温度调回 1,小模型就拥有了正常的输出分布。
Hinton 把这叫「暗知识」。标准答案里没有,但它真实存在。
「暗知识」(dark knowledge)这个说法很妙。
你想,一个大模型有几千亿参数。它学到的所有东西,最后都压缩在每一次输出里。但你只取那个最大值——一个答案——就把剩下 99% 的信息全扔了。那感觉就像你去听一位老教授讲课,你只记下了他说的最后一句话,中间的推理、类比、反例,全漏了。
软标签把这些信息捞回来了。
最直接的信息是类别之间的相似关系。
在大模型眼里,2 和 3 长得像,2 和 7 就没那么像,2 和字母 Z 可能还有点像。这些相似性不是人类标注的(人类标注只告诉你「这是 2」),是模型自己从数据里学出来的。它代表了模型对这个世界结构的理解。
用软标签训练,小模型就继承了这份理解。它不只是会分类,它还知道类别之间的远近。
这有什么用?用处比你想的大。
一个只学过硬标签的模型,认错了就是乱错。一个学了软标签的模型,认错了也错得有道理——它把博美认成萨摩耶,而不是认成汽车。这种「有结构的错误」在真实场景里重要得多,因为下游的纠错成本低。
另一个好处更技术,但也更根本。
硬标签是 0 和 1 的极端值。模型每做对一个样本,梯度就几乎为零——它觉得自己已经完美了,不需要再学了。但完美的只是这一个样本,泛化能力不一定好。
软标签不一样。每一个样本都能提供丰富的梯度信息。就算模型已经选对了正确类别,它还得把其他类别的相对概率也调好。这意味着模型在训练过程中收到的信号密度高得多。
打个比方。硬标签训练像做判断题,对就是对,错就是错。软标签训练像做简答题,你不仅要给出答案,还要解释为什么其他选项不对,以及不对到什么程度。后者训练出来的人,理解显然更深。
但这里要插一句。Hinton 那篇论文是针对图像分类的。到了大语言模型时代,「软标签」的含义已经大大扩展了。它不再只是分类概率——它变成了「下一个 token 的概率分布」。
这就引出了下一个问题:在 LLM 的世界里,小模型到底从大模型身上学走了什么?
学的是行为,不是机制。是老师怎么答题的样子,不是老师为什么会答题。
先把话说清楚:蒸馏出来的小模型,不是大模型的缩小版。
你不能说「7B 蒸馏模型 = 70B 大模型的十分之一」。这不是按比例缩放的关系。它们内部的结构、表示、推理路径,完全不一样。它们只是在输出行为上看起来很像。
最容易蒸走的,是「语气」。
大模型经过 RLHF 之后,回答问题有一套固定的格式:先承认问题的合理性,然后分点作答,每点有例子,最后总结。它会说「这是个好问题」「让我们一步步来」「需要注意的是」。
这些模式化的东西,蒸馏起来特别高效。小模型很快就能学会「像大模型那样说话」。以至于用户有时候分不出来——毕竟大多数人判断模型强不强,就是看它说话像不像那么回事。
但这也是最容易造成错觉的部分。说话专业 ≠ 内容正确。
比口吻更深一层的,是思维链(Chain-of-Thought)蒸馏。
大模型会一步步推理。「让我想想,第一步应该……然后第二步……所以答案是……」你把这些带推理过程的回答喂给小模型,让它模仿这种「先想再说」的格式,小模型的解题能力会有显著提升。
DeepSeek 在 2024 年放出 R1 的时候,大家发现一个有意思的现象:用 R1 的推理数据蒸馏出来的小模型,数学和代码能力涨得特别快。有些 7B 模型甚至能在 GSM8K 上追到接近 GPT-4 的分数。
但注意。它学会的是「推理的姿势」,不是「推理的能力」。
什么意思?它学会了在得出结论之前先写几行分析,学会了把一个问题拆成几个子问题,学会了「我们来验证一下」这种自我检查的句式。这些姿势本身就能提升准确率——因为强制模型把步骤写出来,减少了跳步出错的概率。
但如果问题的复杂度超过了它参数能承载的极限,它的推理就会在某一步悄悄滑向错误方向,而且滑得特别自然。你读起来觉得逻辑挺顺的,最后答案错了,你还得回头找半天是哪一步开始歪的。
大模型从数据中建立内部机制,再输出行为。蒸馏跳过了中间那步——它直接从行为学行为。
更深一层的,是小模型学会了大模型在常见问题上的「解题捷径」。
大模型处理问题有一套内部的计算路径。某些常见问题,它走得多了,就形成了高效的「通路」。蒸馏的时候,小模型不需要复制整条路径,它只需要学会「遇到这类输入,就给出这类输出」的映射。
这就像刷题。你不需要理解物理原理,只要把题型和解题套路背熟了,考试也能拿高分。
但套路的问题是:只在套路覆盖的范围内有效。出了这个范围,就乱套了。
这也是为什么蒸馏模型在基准测试上表现很好,一到真实场景就容易翻车——因为基准测试的题型和训练数据高度重叠,而真实场景的问题千奇百怪。
如果只看输出,你可能觉得蒸走了一切。但有些东西,只存在于老师内部。
这是整篇文章最核心的问题。
蒸馏的本质是「行为层面的模仿」。只要输出像,就算成功。但模型内部发生了什么,蒸馏管不了,也不关心。
所以那些「只存在于内部、不体现在输出上」的东西,天然就是蒸不走的。
这是最大的一块。
大模型的价值,很大程度上在于它能处理「没见过的问题」。给它一个全新的场景、一种奇怪的组合、一个偏门的领域,它依然能给出有质量的回答。这种能力来自它庞大参数空间里建立的通用表示。
小模型呢?它学的是「常见问题 → 常见回答」的映射。如果一个问题落在训练分布里,它答得又快又好。一旦偏出去一点,它就不会了——不是答错,是胡编。而且它编得特别自信,因为它从老师那里学来了「自信的口吻」。
这也是最危险的地方。一个明显很菜的模型,你不会信它。一个说话特别像大模型、但关键时刻会掉链子的小模型,反而更容易误导人。
好的大模型有一个很重要的品质:它知道自己什么时候不知道。
你问一个偏门的问题,它会说「我不确定,但我可以帮你查一下」或者「根据我的知识,可能是……不过你最好验证一下」。这种校准能力(calibration)——也就是模型对自己答案的置信度和答案实际正确率之间的吻合度——是大模型很宝贵的特质。
蒸馏模型呢?它学的是老师的输出分布,但它学不到老师「为什么给这个置信度」。结果就是,它说话的语气永远那么肯定,哪怕说错了也一样。它的置信度是「装出来的」,不是真的基于内部评估算出来的。
换句话说,大模型的「犹豫」是真犹豫。小模型的「犹豫」是表演出来的犹豫。
这个争议比较大,但值得说清楚。
大模型做复杂推理的时候,它内部的 token-by-token 生成过程,是不是真的在「一步步思考」?学界还在争论。但有一点相对明确:大模型的推理过程中,每一步的中间表示(hidden states)里,确实编码了关于问题的中间状态。
蒸馏出来的小模型呢?它的思维链输出可能看起来很像——「第一步……第二步……所以答案是……」——但它内部是不是真的在一步一步推理?不一定。它很可能是「知道答案之后,补了一个看起来合理的推理过程」。
怎么验证?有个简单的方法:你把推理过程中间的某一步故意改错,看看模型会不会发现。大模型经常会发现——因为它真的在跟着走。小模型往往发现不了——因为它的推理是「写出来给你看的」,不是用来算答案的。
最后一样,对研究人员来说重要,对普通用户可能没那么直观。
大模型的内部有结构。你可以用探针(probing)的方法,从某一层的激活里提取出语法结构、世界知识、推理状态。这些结构是模型能力的「骨架」。
蒸馏模型的内部呢?它可能完全没有同样的骨架。它只是通过另一条完全不同的路径,到达了相似的输出。就像两个人都能弹同一首曲子,一个是从乐理开始学的,一个是靠肌肉记忆背下来的。表面听起来一样,内里完全不同。
这意味着,基于大模型内部表示做的那些研究——可解释性、机制理解、能力编辑——很难直接迁移到蒸馏模型上。你以为你在研究「同一种能力的不同尺寸版本」,其实你在研究两种完全不同的东西。
因为考纲是公开的。而且,大家都在对着考纲练。
这是个很自然的疑问。如果蒸馏只能学个皮毛,那为什么 7B 小模型在 MMLU、GSM8K、HumanEval 这些榜上能追平甚至超过千亿大模型?
答案藏在一个词里:分布重叠。
所有主流基准测试,数据分布都是相对固定的。题型、难度、领域分布,都在一个可预测的范围内。
这意味着什么?意味着只要你用大模型生成足够多「类似题型」的问题和答案来蒸馏,小模型就能把这些题型「练熟」。到了考场上,它看到的题全是练过的类型,当然分数高。
这不叫泛化能力强。这叫考试能力强。
两者的区别在分布外才会显现。而基准测试,恰恰就是分布内的。
还有一个大家心照不宣的事实:基准测试的数据,早就「渗透」进训练数据里了。
不是说有人故意作弊。是这些基准题被讨论得太多了——博客、GitHub、Reddit、Stack Overflow、论文……到处都是。大模型在预训练的时候可能就见过,蒸馏数据生成的时候又会生成类似的,小模型训练的时候再来一遍。几遍下来,模型对这些题熟得不能再熟。
结果就是,基准测试的分数越来越高,但它和「真实能力」的差距也越来越大。
所以不是「蒸馏让小模型追上了大模型」。是「蒸馏让小模型在基准测试上追上了大模型」。
这两句话的差别,比你想的大得多。
没错。从「模仿答案」到「模仿思考过程」,再到「用强化学习蒸馏」,进化了好几代。
Hinton 2015 年的版本,是最朴素的蒸馏:用老师的软标签训练学生。放到今天,这叫「响应蒸馏」(response-based distillation)——只看最终输出。
十年过去,蒸馏已经演化出了好几个世代。
就是上面说的软标签。最简单,最通用,也是最浅层的。小模型学到的只是「输入长这样,输出就该长这样」。
在 LLM 里,对应的就是「下一个 token 概率分布的 KL 散度」。训练目标是让小模型输出的 token 分布尽可能接近大模型的。
光看答案不够,能不能连中间的思考过程也一起学?
特征蒸馏就是这个思路。它不只要小模型的输出像大模型,还要小模型的中间层激活(hidden states)也像大模型的中间层。就像学画画,不只是临摹成品,还要临摹大师的草稿和笔触。
在 LLM 里,这通常意味着让小模型的某一层去匹配大模型的某一层。但这里有个问题:小模型的层数和大模型不一样,怎么对应?是第 1 层对应第 1 层,还是用其他映射方式?这个「层映射」的策略,至今还是个开放问题。
再进一步。不只要单个样本的输出像,还要样本之间的关系也像。
什么意思?比如有两个样本 A 和 B。大模型觉得 A 和 B 很像,那小模型也应该觉得 A 和 B 很像。大模型觉得 A 和 C 完全不同,小模型也应该觉得不同。
这种蒸馏学到的是「数据空间的结构」,而不只是单个样本的映射。它通常比前两种效果更好,因为它抓的是更本质的东西。
到了大模型时代,蒸馏又进化了一步。
前面几代都是「老师已经有了答案,学生来学」。但现在的大模型本身就有推理能力——它可以一边想一边写,先试错再修正,甚至可以用工具来辅助思考。
于是出现了两种新的蒸馏方式:
注意一个规律:蒸馏的层次越深,效果越好,但成本也越高。
响应蒸馏最省——你只需要大模型的输出 logits,一次性生成数据,然后训练小模型就行。
到了推理蒸馏和 RL 蒸馏,成本就上去了。你得让大模型一步步推理,每一步都要生成中间状态。而且数据量也更大——一个带推理过程的样本,比一个直接答案的样本信息密度高得多,但生成成本也高得多。
这其实是个很有意思的经济学问题:蒸馏的成本和收益,平衡点在哪?如果蒸馏一个 7B 模型花的钱,都快赶上直接用大模型了,那蒸馏还有意义吗?
答案取决于你要部署的规模。如果你的业务每天要跑十亿次推理,那哪怕每个请求省一分钱,总量也是天文数字。蒸馏的成本再高,摊到每个请求上也几乎为零。但如果你的业务每天只有几千次请求,那可能直接调用大模型 API 更划算。
不要问「小模型够不够强」。要问「我的场景里,它的边界在哪」。
讲了这么多原理,最后落回实际:你该怎么选模型?什么时候能用小模型,什么时候必须上大模型?
没有绝对的答案,但有几条判断原则。
如果你的业务问题高度标准化——比如客服问答、文档检索、固定格式的数据提取——而且你能拿到大量真实的用户问题,那蒸馏小模型很可能够用。因为你的问题分布很集中,小模型能覆盖大部分情况。
如果你的问题五花八门,用户什么都问,而且经常有新奇的、偏门的问题——比如通用助手、开放式创意写作、复杂的代码调试——那你大概率还是需要大模型。小模型在分布外的表现会让你失望。
模型说错一句话,代价是什么?
如果只是客服回答不够准确,用户再问一次就行,那错误成本低,小模型可以上。如果是医疗建议、法律意见、金融决策,错一次可能出大事,那你不仅需要大模型,还需要人工审核和多轮验证。
这里要特别警惕蒸馏模型的「自信幻觉」。它说话的语气很像大模型,很容易让人放下戒心。但它的实际能力可能撑不起那份自信。
很多团队选型的时候只看一个指标:每千 token 多少钱。
小模型的推理成本确实低——可能只有大模型的几十分之一。但你得把总账算清楚:
把这些都加进去,你会发现,很多时候「便宜的模型反而更贵」。
不是非此即彼。更好的做法是大小模型搭配用。
举个典型的分层架构:
再加一个「回退机制」:如果小模型的置信度低于某个阈值,自动升级到大模型。用户几乎感知不到,但成本和效果的平衡能做到最优。
文章写到这,该说的都说了。最后说一句实在话。
蒸馏是个好东西。它让小模型获得了远超自身参数规模的表现,也让 AI 的部署成本降了一个数量级。没有蒸馏,就没有今天这么多端侧模型,也没有这么便宜的 API。
但蒸馏不是魔法。它不能把 7B 变成 70B,也不能把「会答题」变成「真理解」。蒸走的是行为,蒸不走的是机制。
真正值得问的问题从来不是「小模型能不能追上大模型」。
而是——你要解决的那个问题,到底需要行为,还是需要机制?