摘要:
如果说合作型 MARL 是登山,大家齐心协力冲顶;那么完全竞争型 MARL (Fully Competitive) 就是击剑,你的每一次得分都意味着对手的失分。在数学上,这被称为零和博弈 (Zero-Sum Game)。这类问题是 AI 领域最耀眼的明珠——从 IBM Deep Blue 到 Google AlphaGo,再到 AlphaStar,皆属于此。本文将带你跳出“优化”的舒适区,进入“博弈”的深水区,探讨纳什均衡、策略震荡以及 Self-Play 等核心概念。
目录 (Table of Contents)
- 什么是完全竞争型 MARL?
- 零和博弈定义
- 与合作型的本质区别
- 核心陷阱:策略循环 (Cycling)
- 剪刀-石头-布的启示
- 为什么 Naive RL 会在原地转圈?
- 理论目标:纳什均衡 (Nash Equilibrium)
- 从 Maximize Reward 到 Unexploitable
- 混合策略 (Mixed Strategy) 的必要性
- 经典算法:Minimax-Q
- 悲观主义者的胜利
- 数学推导与线性规划
- 现代主流:自我博弈 (Self-Play)
- AlphaGo 的秘密武器
- 历史检查点与 Fictitious Play
- 防止“策略遗忘”
- 总结
1. 什么是完全竞争型 MARL?
1.1 零和博弈 (Zero-Sum Game)
在完全竞争环境中,两个智能体
i
i
i 和
j
j
j 的利益是完全对立的。数学上表现为收益之和为零(或常数):
R
i
(
s
,
u
)
=
−
R
j
(
s
,
u
)
R^i(s, \mathbf{u}) = - R^j(s, \mathbf{u})
Ri(s,u)=−Rj(s,u)
或者更直观地:
R
i
(
s
,
u
)
+
R
j
(
s
,
u
)
=
0
R^i(s, \mathbf{u}) + R^j(s, \mathbf{u}) = 0
Ri(s,u)+Rj(s,u)=0
典型的例子包括:围棋 (Go)、象棋、乒乓球、拳皇 (King of Fighters) 等 1v1 对抗。
1.2 范式的转变
在单智能体或合作型 MARL 中,我们求解的是一个最大化 (Maximization) 问题。
但在竞争型 MARL 中,我们求解的是一个平衡 (Equilibrium) 问题。
- Agent A 试图最大化 R R R。
- Agent B 试图最小化 R R R(因为它想最大化 − R -R −R)。
- 这构成了 Minimax (极小化极大) 问题。
2. 核心陷阱:策略循环 (Cycling)
如果你直接把两个使用 DQN 的智能体放到一个零和博弈环境中训练,大概率会发生什么?答案是:什么都学不到,策略在不断转圈。
2.1 剪刀-石头-布 (Rock-Paper-Scissors, RPS)
考虑最简单的 RPS 游戏:
- 阶段 1:Agent A 随机出拳。Agent B 发现出“布”赢面大,于是收敛到纯策略“布”。
- 阶段 2:Agent A 发现总是输,通过探索发现出“剪刀”能赢“布”,于是更新策略为“剪刀”。
- 阶段 3:Agent B 发现总是输,更新策略为“石头”。
- 阶段 4:Agent A 更新策略为“布”。
- 回到阶段 1…
2.2 动态不稳定性
这种现象被称为 Limit Cycle (极限环)。
传统的 MDP 假设环境是静止的,但在竞争博弈中,对手是环境的一部分。
π
A
针对
π
B
优化
→
π
B
变了
→
π
A
失效了
\pi_A \text{ 针对 } \pi_B \text{ 优化 } \rightarrow \pi_B \text{ 变了 } \rightarrow \pi_A \text{ 失效了}
πA 针对 πB 优化 →πB 变了 →πA 失效了
Agent 就像狗追咬自己的尾巴,Loss 曲线震荡不收敛,看起来训练了很久,实际上一旦遇到早期的对手策略,可能反而打不过了(Catastrophic Forgetting)。
3. 理论目标:纳什均衡 (Nash Equilibrium)
为了解决震荡,我们需要改变目标:不再追求“战胜当前的对手”,而是追求“不被任何对手利用”。
3.1 定义
一个联合策略
(
π
∗
1
,
π
∗
2
)
(\pi^1_*, \pi^2_*)
(π∗1,π∗2) 被称为纳什均衡,如果任何一方单独改变策略都不会获得更高的收益:
V
1
(
π
∗
1
,
π
∗
2
)
≥
V
1
(
π
1
,
π
∗
2
)
,
∀
π
1
V^1(\pi^1_*, \pi^2_*) \ge V^1(\pi^1, \pi^2_*), \quad \forall \pi^1
V1(π∗1,π∗2)≥V1(π1,π∗2),∀π1
3.2 混合策略 (Mixed Strategy)
在 RPS 游戏中,唯一的纳什均衡是:各以 1/3 的概率出剪刀、石头、布。
注意:这是一个随机策略 (Stochastic Policy)。
- 如果你使用确定性策略(如 DQN 的 argmax),你注定被 exploit。
- 在竞争型 MARL 中,输出概率分布(如 Softmax)是必须的。
4. 经典算法:Minimax-Q
早在 1994 年,Littman 就提出了 Minimax-Q 算法,这是将 Q-Learning 扩展到零和博弈的鼻祖。
4.1 悲观主义哲学
Agent 假设:无论我做什么,对手都会采取最克制我的动作来让我最惨。
因此,我要在“最惨的情况”中,寻找“最好的结果”。
4.2 贝尔曼方程的修改
标准 Q-Learning:
V
(
s
)
=
max
a
Q
(
s
,
a
)
V(s) = \max_{a} Q(s, a)
V(s)=amaxQ(s,a)
Minimax Q-Learning:
V
(
s
)
=
max
π
min
o
∑
a
∈
A
∑
o
∈
O
π
(
a
)
⋅
opponent
(
o
)
⋅
Q
(
s
,
a
,
o
)
V(s) = \max_{\pi} \min_{o} \sum_{a \in A} \sum_{o \in O} \pi(a) \cdot \text{opponent}(o) \cdot Q(s, a, o)
V(s)=πmaxomina∈A∑o∈O∑π(a)⋅opponent(o)⋅Q(s,a,o)
这里,我们不是选择一个动作 a a a,而是寻找一个策略分布 π \pi π,使得在对手采取最优反制策略 o o o 的情况下,我的期望收益依然最大。
4.3 线性规划求解
在每一步更新 Q 值时,我们都需要求解一个线性规划 (Linear Programming, LP) 问题来找到当前的纳什均衡策略 π \pi π。这计算量巨大,但它是理论上收敛的。
5. 现代主流:自我博弈 (Self-Play)
Minimax-Q 算不动怎么办?AlphaGo 给出了答案:Self-Play (自我博弈)。
5.1 基本逻辑
既然没有完美的对手陪练,那就自己打自己。
- 初始化 Agent π 0 \pi_0 π0。
- π 0 \pi_0 π0 和 π 0 \pi_0 π0 对战,收集数据。
- 利用数据更新得到 π 1 \pi_1 π1。
- π 1 \pi_1 π1 和 π 1 \pi_1 π1 对战…
5.2 进阶:Fictitious Self-Play (FSP)
简单的 Self-Play 依然会遇到 RPS 的循环克制问题(Agent A 变成了 Agent B 的镜像,两者一起转圈)。
为了解决这个问题,我们需要引入历史池 (History Checkpoint):
- 我们维护一个对手池 B = { π 0 , π 1 , … , π t − 1 } \mathcal{B} = \{ \pi_0, \pi_1, \dots, \pi_{t-1} \} B={π0,π1,…,πt−1}。
- 当前的 Agent π t \pi_t πt 不仅仅和最新的 π t − 1 \pi_{t-1} πt−1 打,而是以一定概率和 B \mathcal{B} B 中随机抽取的历史版本打。
这样做的好处:
- 防止遗忘:如果 π t \pi_t πt 学会了针对 π t − 1 \pi_{t-1} πt−1 的大招,但也必须能打败弱鸡的 π 0 \pi_0 π0。这迫使 Agent 学习通用的强策略,而不是特定针对某种策略。
- 收敛性:理论证明,Fictitious Play 在零和博弈中能收敛到纳什均衡。
5.3 AlphaStar 的 League Training (联盟训练)
DeepMind 在星际争霸 2 中将这一思想推向了极致。他们构建了一个 League (联盟):
- Main Agent:我们要训练的最强王者,目标是打败所有人。
- Main Exploiter:专门寻找 Main Agent 的弱点(比如 Main Agent 防空很弱,Exploiter 就疯狂造飞龙)。
- League Exploiter:寻找整个联盟的历史弱点。
这种机制保证了最终的 Agent 没有任何明显的短板(Unexploitable)。
6. 总结
完全竞争型 MARL 是 AI 智慧的试金石。
- 思维转变:从 Optimization(优化)转向 Equilibrium(均衡)。
- 关键痛点:Limit Cycle(无限转圈)和 Non-Stationarity(非平稳)。
- 解决方案:
- 理论上:寻找纳什均衡(Minimax)。
- 实践上:Self-Play + History Pool 是目前的 SOTA 标配。
给炼丹师的建议:
如果你要训练一个 1v1 对抗 AI:
- 不要只保存最新的模型。
- 一定要建立一个对手池,定期把旧模型存进去。
- 训练时,让 Agent 随机抽取对手池里的模型进行对战。
- 这就是最简单的 Fictitious Self-Play,效果远好于普通的 PPO 对打。
这篇文章是否让你对“与人斗”的 AI 有了新的认识?欢迎点赞关注,下期我们将探讨最复杂的“混合博弈”(既有队友又有对手)! ⚔️
1167

被折叠的 条评论
为什么被折叠?



