微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 更小的模型,更好的"反例":一个颠覆直觉的发现

更小的模型,更好的"反例":一个颠覆直觉的发现

2026-10-28 14:32
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-10-28 14:32 • 科技行者

你可能觉得这事挺理所当然的:如果你想教一个模型什么是"错的答案",那肯定得找一个水平相当的模型来犯错,对吧?

就像教孩子辨别好坏作文,你给他看的"坏作文"范本,总得是同龄孩子写的那种常见错误,而不是幼儿园小朋友瞎涂的东西。这个逻辑听起来天衣无缝。

但有一群研究者做了一件事,把这个看似天经地义的假设给推翻了。他们发现:用一个远远更小、更弱的模型生成的"错误答案"去训练大模型,效果反而比用大模型自己生成的错误答案更好。而且这个结论在从70亿参数到720亿参数的模型上都成立,跨越了十倍的规模差距。

这篇论文的名字叫《Smaller Models, Better Rejects: Preference Distillation Scaling》,听起来挺学术,但里面藏着一个值得所有做AI训练的人琢磨的问题:我们一直以来对"负样本"的理解,可能从根上就有点想当然了。

这件事到底难在哪

要理解这个发现为什么重要,得先搞清楚一个背景知识。

偏好蒸馏*:一种训练小模型的方法,核心思路是让小模型学习区分"好答案"和"坏答案",而不只是简单模仿好答案。

传统做法是这样的:你有一个厉害的老师模型(比如GPT-4o),让它给出标准答案,这是"preferred"(偏好的)选项。然后你让学生模型自己去生成答案,学生模型犯的错,就被当成"rejected"(被拒绝的)选项。接着用一种叫DPO的训练方法,让学生模型往"偏好答案"的方向靠,远离自己犯过的错误。

DPO(直接偏好优化)*:一种不需要训练额外奖励模型的偏好学习方法,直接通过比较两个答案的好坏来调整模型参数。

这套流程里有个关键假设:学生自己犯的错误,是最有价值的"反面教材"。因为这代表了它真实的能力边界和盲点。

逻辑是这样的:学生犯了错,说明这个错误在它的能力范围内,属于"伸手可及但还没抓住"的那种知识。所以让它学习自己的错误,针对性最强。

而这个假设还隐含着另一层意思:生成这些错误答案,必须用学生这个尺寸的模型本身来生成。学生有多大,生成反例的模型就得多大。换句话说,如果你训练的学生模型是72B(720亿参数),那生成反例时也得跑一个720亿参数的模型,这个推理成本可不低。

研究者们测试了Qwen2.5系列从7B到72B的学生模型,在代码生成和数学推理两个任务上做了大规模实验。结果让人意外:换成更小的"冻结"基础模型(比如0.5B、1.5B、3B这些比学生小得多的模型)来生成反例,训练出来的学生模型反而更强,而且生成反例所需的推理算力,只有原来的0.9%到50.1%,相当于省了2到108倍的计算量。

这就好比你想训练一个围棋高手去识别"业余爱好者常犯的错误",结果发现用一个刚学会规则的新手下出来的烂棋,比找一个同样水平的职业棋手故意下烂棋,教学效果反而更好。如果你坚持只用职业棋手的"烂棋"做教材,会发生什么?数据显示,学生模型的代码生成准确率(avg@4指标)会从63%左右掉到59%左右,足足差了四个百分点。这还只是14B这一个尺寸上的差距,放大到72B模型上,差距同样存在。

为什么会这样?这就是整篇论文想要搞清楚的核心问题。

拆解"反例"背后的秘密:一个理论框架

研究者没有满足于"发现了现象",他们想知道背后的机制是什么。于是他们搭建了一个简化的数学模型,专门用来分析DPO训练过程中,"反例"到底是怎么影响模型学习的。

这里要先解释几个概念。

线性化特征模型*:一种简化的分析工具,把复杂的神经网络训练过程近似看作在一个固定特征空间里,用一个简单的线性参数来调整每个回答的"打分"。

SeqKD(序列级知识蒸馏)*:训练流程的第一阶段,让学生模型先模仿老师模型给出的标准答案,打一个基础。

参考策略*:DPO训练开始时作为"锚点"的那个模型版本,也就是SeqKD训练完之后的学生模型,后续的偏好学习都是相对于这个锚点来调整的。

论文提出了一个核心指标,叫"净迁移"(net transfer),用符号κ表示。这个指标由两部分构成:一部分是"迁移质量"(有多少反例真的能把模型往对的方向推),另一部分是"逆向占比"(有多少反例反而把模型往错的方向带偏了)。

这个框架听起来抽象,但背后的逻辑很直观。想象你在教一个学生纠正写作错误,你给他看的每一篇"错误范文",理想情况下都应该精准指出一个具体的问题,比如逻辑混乱或者用词不当。但如果有些"错误范文"其实已经写得很接近正确答案了,只是犯了一个极其细微、几乎可以忽略的小毛病,那这篇范文作为反面教材的价值就很低,因为它没能提供足够的"对比度"让学生意识到问题在哪。

这就引出了论文最关键的洞察:学生自己生成的错误答案,在经过SeqKD训练之后,往往已经和"参考策略"(也就是它自己)靠得很近了。这些错误可能只是些"差一点点"的失误,在DPO看来,这种"差一点点"的对比信号太弱,没法给模型足够清晰的方向指引。

而小模型生成的错误,因为能力差距明显,往往是那种结构性、根本性的错误,反而提供了更强、更清晰的对比信号。

打个具体的比方。如果你要教一个已经能写出流畅英语作文的高中生"什么叫语法错误",你给他看另一个高中生写的作文,里面的错误可能细微到连老师都要反复推敲才能发现,学生看了可能根本意识不到问题所在。但如果你给他看一个刚学英语三个月的初学者写的句子,里面主谓不一致、时态混乱全都暴露无遗,学生一眼就能看出"这里不对,那里也不对",反而学得更快更准。这不是说初学者的水平更高,恰恰相反,正是因为差距足够大,错误才足够清晰。

基于这套理论,研究者推导出了一个"有利区域"的概念,只要反例分布落在这个区域内,就能保证带来正向的性能提升。这个理论推导直接催生了三个可以实际验证的干预实验。

干预一:混合反例来源,效果线性叠加

理论预测:如果你把来自不同来源的反例按比例混合,整体的"净迁移"效果应该是各个来源效果的线性加权平均。

这意味着什么?意味着你不需要全有或全无地选择反例来源,可以渐进式地调整比例,效果也应该渐进式地变化。

研究者在14B学生模型上做了验证,把小模型(Llama-3.2-1B-Instruct)生成的反例和学生自己生成的反例按不同比例混合。结果非常漂亮:当小模型反例的占比从0%逐步提升到100%,代码生成的avg@4指标也从59.73%一路爬升到63.28%,整整提升了3.55个百分点,而且是随着比例平滑上升的,不是突然跳变。

另一组实验用Qwen2.5-3B作为小模型源,也呈现同样的趋势,从59.58%提升到62.63%。在72B这个更大的学生模型上,50%混合比例的结果恰好落在两个纯净端点之间。

这个结果证明了一件事:反例的"有用程度"不是一个开关式的二元属性,而是一个可以连续调节的刻度盘。这就像调音台上的推子,你推得越多,效果越明显,不是按一下开关就全有或全无。

干预二:打乱提示词配对,甚至打乱代码词序

这个实验更有意思,也更挑战直觉。

研究者做了一个大胆的操作:把小模型生成的反例,从原本对应的编程题目上"拔"下来,随机塞到别的题目上去。换句话说,反例文本本身没变,但它和题目之间原本的对应关系被彻底打破了。

为了避免接口不匹配的问题,他们还重命名了函数名,并确保重新分配后的反例依然能在新题目上验证失败(至少挂一个单元测试)。

这个操作的理论依据是什么?论文假设,反例的"特征"可以拆成两部分:一部分和具体题目绑定(比如这道题特有的边界条件错误),另一部分和题目无关,是一种"领域通用的结构特征"(比如代码整体的语法模式、常见的错误类型分布)。如果后面这部分特征依然有效,那即使打破了题目对应关系,反例应该还是有用的。

结果印证了这个假设:在所有测试的学生规模上,重新分配题目后的反例,表现都超过了"长度匹配的乱码"(用随机生成的、长度相同的无意义文本做反例)。最大的提升出现在7B学生模型上,比乱码高出1.28个百分点。

研究者还往前推了一步,把这些重新分配后的反例,连代码词的顺序都打乱(保留词汇但破坏语法、逻辑和程序语义)。结果依然惊人:即使代码已经完全读不通、不构成任何合法程序,这些"词汇打乱版"反例依然比乱码表现更好。在14B学生模型上,这个纯词汇层面的提升达到0.73个百分点。

这说明代码领域本身存在一种"结构特征",哪怕脱离了具体题目、脱离了正确的语法,这种特征依然能传递某种有用的训练信号。

这就像给学生看错题集,如果你把题号打乱、答案位置打乱,甚至把每个错误答案里的数字和符号重新随机排列组合,学生依然能从这堆"乱码题"里学到一些东西,比如常见的运算符使用习惯、典型的变量命名风格。这听起来有点反直觉,但恰恰说明学习这件事里,"领域知识的统计特征"本身就承载着信息,不完全依赖具体的、精确对应的上下文。

如果反过来,完全不管这种结构特征,直接用纯随机字符串做反例会怎样?论文给出了答案:效果和"继续用标准答案训练而不加反例"几乎没差别。这意味着随机噪音根本不构成有效的对比信号,模型学不到任何有意义的区分能力。

干预三:挑选"离参考策略更远"的候选反例

第三个干预最直接地验证了前面提到的核心理论洞察:反例离参考策略(也就是学生自己的SeqKD版本)太近,对比信号就弱。

参考似然*:衡量一个候选回答,在"参考策略"模型眼里有多"自然"或多"容易生成"的指标,数值越高说明这个回答越接近参考策略本来的输出倾向。

研究者为每个来源生成了8个候选反例,然后根据它们在14B学生SeqKD参考模型下的似然值打分。接着设计了三种挑选策略:"排斥"策略专门挑似然值低的(也就是离参考策略更远的候选),"原生"策略随机挑,"吸引"策略专门挑似然值高的(离参考策略更近的候选)。

为了保证公平对比,三种策略挑出来的反例必须满足:都能正常运行完成,通过的单元测试比例完全一致,长度相差不超过32个token。这样一来,唯一的变量就是"离参考策略的远近"。

结果非常一致:对每一个反例来源,"排斥"策略(挑离参考策略远的)都比"吸引"策略(挑离参考策略近的)表现更好。差距最大的是1.5B这个来源,排斥策略达到63.14%,吸引策略只有61.88%,差了1.26个百分点。

这个实验的巧妙之处在于,它完全排除了"换了个不同的模型"这个混淆因素。生成候选池用的始终是同一个模型,改变的只是"从这个池子里挑哪些答案"。这就直接证明了:反例离参考策略的远近,本身就是一个独立的、可操作的属性,不只是"模型大小"的副产品。

打个类比:如果你想训练一个辨识力更强的美食评委,你给他看的"难吃的菜"范本,应该是那种一看就能分辨出明显问题的失败作品,比如明显糊了的、明显调味过量的。而不是那种做得已经很接近完美、只差一点点火候的"几乎成功"的菜。后者作为反面教材的价值反而更低,因为它和"成功"的边界太模糊,评委很难从中学到清晰的判断标准。如果你偏偏只给评委看那些"几乎成功"的失败菜,他可能反而会把判断标准调得过于宽松。

把三个发现拼起来看

这三个干预实验,其实在层层剥洋葱,逐步揭示小模型反例为什么有效的真正原因。

研究者的结论是:有用的反例需要同时具备两个属性,一是保留任务相关的结构特征,二是和参考策略保持一定的距离。乱码没有第一个属性,所以没用。学生自己的反例保留了结构特征,但离参考策略太近,缺了第二个属性。而小模型生成的反例,恰好同时满足这两点,结构特征够,距离也够。

研究者还做了一轮"反向验证",试图用一些传统的优化诊断指标(比如梯度场强度、隐式奖励边际、似然轨迹变化,还有一种叫RC-DPO的梯度平衡方法)去解释小模型反例为什么更好。结果这些指标全都没能复现出"小模型优于学生自己"这个排序。

这其实是个挺重要的提醒:有时候某个现象背后的机制,未必能用你手头现成的那套分析工具直接解释清楚。研究者没有强行用现有框架去凑一个解释,而是老老实实地说"这些诊断方法没能解释这个现象",转而去设计新的、更直接的因果实验。这种诚实的态度在论文里挺少见,也挺值得尊重。

数据说话:关键结果一览

论文做了非常详尽的量化验证,这里挑几个核心数字。

跨尺度的代码生成任务上,所有18组"小模型反例"配置,全部超过了两种"自产反例"的基线(用学生本身的原始版本生成反例,或者用SeqKD训练后的版本生成反例)。这18组覆盖了7B、14B、32B、72B四个学生规模,每个规模下测试了多个不同大小的小模型源。

在成本方面,小模型生成反例所需的推理计算量,是同等规模自产反例的0.9%到50.1%,对应2.0倍到108.3倍的节省。举个例子,对72B学生模型来说,用0.5B模型生成反例,计算成本只要原来的0.9%,相当于节省了108倍。

数学推理任务上同样成立。14个测试配置里,13个在MATH-500基准上超过了"只用标准答案继续训练"(Continued-SFT)这个基线,12个在AIME竞赛题上超过了这个基线。

跨模型家族的测试也验证了这个现象不是Qwen2.5系列的特例。研究者用Llama系列的小模型(1B、3B、8B)给Qwen2.5学生当反例源,结果在代码生成任务上9个配置全部超过自产反例,在数学推理任务上9个里有8个超过。

这些数字背后透露出一个判断:这不是某个特定模型组合的偶然巧合,而是一个相当稳健、跨任务跨模型家族都成立的规律。

写在后面

读完这篇论文,最让我意外的不是"小模型更好"这个结论本身,而是研究者选择用一套理论框架去解释它的方式。

很多关于"数据选择"的论文,往往止步于"我们试了A和B,A更好"这个层面,顶多补一句"可能是因为A更有多样性"之类的猜测。但这篇论文把问题往前推了一步,先搭了一个数学模型,再用这个模型推导出三个具体可验证的预测,然后一个个去做实验验证。这种"理论先行、实验验证"的路数,让整篇论文的说服力明显不一样。

还有一个细节值得单独说一说:论文里那个"重新分配题目,甚至打乱代码词序"的实验,结果依然比乱码强。这个结果其实在质疑一个我们可能默认的假设,也就是"反例的价值完全来自它和具体问题的精确对应关系"。但事实证明,哪怕把这种精确对应关系彻底破坏,代码领域本身的某种统计结构(可能是常见的语法模式、典型的错误类型分布)依然在起作用。这让我想到,很多训练数据构造的直觉,可能都值得用类似的"拆解实验"去检验一下,到底哪部分真正有用,哪部分只是我们想象中的有用。

论文还留了一个没有完全解决的问题:为什么现有的那些优化诊断指标(梯度场、隐式奖励、似然轨迹)都没能解释这个现象?这个"解释失败"本身是不是意味着,我们对DPO训练过程的理解,还缺了一块关键的拼图?这个问题论文没有给出答案,但抛出来了,也算是一种诚实。

如果你是做模型训练的人,看到这篇论文,大概会想问一句:我们手里现在用的那些"反例构造流程",是不是也默认了一些类似"必须用同尺寸模型"的假设,而这些假设从来没被真正检验过?

Q&A

Q1:小模型反例训练法是什么?

A:这是论文提出的发现,用比学生模型小得多的冻结模型生成的错误答案(反例)去做偏好蒸馏训练,效果比用学生自己生成的错误答案更好,同时推理计算成本大幅降低。

Q2:为什么小模型生成的反例训练效果反而更好?

A:论文分析认为,学生自己犯的错误经过前期训练后往往和参考策略太接近,对比信号弱。而小模型因为能力差距明显,犯的错误更结构性、更清晰,能提供更强的对比信号,同时又保留了任务相关的结构特征。

Q3:这个发现在哪些任务和模型规模上得到验证?

A:研究覆盖了Qwen2.5系列7B到72B的学生模型,在代码生成和数学推理两个任务上做了大规模实验,所有18组小模型反例配置都超过了学生自产反例的基线,跨模型家族测试(如Llama系列)同样成立。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-