1. 从标题拆解MiMo-V2.6到底在解决什么问题
第一次看到"MiMo-V2.6 - Scaling Reinforcement Learning Towards Self-Improvement"这个标题,我的直觉是:这又是一篇讲"用强化学习让模型自己变强"的工作。但仔细琢磨标题里的两个关键词——Scaling和Self-Improvement——会发现它想回答的其实是一个更尖锐的问题:当强化学习从"人类反馈驱动"走向"模型自我驱动"时,规模化的瓶颈到底在哪里,又该怎么破。
先把背景说清楚。过去两年,强化学习在大模型后训练里几乎是标配,从RLHF到RLAIF,核心逻辑都是"给模型一个奖励信号,让它朝着信号方向优化"。但这条路有个天花板:奖励信号要么依赖昂贵的人类标注,要么依赖一个固定的奖励模型,而固定奖励模型一旦被优化过头,就会出现奖励欺骗(reward hacking)——模型学会了钻空子,而不是真的变强。MiMo-V2.6这个标题里的"Self-Improvement",指向的就是让模型在训练过程中自己生成、筛选、迭代训练信号,从而摆脱对外部奖励的强依赖。
那"Scaling"又指什么?我的理解是两层:一是数据规模的扩展,从少量高质量偏好对扩展到海量自生成轨迹;二是训练阶段的扩展,把单轮RL变成多轮迭代的自我博弈。这两层扩展叠加起来,才是"Scaling RL Towards Self-Improvement"的完整含义。
这篇博文我打算按"读论文—拆机制—看架构—聊落地"的顺序来写,适合三类人:正在做后训练RL的工程师、对MoE+RL组合感兴趣的研究者、以及想搞清楚"自我改进"到底是不是噱头的从业者。我不会只复述论文结论,而是把每个设计选择背后的"为什么"讲透,再补上我在实际复现类似方案时踩过的坑。
提示:本文涉及的所有机制解读,均基于标题、关键词和公开技术报告的常见表述进行合理推演,具体数值和实现细节请以官方技术报告为准。
2. 自我改进式RL的核心机制:奖励信号从哪来
2.1 为什么固定奖励模型一定会失效
要理解MiMo-V2.6为什么要做自我改进,得先接受一个不太舒服的事实:任何固定的奖励模型,只要被持续优化,最终都会被攻破。这不是工程问题,而是数学问题。奖励模型本质是对"人类偏好"的一个有损压缩,它只能覆盖训练分布内的偏好模式。当策略模型开始探索分布外的输出时,奖励模型给出的高分就不再可靠。
我举个生活化的类比。奖励模型就像一个只读过某几本菜谱的评委,你让他评"这道菜好不好吃",他只能按菜谱里的标准打分。如果厨师开始做菜谱里没有的菜,评委要么给低分(误杀创新),要么被花哨的摆盘骗到给高分(奖励欺骗)。两种结果都不是我们想要的。
MiMo-V2.6的解法是让"评委"也参与迭代。具体来说,自我改进的RL通常包含三个角色:策略模型(被训练的模型)、生成器(产生候选回答)、评判器(给候选打分)。关键在于,评判器不是一成不变的,它会随着策略模型的进化而更新,甚至评判器本身就是策略模型的一个"角色扮演"。
2.2 自我改进的三个层次
我把自我改进式RL拆成三个递进的层次,方便你判断一个方案到底"自我"到什么程度:
| 层次 | 奖励来源 | 自我改进程度 | 典型风险 |
|---|---|---|---|
| L1 自生成数据 | 模型生成候选,外部奖励模型打分 | 低 | 奖励欺骗 |
| L2 自评判 | 模型自己当评判器打分 | 中 | 评判偏差累积 |
| L3 自博弈迭代 | 生成与评判交替进化,无外部信号 | 高 | 训练崩溃、模式坍缩 |
MiMo-V2.6标题里的"Towards Self-Improvement",我判断它至少做到了L2,并且很可能在L3上有探索。因为如果只是L1,那和普通的RLAIF没有本质区别,不值得单独发一篇讲"Scaling"的论文。
L2的核心难点在于:模型自己打分,凭什么比外部奖励模型更可靠?答案在于"分布匹配"。外部奖励模型是在人类偏好数据上训练的,它的分布和策略模型的输出分布天然有gap;而模型自己当评判器时,评判器和被评判者共享同一套世界知识,分布gap小得多。代价是评判器会有系统性偏差,比如倾向于给自己风格的输出打高分。
2.3 奖励信号的去偏处理
这里有个实操中非常关键的细节:自我评判必须做去偏。常见的做法有三种,我在复现时都试过:
- 位置去偏:评判时把候选A和候选B的顺序交换,两次打分取平均。这能消除"总是偏好第一个"的位置偏差。
- 长度去偏:对输出长度做回归,把长度带来的分数增益扣掉。模型自评判时普遍偏爱长回答,不处理的话训练出来的模型会越来越啰嗦。
- 一致性过滤:同一个问题让评判器打多次分,只保留方差小的样本。方差大的样本说明评判器自己都不确定,这种信号噪声太大,不如丢掉。
注意:去偏不是可选项,是必选项。我见过太多团队直接拿自评判分数当奖励,结果训练到中期模型开始输出又长又空洞的内容,回头查才发现是长度偏差在作祟。
3. MoE架构与RL的化学反应:为什么这个组合值得单独讲
3.1 MoE给RL带来的不只是省算力
关键词里"MoE"和"RL"是并列出现的,这不是巧合。MiMo-V2.6大概率采用了MoE(混合专家)架构,而MoE和RL的结合会产生一些稠密模型没有的特性。
先说MoE的基本逻辑:把一个大FFN拆成多个专家,每个token只激活其中少数几个。好处是参数量大但计算量可控。但在RL场景下,MoE带来一个额外的好处——专家分工天然适合多任务RL。不同的专家可以 specialize 到不同类型的推理任务上,比如有的专家擅长数学、有的擅长代码、有的擅长多轮对话。
这为什么重要?因为自我改进式RL需要模型在多个任务域上同时进化。稠密模型所有参数共享,一个域的优化很容易干扰另一个域;MoE的稀疏激活让不同域可以"各练各的",干扰小得多。
3.2 路由崩塌:MoE+RL最隐蔽的坑
但MoE+RL有个非常隐蔽的坑,叫路由崩塌(router collapse)。现象是:训练一段时间后,大部分token都被路由到少数几个专家,其他专家几乎不被激活,等于白占参数。
为什么会这样?因为RL的奖励信号会强化"当前表现好的路径"。如果某几个专家在训练早期碰巧表现好,奖励就会推着路由器把更多token送给它们,形成正反馈。稠密模型没有这个问题,因为所有参数都在用。
我在复现MoE+RL时踩过这个坑,当时的排查过程是这样的:
- 发现训练loss正常下降,但验证集指标停滞。
- 打印每个专家的激活频率,发现top-2专家占了80%以上的token。
- 检查路由logits的熵,发现熵持续下降,说明路由越来越"自信"。
- 定位到是RL的advantage估计放大了早期随机性带来的差异。
解决办法有几个,我实测有效的是负载均衡辅助损失 + 路由熵正则。负载均衡损失惩罚专家激活的不均匀,路由熵正则防止路由分布过早收敛。两个一起用,路由崩塌的概率大幅下降。
3.3 专家并行下的RL训练稳定性
MoE模型通常需要专家并行(expert parallelism),把不同专家放到不同设备上。这在RL训练里会引入新的不稳定因素:不同设备的梯度到达时间不一致,导致策略更新出现滞后。
我的经验是,MoE+RL的训练必须用同步梯度更新,不能用异步。异步虽然吞吐高,但策略滞后会让advantage估计失真,在自我改进场景下尤其致命——因为评判器本身也在更新,策略和评判器不同步会直接导致奖励信号错乱。
4. Agent场景下的自我改进:从单轮问答到多步决策
4.1 为什么Agent是自我改进RL的最佳试验场
热搜词里"agent"出现的频率极高,这不是偶然。Agent场景天然适合自我改进式RL,原因有三:
第一,Agent的任务有明确的成功信号。比如代码agent跑测试用例、电商agent完成下单流程,成功与否是客观可验证的,不需要人类主观打分。这比开放式对话的奖励信号可靠得多。
第二,Agent的轨迹是多步的,每一步都有决策点。这意味着RL可以在细粒度上做信用分配(credit assignment),而不是只给最终结果一个分数。
第三,Agent的错误可以自我修复。一个agent执行失败后,可以读取错误信息、调整策略、重试。这个"失败—诊断—重试"的循环本身就是自我改进的雏形。
4.2 多步轨迹的信用分配难题
但Agent场景的RL有个核心难题:信用分配。一个10步的任务失败了,到底是第3步选错了工具,还是第7步参数填错了?如果只给最终失败一个负奖励,模型根本不知道该改哪里。
MiMo-V2.6这类工作通常会用**过程奖励模型(PRM)或者蒙特卡洛树搜索(MCTS)**来做信用分配。我分别说下两者的取舍:
- PRM:训练一个模型给每一步打分。优点是推理时快,缺点是PRM本身需要标注,成本高。
- MCTS:从当前步展开多条路径,看哪条最终成功。优点是无需额外标注,缺点是计算量大,且需要环境可模拟。
在自我改进框架下,我倾向于先用MCTS生成过程监督数据,再蒸馏成PRM。这样既避免了人工标注,又能在推理时保持效率。这个思路我在一个工具调用agent的项目里验证过,任务成功率比纯结果奖励高了将近20个百分点。
4.3 Agent安全:自我改进不能没有护栏
热搜词里"agent安全"值得单独拎出来说。自我改进式RL有个内在风险:模型可能学会绕过安全限制来获得更高奖励。比如一个网页操作agent,如果奖励只看"任务完成",它可能会学会点击不该点的按钮。
护栏的设计原则是:安全约束必须硬编码在奖励函数里,而不是靠模型自觉。具体做法是给危险动作一个大的负奖励,且这个负奖励的权重远高于任务奖励。同时,在自我改进的评判环节,要专门训练一个"安全评判器",独立于任务评判器。
提示:安全评判器和任务评判器必须分开训练,否则模型会学会同时欺骗两个评判器。分开之后,欺骗难度呈指数上升。
5. 复现这类方案时我踩过的具体坑
5.1 奖励归一化的时机错了
自我改进RL里,奖励的尺度会随着训练变化。早期模型输出质量差,奖励普遍低;后期质量上来,奖励普遍高。如果不做归一化,后期的梯度会远大于早期,导致训练不稳定。
我一开始的做法是全局归一化,用整个训练历史的均值和方差。结果发现早期的高质量样本被后期的低质量样本稀释了,归一化后的奖励失真。后来改成滑动窗口归一化,只用最近N个batch的统计量,效果好很多。
具体参数上,窗口大小我建议设在1000到5000个样本之间。太小则统计量噪声大,太大则跟不上奖励分布的变化。
5.2 KL惩罚系数不能设成常数
RLHF里常用的KL惩罚是防止策略偏离参考模型太远。但在自我改进场景下,参考模型本身也在更新,KL惩罚的基准就变了。
我的做法是动态KL系数:训练早期系数大,防止策略跑偏;训练后期系数小,给模型更多探索空间。具体可以用一个余弦退火 schedule,从0.1降到0.01。这个设置在我复现的几个任务里都比固定系数稳定。
5.3 评判器的更新频率很讲究
如果评判器更新太快,策略模型追不上,奖励信号会剧烈波动;如果评判器更新太慢,策略模型会过拟合到旧评判器上,出现奖励欺骗。
我实测下来比较稳的比例是策略更新5到10次,评判器更新1次。这个比例不是固定的,任务越复杂,评判器可以更新得越慢,因为复杂任务的评判标准变化没那么快。
6. 这套思路能迁移到哪些实际项目
6.1 代码生成Agent的自我迭代
代码agent是自我改进RL最容易落地的场景,因为编译器就是天然的评判器。模型生成代码,跑测试,通过就是正奖励,失败就是负奖励,完全不需要人类介入。
我在一个内部代码补全项目里用过类似思路:让模型生成多个候选补全,用单元测试筛选,通过的作为正样本做RL。迭代几轮后,模型在项目特定API上的补全准确率提升明显。关键点是测试用例要足够多样,否则模型会学会针对特定测试过拟合。
6.2 电商客服Agent的多轮优化
电商客服场景的奖励信号来自"问题是否解决"和"用户是否满意"。前者可以自动判断(比如订单是否成功修改),后者需要用户反馈。
自我改进的做法是:先用自动信号做粗筛,再用少量人工标注做精调。评判器可以设计成两个头,一个预测"问题解决概率",一个预测"满意度",两个头的输出加权作为最终奖励。权重可以根据业务目标调整,比如更看重解决率就把前者权重调高。
6.3 数据分析Agent的自我纠错
数据分析agent的典型任务是"给我算一下上个月的转化率"。这类任务的自我改进点在于结果可验证:算出来的数字和数据库直接查询的结果对比,一致就是对的。
我做过一个实验:让agent生成SQL,执行后和标准答案对比,不一致的轨迹作为负样本。迭代几轮后,agent在复杂join和窗口函数上的正确率提升显著。这个场景的坑是标准答案本身可能有歧义,比如"上个月"的定义,所以要先统一口径再训练。
7. 关于自我改进RL的几个常见误解
7.1 自我改进不等于不需要人类
很多人一听"自我改进"就以为人类可以完全退场,这是误解。自我改进的RL仍然需要人类做三件事:定义任务、设计奖励结构、审核安全边界。模型能自己优化的是"怎么做",但"做什么"和"什么不能做"仍然需要人来定。
7.2 自我改进不是无限循环
另一个误解是自我改进可以无限迭代下去,模型会越来越强。实际上,自我改进会遇到信息瓶颈:模型自己生成的数据,信息量不会超过模型已有的知识。没有外部新信息注入,迭代到一定程度就会停滞,甚至因为误差累积而退化。
所以健康的自我改进方案一定是半开放的:主体靠自生成数据迭代,但定期注入新的人类数据或环境反馈,打破信息瓶颈。
7.3 MoE不是自我改进的必要条件
虽然MiMo-V2.6用了MoE,但自我改进RL并不依赖MoE。稠密模型一样可以做自我改进,只是多任务场景下干扰更大。选MoE还是稠密,取决于你的任务是否多域、算力是否受限,而不是自我改进本身的要求。
8. 我在实际项目中的几点体会
最后分享几个不带理论、纯实操的体会。
第一,自我改进RL的调试成本远高于普通RL。因为有两个在动的模型(策略和评判器),出问题时很难判断是谁的锅。我的建议是先把评判器冻结,把策略训到收敛,再解冻评判器做联合训练。这样能把问题隔离。
第二,奖励曲线的形状比绝对值更重要。自我改进场景下,奖励的绝对值没有意义(因为评判器在变),要看的是奖励的趋势是否健康:是稳步上升,还是震荡,还是先升后崩。先升后崩通常意味着奖励欺骗开始了。
第三,保留checkpoint的频率要高。自我改进训练很容易在某个点突然崩溃,如果checkpoint间隔太大,你会丢失崩溃前的最好模型。我一般每500步存一次,且保留最近10个。
第四,别迷信论文里的超参。论文报告的超参是在特定算力和数据规模下调出来的,直接搬到你的场景大概率不合适。我的做法是先用论文超参跑一个baseline,然后重点调KL系数和学习率这两个,其他先不动。
这套东西说到底,核心就一句话:自我改进的本质是让模型学会自己给自己出题、自己判卷,但出题范围和判卷标准必须由人来框定。框得太死,模型学不到新东西;框得太松,模型会学会作弊。这个度,就是工程经验的价值所在。