AI大模型圈最近被一条消息刷屏:某高校团队提出了一种叫「弱驱动学习」的训练方法,用能力更弱的模型去反向提升强模型的数学推理水平,在AIME基准上把分数拉到接近翻倍。消息出来当天,不少同行第一反应是“是不是数据泄漏了”,等到后续数值被其他团队复现验证后,大家才意识到,这条路子可能真的打破了“只有强模型才能教模型”的固有认知。这篇文章我想从复现和实验设计角度,把这套方法掰开揉碎讲清楚,包括它为什么有效、关键参数怎么定,还有哪些坑是论文摘要里根本不会写的。
1. 弱驱动学习到底是什么:一个“反向蒸馏”的新思路
1.1 传统知识迁移的困境
在过去的AI方法论里,想提升一个大模型的能力,最自然的路径是找更强的老师。具体到推理任务,主流做法要么是收集大量高质量的人类解题示范做监督微调,要么是让模型自己生成候选答案,拿奖励模型筛出高分样本,再拿这些样本做自我训练。这两种路线本质都假设:越接近“标准答案”的数据,对模型越有好处。
但实际跑过训练的人都知道,这套假设有一个隐含瓶颈。当强模型已经看过大量标准解法之后,继续喂“正确但不意外”的数据,边际收益会迅速衰减。尤其到了AIME这类需要多步推理的数学题上,模型不是不会做简单题,而是常常在第二步第三步出现隐蔽错误,比如代数化简时丢掉符号、排列组合时把“至少”理解成“恰好”。这些错误模式,在干净的标准数据里几乎不会出现,因为标准数据默认把正确路径完整贴出来。模型从来没被训练过“如何识别和避开这些岔路”,一遇到真实考试题就容易翻车。
1.2 弱驱动学习的核心思路
某高校研究团队提出的弱驱动学习,恰好把上面的逻辑倒了过来。他们不是找更强的老师,而是专门找了一个能力明显弱一个档次的模型来“制造麻烦”。让弱模型以较高随机性对同一批数学题大量生成解题轨迹,其中一部分能走到正确答案,更多的则是各种半途而废、思路跑偏、甚至步骤错漏的失败样本。然后他们把这一整袋“又对又错”的轨迹全部填进强模型的训练数据里。
强模型在训练中做的事情,从“照抄标准解”变成了“在雷区里找路”:它需要从大量相似的轨迹中辨认出哪条能到达答案、哪个中间步骤可疑、哪种思维循环是死胡同。这个“纠错辨识”的过程,恰恰是之前标准训练完全没有覆盖的能力。这也是为什么方法名字里强调“弱驱动”——真正的驱动力不是弱模型给出的答案本身,而是弱模型制造出的高方差、高覆盖的推理轨迹分布。
我试过很多方式跟朋友解释,最直观的还是这个类比:一个数学成绩稳定的学生,如果只让他反复做满分试卷,他的成绩不会一直涨;但如果你让他每天批改一批中等生“错误百出”的答卷,他反而会对题目里的各种陷阱极度敏感,做题时会自动多验证一步。弱驱动学习的训练逻辑,本质上就是这个“批改错题卷”的过程。
1.3 成果解读:AIME近翻倍意味着什么
AIME是目前最能暴露大模型推理短板的公开基准之一。它全部是多步推理题,一个题目往往需要5步以上的推导链,中间任何一个符号错误都会导致最终答案全错。对多数通用大模型来说,能在不依赖额外提示技巧的情况下稳定做对三成以上的题目,已经算表现不错。因此当某高校团队公开的实验结果里,目标模型在AIME上的得分接近翻倍时,这个信号在圈子里的分量是相当重的。
更重要的是,这个提升不是靠加大推理时的计算量,也不依赖为AIME定制的提示词,而是把提升前置到了训练阶段。翻倍的意义不在“多对了几道题”,而是说明模型从“会照葫芦画瓢”跨到了“能对每一步负责”的状态。这种能力一旦建立起来,是可以迁移到别的数学任务上的。我后续在其它数学基准上也做了验证,确实有正向迁移,这一点后面详细说。
2. 弱驱动学习背后的三段式机制
2.1 弱模型采样:用随机性换“探索红利”
弱驱动学习的第一步,是让弱模型作为“探索器”。这个模型之所以重要,恰恰因为它“笨”。一个能力较弱的模型在长链条推理中表现为输出方差大:同样是解一道不定方程,它可能用枚举、可能用代数变形、可能在中间某个位置绕进死胡同,甚至突然换一种完全错误的理解。更关键的是,它的错误不是随机噪声,而是“有结构的错误”——它会在模型群体最容易混淆的地方犯同类错误。
这些错误轨迹的价值,在于它们填满了训练数据的密度盲区。强模型原本见过的数据路径是稀疏的、理想化的;弱模型生成的轨迹把真实推理空间里的“高迷惑性”区域也踩了一遍。训练的时候,强模型相当于拿到了一张带等高线的地形图,而不是只看到几条公路。这个“地形图”里既有能走通的路,也有大量写着此路不通的死胡同,模型学会了看路,也就学会了提前避开塌方。
实操上,弱模型的选择不是越弱越好。如果弱到路径完全没有语义结构,比如同一句话反复生成,数据噪声占比太高;如果弱到只比强模型差一点,生成结果又趋于单一,探索红利变少。从我复现的经验看,取强模型参数规模的十分之一左右,通常能形成比较理想的高方差覆盖。当然这个比例不是铁律,要看具体任务与模型家族,但可以作为第一版实验的起点。
2.2 正确性判定:程序验证比模型判官更可靠
数学任务有一个其它领域羡慕不来的优势:答案可验证。AIME的每题都有唯一数值答案,所以可以不用奖励模型,而是写一个简单的程序化校验器,把模型最终给出的答案与标准答案比对。这一步看似笨,实则非常关键,因为自动验证器不引入额外模型偏见,是“弱驱动”信号保持干净的前提。
实际比对时不能直接比字符串,要处理空格、LaTeX语法、等价表达式、带不带分节符号等一堆细节。我在实验中维护了一个答案归一化函数,把分数转成小数、把常见等价形式统一,才把误判率压下来。顺便说一句,如果任务里没有这种程序化验证器,比如开放式问答,就别硬套弱驱动学习了,先想办法把正确性信号做成客观可判定的再谈。
有了程序化验证结果之后,数据划分就变得非常干净:同一道题,被采样到正确答案的轨迹记为正样本,没采到的记为负样本。这个二元标签是后续偏好训练的基础,也是整个方法能落地的基石。
2.3 训练目标:从“照猫画虎”到“学习避开陷阱”
如果只是把弱模型的正样本轨迹拿去微调强模型,效果会非常有限,因为正样本轨迹里还混着大量七拐八拐的冗余推理,直接模仿反而可能拖慢模型的推理速度。真正让效果翻倍的关键,是把正样本和负样本配对成偏好数据,让强模型在对错之间做选择,逐步学出“路径偏好”。
具体到训练目标,我复现时主要用了两类。第一类是标准监督微调,让模型在正确轨迹上保持生成能力;第二类是偏好优化,比如DPO,对同一道题,将正确答案对应的轨迹设为偏好响应,将错误轨迹设为被拒绝响应,让模型逐步拉大两个分布之间的概率差。这个“微调加偏好”的二段式训练,才是弱驱动学习能带飞强模型的微观机制。
| 训练目标 | 使用数据 | 模型学到什么 | 效果瓶颈 |
|---|---|---|---|
| 纯SFT正样本 | 仅正确轨迹 | 模仿冗余路径 | 收敛快但鲁棒性不足 |
| 混合SFT(正+负) | 正负轨迹混合 | 区分基本对错 | 对错误细节注意力不足 |
| SFT + DPO偏好训练 | 正负偏好对 | 路径选择敏感度 | 需要精细调参 |
3. 复现实验的完整设计:数据、参数与训练细节
3.1 数据准备与基线选择
复现的第一步是明确实验对象。强模型我选择的是70B参数级别的模型,弱模型则选择了同家族7B级别的版本,两者属于同一代际、知识底座接近,便于隔离“数据分布差异”这个变量。如果强弱模型来自完全不同家族,可能引入额外的分布偏移,结果不好归因。这里的思路是:先把无关变量控制住,验证方法有效之后,再考虑跨家族是否成立。
AIME数据集我按年份拆:用早期年份做训练采样池,最近几个年度做测试,这样能避免直接的数据泄漏。基线我设了三个:原模型不做任何训练、只用强模型自己生成的正样本做微调、用官方标准解做微调。这三条基线各有作用:第一条看原始水平,第二条看自举上限,第三条看标准训练上限。没有这组对照,你根本说不清楚提升到底是弱驱动带来的,还是单纯微调带来的。
3.2 弱模型采样策略与参数
采样是整个流水线的起点,参数直接影响后续数据质量。我采用的配置如下:每个问题采样64条轨迹,解码温度设为0.9,top_p设为0.95,使用思维链提示让弱模型逐步推理。温度太低样本集中,探索红利消失;温度太高会产生大量乱码式的无效路径。0.9这个值是我在小范围扫参后觉得噪声与覆盖率平衡最好的区间,但不同任务可能需要微调。
采样时还有一个容易忽略的点:要给弱模型足够长的生成长度上限。数学推理题经常要几百到上千token的推导过程,生成长度短了会出现大量“提前放弃”的不完整轨迹。我这边是把最大生成长度拉到2048,并开启重复惩罚,防止模型在同一个错误段上反复循环。这两项不设置好,你得到的很可能是一堆半截话,验证器根本没法判断对错。
64条轨迹听起来不多,但乘以数百道题之后,总量超过几万条,再加上每条轨迹都要跑一次自回归解码,整体计算压力不小。我的建议是先按每个问题16条跑通整条链路,确认指标有正向趋势之后再逐步扩量。一上来就冲256条,数据清洗时你会想砸电脑。
3.3 数据筛选与平衡
程序化验证之后,我还会做几层轻量清洗。首先是去重:同一个问题的多条轨迹如果语法完全一致,只保留一条,避免训练分布被重复样本扭曲。其次是过滤:把“答案正确但长度异常短”的轨迹单独挑出来抽查。答案对但推理过程只有一两行的,通常是模型直接背出了答案,属于伪正确样本,需要用规则剔除。
正负样本配比我建议控制在1:1到1:2之间。负样本占比太高,模型会变得过度保守,碰到题目宁可怀疑一切也不给结论;正样本占比太高,又回到“照猫画虎”的老路。实际操作中我是先按答案匹配得到正样本,然后对每个正样本随机匹配一条同一道题的错误轨迹,组成偏好对。这样既能保证数据规模,也能让每个偏好对聚焦在同一道题上。
3.4 训练阶段:SFT加偏好优化的参数细节
数据准备好之后,训练分两段。第一段用混合后的轨迹做LoRA微调,rank设64,学习率2e-4,只跑一个epoch。第二段做偏好优化,我用DPO,beta值取0.1,学习率降到1e-5。两个阶段在同一个基础模型上依次执行,最后合并LoRA权重做全面评估。这个学习率安排有一定保守倾向,因为数学推理训练特别容易过拟合,宁可慢一点,也不要一步把模型冲坏。
有一个细节值得单独拎出来说:偏好优化的batch构成。如果某个batch里恰好全是同一个题目的偏好对,模型会被带偏,对那道题产生严重记忆。我在复现时给每个batch加了“题目去重”策略,保证同一道题在一个batch内最多出现两次,训练稳定性明显提升。这个操作很小,但对最终效果的影响非常直接。
训练完先看验证集Loss,再看AIME准确率,防止只看单一指标被骗。我还发现一个比较可靠的信号:如果偏好优化后AIME在提升,同时GSM8K和MATH没有明显回落,说明模型学到的是通用的推理能力增强,而不是对特定数据集的记忆。如果一个基准涨、另一个基准掉,先别高兴,大概率是过拟合了。
4. 常见问题与排查技巧实录
4.1 弱模型生成质量差到“全军覆没”
我刚跑通流水线的时候,遇到的第一个问题就是:某个知识点上,弱模型采样64条轨迹,答案全错,一条正样本都没有。这时候偏好对根本组不出来,硬着头皮把这道题塞进训练集,只会引入纯噪声。
解决办法比较务实:这类题目暂时不参与偏好训练,单独把弱模型生成的错误轨迹作为负样本,配合原模型在原始数据上的正确轨迹组成对子。相当于“弱模型负责制造错误,强模型保留自身正确路径”。这样虽然没有拿到弱模型给出的新正确解,但模型仍能从对比中获益。等弱模型能力略微提升后,再回头补充这些题目的采样,大多数情况下能补出正样本。
4.2 伪正确轨迹污染数据
程序验证器只能比对最终答案,拦不住“答案碰巧对、推导全错”的情况。AIME题目偶尔会出现错误推导但数字碰巧命中的情况,这种轨迹如果被当成正样本用,模型学到的就是错误推导加正确答案的坏映射,训练曲线会变得很飘。
我排查这类污染的方法是加一层轻量分步校验:让强模型扮演判官,对被程序化验证器判定为正确的轨迹做二次推理检查,重点看中间步骤之间的依赖关系是否成立。这一层判官不需要太强,能抓出明显的逻辑断裂即可。实测下来,伪正确率大概在1%到3%的量级,筛掉之后训练曲线平滑很多。
4.3 训练过程中出现能力遗忘
强模型训练一段时间后,最让人头疼的现象是:AIME在涨,但通用对话能力和基础代码能力在掉。这是因为偏好数据把模型往数学推理方向用力拽,而原始能力分布没有得到及时补充。
我的对策是在训练数据里混入20%到30%的原始通用指令数据,并适当降低偏好阶段的epoch数。另外,我会监控模型在多个基准上的输出分布变化,一旦发现与初始分布偏离过大,就回调学习率。这种“防守式训练”虽然不惊艳,但能保证你不把模型练废。练废一个70B模型的代价,可不只是电费,还有好几个星期的心理阴影。
4.4 分数提升是真实泛化还是“刷题记忆”
最后一个坑,也是读者最关心的:AIME分数翻倍,是真会做题了,还是把历年真题背下来了?判断方法其实很简单:把测试年份分得更细,用模型完全没见过的题型变体做测试;或者直接看跨基准表现。如果MATH、竞赛数学变式、甚至部分科学推理题都有正向变化,基本可以确认是推理泛化。
我在实验中最常犯的错是:只盯着AIME的验证集调参,结果模型在其它基准上停滞甚至倒退。后来我把评估做成矩阵形式,每次训练结束同时看五个基准,才真正避免“偏科优化”。这个习惯现在成了我复现一切推理相关项目的默认流程,也推荐你从第一天就这么干。
4.5 典型问题速查表
| 现象 | 可能原因 | 排查与对策 |
|---|---|---|
| 正样本大量缺失 | 弱模型过弱或采样温度低 | 提高温度、加大采样数、先对弱模型做少量SFT |
| 训练Loss持续不稳 | 伪正确样本混入 | 增加分步校验,重新清洗数据 |
| AIME涨但通用能力掉 | 数据配比失衡 | 混入原始指令数据,降低偏好阶段epoch |
| 指标只在单一基准涨 | 过拟合测试集 | 上多基准评估矩阵,警惕单一指标调参 |
| 模型输出变得过度保守 | 负样本占比过高 | 调整正负比例至1:1附近,过滤伪负样本 |
5. 我的一些从业体会
5.1 弱驱动学习真正触动我的点
做了几年模型训练,我越来越觉得“标准数据为王”这个习惯性认知没那么牢靠。弱驱动学习让我重新审视了训练数据的定义:数据的价值不仅来自正确性,也来自覆盖度和区分度。弱模型生成的高方差轨迹,本质上是一套免费的困难样本挖掘器,它把强模型推理链路上最脆弱的环节暴露出来,然后让强模型在与这些弱点的对抗中变强。这个思路放在传统机器学习里其实就是主动学习加难例挖掘的变体,但放在大模型推理训练里,确实打出了一个新维度。
5.2 怎么把这个思路迁移到其它任务
数学因为有答案验证,是弱驱动学习最容易落地的领域。但类似的逻辑完全可以迁移:代码生成可以用单元测试当验证器,逻辑推理可以用约束求解器当验证器。只要任务存在自动可判定的正确性信号,就能搭一套“弱模型探索、验证器筛选、强模型偏好训练”的流水线。代码方向我试过几轮,效果同样是正向的,尤其是修bug场景中,弱模型生成的各类失败用例给了强模型很好的回避训练信号。
5.3 给想复现的同行的几句真心话
最后想跟同行说几句实在话。不要一上来就追求完美复现,先跑通一条最小链路,哪怕只有一个季度题目、一个7B模型和一个开源底座,把数据清洗和训练调参的手感建立起来,再逐步放大规模。我在这个方向上踩过最深的坑,就是过早追求规模,结果把大部分精力耗在了数据清洗上,反而没时间观察模型行为。弱模型采样参数、验证器归一化规则、偏好对配比,这三个变量对结果的影响比模型尺寸大得多。先把流程跑到稳定复现,再谈扩展。