![]()
有一件事让做大模型训练的人一直挠头。
你训练一个小模型去模仿一个更强的大模型,用的是现在很流行的一种方法,叫在线策略蒸馏。你看着分数涨了,学生模型确实变强了。可如果有人问你一句,学生的脑子里到底发生了什么变化,它是学会了什么新东西,还是只是把原来会的东西用得更顺手了,你答不上来。
这不是矫情的问题。因为答案不一样,后面要做的事完全不一样。如果学生真的从老师那里学到了新本事,那就应该想办法让它学得更多、更深。如果学生只是把已有的家底重新整理了一下,那再怎么蒸馏,也蒸不出它本来没有的能力。
这篇来自香港大学团队的论文,就是奔着这个问题去的。他们没有去看模型输出的答案对不对,而是直接把手伸进了模型内部,看它的神经元活动到底发生了什么变化。
在线策略蒸馏到底难在哪
先说说这个方法本身。
在线策略蒸馏,英文缩写OPD
*在线策略蒸馏(On-Policy Distillation):让学生模型自己生成推理过程,再由老师模型给这些过程的每一步打分,用打分结果来调整学生的方式。*
跟传统蒸馏不一样的地方在于,传统蒸馏是老师写好答案,学生跟着抄;OPD是学生自己写,老师在旁边逐字点评。这就好比学游泳,一种教法是让你看视频学动作,另一种是让你直接下水扑腾,教练站在池边随时喊"这一下手型不对""这一步该往前蹬"。后者显然更贴近你实际会犯的错误。
正因为这个方法看起来很合理,它已经被Qwen3、MiMo、GLM-5、Kimi K3这些主流大模型的训练流程采用了。可问题是,效果并不总是稳定。有的实验里,OPD训练完的学生模型反而比训练前更差;有的实验里,它明明分数涨了,但研究者发现涨的主要是采样效率,并没有真正扩大学生能解决问题的范围。
这就很奇怪了。一个被广泛采用的方法,大家却说不清它到底往学生脑子里塞了什么。
以前的研究都是通过看模型说了什么话、给对了几道题来推测背后发生的事,这篇论文换了个角度,直接去看模型内部那些负责处理信息的"特征"发生了什么变化。
要打开这个黑箱,他们用上了一个叫稀疏交叉编码器的工具。
一个能同时读懂三个大脑的翻译器
要理解这篇论文的核心贡献,得先明白他们用的这个工具是干什么的。
稀疏交叉编码器
*稀疏交叉编码器(Sparse Crosscoder):一种能同时学习多个模型内部激活模式的工具,它给几个模型建立一套共享的"特征词典",让不同模型的神经元活动可以被翻译成同一种语言,方便逐一比较。*
打个比方,你有三个人,一个法国人,一个日本人,一个德国人,他们各自用母语描述同一件事。你想知道这三个人对这件事的理解有什么差异,直接听他们各自的语言是听不出门道的。稀疏交叉编码器做的事情,就是把这三种语言都翻译成一套通用的符号系统,让你能拿着同一套符号去对比三个人到底谁在强调什么。
在这篇论文里,这三个"人"就是训练前的学生模型、训练后的学生模型,还有教它的老师模型。交叉编码器把三者的内部激活都投射到同一套特征词典上,这样你就能问一个具体的问题:某个特征在训练前的学生身上活跃吗,在训练后呢,在老师身上呢。
但这里出现了一个技术上的死结。研究者发现,标准的交叉编码器读法有个大问题。
因为交叉编码器把三个模型的信息一起编码成一套统一的激活值,你压根分不清这个激活到底是被谁的输入激发的。想象你在开一个三方视频会议,声音混在一起从一个喇叭里放出来,你听得到有人在说话,但分不清是谁说的。更麻烦的是,训练前后的两个学生模型,它们的内部表示极其接近,差异只占激活值大小的百分之七到十二,这意味着交叉编码器里那部分本应体现"训练前后差异"的参数,大部分时候其实还停留在随机初始化的状态,根本没被训练数据校准过。
如果你直接拿这套没被校准的参数去分析,读出来的东西一半是噪音。这就是为什么之前的交叉编码器研究只能告诉你"这个特征是A模型独有的还是B模型独有的",却回答不了"训练让A模型对某个特征的使用方式发生了什么改变"这种更细粒度的问题。
研究团队想出的解法,叫交换读取法。
交换读取法:怎么让噪音自己消失
这个方法说起来其实挺巧妙的。
交换读取法
*交换读取法(Swap Readout):把要检测的那个模型的激活值,同时放进交叉编码器原本给两个不同模型准备的两个输入槎里,老师的输入保持不变,这样就能单独读出这个模型自己对特征的使用情况。*
具体来说,交叉编码器原本设计了三个输入口,一个给训练前的学生,一个给训练后的学生,一个给老师。研究者的做法是,如果你想单独检测训练后的学生模型,你就把训练后学生的激活值同时塞进"训练前学生"和"训练后学生"这两个口子里,老师那个口子照常放老师的数据。
为什么这么做能解决问题?因为交叉编码器对两个学生槎的响应是由一套加权公式决定的,这套公式里既包含了两个学生槎权重的和,也包含了两者权重的差。前面说了,权重的和是被训练充分校准过的,权重的差基本还是随机噪音。当你把同一个激活值放进两个学生槎时,那个"差"在数学上会被直接抵消掉,剩下的只有被训练校准过的"和"部分在起作用。
这就好比你有一台老式收音机,两个旋钮控制的其实是同一个频段,一个旋钮转动灵敏、经过精心校准,另一个旋钮松松垂垂、几乎是装饰。如果你把这两个旋钮拧到完全一样的角度,那个松垂旋钮带来的随机抖动就没有发挥空间了,你听到的声音就只由那个校准过的旋钮决定。如果你不这么做,直接单独去转那个装饰旋钮,你听到的信号里全是杂音,压根分不出真正的变化在哪。
论文里给出的数字很直接:用own-slot(单独放一个学生槎)的老办法去读,读出来的噪音和真实信号差不多一样大,而用交换读取法,能可靠地重建出训练前后模型的真实差异,可信度跟交叉编码器原本联合编码的效果一样好,甚至能处理交叉编码器压根没见过的检查点,比如后面章节里会讲的warm-up之后的学生模型。
OPD到底在训练什么
铺垫做完,来看正题。研究者选了三组实验,都是拿同一个1.5B参数的学生模型(DeepSeek-R1-Distill-Qwen-1.5B),分别向三个不同的老师模型学习。一个老师是同规模但经过强化学习训练过的模型,一个老师是7B规模的Skywork模型,还有一个老师是7B规模的R1-Distill模型。
用交换读取法一测,结果出人意料地一致。
在这三组实验里,OPD训练后的学生模型没有产生任何一个属于自己独有的新特征,它的特征分布跟训练前几乎完全重合。
这句话拆开说,意思是训练之后,学生的"脑回路"里,没有凑出任何以前不存在的全新处理单元。你可能会以为,既然向更强的老师学习,学生应该多多少少"长出"点什么新东西,结果没有。
那教师本身独有的特征呢,有没有被传递给学生?研究者也测了。同规模老师(JustRL)本身没有独属于自己的特征,而两个7B规模老师各自有42个和30个自己独有的特征。如果OPD真的把老师的能力"教"给了学生,这些特征应该慢慢变成学生和老师共享的东西。但测量结果是,学生对这些特征的贡献度在训练前后几乎没变,变化幅度不超过0.015。
老师的独门本事,压根没传下去。
那OPD到底改变了什么?答案是,它只是调整了学生本来就有、并且老师也有的那些共享特征的使用频率,而且调整幅度很小。研究者统计了那些经常被激活的特征,发现三组实验里,分别有98.2%、99.6%和99.4%的特征,它们的激活频率变化幅度都在20%以内。
这就好比一个厨师去跟一位大厨进修。你以为进修完他会学会几个从没做过的新菜,结果发现他菜单上一个新菜都没加,那位大厨压根没把独门秘方教给他。真正发生的变化是,厨房里那些他本来就用的调料,他用的比例微调了一下,盐少放了一点,糖多放了一点。如果不去这么细致地测量,你光看最后端出来的菜确实更好吃了,你会以为他学了什么新手艺,但事实是他只是把手头现成的东西用得更顺了。
哪里的调整最猛,答案是"转折词"
既然大部分特征的变化都很小,那剩下那一小部分变化最大的特征,到底是些什么?
研究者顺着这条线往下挖,发现一个挺有意思的规律,变化最猛烈的那些特征,基本都是负责处理"转折词"的。
具体说,推理过程里经常会出现一些标志性的词,比如"Wait"(等等)、"Hmm"(嗯)、"So"(所以)。这些词出现的地方,往往是模型在思考过程里犹豫、反思或者转向下一步的关键节点。研究者把这些词分成三类:反思类(Wait、actually,回头检查之前的步骤)、犹豫类(Hmm、maybe、Alternatively,表达不确定或转向另一种思路)、推进类(So、Therefore、Let,进入下一步或者下结论)。
在同规模老师这组实验里,负责这类"转折词"的特征只占全部特征的0.4%,但在变化最大的50个特征里,它们占了12%,是基础比例的三十倍。而且OPD对这些特征的调整方向,恰好朝着老师本身的使用习惯靠拢。比如那个负责"Wait"的特征,训练后激活频率下降了35%,老师本身对这个特征的使用频率恰好也比学生低34%。负责"maybe/perhaps"的特征,训练后激活频率上升了42%,老师那边这个数字是52%。
这背后其实有个更深的逻辑。研究者进一步测了,在推理过程里,老师和学生的下一步预测分布,差异最大的地方恰恰就是这些转折词出现的位置,KL散度是平均水平的1.5到3.6倍不等。这说明OPD的训练信号本身就集中在这些决策节点上,因为老师和学生在这些地方的意见最不统一,信号最强,所以训练自然会优先调整这里对应的特征。
这就好比你在开车,大部分路段你和教练的判断完全一致,油门刹车都差不多,唯独在几个复杂的十字路口,你的判断和教练的判断经常打架。教练能纠正你的地方,自然也就集中在这几个路口上,而不是均匀地纠正你全程的每一个动作。如果整条路上大家判断都一样,教练根本没有信息可以纠正你,不管教多少次,你的开车习惯都不会变。
值得一提的是,当老师和学生的分布本来就很接近的时候,比如那个7B的R1-Distill老师这组实验,OPD对学生的整体改动就特别小,老师学生的KL散度平均只有0.008,是同规模老师那组的十分之一,这时候连转折词特征的变化都基本看不出来了。
热身训练:到底在干什么
讲完OPD本身的机制,论文接着往前追了一步,追问一个业界普遍的做法,在正式做OPD之前,通常会先让学生模型跟着老师的推理轨迹做一遍监督微调,这被称为热身,英文是warm-up。这个步骤被证明能显著提升OPD最终的效果,但没人说得清它到底在往学生脑子里塞什么。
一个很自然的猜想是,热身补上了OPD补不上的东西,也就是新的特征,把学生的表示能力往老师那边拉近一截。这个猜想还有一定道理,因为之前有研究发现,普通的监督微调确实会给模型引入很多新特征,只不过那种研究用的数据是另一个更强模型写的解答,跟这里"跟着老师自己的推理轨迹学"的场景不完全一样。
研究者按照Simple-OPD这篇工作的设置,复现了热身的效果:确实,加了热身之后,OPD能让学生模型恢复老师优势的46%,不加热身只能恢复30%。热身的效果是真的。
但当他们用同样的交叉编码器方法去检测热身到底改变了什么,结果又是出人意料的一致,热身也没有创造任何新特征,也没有让学生获得老师独有的特征。
研究者把热身前后的学生放进一个两两对比的交叉编码器里,发现每一个特征的归属度都稳稳地停在0.5附近,也就是完全共享,没有一个特征偏向某一方。这跟之前提到的"普通监督微调会产生大量专属特征"的结论完全不一样。研究者认为这是因为热身用的数据不是外部一个更强模型写的,而是老师模型自己在同一批题目上生成的推理轨迹,这种训练本质上还是在学生原有的任务分布里打磨,而不是引入一套陌生的知识体系。
那热身到底做了什么?研究者继续用交换读取法测,发现热身其实也是在调整那些学生和老师共享的特征,只是调整的路径分成了两部分。
一部分,热身提前把OPD后来会调整的那些特征往同一个方向调了一遍,相当于替OPD先干了一部分活。研究者做了个量化分析,把每个特征在热身后的变化量和在OPD后的变化量各自算成一个向量,然后拟合出一条斜率,结果斜率是0.46,意思是热身把这些特征往OPD的方向推动了大约一半的距离。在OPD调整幅度最大的前50个特征里,88%到92%在热身之后就已经朝着同一个方向动了。
另一部分,热身还做了一些OPD本身根本不会去做的调整,这部分占到热身总变化量的一半以上。这部分变化涉及三类东西:对话格式相关的特征(比如系统提示词、答案格式指令、对话轮次边界)、推理风格相关的特征(比如Wait、Alternatively、But这些词的使用频率下降,而"按步骤列计划"这种表达方式的特征上升)、还有数学符号相关的特征。而且这部分额外的调整,即便后面接着做了OPD,依然保留了下来,没有被冲掉。
这有点像装修房子前先请了个设计师来打样。设计师一方面把你原本打算自己动手改的地方提前改好了一部分,省了你后面的工,另一方面,设计师还顺手调整了一些你压根没打算改的地方,比如把插座位置挪了挪、窗帘颜色换了换,这些改动在你后来自己动手装修的时候一直留在那里,没被覆盖掉。如果没有设计师这道预处理,你自己装修完,房子看起来会不一样,至少那些设计师顺手改的细节不会出现。
这个重新分配的过程,到底管不管用
到这里,研究者手里已经有了一套关于热身"改了什么"的详细描述,但这还只是相关性观察,没法证明这些改动真的是热身有效的原因。于是他们做了一个直接干预的实验。
具体操作是,他们用交叉编码器把热身前后学生模型的特征差异解码出来,变成残差流上的一个具体的向量改动,然后把这个改动直接加到一个"没做过热身、直接做OPD"的学生模型的对应层上,不改动这个模型的任何权重参数,单纯往它的内部激活里注入这个改动。
结果是,加了这个改动之后,直接蒸馏出来的学生模型准确率从18.6%提升到21.3%,已经很接近做过热身的学生模型的21.9%。反过来,如果把这个改动从热身过的学生模型身上去掉,它的准确率就从21.9%掉回19.2%,接近没做过热身的水平。
为了确认这个效果不是"随便改点什么都会涨分"的假象,研究者还做了一个对照实验,把这个改动里各个特征的身份打乱重新分配再注入,结果这种打乱版本的改动既不能提升直接蒸馏的学生,也不能降低热身学生的表现。
这就相当于证明了,重要的不是"改动的量有多大",而是"改到了哪些具体的特征上"。
这个发现挺震撼的,因为它意味着热身带来的好处,几乎可以被拆解、提取出来,单独装进另一个模型里,而不需要重新走一遍完整的训练流程。这种可迁移性,恰恰说明这个改动本身是有具体结构的,不是随机噪音式的进步。
打个类比,这就像你发现某位老中医开的药方效果好,不是因为药量猛,而是因为药材配比精准,你把这个配比原样抓给另一个病人,病情也跟着好转;但如果把药材种类不变、只是把配比顺序打乱重新煎一遍,病人的病情就没有起色。药方管用的秘密不在分量的多少,在于哪种药配哪种药。
写在后面
读完这篇论文,最让我想不通又觉得很有意思的一点是,这套方法论其实反过来提醒了一个容易被忽略的判断误区。我们常常习惯用"性能涨了"去反推"模型学到了新东西",但这篇论文用了一整套严谨的技术手段告诉你,涨分和长本事是两件可以分开的事。这两件事被混为一谈的时候,我们对模型能力边界的判断很容易出错。
另一个让我意外的细节是,那个用来解决"分不清是谁的激活"这个技术难题的交换读取法,思路其实相当朴素,把同一个东西放进两个原本设计给不同对象的槎里,让本该体现差异的那部分参数自然抵消。这种解法没有引入任何新的复杂结构,只是巧妙地利用了原有系统的数学性质。有时候解决一个棘手问题的钥匙,不是造一把更复杂的锁,而是重新想清楚锁本身是怎么开的。
论文里还留了一个没深挖的问题,如果热身用的不是老师自己的推理轨迹,而是别的强模型写的解答,会不会真的产生专属特征,让蒸馏的效果走上另一条路?这篇论文明确说了自己的结论只针对"用老师自己的轨迹做热身"这一种情况,更泛化的答案还悬在那里。
如果学生真的从头到尾没学会一道新菜,那些被反复提起的"能力涌现""知识迁移",到底有多少是真实发生的,又有多少只是我们在看着分数曲线往上爬的时候,自己脑补出来的故事。
Q&A
Q1:在线策略蒸馏(OPD)到底给学生模型带来了什么变化?
A:论文用交换读取法测量发现,OPD没有给学生模型创造任何新特征,也没有把老师模型独有的特征传递给学生,它只是微调了学生和老师本来就共享的特征的使用频率,而且变化幅度很小,超过98%的常用特征激活频率变化不超过20%。
Q2:交换读取法(Swap Readout)是怎么解决交叉编码器读不准的问题的?
A:把要检测的那个模型的激活值同时放进交叉编码器原本给两个学生模型准备的两个输入槎里,老师的输入保持不变。这样两个学生槎之间那部分没被训练充分校准、接近随机噪音的差异权重会在数学上自动抵消,只留下被真实训练校准过的部分起作用,从而读出该模型真实的特征使用情况。
Q3:SFT热身训练为什么能让OPD效果更好?
A:论文发现热身训练同样不会给学生模型创造新特征,它是提前把OPD后续会调整的部分特征朝同一方向调整了一遍,相当于替OPD预先做了一部分工作,同时还额外调整了一些OPD本身不会触及的特征,比如对话格式、推理风格和数学符号相关的特征,这些额外改动在后续OPD训练中依然保留。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.