COMA(2017):引入反事实基线的多智能体策略梯度方法

COMA(2017):引入反事实基线的多智能体策略梯度方法

导出时间:2025/12/19 13:30:42




1、COMA 想解决的核心痛点:团队奖励下的“甩锅难题”

COMA 主要面向纯合作场景:大家、共享同一个全局奖励(team reward)。
这时最大的麻烦不是“看不清”,而是:

团队赢了/输了,你不知道自己这一步到底贡献了多少。

举个最形象的例子(足球/篮球都行):
  • 你们进球了 到底是你传球传得好?
  • 还是队友个人能力强?
  • 或者对方失误?
如果你用普通策略梯度(REINFORCE/Actor-Critic)训练每个队员,会发生:
  • 每个人都拿到同一个奖励信号
  • 每个人都把“赢球”当成“自己做对了”
  • 训练信号噪声巨大、学习很慢、容易学歪
论文把这个叫:多智能体信用分配(credit assignment)问题

COMA 的一句话方法论

训练时用一个“中央裁判”(central critic)评估联合行动; 更新每个智能体时,用“反事实基线”问一句:“如果只有我换个动作,其他人都不变,结果会怎样?”

这句话就是 COMA 的灵魂。


2、COMA的核心思想

一、先给你一个总览:COMA 到底在干什么?

一句话先立住:

COMA = 集中式裁判(Critic)在训练时帮忙算清楚“每个人的真实贡献”, 执行时每个智能体自己独立行动(Actor)。

它是一个多智能体强化学习(MARL)里,专门解决“谁该为奖励负责”这个问题的算法

二、COMA 的整体框架:集中式 Critic + 分布式 Actor

你可以把 COMA 想成一个足球队训练系统
  • 比赛时(执行阶段) 每个球员只能看到自己周围,自己做决定
  • 赛后复盘(训练阶段) 有一个中央分析师,能看到全场录像,帮你分析“刚才那个进球到底是谁的功劳”
这就是 集中训练、分散执行(CTDE)

三、Actor:每个智能体自己做决定(去中心化执行)

3.1 Actor 在做什么?

每个智能体都有一个自己的 Actor 网络,它只干一件事:

根据我现在能看到的东西,选一个动作。

它能看到什么?

  • 自己的局部观测
  • 自己的历史信息(论文里用 RNN / GRU 处理)

它输出什么?

  • 一个 离散动作的概率分布(softmax)
你可以把 Actor 想成:

每个小兵脑子里的“局部驾驶员”

它不知道全局发生了什么,只能:
  • 看附近
  • 凭经验
  • 自己决定动不动、打谁、往哪走
这非常重要,因为在真实环境里:
  • 通信可能受限
  • 视野有限(星际争霸里单位只能看到附近)

四、Critic:训练时的中央“大脑”

4.1 Critic 在干什么?

Critic 只在训练时存在,它有“上帝视角”:
它可以看到:
  • 全局状态 s
  • 所有人的历史 τ
  • 所有人的联合动作 u
它要学的是:

Q(s, τ, u):在当前局面下,大家一起这么做,未来期望奖励是多少

你可以把 Critic 想成:

一个赛后裁判 / 战术分析师


4.2 为什么“只有 centralized critic 还不够”?

这是 COMA 论文非常关键的一句话,你已经点出来了:

哪怕用集中式 TD 误差当优势,信用分配仍然没解决,梯度依旧很嘈杂

直觉解释:
  • 团队奖励是大家一起造成的
  • 你用一个总 Q 来更新某个智能体
  • 但这个 Q 的变化,可能是:
    • 队友突然打得好
    • 环境随机性
    • 或者你真的做了对的事
Actor 会一脸懵:

“这个奖励是因为我,还是别人?”

这就是 信用分配(credit assignment)问题
COMA 的核心创新,就是专门解决这个。

五、COMA 的关键创新:反事实基线(Counterfactual Baseline)

这是 COMA 的灵魂

5.1 小白版直觉:给每个人一个“如果你没这么做”的对照组

普通策略梯度里,优势函数是:
A = Q − V
COMA 不这么算。
它对 第 a 个智能体,定义:

Aᵃ =当前大家这么做的 Q− 保持队友动作不变,只把“我”的动作随机换一遍后的平均 Q

你可以把它理解成一个问题:

“如果队友都没变,只是我随便按策略换动作,团队表现平均会怎样?”


5.2 用一个非常直观的比喻

想象一个 3 人小队打 boss:
  • 当前动作组合 → 赢得很漂亮(高 Q)
  • 现在我们问 你这个人
    • 队友动作固定不动
    • 如果你随机换别的动作
    • 平均下来,胜率会不会变差?
如果:
  • 换动作平均表现更差 → 说明你刚才那个动作 真的有贡献
如果:
  • 换不换都差不多 → 说明这波不是你带飞的
这就是 反事实(counterfactual) 的含义:

我们并没有真的让你换动作,只是在“假设如果你换了会怎样”


5.3 数学直觉(不用怕)

反事实基线本质是:
baselineᵃ = Σ πᵃ(uᵃ | τᵃ) · Q(s, τ, uᵃ, u⁻ᵃ)
也就是说:
  • 只对 你自己的动作 做期望
  • 队友动作全部固定
优势就是:
Aᵃ = Q(当前联合动作) − baselineᵃ

六、为什么反事实基线能显著“降噪”?

这是 COMA 最实用的地方。
它解决的是训练里最致命的问题:

“奖励变化到底是谁造成的?”

反事实基线的作用等于:
  1. 把队友的随机探索锁死
    • 不让他们的波动污染你的梯度
  2. 只比较你自己动作变化带来的差异
结果是:
  • Actor 接收到的梯度信号更“干净”
  • 学习更稳定
  • 不容易学偏
你可以理解为:

它在训练时帮你做了一次“因果隔离”


七、它和 MADDPG 的一句话区别

这是一个非常常见的混淆点,你可以这样记:
  • MADDPG
    • 每个 agent 一个 centralized critic
    • 主要解决 非平稳性
    • 多用于 连续动作、合作 + 竞争
  • COMA
    • 一个共享 central critic
    • 主要解决 信用分配
    • 离散动作、纯合作

3、COMA 的网络结构

一、先给整张图一个“总故事”

你可以把这张图理解成一句话:

比赛时:只有蓝色 Actor 在各自和环境互动 训练时:红色 Critic 站在上帝视角,事后帮每个人算“你这一步到底值不值”

红色部分 = 只在训练阶段存在 蓝色部分 = 执行阶段也存在

image.png

二、图 (a):信息流动图 —— “比赛现场 + 赛后裁判”

这是 COMA 的整体信息流,我们从时间步 t 看。

1️⃣ 蓝色部分:Actor ↔ Environment(真实世界在发生什么)

每个 Actor 在干什么?

以 Actor 1 为例(Actor 2 完全对称):
image.png
👉 注意:Actor 1 完全不知道 Actor 2 在干嘛
这就是 去中心化执行
你可以把它想成:

每个士兵只戴着自己的夜视仪行动


Environment 在干什么?

  • 接收所有智能体的动作:(ut1,ut2)
  • 给出:
    • 新的局部观测
    • 一个共享奖励 rt
⚠️ 关键点:

奖励是 团队的,不是个人的

这正是信用分配麻烦的根源。

2️⃣ 红色部分:Central Critic(赛后裁判)

Critic 在“偷看”什么?

在图 (a) 里你能看到,Critic 接收:
image.png
👉 这些 执行时 Actor 是完全拿不到的
你可以把 Critic 想成:

一个能看到整张地图 + 回放录像的裁判


Critic 输出什么?

Critic 给每个 Actor 吐出一个东西:
  • At1
  • At2
也就是:

“你这一步,比‘如果你乱选动作’好多少”

注意: Critic 不是直接控制 Actor,只是提供训练信号。

三、图 (b):Actor 网络结构 —— “每个智能体自己的小脑袋”

我们只看 单个 Actor a

1️⃣ Actor 的输入

图 (b) 左边你看到:
image.png
这些一起送进 GRU
👉 为什么要 GRU?
因为:
  • 环境是 部分可观测
  • 当前看不到的东西,可能要靠历史推断
你可以理解为:

Actor 在心里不断更新一份“我猜现在局势大概是这样”的记忆


2️⃣ Actor 的输出

GRU 输出新的隐藏状态 hta,然后:
image.png
也就是一个 离散动作概率分布(softmax)。
这一步非常关键:

Actor 永远只输出“我现在想怎么做” 从来不关心奖励是怎么来的


四、图 (c):Central Critic —— COMA 的灵魂所在

这是最容易“看懵”的一部分,我们慢慢来。

1️⃣ Critic 的输入(为什么它这么强)

图 (c) 底部你看到 Critic 输入的是:
image.png
👉 这是“上帝视角”

2️⃣ Critic 干的关键一件事(非常重要)

❌ 它不是输出一个联合 Q 表

那样会爆炸。

✅ 它做的是:

固定其他人的动作,一次前向,输出“我这个 agent 所有可能动作的 Q 值”

也就是图里画的这个:
image.png
你可以理解为:

裁判一口气打出一张表:“如果你刚才改成第 1 个动作会怎样 “如果你改成第 2 个动作会怎样” ……


3️⃣ COMA:反事实优势是怎么在图 (c) 里算出来的?

现在把图连起来:

Step 1:拿到 Q 向量

Critic 输出你 所有可能动作的 Q

Step 2:用你的策略 πa 做加权平均

image.png
这一步就是:

“如果你按自己当前策略乱选动作,平均表现会怎样”

Step 3:减去当前真实动作的 Q

image.png
得到:

你这一步的“净贡献”

这一步在图中用红色的 COMA 模块标出来。

五、把三张图串成一个“时间步动画”

我们用一句话版本走一遍时间步 ttt:
  1. 蓝色 Actor
    • 各自用 GRU 和记忆
    • 根据局部观测选动作
  2. 环境
    • 执行动作
    • 给一个共享奖励
  3. 红色 Critic(只在训练)
    • 看全局信息
    • 给每个 Actor 算:
    • “如果你换动作,平均会怎样?”
  4. 反事实优势 Aᵃ
    • 只衡量“你自己的动作变化”
  5. 更新 Actor
    • Actor 学会:
    • “哪些动作在团队里真的有用”

六、你现在应该能“看懂这张图”的关键点

如果你能回答下面 3 个问题,说明你已经真的懂了:
  1. 为什么红色部分执行时可以删掉? 👉 因为它只负责“事后评分”,不负责决策
  2. 为什么 Critic 一次前向就够? 👉 因为它输出的是“我所有动作的 Q 向量”
  3. 反事实 baseline 的本质是什么? 👉 固定队友,只比较“我换动作会不会更差”