自博弈这套东西我一直觉得是被低估的。早期围棋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.997lambda取0.95。此外KL散度约束很重要。为了防止模型在RL阶段彻底忘掉语义能力我们需要惩罚每次更新与参考策略的KL偏差。这个惩罚系数建议从0.01开始调。经验是如果系数太大模型学不到博弈策略太小模型很快退化为一台只会狡辩的机器语言质量崩坏。3.4 一个可参考的超参数配置下面是我在类似工作里跑得比较顺的一组配置可以直接作为起点超参数建议取值说明模型规模3B~7B太小难学会长推理太大做消融成本高每局最大轮数30可动态调整batch size256局每局包含一长串交互token学习率1e-6~3e-6语言模型微调用小学习率GAE lambda0.95平滑优势值gamma0.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展示了“竞技能倒逼推理”的威力。如果你相信一个模型的能力不仅来自模仿更来自面对反例时的迭代修正那自博弈多轮强化就是值得长期投入的方向。训练过程确实烧钱、调参确实磨人但看着两个智能体从互坑到互相成就那个曲线和样本里长出来的逻辑严谨度是别的训练方式很难替代的。