资讯动态

对称零和博弈中的开放式学习:从自我博弈循环到种群多样性

发布时间:2026/10/21 23:05:44 来源:尧图企业网站定制
训练对抗性智能体的同学大概率都撞上过这样一堵墙最新一版策略在内部对练里胜率已经压倒性领先可一旦丢给一个没见过的新打法立刻被打回原形。更迷惑的是如果让智能体只跟自己的当前版本对打它常常不是越练越强而是在两三种打法之间反复横跳怎么都跳不出来。ICML 2019 上有一篇论文专门盯着这类现象做文章标题是《Open-ended Learning in Symmetric Zero-sum Games》翻译过来就是对称零和博弈中的开放式学习。论文的观点非常直接在对称零和博弈里如果把训练目标定成击败当前对手算法再先进也迟早走进死胡同可持续的学习应该把目标从赢过对手换成不断发现新策略让训练过程本身永远不终结。这个想法听起来有点哲学但论文确实给出了完整的数学框架、算法设计和实验验证。我会从动机、方法、实验到复现一层层拆开讲。如果你在做多智能体强化学习、对抗训练或者博弈论相关方向这篇内容应该能帮你省下不少自己啃论文的时间。1. 从转圈不进步说起对抗任务为什么需要开放学习1.1 目标函数会漂移的任务不能按常规套路训传统强化学习是目标驱动的。走迷宫、抓取物体、控制机械臂这些任务的奖励函数是固定的智能体把数值优化到顶就算完工。但对抗性任务不一样你的对手也在改变于是最优策略的定义随时在漂移。拿最简单的石头剪刀布来说面对一个爱出石头的人出布就是最优面对一个爱出布的人同样的动作马上变成送分。固定目标、固定策略的评价体系在对抗场景里天然失效。1.2 开放学习在等一个干净的实验场开放学习这个概念说的是智能体不在某个固定任务上终止而是在一个足够丰富的技能空间里持续发现新的行为模式。它不算新词几十年前就有类似提法但长期缺少一个能把话说清楚的实验载体。对抗任务天生适合开放学习因为对手是不确定性的来源如果对手足够多样你的学习就永远有下一站。但一上来就研究真实对抗游戏又很难分辨观察到的现象到底来自算法本身的机制还是来自具体环境的偶然性。1.3 零和加对称把问题削到最简论文精妙的地方是选了一个最小模型对称零和博弈。零和意味着双方收益相加为零我赢你就输对称意味着两个玩家的策略空间和规则完全一致不分先手后手、不分攻击防御。石头剪刀布、黑白棋这类游戏都可以近似放进来。模型足够简单于是开放式学习能不能成立的疑问就被逼到了一个可以严格定义、可以复现、可以做理论分析的最小环境里。如果连这么简单的环境都解释不了开放学习的机制那复杂场景更没有底气扯什么开放性。1.4 博弈论给开放学习提供的度量语言博弈论在这里的价值不只是营造氛围而是提供了一整套精确的度量工具。策略、收益、纳什均衡、可剥削度每一个概念都能对应到一个可计算的指标。发现新策略可以定义为找到了一个当前种群中不存在、且能至少击败某些旧策略的新行为。学习永不停止可以定义为随着训练推进策略种群的规模持续增长。没有这些度量化定义开放学习就只能停留在口号层面。这也是这篇论文在方法论上立得住的重要原因。2. 自我博弈的瓶颈循环、遗忘与策略塌缩2.1 自我博弈是个好起点但不是终点多智能体训练最常见的起步做法是自我博弈让智能体与自己的当前版本或历史版本对战用对抗结果更新策略。这个思路绕开了人工数据标注并且在很多游戏场景里效果不错。它的底层逻辑是对手越强我也越强但这句话只对了一半。另一个不能被忽视的机制是对手在变强这件事本身也会把你的策略往特定方向推而这个方向可能是一个圆环。2.2 一个最小反例石头剪刀布上的策略循环把石头剪刀布想成一个概率策略空间每个策略是一个三元组(p石头, p剪刀, p布)。假设两个玩家都用梯度上升更新当前对手如果偏石头你会把概率压向布布的概率上去了对手下一轮就会把概率压向剪刀你为了应对剪刀又去增大石头比例。结果就是策略向量在三角形里转圈永远停不下来学习曲线表现为胜率波浪式起伏。收益函数可以写作期望形式双方同时出拳你的期望收益等于你对石头他出剪刀的概率、你对剪刀他出布的概率、你对布他出石头的概率这三项加起来再减去对称的负项。对固定的对手分布 q 来说这个函数是 p 的线性函数所以梯度上升本质上就是在单纯形上朝着最克制当前 q的方向走。而 RPS 里三个纯策略的克制关系恰好首尾相连于是轨迹绕圈。这是非传递性博弈的结构病不是实现 bug。2.3 遗忘比想象中严重新版本可能正好被老版本克制自我博弈只针对当前版本训练策略一旦飘到新区域旧技能迅速被冲掉。更微妙的坑是因为有循环结构新策略可能在某个环节克制了许多近期版本而自己却被更早的某个策略压制。于是你保留的最新版只是一个链条上的局部节点抵御不了从链条另一侧来的攻击。如果把所有历史版本都留着当对手池又会出现新问题学习器很容易同时去拟合一堆彼此矛盾的最优应对最后学出个四不像。2.4 策略塌缩种群规模很大成分却一模一样如果训练目标太窄吸引域会把学习器拉进一个很紧的局部区域。种群里看起来有几十个版本行为分布却彼此高度重叠一旦某个外部策略抓住了这个区域的软肋整个种群会一起崩溃。我在复现时对这点体会最深多样性在对抗训练里不是可选项而是保命项。没有多样性压力的种群本质上就是把一个失败策略复制了几十遍只是换个标签骗自己。3. 把目标从赢改成前所未有种群与多样性设计3.1 让策略库自己生长论文的解法核心非常朴素放弃只维护一条最强策略而是维护一个策略种群。所有历史版本中只要在对抗上有一技之长、行为上又有足够差异就把它们留下来。训练学习器时对手不再是自己的当前快照而是从整个种群里构造的混合对手。这样一来策略的每一步更新都必须面对多样的挑战而不是在单一对手身上过拟合。3.2 新颖度怎么判断一个策略算新光有种群还不够。如果学习器反复面对同样的对手分布它很容易收敛到同一个最优应对种群里最后都会长成亲戚。论文里强调了多样性信号的作用定义一个行为距离函数衡量两个策略在对局中的表现是否可区分。简单做法是把策略映射成行为特征向量再算向量距离也可以直接看收益矩阵的行差异。新颖度定义为新策略与种群中所有成员的最小距离。小于阈值的视为已知大于阈值的才谈得上发现。3.3 把对抗和探索放进同一个目标函数训练目标是两部分的加权和一部分是平均对抗收益衡量策略能不能打另一部分是新颖度奖励衡量策略是不是前所未有。表达式可以写成 J(π) E_μ[u(π, μ)] λ · d_min(π, P)。这个式子的精妙之处在于它把两个经常互相打架的诉求放进了一个统一的尺度。λ 很小算法退化成普通的种群自博弈照样循环λ 太大智能体会变成纯粹的行为探索者谁都打不过。实验和实际调试里最耗时间的部分往往就是找这个 λ。3.4 为什么会永远学不完非传递性结构是关键这样设计不等于开放式学习自动成立。真正的谜团是种群为什么不会在某一天饱和答案藏在非传递性策略结构里。石头剪刀布之所以循环是因为策略空间里永远存在克制一部分旧策略、同时被另一部分旧策略克制的区域。在非传递性空间的假设下无论当前种群覆盖了多大面积总有办法找到一个新策略——它能在某些对决中取得优势又在另一些对决中落入劣势。于是新行为不断被采样出来种群边界不断外扩。论文的理论贡献之一就是把开放式学习能不能继续和策略空间的拓扑与传递性结构直接挂钩。这层因果解释比单纯堆实验数据要深刻得多。4. 训练闭环怎么搭主循环、种群管理与工程实现4.1 主循环伪代码把整个训练流程落到代码层面其实框架比想象中简洁。下面是我复现时整理的核心伪代码# 种群 P 初始只含一个随机策略 p0 P [p0] learner p0 for step in range(MAX_STEPS): # 1. 从种群构造对手分布 opponents sample_opponents(P, k8) # 2. 与对手们对抗用梯度法更新 learner for opp in opponents: batch rollouts(learner, opp) learner policy_gradient_update(batch) # 3. 周期性评估并决定是否入库 if step % EVAL_INTERVAL 0: scores evaluate(learner, P) novelty min_distance(learner, P) if scores.mean() WIN_THRESHOLD and novelty NOVELTY_THRESHOLD: P.append(learner) prune_P() # 淘汰被支配且无新颖性的策略4.2 对手分布不能乱采采样方式影响很大。如果均匀采样学习器会把大量梯度花在处理最弱策略上如果只采样最强的又容易复现单一对手过拟合。我的经验是按能力加权采样再保留一小部分均匀采样比例保证偶尔能碰上冷门打法。论文里对应的设计一般是一个可调节的权重参数默认按对抗胜率做 softmax 权重。这一步做得好训练曲线会平滑很多。4.3 种群管理进和出都要有规则策略入库的条件至少有两个一是平均战绩达到阈值保证它真的是打得赢的二是新颖度超过阈值保证它不是已有策略的微小变体。淘汰策略也不能只看支配关系——一个新策略支配了某个旧策略不代表旧策略没有保留价值它可能在其他方向上依然克制一大批行为。淘汰准则应该综合近期被新策略击败的频率和与周围策略的行为重复度来定。这个设计直接决定了种群会不会无限膨胀或者提前僵死。作者在论文里给的理论保证依赖于种群中存在一条未被覆盖的策略链所以淘汰逻辑做得太激进理论前提就被自己破坏了。这也解释了为什么很多复现版本会失败不是算法不对是策略库管理砍得太粗暴。4.4 工程实现上的几个注意点评估开销是最大的工程瓶颈。种群里 50 个策略learner 要与每个策略分别打多场算下来相当可观。我的处理方式是把评估丢到并行 worker 上每个 worker 专职负责一个对手对最后汇总一个胜率矩阵。这套架构在小规模博弈里非常稳扩展到大策略空间时还需要配合优先级采样来降低评估频率。另外行为距离的计算也要提前向量化否则每次评估都卡在距离矩阵上十几个策略就能把速度拖掉一个数量级。5. 什么指标能证明学习真的开放起来了实验设计与结果5.1 实验环境从三动作到带状态的扩展版本论文用石头剪刀布做了一个自然的扩展经典 RPS 只有三个纯策略策略空间是二维单纯形太小了。扩展版本引入了多个状态可以理解成从只猜一次拳变成在一个小棋盘上做多回合对抗这样策略空间变得复杂非传递性结构也更深。选择这类环境的原因很明显它跨在简单到可分析和复杂到有研究价值之间。5.2 基线方法怎么选对比对象一般包括三类纯自我博弈、固定对手池训练、不加多样性奖励的种群训练。还有一个相对更强的基线是类似虚构自博弈的方法用历史最优应对混合作为对手。复现时我把同一套评估指标套在每个基线上这样比出来的结论才公平。基线之间真正的差异点是有没有种群和有没有多样性信号两个维度只要控制住这两点就能拆开每个组件各自的贡献。5.3 看哪些指标第一种群规模和新增独特策略数这是开放性最直接的证据。第二策略间的平均行为距离确认扩大的是真多样而不是复读机。第三新策略对旧种群的平均胜率确认新发现不是瞎逛。第四可剥削度衡量种群整体距离纳什均衡有多远用于判断这些策略是否在均衡覆盖上有进步。另加一个泛化指标对训练过程中从未见过的外部对手的平均胜率。5.4 三类关键结果结果可以归纳成三点。一是纯自我博弈在扩展 RPS 上出现预设的循环行为胜率曲线像正弦波策略没有实质增长。二是有多样性奖励但种群管理不好的方法虽然策略数量多了但多样性曲线很快饱和对未知策略泛化一般。三是完整方法实现了种群规模持续增长且新增策略在行为空间里分布越来越分散可剥削度下降并保持在低位说明它不是靠牺牲博弈强度来换多样性。对新对手的泛化胜率完整方法显著高于所有基线。方法种群规模平均行为距离可剥削度对新对手胜率纯自我博弈固定为1无意义高、波动大偏低固定对手池固定为1无意义中偏低无多样性信号的种群训练缓慢增长后饱和低中偏高中完整方法持续增长持续上升低位稳定高这张表基本还原了论文的实验逻辑开放性不是一步到位的每一步设计都补上了一个缺口。6. 复现中的坑与我的调试经验6.1 多样性权重不是拍脑袋定的我复现时先试了 λ0.01结果种群增长特别慢经常插入失败因为新颖度没过阈值把 λ 加到 0.5新颖度倒是轻松达标可新策略战绩拉胯入库后反而污染了整个种群。最后用的是退火方案训练初期 λ 高一些多鼓励探索后期 λ 降下来保证入库成员确实是在赢的基础上更新。这个方案我在多个随机种子下都验证过稳定性明显更好。6.2 淘汰策略不能手软也不能手快一开始我把只要被超过一半新策略击败当作淘汰标准结果把种群清得很瘦多样性断崖式下跌。原因是单维支配关系不能代表策略库的整体价值。后来改成双指标先看行为距离如果一个策略已经被周围策略大量覆盖、而且近期胜率又低才淘汰。这样既控得住规模又不会误伤有独特价值的边缘策略。这个改动让最终种群的稳健性提升非常明显。6.3 评估全量比抽样靠谱刚跑的时候为了省时间我用了抽样评估结果种群出现老龄化一些该入库的好策略被漏掉成了漏网之鱼。后来改成全量矩阵评估虽然慢了一点但种群质量稳定多了。在小规模博弈上全量评估的收益远大于多出来的那点时间。规模确实大起来之后再考虑用抽样的置信区间去替代全量也不迟。6.4 突然崩溃的诱因与应对最头疼的现象是 learner 在某次评估时突然从强变弱。排查下来发现是多样性和对抗收益的梯度方向冲突太剧烈参数一次更新跨过了一个危险区域。我加了一个最低对抗胜率的入库门槛无论新颖度多高战绩不达标绝不入库同时给 λ 做平滑调度不让探索压力突然消失。处理之后训练曲线稳定非常多。这类崩溃不会每次都触发但一旦触发就会拖慢整体实验进度值得提前防住。6.5 计算资源实在不够怎么办如果机器只有一张卡可以把策略网络做小用简化版 RPS 环境先把整个闭环调通再上大环境。不要一开始就追求大种群20 个策略左右已经能暴露出大部分问题。整个框架没有硬性分布式要求瓶颈主要在于评估环节把评估并行化基本就够了。我见过不少人复现失败是因为一开始就上复杂环境结果根本分不清是环境太复杂还是算法没调对。7. 从博弈论到实际系统开放式学习还能用在哪儿7.1 自动构建鲁棒性测试集把开放式学习当作一个策略生成器它能在无人监督的情况下生成覆盖各种打法的策略库。这些策略可以直接用来做鲁棒性测试新模型在库上的综合表现比在几个手写测试用例上的表现可靠得多。这个用法对安全评测、对抗鲁棒性测试尤其实用相当于帮你自动化地补全了人工设计对抗样本时覆盖不到的边角。7.2 多任务与课程学习的新思路开放式学习的逻辑也可以迁移到多任务场景把任务集本身当成一个博弈空间新任务发现和新策略发现可以互相促进。我最近在探索的一个多任务框架就和这个思路一致——与其手写课程序列不如让智能体自己在任务空间里冒出下一个技能需求。当然任务空间里的非传递性结构不会像 RPS 这么明显但这套思想至少提供了一种新的算法组织方式。7.3 还没解决的问题种群规模膨胀是现实问题。策略多了之后评估复杂度平方级上涨不加控制很难扩展到复杂游戏。另外对称零和假设帮了很大忙但现实对抗大多不对称怎么在不对称设定下保留开放式的保证目前研究还不充分。连续性也是个问题对抗收益在参数空间里可能不连续梯度更新偶尔会跳进行为完全不同的区域这个不稳定源到现在也没有彻底解决。7.4 我自己的体会把这篇论文的代码跑通之后我对训练一个永远在线的对抗智能体这件事的信心提高了很多。过去总以为收敛是最好的结果现在知道在某些场景里持续漂移才是一种健康状态。关键是要判断漂移是在探索还是在原地兜圈子而多样性和非传递性结构恰好给了我们做判断的抓手。我在实际做实验时最强烈的感受是开放学习不是让算法变得更复杂而是逼着我们重新想清楚训练到底什么时候该结束。之前不少项目都在为收敛目标服务一旦换成开放式的评价眼光很多旧结论都要重新验证。如果你也在做对抗方向的训练强烈建议先用一个最小的石头剪刀布复现一遍循环现象体会一下什么叫结构性的原地踏步再上手种群方法。那之后的很多困惑都会自动消失。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑