自博弈这套东西,我一直觉得是被低估的。早期围棋AI靠自我对弈刷新胜率上限,已经证明了一个直觉:在一个有明确输赢、零和的封闭环境里,让模型自己跟自己死磕,能逼出远超人类示范的策略。而最近看到的SPIRAL这个方向——核心就是Self-Play on Zero-Sum Games,配Multi-Agent Multi-Turn Reinforcement——让我比较兴奋的是,它把“博弈”从棋类棋盘搬到了“推理”本身:用两个或多个智能体互相出题、互相挑错、多轮来回,用胜负奖赏信号去激励模型一步步想清楚。这篇文章我想从原理到实操,把这个框架讲透。适合正在做大模型推理增强、RL训练、多智能体系统的人参考,也适合刚入门强化学习但对“推理能力怎么来”有好奇心的人。
我先把结论放在前面:SPIRAL这类思路的价值不在于让我们多了一个“比赛训练”的玩法,而是它提供了一条独立于监督微调的推理能力提升路径。它不依赖更多人工标注的高质量思维链,而是靠对抗压力和回合制交互,让模型在战斗中自然长出更长的推理链条。后面所有章节都在为这句话展开。
1. 零和博弈与自博弈:为什么“逼到墙角”才能逼出推理
1.1 推理的本质是一棵决策树上连续走步
我们先退一步想清楚“推理能力”到底是什么。你在解一道数学题、写一段逻辑论证、或者分析一段法律条文时,大脑做的事不是“输出一个词”,而是展开一条决策链:前提成立吗?如果成立,能推出什么中间结论?这个中间结论是否可靠?如果不可靠,要回到哪一步重新选择?
用强化学习的语言来说,推理过程就是在一个状态空间中连续做动作的轨迹,每一步都影响下一步的状态空间。推理能力强,就意味着模型能够沿着一条有希望得分的高分支路走得更远,而不是浅尝辄止。传统监督学习让模型模仿标准的推理轨迹,但标准轨迹往往只有一个“正确答案”,模型只需要拟合一条路径。问题是,真实推理中存在大量的歧义分支,正确答案不是唯一一条路。监督数据很难覆盖所有需要纠偏的分支。
零和博弈恰恰擅长这件事。在零和博弈里,赢只有一种解释:你走的每一步比对手更能经得起对方的反击。你必须在所有可能的威胁面前保持一致性。这天然就是一个“深度推理”的压力测试器。
1.2 自博弈:没有对手就创造对手
为什么非要自博弈,而不是直接找外部对手?因为很多时候没有现成对手。你要训练一个围棋AI,你也不想依赖人类棋谱来标注哪一手好,更不可能请一个职业棋手陪练几百万盘棋。但模型可以复制一份自己,让旧版本的自己跟新版本的自己对弈。这个看似朴素的做法,实际上构成了一个完美的训练回路:新版本稍微变强一点,旧版本就变成新的挑战。你想赢自己,就必须不断改进策略。
应用到推理上也是类似的:想训练模型能产出更完备的证明,那就让一个模型当“出题者”或“攻击者”,专门寻找推理链条中的漏洞;让另一个模型当“证明者”或“防守者”,负责产出滴水不漏的步骤。攻击者总是不遗余力地攻击,防守者才会被逼着把每条逻辑链打磨扎实。攻击者和防守者可以是同一个模型在不同微调阶段,也可以是两个独立初始化的网络,反正都是自我迭代。
1.3 为什么零和博弈和非零和不一样
这一点值得多谈几句。很多人问:如果我只想让两个模型合作解决一个推理任务呢?比如两个模型一起解一道题,这算不算多智能体强化?算,但效果往往不如零和。关键在于“梯度信号的质量”。
合作型任务里,奖励是共同的,两个智能体一起得分,那么模型很容易出现“搭便车”行为:一个模型偷懒,另一个模型承担了全部思考,但最后奖励是两个一起拿的。你没法区分到底是谁让推理变得更好。零和博弈的奖励结构就不一样,一方赢另一方必然输。这个结构天然地不鼓励惰性:任何一个环节的薄弱都会被对手抓住,从而形成清晰的负反馈信号。简单说,零和让模型“无处可逃”,只能硬着头皮把推理链条推到底。
2. SPIRAL框架的核心拆解:多智能体、多轮、强化
2.1 多元博弈框架:为什么至少要两个“角色”
SPIRAL这个名字我很喜欢,它强调螺旋上升:不是一条直线地提升,而是两个智能体互相缠绕、互相促进。在这个框架里,智能体被分配不同的角色。最常见的设置是“挑战者”和“应答者”,或者叫“攻击者”和“防守者”。
以数学推理为例。应答者的任务是生成一个解题过程,攻击者的任务是找出这个过程中哪怕最微小的逻辑跳跃。如果攻击者找出来了,攻击者得分;如果应答者扛住了攻击,证明每个步骤都无懈可击,应答者得分。这样每一轮对抗都直接检验了推理的“质量”。如果应答者模型逻辑漂移、跳步、使用了未证明的假设,就会被攻击者迅速抓住。被惩罚过足够多次之后,应答者会逐渐学会自我检查,推理就会越来越严谨。
你可能觉得这有点像GAN(生成对抗网络)。确实精神相通,但有一个关键差异:GAN的“判别器”是独立网络,并且是分类信号;而SPIRAL中两个角色都在用语言行动,并且轮流改变状态,最后是结构化的一整段推理轨迹。它更像一场真实的辩论,而不是一次真伪判定。
2.2 多轮交互:推理长度本身是策略的一部分
单轮问答的强化学习只能优化“输出答案”这一小步,却没法优化“如何一步步想”。SPIRAL把交互扩张成多个轮次:应答者给一个中间步骤,攻击者立即表示“这一步无法验证,请补充”;应答者于是展开更细的推导,攻击者再继续检查。这个过程很像真实世界里的论文评审,也像程序员在代码审查中被反复询证。
多轮的好处非常多,我认为最核心的一点是:它制造了“中间状态”,让奖励信号可以前溯。如果只对最终答案给奖赏,那么模型很难判断到底哪一步错了;但在多轮博弈中,攻击者会在具体某一步发起挑战,这个挑战本身就是一个标注了“哪里不充分”的信号。即便模型最终没有成功改进,强化学习也能利用这个结构性反馈调整策略。多轮实质上是在环境中加入了一个“过程束”,而不是只靠结果稀疏的奖励。
这里有一个很有意思的细节:多轮交互的长度不是固定的。早期模型比较弱,攻击者可能很多轮都在纠缠前置条件;到了后期,应答者已经能把几步推理压缩成一个小结论,并自动证明,这时对话轮次自然减少。这个动态调整的过程,本质上就是模型在“压缩推理步骤”——一种高级能力。
2.3 强化学习在其中的角色:为什么不能用监督学习替代
有人会问:直接拿攻击者攻击成功的数据去做监督微调不行吗?答案是,可以,但效果天花板很低。理由是监督学习只能在给定的“错误—正确轨迹对”上拟合,却无法探索策略空间。强化学习是直接在环境里试错,模型会自己发现哪些推理路径能提高胜率。尤其是当攻击者也在进化时,两边的策略都在移动,监督数据永远跟不上最新的策略分布。强化学习则允许实时地利用胜负反馈更新双方,形成一个闭环。
在具体算法选择上,目前实践中效果比较稳的是PPO的变体,以及一些基于优势值估计的框架。Multi-Agent环境下每个智能体都有自己的策略和价值网络。你可以把两个智能体想象成两个独立的PPO进程,只是他们在同一个环境里交替行动。为了提升训练稳定性,通常会给每个智能体配置独立的经验缓冲区,并且在更新时冻结对方策略,避免双方同时大改导致环境非平稳。
3. 复现SPIRAL的实操路线与细节
3.1 环境搭建:把推理任务定义成博弈场
真正去实现SPIRAL,第一步是定义一个“可判胜”的博弈场。以数学求解任务为例,我建议做成一个回合制游戏:
- 游戏状态:当前的“待证明命题”以及已经提交的推理链。
- 防守者动作:提交一个步骤,或者提交最终证明。
- 攻击者动作:指出当前步骤中某个前置条件无法由已有状态推导,要求补充;或者接受当前步骤。
- 终止条件:防守者完成最终证明,且攻击者无法挑错,则防守者赢;攻击者发现任何漏洞并证明该漏洞是致命的,则攻击者赢;防守者长时间无法闭环,可以被判负。
这里最关键的工程问题就是“动作校验”。你不能让模型随便说一句攻击就算数。应该引入一个验证器或者判定器,它可以是符号逻辑工具,也可以是另一个规则系统。如果没有强验证器,那么攻击者很容易找到一个“策略性漏洞”,但实际上那个漏洞不成立。整个训练就变成比谁嘴硬,而不是比谁推理严谨。
3.2 奖励设计与胜负判别
零和博弈的奖励本身很简单:输方奖励为-1,赢方为+1,或者中间过程加一些稀疏中间奖励。但实践里我们需要处理一个问题:如果不加中间奖励,模型可能长时间探索不到赢,训练噪声很大。我试过的一种方案是:给攻击者每一轮成功找出一个“真实缺陷”给予小幅奖励,比如+0.1;给防守者每一轮成功防御一次攻击也给予+0.1。最终胜负奖励仍是主导,这些中间奖励只是为了引导探索方向。
另一个重点是“平局处理”。如果设定固定轮数上限,比如30轮,到30轮双方都没赢,我们怎么算?我建议视为负奖励给双方,因为这说明防守者没能快速证明,而攻击者也没能精确指错,双方都表现平庸。在推理任务里,“拖时间”是没有意义的,真实推理需要简洁高效。鼓励快速决出胜负会让两边都往更高质量的推理上走。
3.3 训练算法:PPO在两个智能体上的配置要点
如果你的基线模型是某种大规模语言模型,直接用PPO逐token更新是可以的,但要注意更新规模。我更推荐用小参数模型做验证,比如7B级别,甚至更小的3B模型来跑通整个流程,确认稳定后再放大。
以两个3B模型为例,可以按如下方式组织训练:
- 每个智能体维护独立的actor和critic网络,输入包括对方上一轮动作的embedding。
- 每次博弈采样,两个模型交替生成最多N轮。每轮的序列都存入各自的经验池。
- 每收集一批经验后,先固定攻击者网络,更新防守者;再固定防守者网络,更新攻击者,交替K次。这个“交替冻结”大大减少了非平稳性问题。
- 使用GAE计算优势值,gamma通常取0.99到0.997,lambda取0.95。
此外,KL散度约束很重要。为了防止模型在RL阶段彻底忘掉语义能力,我们需要惩罚每次更新与参考策略的KL偏差。这个惩罚系数建议从0.01开始调。经验是:如果系数太大,模型学不到博弈策略;太小,模型很快退化为一台只会狡辩的机器,语言质量崩坏。
3.4 一个可参考的超参数配置
下面是我在类似工作里跑得比较顺的一组配置,可以直接作为起点:
| 超参数 | 建议取值 | 说明 |
|---|---|---|
| 模型规模 | 3B~7B | 太小难学会长推理,太大做消融成本高 |
| 每局最大轮数 | 30 | 可动态调整 |
| batch size | 256局 | 每局包含一长串交互token |
| 学习率 | 1e-6~3e-6 | 语言模型微调用小学习率 |
| GAE lambda | 0.95 | 平滑优势值 |
| gamma | 0.99 | 长回合博弈记得调大 |
| KL惩罚系数 | 0.01 | 需要仔细调 |
| 交替更新次数 | 2 | 每次优化时交替固定一方 |
| 每个智能体经验池容量 | 4096条轨迹 | 太大会让策略滞后 |
这些参数不是金科玉律,但它们能帮你在6小时内在8卡环境上初步看到效果。我再提醒一句:观察重点不是最终胜率,而是双方的平均步数变化和单局推理深度。如果防守者的每局平均生成token数在训练中逐步上涨,再到下降,这是一个非常典型的“先变长再变短”的掌握过程。模型先把推理链条拉长,学会处理更多分支,然后再学会压缩,最后稳定在一个中等长度上。没看到这个曲线,就说明训练还不算成功。
4. 常见问题与排查技巧实录
4.1 奖励震荡不收敛:多半是双方“同时进化”了
Multi-Agent训练最常见的失败模式就是两边的策略都在变,环境变得越来越不平稳。你会发现胜率在0.5附近剧烈摆动,看似没有进步。这时候先检查:是否严格按照交替冻结更新?如果两边同时更新,环境对策略梯度来说是一个移动靶,很容易发散。
还有一种可能是中间奖励给得太密,模型只去追求每轮小分,忽视了最终胜负。这时候把中间奖励系数调低,比如从0.1降到0.01,让模型重新重视终局。我见过模型学会“每轮都假装攻击一下赚中间分”的投机行为,非常隐蔽。解决方式很简单:中间奖励必须在整局结束时结算,而不是单轮立即给。也就是“信用延迟分配”,让模型把整局胜负和中间行为关联起来。
4.2 模式崩溃:防守者学会“车轱辘话”
防守者要是发现攻击者挑不出“重复断言”的毛病,就会疯狂重复同一个前提,比如每次都写“根据定义显然成立”,把问题拖到超时。攻击者也拿不到分,因为重复不等于出错,但推理长度无意义暴涨。处理方法是加入惩罚性奖励:每轮token超过阈值要扣分,最终局胜负的权重也要大于轮数权重。
更治本的做法是让攻击者的搜索范围更广。给攻击者提供额外的“参考工具”,比如让它每轮只能找出一个步骤,但需要输出“为什么这个步骤不成立,需要什么额外条件才能成立”。这样防守者就不能靠同一句话混过去。攻击者的输出会被一个规则集校验,如果攻击者给出的指错理由根本不存在,攻击者自己会被扣分。这种双向约束能把环境推回真实的博弈。
4.3 双方都不愿意深入推理,都想快速结束游戏
越训练越发现,模型的“惰性”超过想象。防守者会尝试一个很短的“证明”糊弄过去,攻击者也会一击不中立刻放弃。这时候需要改变胜负条件:规定攻击者如果没能找出漏洞,并不意味着防守者赢,防守者必须完成一份被外部验证器认可的完整证明才算赢。这样防守者就没办法用“终止回合”来逃避。攻击者如果只攻击一步就停止,也不会加分,它需要针对整条链的每个环节都给出评估。
我的一个调试技巧是:定期从训练集中挑一些中等难度的推理题,冻结两个模型,让它们跑100局,人工看双方的攻防质量。当你能看到攻击者会针对“第三步到第四步的归纳跳跃”发难、防守者会补充一段完整的对边界条件的讨论时,说明策略已经学到了有效行为。如果看到的仍是上千次重复的“是不是”、“对不对”这种假攻击,就要考虑攻击者校验器和奖励权重的问题。
4.4 训练算力不足:变小模型、缩环境、增量对齐
坦白讲,SPIRAL类训练非常贵。单局多轮生成的token量是普通RL的数十倍。如果你算力不够,我建议先不要在7B模型上跑全量环境。可以改用70M~100M的小模型跑一个“迷你博弈场”,比如四则运算的验证与攻击。环境小很多,但多智能体互动的动态特性完全一样。在这个小规模环境里把奖励、交替更新、超参数都调试好,再切换到真实任务。这种方法帮我们省了大量时间。
另一个省钱技巧是“对手降级”:一开始让攻击者使用随机或者只进行浅层攻击的弱策略,让防守者先学会基础的完整推理;然后再慢慢把攻击者切换成学习版本。类似于课程学习。不要一上来就让两个初学模型对打,那就像两个不会下棋的人互相乱下,永远学不会。我通常用三个难度阶梯:第一阶段攻击者30%概率随机挑刺,第二阶段攻击者使用模仿学习预热好的策略,第三阶段才开放完整的强化更新。
5. 我对SPIRAL的几点思考
5.1 博弈框架是一种“免标注”的推理数据工厂
之前做推理增强,最痛苦的是高质量思维链数据贵且稀少。人工标注者能写下一步步怎么推导,但很难想象模型所有可能犯的错。SPIRAL的思路相当于让模型自己成为错误生成器:防守者不断提出新的证明方案,攻击者不断找出新的漏洞。每一条被有效攻击的轨迹,都是带标签的失败案例。这个数据量几乎不受人工限制,并且天然分布在对模型的当前难点上。长期来看,比堆更多人工数据要可持续得多。
5.2 推理能力到底是被“攻击”还是被“防守”训练出来的
我原先以为防守者是净收益方,因为防守者被迫把推理打磨得更完整。后来观察实验统计发现,攻击者的推理能力提升其实更明显。原因是攻击者必须找出真正的逻辑缺陷,它需要自己理解整条证明链,才能指错。这比防守者沿着一条固定思路走更挑战全局理解力。防守者只要专注自己这一条链,攻击者却要在错综复杂的推理树里找到那个可以推翻全盘的薄弱点。这个现象告诉我,如果想用SPIRAL提升通用推理能力,可以重点观察攻击者角色的迁移表现;两个角色各训练一份,最终做评估时用攻击者角色的模型。
5.3 从零和到更开放的多智能体环境
SPIRAL目前聚焦零和游戏,但我认为它的底层引擎,也就是多智能体多回合强化,可以延展到更多非纯零和但存在对抗性的场景,比如多个工具调用智能体互相检查代码执行结果,或者一个模型反复从多个视角审查自己的文章。只要存在“责任边界清楚、胜负由外部标准裁决”的对抗结构,就能用这份思路。真正的难点不在算法,而在设计出那个能够精确判断逻辑漏洞或行为缺陷的“裁决器”。裁决器越透明、越严格,学习到的推理就越扎实。这也是我后来踩得最深的一个坑,任何含糊都可能在训练中被放大。
回到最初的结论:SPIRAL展示了“竞技能倒逼推理”的威力。如果你相信一个模型的能力不仅来自模仿,更来自面对反例时的迭代修正,那自博弈多轮强化就是值得长期投入的方向。训练过程确实烧钱、调参确实磨人,但看着两个智能体从互坑到互相成就,那个曲线和样本里长出来的逻辑严谨度,是别的训练方式很难替代的。