摘要
在单智能体 RL 中,环境是死板的物理规则;但在多智能体 RL (MARL) 中,环境包含了其他会思考、会学习的智能体。如果把对手仅仅当作环境背景(Environment),我们就放弃了博弈的主动权。对手建模 (Agent Modeling) 旨在根据历史观测推断其他智能体的策略、意图或隐藏状态。而更高级的 心智理论 (Theory of Mind, ToM) 则涉及递归推理——“我知道你知道我知道…”。本文将详解从显式建模到隐式表征学习的技术路线,揭示 AI 是如何学会“知己知彼”的。


目录 (Table of Contents)

  1. 为什么需要对手建模?
    • 解决非平稳性 (Non-Stationarity)
    • 从反应式 (Reactive) 到 预测式 (Proactive)
    • Ad-hoc Teamwork:与陌生人合作
  2. 建模的对象:我们在预测什么?
    • 动作 (Action)
    • 目标/意图 (Goal/Intent)
    • 类型/风格 (Type/Style)
  3. 方法论一:显式建模 (Explicit Modeling)
    • 监督学习视角
    • 辅助任务 (Auxiliary Task)
    • 代码实现:预测对手动作
  4. 方法论二:隐式/表征建模 (Implicit Representation)
    • Encoder-Decoder 架构
    • 从轨迹到 Latent Code ( z z z)
    • 泛化到未见过的对手 (Zero-shot)
  5. 方法论三:心智理论 (Theory of Mind)
    • 认知层级理论 (Cognitive Hierarchy)
    • Level-k 思维与递归推理
    • “我知道你知道”的数学表达
  6. 总结与展望

1. 为什么需要对手建模?

1.1 解决非平稳性

在 IQL 或 MADDPG 中,我们通常假设对手是环境的一部分。但对手是在不断学习变强的。如果我们能预测对手的策略变化,我们就能提前调整自己的策略,而不是等到撞了墙才回头。

1.2 从反应式到预测式

  • Reactive (反应式):看到对手出拳了,我再格挡。
  • Proactive (预测式):根据对手的姿态和历史习惯,预测他下一秒要出拳,我提前闪避并反击。
    在星际争霸或德州扑克中,胜负往往取决于谁能更精准地建立对手模型。

1.3 Ad-hoc Teamwork (即席协作)

这是 MARL 的圣杯之一。
假设你是一个足球 AI,你被随机匹配到一群从未见过的队友(可能是人类,也可能是其他版本的 AI)。你没有时间和他们预先训练。
此时,你需要通过观察队友的行为,迅速建立他们的模型(“这个队友喜欢进攻”、“那个队友比较保守”),从而配合他们。


2. 建模的对象:我们在预测什么?

Agent Modeling 是一个宽泛的概念,具体来说,我们在预测对方的什么?

  1. 策略 (Policy) π − i ( a ∣ s ) \pi^{-i}(a|s) πi(as)
    • 最直接的目标。给定状态,预测对手会做什么动作。
    • 应用:1v1 对战游戏。
  2. 目标 (Goal/Intent) g − i g^{-i} gi
    • 对手想去哪里?想杀谁?
    • 应用:自动驾驶(预测行人意图)、MOBA 游戏。
  3. 类型 (Type/Style) z − i z^{-i} zi
    • 对手是激进型 (Aggressive) 还是保守型 (Conservative)?是菜鸟还是高手?
    • 应用:扑克、非对称博弈。

3. 方法论一:显式建模 (Explicit Modeling)

这是最直观的方法:把预测对手动作当作一个辅助的监督学习任务。

3.1 算法架构

在训练强化学习(RL)主网络的同时,并在网络中分出一个分支(Header)或者单独训练一个网络,用来预测对手动作。

  • 输入:历史观测序列 ( o t − k , … , o t ) (o_{t-k}, \dots, o_t) (otk,,ot)
  • 标签 (Label):对手真实的动作 a t − i a^{-i}_{t} ati
  • Loss:交叉熵损失 (Cross Entropy)。

L m o d e l ( ϕ ) = − ∑ ( s , a − i ) ∈ D log ⁡ π ^ ϕ ( a − i ∣ s ) \mathcal{L}_{model}(\phi) = - \sum_{(s, a^{-i}) \in \mathcal{D}} \log \hat{\pi}_{\phi}(a^{-i} | s) Lmodel(ϕ)=(s,ai)Dlogπ^ϕ(ais)

3.2 如何使用预测结果?

一旦我们有了预测出的对手策略 π ^ − i \hat{\pi}^{-i} π^i,我们可以:

  1. 作为 Input:把预测的动作 a ^ − i \hat{a}^{-i} a^i 拼接到自己的 State 中,喂给 Q 网络或 Policy 网络。
  2. 作为 Planning:在 MCTS (蒙特卡洛树搜索) 中,用 π ^ − i \hat{\pi}^{-i} π^i 来模拟对手的反应。

3.3 代码片段 (PyTorch)

class ModelingAgent(nn.Module):
    def __init__(self, obs_dim, act_dim, opp_act_dim):
        super().__init__()
        # 特征提取层
        self.feature_net = nn.Sequential(nn.Linear(obs_dim, 64), nn.ReLU())
        
        # 1. RL Policy Head (输出自己的动作)
        self.policy_head = nn.Linear(64, act_dim)
        
        # 2. Opponent Modeling Head (预测对手动作 - Auxiliary Task)
        self.opp_model_head = nn.Linear(64, opp_act_dim)

    def forward(self, obs):
        feat = self.feature_net(obs)
        my_action_prob = F.softmax(self.policy_head(feat), dim=-1)
        pred_opp_action_prob = F.softmax(self.opp_model_head(feat), dim=-1)
        return my_action_prob, pred_opp_action_prob

# 训练循环中
# total_loss = rl_loss + beta * modeling_loss

4. 方法论二:隐式/表征建模 (Implicit Representation)

显式建模有一个缺点:如果对手策略极其复杂,或者对手从未见过,直接预测动作 a a a 很困难。
现代方法倾向于学习一个隐变量 (Latent Variable) z z z 来代表对手的特征。

4.1 Encoder-Decoder 架构

我们假设对手的策略由一个隐藏的 z z z 控制(比如 z z z 代表性格)。

  1. Encoder:输入对手的历史轨迹 τ = ( s 0 , a 0 − i , s 1 , a 1 − i , …   ) \tau = (s_0, a^{-i}_0, s_1, a^{-i}_1, \dots) τ=(s0,a0i,s1,a1i,),输出一个向量 z z z
    z ∼ E ( τ ) z \sim E(\tau) zE(τ)
  2. RL Agent:将 z z z 作为额外信息输入。
    π ( a ∣ s , z ) \pi(a | s, z) π(as,z)
  3. 训练目标
    • 对比学习 (Contrastive Learning):让同一个对手的轨迹生成的 z z z 靠近,不同对手的 z z z 远离。
    • 重建 (Reconstruction):利用 z z z 去预测对手未来的动作。

4.2 优势:Zero-Shot Generalization

这种方法非常强大。例如 GroverLIAM 算法。
在训练时,我们在多种不同风格的对手中训练,学会了提取 z z z
在测试时,遇到一个全新的对手,Encoder 只需要看几步他的操作,就能生成一个 z z z。即使没见过这个对手,Agent 也能根据相似的 z z z 调出应对策略。这就是“看人下菜碟”。


5. 方法论三:心智理论 (Theory of Mind, ToM)

这属于认知科学与 AI 的交叉领域,主要研究递归推理 (Recursive Reasoning)

5.1 认知层级理论 (Cognitive Hierarchy)

想象你在玩剪刀石头布:

  • Level-0 (随机者):完全随机出拳。
  • Level-1 (聪明的初学者):假设对手是 Level-0,计算出最佳应对策略(Best Response to L0)。
  • Level-k (高阶博弈者):假设对手是 Level-(k-1),计算最佳应对策略。

5.2 递归推理的挑战

“我知道你知道我知道你要出剪刀…”
在 MARL 中,如果我们能建模对手的思维层级,我们就能降维打击。

PR2 (Probabilistic Recursive Reasoning) 算法提出:
Q k i ( s , a i ) = E a − i ∼ π k − 1 − i [ r + γ max ⁡ Q k i ( s ′ , a ′ ) ] Q^i_k(s, a^i) = \mathbb{E}_{a^{-i} \sim \pi^{-i}_{k-1}} [r + \gamma \max Q^i_k(s', a')] Qki(s,ai)=Eaiπk1i[r+γmaxQki(s,a)]
Agent i i i 并不是要在物理世界中寻找最优解,而是要在对手的思维模型中寻找最优解。

5.3 现实中的应用

虽然 Level- k k k 理论很美,但在深度强化学习中,通常计算到 Level-2 就足够了。再高阶的推理不仅计算量指数爆炸,而且容易产生“自作聪明”的误判(比如对手其实只是个菜鸟(Level-0),你却以为他在第五层,结果你把自己绕进去了)。


6. 总结与展望

对手建模是 MARL 从“感知智能”向“认知智能”跨越的关键。

方法 核心思想 优点 缺点 适用场景
显式建模 监督学习预测动作 a − i a^{-i} ai 简单,易实现 难以处理未见过的策略 1v1 对抗,策略集合固定
隐式表征 学习对手的特征向量 z z z 泛化性强,支持 Ad-hoc 训练复杂,需要多样化对手库 匹配陌生队友,复杂博弈
ToM / 递归 模拟对手的思维层级 L k L_k Lk 理论上限高,能剥削对手 计算昂贵,容易过度思考 扑克,谈判,心理博弈

给炼丹师的建议

  1. 如果你的任务是协作(如 SMAC),且可以 CTDE,通常不需要专门做对手建模,QMIX 及其变体已经隐式处理得不错。
  2. 如果你的任务是竞争(1v1),或者需要和人类/未知 AI 合作,那么添加一个简单的 Auxiliary Task(显式预测对手动作) 是提升性能性价比最高的方法。

到这里,MARL 的高阶技巧也介绍得差不多了。从对手建模到通信,从合作到竞争,多智能体的世界比单智能体精彩得多,也困难得多。愿你在 Agent 的博弈中找到纳什均衡!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐