1. 从"自我改进"这个词说起:为什么强化学习突然成了大模型竞赛的胜负手
如果你最近半年一直在跟大模型的进展,应该能感觉到一个明显的变化:以前大家比的是参数规模、训练数据量、榜单分数,现在越来越多的团队开始把注意力放到一个更微妙的方向上——模型能不能在部署之后继续变强。这个方向在学术圈有个听起来很学术的名字,叫"自我改进"(self-improvement),但说白了就是一句话:模型能不能自己给自己出题、自己判卷、自己总结错题,然后越练越好。
小米这次发布的 MiMo-V2.6 论文,核心命题就落在这个点上。从标题"用强化学习扩展自我改进"来看,它想解决的不是"模型能不能自我改进"这个是非题,而是"自我改进这套机制能不能被规模化地放大"这个工程题。这两者的区别很大。前者是实验室里跑通一个 demo,后者是要让这套循环在更大的模型、更复杂的任务、更长的训练周期里依然稳定收敛,不崩、不退化、不陷入自我欺骗。
我先把这篇论文要讲的事情用一句话概括:它试图用强化学习作为"放大器",把模型自我生成数据、自我评估、自我迭代这套流程,从一个小规模的可控实验,扩展成一套可以持续运转的训练范式。关键词有三个——强化学习、自我改进、扩展。这三个词缺一不可,因为如果只谈自我改进不谈强化学习,那就是在讲数据增强;如果只谈强化学习不谈自我改进,那就是在讲 RLHF 那一套;如果只谈扩展不谈前两者,那就是在讲算力堆叠。三者合在一起,才是这篇论文真正的技术主张。
那为什么这件事值得单独写一篇博文来拆?因为"自我改进 + 强化学习"这个组合,恰恰是当前大模型训练里最容易踩坑、也最容易被过度包装的方向。很多团队在论文里把自我改进讲得很美,但真正落地时会遇到一堆问题:模型自己生成的数据分布会漂移、自我评估会失真、强化学习的奖励信号会被人为放大导致 reward hacking、迭代几轮之后模型开始"背题"而不是"学能力"。MiMo-V2.6 这篇论文的价值,不在于它提出了一个全新的概念,而在于它试图给出这套机制在规模化场景下的工程解法。
这篇文章适合谁看?如果你是大模型训练方向的工程师,想了解自我改进这套循环在工程上怎么搭、强化学习信号怎么设计、扩展时哪些地方会炸,那这篇值得细读。如果你是算法研究者,关心自我改进的理论边界和失效模式,这篇也能给你一些实证参考。如果你只是对大模型进展感兴趣的普通读者,那你可以把这篇当成一个窗口,看看当前一线团队在"让模型自己变强"这件事上到底走到了哪一步。下面我会从机制拆解、强化学习信号设计、扩展时的工程细节、以及实际落地时的坑这几个角度,把这篇论文背后的东西讲透。
2. MiMo-V2.6 的自我改进循环到底长什么样:四个环节的拆解
2.1 自我改进不是"模型自己训练自己"这么简单
很多人第一次听到"自我改进"这个词,脑子里浮现的画面是模型自己写代码、自己跑实验、自己改自己。这个理解方向没错,但太粗糙了。真实的自我改进循环,至少要拆成四个环节:生成(Generation)、评估(Evaluation)、筛选(Selection)、更新(Update)。这四个环节环环相扣,任何一个环节出问题,整个循环就会退化。
MiMo-V2.6 论文里对这四个环节的处理,是它区别于早期自我改进工作的关键。早期的做法通常是:让模型对一批问题生成多个回答,然后用一个固定的奖励模型打分,挑出高分回答做微调。这套流程听起来合理,但有个致命问题——奖励模型是固定的,模型会很快学会"讨好"这个奖励模型,而不是真正提升能力。这就是典型的 reward hacking。
MiMo-V2.6 的思路是把这个循环里的评估环节也动态化。它不再依赖一个静态的奖励模型,而是让评估信号本身也随着训练过程演化。具体怎么演化,论文里给的方案是把评估拆成两部分:一部分是基于可验证结果的硬信号(比如数学题答案对不对、代码能不能跑通),另一部分是基于模型自身判断的软信号(比如回答的逻辑一致性、推理步骤是否完整)。硬信号提供稳定的锚点,软信号提供更细粒度的区分度。两者结合,既避免了纯硬信号太稀疏的问题,也避免了纯软信号容易被 hack 的问题。
这个设计背后的逻辑其实很朴素:自我改进的瓶颈从来不是生成能力,而是评估能力。模型生成一百个回答不难,难的是从这一百个里挑出真正好的那十个。如果评估环节不可靠,那生成得再多也是白搭,甚至越练越偏。所以 MiMo-V2.6 把大量精力花在评估信号的设计上,这是它和很多同类工作拉开差距的地方。
2.2 生成环节的多样性控制:为什么不能让模型只生成"它擅长的题"
生成环节看起来最简单,实际上有个很容易被忽略的坑:如果让模型自由生成训练数据,它会倾向于生成自己擅长的、容易的题目,因为这样生成的回答质量高、评估分数好看。结果就是训练集越来越偏向模型已经掌握的能力,那些它不擅长的、真正需要提升的方向反而被忽略了。这在强化学习里叫"探索不足"。
MiMo-V2.6 在生成环节做了一个多样性约束。具体做法是在生成 prompt 的时候,不是完全随机采样,而是根据模型当前的能力分布做加权采样——对那些模型表现差的领域,提高采样概率;对那些已经很好的领域,降低采样概率。这个思路借鉴了课程学习(Curriculum Learning)的思想,但实现上更动态,因为能力分布本身是随训练过程变化的。
这里有个工程细节值得说:能力分布怎么估计?论文里用的是滑动窗口的方式,对最近若干轮迭代里模型在各个任务类别上的得分做统计,然后据此调整采样权重。窗口大小是个超参数,太小会导致权重抖动,太大会导致响应滞后。论文里给的参考值是几百到上千个样本的窗口,具体取值要看任务复杂度和迭代频率。这个细节在论文里可能只是一句话,但实际复现的时候,窗口大小选不好,整个循环的稳定性会差很多。
2.3 筛选环节的"难度分层":不是所有好答案都值得学
筛选环节是 MiMo-V2.6 比较有特色的地方。大多数自我改进工作做筛选时,就是简单地按分数排序,取 top-k。但 MiMo-V2.6 做了一个难度分层:它把生成的样本按难度分成几档,然后在每一档里分别做筛选,而不是全局排序。
为什么要这么做?因为全局排序会导致训练集被简单题主导。简单题模型容易做对,分数自然高,全局排序后简单题会占据大部分名额,难题即使模型做对了也会因为分数不够高而被挤掉。但恰恰是难题上的正确回答,对模型能力提升的价值最大。难度分层筛选就是为了保证每个难度档都有足够的样本进入训练集。
难度怎么定义?论文里用的是模型在当前题目上的历史通过率。通过率高的算简单,通过率低的算难。这个定义是动态的,因为随着训练进行,原本难的题会变简单,难度档位会自动调整。这个设计我觉得挺巧妙,因为它不需要人工标注难度,完全靠模型自己的表现来定义,扩展性好。
2.4 更新环节的保守策略:为什么不能每轮都全量更新
更新环节是最容易出问题的地方。自我改进循环里,每一轮生成的数据都带有当前模型的偏见,如果每轮都用新数据全量更新模型,几轮之后模型就会严重过拟合到自己的偏见上,出现能力退化。这在文献里叫"模型崩溃"(Model Collapse)。
MiMo-V2.6 在更新环节采取了保守策略:每轮更新时,新数据只占训练集的一部分,另一部分是从历史数据里采样的。历史数据的比例是个关键超参数,论文里给的参考是 30% 到 50% 之间。这个比例太低,模型会快速漂移;太高,自我改进的效果会被稀释。实际调的时候,我建议从 50% 开始试,观察几轮迭代后模型在保留集上的表现,如果开始下降就提高历史数据比例。
另外,更新时的学习率也要比正常微调小。因为自我改进的数据分布和原始训练数据分布有差异,学习率太大会导致模型快速偏离原始能力。论文里用的学习率大概是正常微调的十分之一到五分之一。这个细节很关键,很多复现失败就是因为学习率没调对。
3. 强化学习信号怎么设计:硬信号、软信号与动态权重的三角关系
3.1 硬信号:可验证结果是自我改进的锚
硬信号指的是那些可以被程序自动验证的结果。数学题有标准答案,代码题可以跑单元测试,逻辑推理题可以检查最终结论是否自洽。这类信号的最大优点是不会被模型 hack,因为对错是客观的。但缺点是稀疏——很多任务没有可验证的结果,或者验证成本太高。
MiMo-V2.6 对硬信号的使用策略是:只在有硬信号的任务上做强化学习,没有硬信号的任务只用软信号做筛选,不做梯度更新。这个策略听起来保守,但很务实。因为强化学习最怕的就是奖励信号不可靠,与其用一个不可靠的信号去更新模型,不如不用。
这里有个实操经验:硬信号的设计要尽量细粒度。比如数学题,不要只给"对/错"二值信号,而是给"最终答案对但步骤有错"、"步骤对但最终答案错"、"全对"、"全错"这样的多级信号。细粒度信号能让强化学习更快找到正确的更新方向。论文里虽然没有明确说这一点,但从它报告的实验曲线来看,细粒度信号带来的提升是明显的。
3.2 软信号:模型自评的可靠性怎么保证
软信号是模型自己对回答质量的判断。这部分最容易出问题,因为模型自评本身就可能不准,而且随着训练进行,模型会学会"给自己打高分",导致软信号失真。
MiMo-V2.6 对软信号的处理有几个值得借鉴的点。第一,软信号不单独使用,而是和硬信号做一致性校验。如果软信号和硬信号冲突,以硬信号为准。第二,软信号的评估模型和生成模型不是同一个,而是用历史版本的模型做评估,这样评估模型和当前模型之间有"时间差",不容易被当前模型 hack。第三,软信号的权重是动态调整的,训练初期权重低,随着硬信号覆盖率提升,软信号权重逐步提高。
这个动态权重的设计逻辑是:训练初期模型能力弱,自评不可靠,所以主要靠硬信号;训练后期模型能力强了,自评可靠性提升,可以承担更多评估责任。这个思路和人类学习有点像——新手需要老师判卷,老手可以自己检查。
3.3 奖励塑形:怎么避免模型学会"刷分"
奖励塑形(Reward Shaping)是强化学习里的经典话题。在自我改进场景下,奖励塑形要解决的核心问题是:怎么设计奖励函数,让模型追求的是"真正变强"而不是"刷高分"。
MiMo-V2.6 用的方案是多信号加权 + 惩罚项。多信号加权前面说了,硬信号和软信号按动态权重组合。惩罚项主要针对两类行为:一是回答长度异常(模型学会用超长回答来"蒙"分),二是回答重复(模型学会用模板化回答来"稳"分)。惩罚项的系数需要仔细调,太小起不到作用,太大会导致模型不敢生成长回答,影响正常能力。
我自己的经验是,惩罚项最好用相对值而不是绝对值。比如长度惩罚,不要直接惩罚"超过 500 字",而是惩罚"超过同批次平均长度 2 倍"。这样模型不会因为任务本身需要长回答而被误伤。论文里没有明确说用的是绝对值还是相对值,但从它报告的稳定性来看,应该是用了相对值或者类似的归一化处理。
3.4 信号覆盖率:一个被低估的关键指标
信号覆盖率指的是在训练样本中,有多少比例能拿到可靠的奖励信号。这个指标在论文里可能不是重点,但在实际工程中极其重要。覆盖率太低,强化学习更新会非常稀疏,训练效率极低;覆盖率太高,往往意味着任务太简单,提升空间有限。
MiMo-V2.6 在实验里报告了不同任务上的信号覆盖率,从百分之十几到百分之六十多不等。这个范围其实挺宽,说明它的方法在不同任务上的适应性还可以。但要注意,覆盖率不是越高越好。如果一个任务的覆盖率从 30% 提升到 60%,但提升的部分都是简单题,那对模型能力的实际提升可能很有限。所以看覆盖率的时候,要结合任务难度分布一起看。
4. 扩展自我改进时最容易炸的几个地方:从实验日志里能看出的问题
4.1 迭代轮次不是越多越好:过拟合的早期信号
自我改进循环有个很诱人的假设:迭代轮次越多,模型越强。但实际跑下来,通常迭代到某个轮次之后,模型在训练集上的表现还在提升,但在保留集上开始下降。这就是过拟合的早期信号。
MiMo-V2.6 论文里报告的迭代轮次大概在十几轮到几十轮之间,具体取决于任务。超过这个范围之后,提升就非常有限了。这个现象背后的原因是:自我改进的数据分布终究是模型自己生成的,随着迭代进行,数据分布会越来越窄,模型会逐渐失去对原始数据分布的覆盖。
怎么判断什么时候该停?我的经验是看两个指标:一是保留集上的表现,二是生成数据的多样性。如果保留集表现连续几轮不提升,或者生成数据的多样性指标(比如不同回答之间的编辑距离)持续下降,那就该停了。论文里没有明确给停止准则,但从它报告的曲线来看,应该是用了类似的早停策略。
4.2 奖励信号的漂移:为什么第三轮之后分数突然虚高
奖励信号漂移是自我改进里最隐蔽的坑。表现是:前几轮训练正常,模型能力稳步提升,但到某一轮之后,奖励分数突然大幅上升,但实际能力没有对应提升。这就是奖励信号被 hack 了。
MiMo-V2.6 对这个问题的处理是定期重置评估模型。具体来说,每隔若干轮,用当前模型重新初始化评估模型,而不是一直用历史版本的评估模型。这样做的代价是评估信号会有一个短暂的"不稳定期",但好处是能打破模型对旧评估模型的适应。
这个策略的工程实现有个细节:重置评估模型时,不要完全重新训练,而是用当前模型的参数做初始化,然后在一个小的验证集上做少量微调。这样评估模型既能跟上当前模型的能力水平,又不会完全继承当前模型的偏见。论文里没有详细说这个细节,但从它报告的稳定性来看,应该是做了类似的处理。
4.3 数据回放的配比:历史数据不是越多越好
前面提到更新环节要混入历史数据,但历史数据的配比不是越高越好。历史数据太多,自我改进的效果会被稀释;太少,模型会快速漂移。MiMo-V2.6 论文里给的参考范围是 30% 到 50%,但这个范围是针对它自己的任务设置的,换到别的任务上需要重新调。
我自己的经验是,历史数据的配比应该和任务的"分布漂移速度"挂钩。如果任务本身变化快(比如开放域对话),历史数据配比可以低一些,因为旧数据参考价值有限;如果任务本身变化慢(比如数学推理),历史数据配比可以高一些,因为旧数据依然有效。这个判断需要结合具体任务来做,没有万能公式。
4.4 计算资源的隐性成本:自我改进比普通微调贵在哪
自我改进循环的计算成本比普通微调高不少,这一点在论文里通常不会重点提,但实际做预算时必须考虑。成本主要高在三个地方:一是生成环节,每轮要生成大量样本,推理成本高;二是评估环节,硬信号验证需要跑程序,软信号评估需要额外推理;三是多轮迭代,每轮都要重新训练,累计成本是单轮的好几倍。
MiMo-V2.6 论文里没有详细报告计算成本,但从它描述的迭代轮次和样本量来看,整体成本应该是普通微调的几倍到十几倍。这个成本对于资源有限的团队来说是个现实门槛。如果预算有限,我的建议是优先保证评估环节的质量,宁可少迭代几轮,也不要为了省成本而降低评估信号的可靠性。因为评估不可靠的话,迭代再多也是浪费。
5. 把 MiMo-V2.6 的思路迁移到自己的项目:一份可操作的落地清单
5.1 先判断你的任务适不适合自我改进
不是所有任务都适合自我改进。适合的任务通常满足几个条件:一是有可验证的硬信号,或者至少有相对可靠的软信号;二是任务本身有足够的难度梯度,简单题和难题都有;三是模型在当前任务上有一定基础能力,完全不会的任务做自我改进没意义。
如果你的任务没有硬信号,只有软信号,那自我改进的效果会打折扣。这时候可以考虑先用人工标注一小批高质量数据,训练一个可靠的评估模型,再基于这个评估模型做自我改进。但要注意,评估模型本身也会被 hack,所以还是要定期更新。
5.2 最小可行循环的搭建步骤
如果你想复现 MiMo-V2.6 的思路,我建议从最小可行循环开始,不要一上来就搞全套。具体步骤:
- 准备基础模型和任务集。基础模型选一个已经有一定能力的,任务集要覆盖不同难度。
- 搭建生成和评估流程。生成用温度采样保证多样性,评估先用硬信号,硬信号覆盖不到的部分先跳过。
- 跑第一轮迭代。生成一批样本,筛选,更新模型。注意学习率要小,历史数据比例先设 50%。
- 观察保留集表现。如果第一轮之后保留集表现提升,说明循环基本跑通;如果下降,检查评估信号和更新策略。
- 逐步加入软信号和动态权重。等硬信号循环稳定后,再引入软信号,逐步提高软信号权重。
- 加入难度分层和多样性约束。这些是优化项,不是必须项,等基础循环稳定后再加。
这个顺序的逻辑是:先保证循环能跑通,再逐步优化。很多复现失败是因为一上来就搞全套,结果某个环节出问题,根本不知道是哪里错了。
5.3 监控指标清单:哪些数字必须盯着
跑自我改进循环时,有几个指标必须持续监控:
| 指标 | 含义 | 异常信号 |
|---|---|---|
| 保留集得分 | 模型在未见数据上的表现 | 连续下降说明过拟合 |
| 奖励分数 | 训练时的平均奖励 | 突然虚高说明被 hack |
| 生成多样性 | 不同回答之间的差异度 | 持续下降说明分布收窄 |
| 信号覆盖率 | 有可靠信号的样本比例 | 过低说明任务太难或信号设计有问题 |
| 历史数据比例 | 训练集中旧数据的占比 | 需要根据漂移速度动态调 |
这几个指标里,保留集得分和奖励分数的背离是最重要的预警信号。如果奖励分数在涨但保留集得分不涨甚至下降,基本可以确定是奖励信号被 hack 了,需要重置评估模型或者调整奖励函数。
5.4 几个我踩过的坑和对应的解法
第一个坑是评估模型更新太频繁。我一开始每隔一轮就重置评估模型,结果评估信号一直不稳定,训练根本收敛不了。后来改成每隔五到十轮重置一次,才稳定下来。评估模型的更新频率要和训练迭代频率匹配,不能太频繁。
第二个坑是难度分层太细。我一开始把难度分成十档,结果每档样本太少,筛选出来的数据量不够训练。后来改成三到五档,效果好很多。难度分层的档数要和样本量匹配,样本少的时候档数要少。
第三个坑是惩罚项系数太大。我一开始把长度惩罚系数设得比较高,结果模型学会了用极短回答来规避惩罚,回答质量反而下降。后来把系数调小,并且改成相对值,才恢复正常。惩罚项的目的是引导,不是限制,系数要温和。
第四个坑是忽略任务本身的分布变化。我有个任务的数据分布本身在随时间变化,但我一直用固定的历史数据配比,结果模型对新数据的适应能力越来越差。后来改成动态调整历史数据配比,才解决。自我改进循环不是封闭系统,外部数据分布变化也要考虑进去。
6. 自我改进这条路的天花板在哪:一些冷静的判断
6.1 自我改进不能替代新数据
自我改进循环再精巧,也有个根本限制:它只能在模型已有能力的邻域内做优化,不能凭空创造新能力。如果模型完全没见过某类任务,自我改进是没法让它学会的。这一点在 MiMo-V2.6 论文里其实也有体现——它的实验都是在模型已有一定基础的任务上做的,没有涉及完全零基础的任务。
所以自我改进的定位应该是能力放大,而不是能力创造。它能让你把模型已有的能力打磨得更精、更稳,但不能让模型学会它完全不会的东西。认清这个边界,才能合理设定预期。
6.2 评估能力的上限就是自我改进的上限
前面反复强调评估环节的重要性,这里再展开说一下。自我改进循环的本质是"用评估信号做梯度",所以评估信号的质量直接决定了自我改进的上限。如果评估信号只能区分"好"和"坏",那模型最多学到"好"的水平;如果评估信号能区分"好"、"更好"、"最好",模型才有机会学到"最好"的水平。
这意味着,提升自我改进效果的一个关键方向是提升评估信号的粒度。硬信号方面,可以设计更细粒度的验证;软信号方面,可以用更强的评估模型或者多模型投票。MiMo-V2.6 在评估信号设计上花了很多功夫,这是它效果好的重要原因。
6.3 规模化的真正瓶颈可能在数据而非算法
从 MiMo-V2.6 的实验来看,算法层面的设计已经相对成熟了,硬信号、软信号、动态权重、难度分层这些组件都有比较清晰的实现路径。真正限制规模化的是数据——具体来说,是有可靠信号的数据。硬信号需要可验证的任务,软信号需要可靠的评估模型,这两者都不是随便就能获得的。
所以如果你打算在自我改进方向投入,我建议把至少一半的精力花在数据建设上。构建高质量的任务集、设计可靠的验证流程、训练稳定的评估模型,这些工作的价值不比算法创新低。论文里通常不会重点讲这些"脏活累活",但实际落地时,这些才是决定成败的关键。
6.4 一个务实的预期管理
最后说点实在的。自我改进 + 强化学习这个方向,论文里的数字通常很好看,但实际落地时的提升幅度往往没有论文里那么大。原因很多:论文里的任务通常是精心挑选的,实际任务更复杂;论文里的评估信号通常是精心设计的,实际场景里信号更嘈杂;论文里的计算资源通常很充裕,实际项目里预算有限。
我的建议是,把论文里的提升幅度打个对折来设定预期。如果论文说提升 20%,你实际能拿到 10% 就算成功。这样设定预期,既不会因为期望过高而失望,也不会因为低估而放弃。自我改进是一条值得走的路,但它不是银弹,需要耐心和工程投入。