科技行者 2026-11-10 17:17:41
你有没有遇到过这种情况:想把一个很厉害的人的经验教给新人,但对方根本不能动手术式地改造大脑,只能靠说、靠写、靠讲故事。
大语言模型现在面临的正是这种困境。
一个能力强的大模型(比如某个顶级的闭源API)知道很多东西,一个能力弱一点的模型(可能是开源的、便宜的)不太会。按照传统做法,想让弱模型变强,就得把强模型的知识"蒸馏"进去,具体操作是用强模型生成大量答案,拿这些答案去微调弱模型的参数,一轮一轮地改它的权重。
这套做法用了十年,一直管用。但它有个绕不开的前提:你必须能碰到那个模型的参数。
问题来了。现在越来越多的强模型是API-only的,你压根摸不到它的权重,只能发请求拿回答。还有些模型训练一次要烧掉几百万美元,你没法说"再训一次"就再训一次。这时候传统的知识蒸馏方法就卡住了,它天生假设你能改参数,可现实里你经常不能。
这篇来自Westlake University(西湖大学)的论文,给出了一个听起来有点反常识的答案:知识不一定要塞进参数里,可以直接写成一段文字。
这段文字他们管它叫Primer
**Primer:一份用自然语言写成的教学讲义,记录了强模型相比弱模型多懂的那些东西,可以直接塞进对话上下文里用,不需要改任何模型的参数。**
这事听起来简单,但往深想一层,会发现没那么容易。你总不能让强模型随便写一段"学习建议"就完事了,那样的东西太空泛,帮不上实际的忙。真正有用的知识转移,得先搞清楚弱模型到底哪里不会,然后针对性地把那部分补上,还得保证补课的内容不会把弱模型原本会的东西搞乱。这篇论文要解决的,正是这件事该怎么系统地做。
教材不是空想出来的,是从错题里抠出来的
UTT(Universal Textual Teaching,通用文本教学)这个方法的第一步,乍一看朴素得有点意外:找错题。
具体说,研究者先让"老师模型"(强模型)和"学生模型"(弱模型)在同一批题目上各自答题,每道题答好几遍,算出各自的正确率。然后把题目分成三堆:老师会学生不会的题,留着当教材原料;学生比老师还厉害或者两边都会的题,留着检验学生原本的能力有没有被破坏;两边都不会的题,留着看有没有可能靠这个教材突破能力上限。
> 知识差距数据集(knowledge-gap dataset):根据师生在同一批题目上的正确率对比,划分出用来提炼教材的样本集合。
为什么要这么麻烦地筛一遍,而不是让老师把整个题库都讲一遍?
设想一下你请了一个家教来给孩子补课。如果家教不管孩子会不会,从课本第一页开始原原本本讲一遍,这节课大部分时间都是在讲孩子已经掌握的内容,真正薄弱的那几个知识点反而被淹没在海量重复信息里。更糟的是,如果家教自己某道题也不会,硬讲出来的东西本身就是错的,孩子学了反而学坏。筛错题这一步,本质上是把"教"这件事从漫灌变成了对症下药:只挑老师真正比学生强、而且老师确实讲得对的那部分,其余的留白。
筛完题之后,真正的教学过程开始了。这部分设计得挺像一个真实的课堂,而且角色分工很细。
四个角色轮流上场,像一堂有观察员在场的家教课
UTT搭了四个角色,全部由LLM扮演,互相之间没有共享参数,纯靠文字交流。
**学生先做题**,用当前版本的教材(最开始是空的)去尝试解题,系统自动判断对错。
如果做对了,直接跳过,这道题暂时不需要教。
如果做错了,**提示者(Prompter)**登场。它不是去解题,而是去诊断:这道题学生错在哪个环节,是概念理解错了,还是推理方法不对,还是漏掉了某个边界条件。诊断完之后,提示者写出一条具体的教学指令,告诉接下来要出场的老师该重点讲什么。
> 提示者(Prompter):一个专门负责"诊断病情"的角色,根据学生的错误和评测反馈,把问题归纳成一条具体可执行的教学指令,但自己不负责解题。
然后**老师模型**根据这条教学指令,给出一份针对性的示范解答。注意,这份解答不是泛泛地重新做一遍题,而是按照提示者点出的方向去讲。
这里有个细节值得多说一句:老师给出的示范解答,必须先过一道评测关,只有答案本身是对的,才会被采纳进教材。如果老师自己也翻车了,这条记录直接作废,不会被写进教材里。这个把关动作背后的逻辑是,错误的示范比没有示范更危险,宁可少学一点,也不能学错。
最后**合成者(Synthesizer)**出场,把这一轮产生的教学记录,包括原题、学生的错误尝试、提示者的诊断、老师的示范,全部揉进现有的教材草稿里,生成一个新版本。
这四个角色的分工让人想起一所学校里真实存在的教研流程。老师不是只管讲课,还有人专门负责收集学生的错题模式(教导主任式的诊断),还有人负责把一学期的教学经验整理成讲义(教研组长式的归纳)。如果省掉提示者这一步,直接让老师看着学生的错误就写解答,会发生什么?论文里专门做了这个消融实验,结果是:去掉提示者之后,教材在训练题本身上的得分反而是最高的(72.4%),但在没见过的新题目上掉到了48.8%,比完整方法的56.0%低了7个百分点。这说明老师直接针对错误写的解答,容易变成"就题论题",而提示者的诊断起到了把具体错误翻译成通用原则的作用,让教材能迁移到新题目上,而不是只会应付见过的那几道题。
写出来的教材草稿也不是无条件被接受的。系统会在同一批题目上,拿旧教材和新教材分别测一遍学生的表现,**只有新教材不比旧教材差,才会被正式采纳**,否则就保留旧版本。这个验证关卡的设计思路很像公司里升级软件版本前的灰度测试,先在小范围内跑一遍,确认没有退步才全量上线,否则宁可不更新。
这整个循环会在训练题库上一批一批地跑下去,每批16道题(默认设置),直到把所有分好的训练题过完一遍,最终产出一份"全局教材",也就是最后那份Primer。
这张流程图里能看到,整个系统被切成三大块:知识差距构建、教材合成、效果评测。图中用颜色区分角色,相同颜色代表同一个底层模型在扮演不同角色。这个设计有个很实际的好处:同一次实验里,老师模型要演三个角色(老师、提示者、合成者),学生模型只演一个角色,角色和底层模型是分开的两套概念,不是绑死的。
数字说话:教材到底管不管用
这套方法听起来挺讲究,但光讲道理不够,得看数字。
论文在两个出了名难啃的任务上做了测试。一个是KernelBench,要求模型写出能跑通、而且比PyTorch原生实现更快的GPU底层代码,属于那种容错率极低的任务,代码编译不过或者跑出错误结果就是零分。另一个是Omni-MATH-2,一套奥赛难度的数学题,答案有标准答案可以核对。
> KernelBench:一个要求模型生成正确且高效的GPU核函数(kernel)的评测基准,通过真实执行来检验代码对不对、快不快。
> Omni-MATH-2:由奥林匹克竞赛难度数学题组成的评测集,有明确的标准答案,用来检验模型的数学推理能力。
先看最基础的情况:用DeepSeek V4 Pro当老师,DeepSeek V4 Flash当学生。
没有教材的时候,Flash在KernelBench上的正确率只有9.4%,配上教材之后冲到48.6%,涨了39.2个百分点。在Omni-MATH-2上,正确率从27.6%涨到51.7%。这意味着什么?这意味着原来每做10道代码题,Flash只能对不到1道,有了教材之后能对接近5道,翻了5倍还不止。
但真正让人意外的是下一步实验。
研究者把这份"为Flash量身定制"的教材,原封不动地拿去给另一个完全没参与教材制作过程的模型Qwen3.6-27B用。按常理想,这份教材是针对Flash的弱点写的,拿给别的模型用效果应该大打折扣,甚至可能帮倒忙。
结果是,Qwen用这份教材之后,KernelBench正确率从9.2%涨到32.0%,涨幅25个百分点。
这个结果有点像你请了一位特级教师,专门针对隔壁班小明的弱点出了一套讲义,结果拿给另一个班的小红用,小红照样大幅进步。这背后透露的信息是,真正有价值的知识缺口,很多时候不是"小明个人"的独特问题,而是这一类学生普遍会卡住的共性坎,讲义抓住的是这个共性,所以换个人用照样有效。如果这份讲义写得过于贴合小明一个人的习惯和错误细节,换个学生用肯定水土不服,但数据显示效果没有大幅衰减,说明合成出来的知识确实有一定的普适性,而不只是针对某个模型量身定制的补丁。
论文还做了一个更极端的测试:把老师也换掉,把学生也换成没参与过制作的那个。用Claude Opus 5当老师,给Flash出了一份新教材,然后把这份教材直接拿给Qwen用,整个过程Qwen完全没有参与教材的任何一次合成,老师也换了。
结果,Qwen在KernelBench上的正确率达到51.0%,涨幅41.8个百分点;在数学题上达到65.8%,涨幅31.5个百分点。这是整个实验里涨幅最大的组合之一,恰恰是在"所有角色都和目标学生无关"的情况下跑出来的。
下面这张表汇总了几种典型组合的对比:
| 评测任务 | 配置 | 无教材 | 有教材 | 提升幅度 |
|---|---|---|---|---|
| KernelBench 正确率 | Pro→Flash(本模型用) | 9.4% | 48.6% | +39.2 |
| KernelBench 正确率 | Pro→Qwen(本模型用) | 9.2% | 50.0% | +40.8 |
| KernelBench 正确率 | Opus→Flash教材迁移给Qwen | 9.2% | **51.0%** | **+41.8** |
| Omni-MATH-2 正确率 | Pro→Flash(本模型用) | 27.6% | 51.7% | +24.1 |
| Omni-MATH-2 正确率 | Pro→Qwen(本模型用) | 34.3% | 62.4% | +28.1 |
| Omni-MATH-2 正确率 | Opus→Flash教材迁移给Qwen | 34.3% | **65.8%** | **+31.5** |
这张表里最值得琢磨的一点是,迁移给未参与训练的Qwen的那组数字,往往比给本模型用的数字还要高。这多少有点反直觉,按理说专门为你定制的东西应该比捡别人用剩的更合身。一个可能的解释是,Qwen本身的基础能力和Flash不完全一样,这份教材里提炼出来的通用解题策略,恰好和Qwen自身的某些能力形成了更好的化学反应。这提示我们,知识迁移这件事,效果好坏不完全取决于"针对性",有时候通用原则反而比过度定制更稳。
不是只管进步,还要防止退步、拓展边界
光看"进步了多少"还不够全面,因为还有一个更隐蔽的风险:学了新东西之后,原本会的会不会反而不会了。
这就是前面提到的"保留集"要检验的事。论文专门测了三组KernelBench配置在保留题(学生原本就答得不错或者比老师强的那部分题目)上的表现,结果不但没有下降,反而从34.0%涨到74.0%,从27.0%涨到81.0%,从37.1%涨到78.6%。
这个结果有意思的地方在于,它说明教材带来的提升不只是针对薄弱环节的局部修补,整体解题习惯的改善可能也顺带优化了那些原本就擅长的题目。不过在数学任务上没有这么乐观,两组配置在保留集上的分数反而掉了9.2和14.2个百分点,虽然没有崩盘,但确实付出了一点代价。这提醒我们,教材这种东西不是万能药,它在不同任务类型上的副作用大小不一样,代码生成任务上几乎没有副作用,数学推理任务上有轻微的此消彼长。
还有一类题目叫"前沿集",指的是老师和学生原本都答不出来的题。按理说这部分应该是最难啃的,毕竟连老师都不会,教材里不该有现成答案。但实验显示,六组配置里有五组在这部分题目上拿到了非零的正确率,KernelBench三组都拿到了11.7%到18.6%,数学题里有两组拿到5.3%和30.0%。
这件事说明,教材里沉淀下来的不是具体题目的答案,而是某种可迁移的解题策略和避坑经验,这些经验组合起来,有时候能帮学生解开一道连老师自己都没解出来的题。这多少有点像是,一个学生把老师平时讲的几个零散技巧综合运用,拼出了一个老师自己都没想到的解法。
教材里到底写了什么
论文附录里放出了几份完整的Primer样本,读起来挺有意思,不像一般的学术附录那样枯燥。
数学任务的那份教材,是按主题归纳的,从几何、数论、组合计数到概率都有,每个小节既有具体的解题套路,也夹杂着一些验证习惯的提醒,比如"检验边界情况""验证显式构造""测试可能的反例"。
GPU代码生成的那份教材更有工程气息,专门讲了常见的编译失败模式和对应的修复方法,比如符号在绑定之前必须可见、扩展编译时只能有一个绑定入口、反向累加和要从右往左遍历而不是拼接翻转操作。这些内容读起来不像学术论文的风格,更像是一份资深工程师写的踩坑笔记。
多模态几何任务的那份教材,则专门讲怎么读图、怎么识别图里数字标注对应哪个几何对象、容易混淆半径和直径这类概念。还特别强调了一条纪律:遇到看不懂的图,最多重新解读一两次就必须给出答案,不能反复纠结图意而耗光推理预算,因为观察到的典型失败模式就是模型一直在反复读图,最后啥答案都没输出。
这份纪律性的提醒很值得玩味。它说明了一件事,知识差距有时候根本不是"不会做题",而是不知道什么时候该停止纠结、及时交卷。这种元认知层面的经验,恰恰是传统的"喂答案"式蒸馏很难教会的,因为它不是一道具体的题目知识,而是一种做题的节奏感。
跟其他方法比,UTT赢在哪
论文还把UTT拿去跟一堆现有方法打擂台。
一类对手是提示工程方法,包括简单的示例提示、让老师总结一份通用提示、还有几种自动提示优化算法,比如APE、MIPROv2、GEPA。
> 提示工程(prompt engineering):通过设计、组合、优化输入给模型的提示词来提升模型表现的技术统称,不涉及修改模型参数。
结果是,UTT在六种组合里全部拿到最好成绩。有意思的是,"让老师直接总结一份通用提示"这个做法,在Flash上管用,换到Qwen上却几乎没效果甚至更差。这个对比恰好印证了前面说的那个道理:知识要经过师生互动、诊断、验证这一整套流程提炼出来,直接让老师凭空总结出一份通用说明,质量和可迁移性都打折扣。
另一类对手是真正会动参数的知识蒸馏方法,SeqKD、Fine-tune-CoT、RSR、LUFFY,这些方法要在学生模型上训练LoRA适配器,得用到GPU,得跑几个小时到二十多个小时不等的训练时间。
UTT完全不碰参数,只靠API调用合成教材,全程花了1.6小时,调用281次模型,用掉约677万输入token和556万输出token。效果上,UTT在数学题正确率上比最强的对照方法高7.2个百分点,在代码生成任务上高8.2个百分点。
这个对比揭示了一个值得想一想的问题:参数训练消耗的是GPU算力这种实打实的硬件资源,而UTT消耗的是API调用费这种更灵活的资源。两者性质不完全一样,没法严格说哪个更便宜,但至少说明了一件事,不改参数这条路,在效果上不但没有输给改参数的方法,反而更胜一筹。
换个量化精度、关掉思考模式,教材还管用吗
研究者还做了一组压力测试,看看教材是不是只能在特定条件下生效。
他们把同一份教材,拿去给经过量化压缩的Qwen模型用(量化会损失一部分模型精度,通常会拖累表现),还拿去给关闭了"深度思考"模式的Qwen用。
> 量化(quantization):把模型参数从高精度数值压缩成低精度数值的技术,目的是减少显存占用和加快推理速度,但往往会牺牲一部分模型性能。
结果显示,就算是最差的那种量化方式(逐通道量化)下,未加教材时正确率只有0.4%,几乎等于完全不会,加上教材之后涨到21.6%,涨幅21.2个百分点。关闭思考模式的情况下,正确率从1.6%涨到16.6%。虽然绝对分数远不如不量化、开思考模式时那么高,但教材带来的相对提升幅度始终保持在一个可观的区间。
这个结果挺让人安心的,它说明教材这种知识载体的有效性,不是建立在某个特定推理配置上的偶然现象,换一套硬件条件、换一套推理设置,它照样能发挥作用,虽然天花板会随之变化。
写在后面
读完这篇论文,最让我意外的不是"文本可以传递知识"这件事本身,这多少是个符合直觉的猜想。真正让我重新想了一遍的,是那个"换老师、换学生,效果反而更好"的实验结果。
这多少说明了一件事,我们平时理解的"个性化定制"未必总是最优解。有时候,一份足够通用、足够抽象的经验总结,比一份精心为你量身打造的方案更管用,因为它抓住的是问题的共性结构,而不是你个人的具体症状。这个道理放在教育上、放在管理上,可能都值得重新想一想。
还有一个细节我觉得值得单独拎出来说。论文里提到,拿掉提示者这个诊断角色之后,教材在训练题上的表现反而是最好的,但在没见过的新题上掉了一截。这其实是个挺经典的"过拟合"信号,只不过这次过拟合的不是一个神经网络,而是一段自然语言写成的教材。这让我意识到,"过拟合"这个概念或许可以脱离参数化模型的范畴,延伸到任何形式的经验总结上,包括人写的工作手册、复盘文档。一份总结如果写得太贴合具体的几个案例,换个场景就容易失灵,这跟模型训练过度拟合训练集是同一回事,只是载体从权重变成了文字。
论文自己也承认了一个还没解决的问题:教材要一直挂在每次输入的开头,这会增加推理时的token消耗。如果有一天能把教材压缩得更精炼,或者按需检索只调出和当前问题相关的那一小部分,这件事会更实用。这条路目前还没人走完。
Q&A
Q1:UTT的Primer是什么?
A:Primer是一份用自然语言写成的教学讲义,记录了强模型(老师)相比弱模型(学生)多掌握的知识和解题策略,可以直接作为上下文提供给模型使用,不需要修改任何模型参数。
Q2:Primer真的能在不同模型之间通用吗?
A:能。论文实验显示,针对某个模型合成的Primer,拿给完全没参与制作过程的其他模型使用,依然能带来显著提升,比如在KernelBench上提升超过40个百分点,说明知识差距中有相当一部分是跨模型共性的。
Q3:UTT和传统的知识蒸馏方法比起来优势在哪?
A:UTT不需要训练学生模型的参数,全程通过API调用LLM互动合成文本教材即可完成,耗时更短(约1.6小时),且在数学和代码生成任务上的效果超过了需要训练LoRA参数的SeqKD、LUFFY等基线方法。
【版权声明】本文内容来源于科技行者,版权归原作者及原媒体所有。本站仅作信息分享,不构成任何商业用途;如涉版权问题,请联系本站删除。
发布时间:2026-11-10 16:04:09
(第1/1页/共8782字/7阅)