COMA (Counterfactual Multi-Agent Policy Gradient)

Deep_Reinforcement_Learning/Deep_Reinforcement_Learning/MARL/COMA.md

COMA (Counterfactual Multi-agent Policy Gradient) 是由牛津大学团队在 2018 年提出的,它解决了一个直击灵魂的问题:

在一个团队里,我怎么知道这一分是因为"我"表现好,还是因为"队友"带飞?

这就是多智能体领域臭名昭著的**信度分配(Credit Assignment)**难题。COMA 用了一个极其硬核的逻辑来破解它:反事实推理(Counterfactual Reasoning)


一、 核心痛点:团队奖励的"大锅饭"迷雾

在《星际争霸》这种游戏里,通常只有全队的总分(比如击杀敌军得 10 分)。

  • 如果 5 个陆战队员围攻 1 个小狗,最终小狗死了,全队加 10 分。
  • 此时,其中一个陆战队员其实一直在往反方向反向走位(划水)。
  • 如果直接用这个 +10 分去更新所有人的 Policy,那个划水的队员也会觉得自己走位很骚,从而强化了这种错误行为。

传统的 A2C 算法使用优势函数 A(s,a)=Q(s,a)V(s)A(s, a) = Q(s, a) - V(s)。但在多智能体里,这个 V(s)V(s) 是全队的平均期望,它没法告诉你"你"这个特定动作对总分的边际贡献是多少。


二、 COMA 的杀招:反事实基准 (Counterfactual Baseline)

COMA 的核心思想源于经济学:要衡量你的价值,就看"如果没有你(或者你换个动作),团队会损失多少"。

1. 上帝视角的 Critic (Centralized Critic)

MADDPG 类似,COMA 也有一个上帝视角的 Critic。但它的输入非常特殊:

  • 它接收全局状态 SS
  • 它接收所有其他队友的动作 aia^{-i}
  • 它输出的是针对智能体 ii所有可能动作的 Q 值。

2. 计算"反事实优势"

这是 COMA 最天才的公式。对于智能体 ii,它计算的优势函数不是减去 V(s)V(s),而是减去一个虚拟的基准Ai(s,u)=Q(s,(ai,ui))uiπi(uioi)Q(s,(ai,ui))A^i(s, u) = Q(s, (a^{-i}, u^i)) - \sum_{u^{i \prime}} \pi^i(u^{i \prime} | o^i) Q(s, (a^{-i}, u^{i \prime}))

大白话翻译:

  • 左边 Q(s,(ai,ui))Q(s, (a^{-i}, u^i)):在队友动作 aia^{-i} 固定不动的前提下,你实际做了动作 uiu^i 拿到的分数。
  • 右边 \sum \dots:在队友动作固定不动的前提下,如果你随机换一个动作,平均能拿多少分。

结论: 如果两者相减是正数,说明:"由于你这步灵光一现的操作,团队表现优于了你的平均水平。" 这一份功劳,实打实地记在你头上。那个划水的队员会发现,他换个动作(比如开火)得分会更高,所以他的优势函数是负的,算法会修正他的行为。


三、 工程奇迹:一个 Critic 顶一百个

你可能会问:如果有 10 个智能体,每个智能体都要算自己的"反事实基准",那是不是要跑 10 次 Critic 网络?那不得卡死?

COMA 的作者设计了一个极其巧妙的输出结构:每个智能体的 Critic 网络一次性输出该智能体所有动作的 Q 值。

通过这种方式,我们只需要给每个智能体跑一次前向传播,就能拿到所有动作的 QQ。然后根据当前策略 π\pi 做一个简单的加权求和(点积),就能算出那个复杂的"反事实基准"。计算量极其经济!


四、 COMA 的历史地位与局限

  • 功绩:它是第一个在大规模多智能体环境(StarCraft II)中证明"基于策略"的方法也能通过精细的信度分配搞定微操的算法。
  • 局限
    1. 集中式训练的压力:Critic 需要知道所有人的动作,当智能体数量增加时,输入空间爆炸,Critic 很难练准。
    2. On-Policy 的硬伤:COMA 属于 On-Policy 算法(学一波丢一波),采样效率远不如后来的 QMIX(Off-Policy)。

出链

  • [[MADDPG]]
  • [[QMIX]]