跳转到正文
2022-10-23 zh

多智能体强化学习实践:CTDE、MAPPO 与系统设计

多智能体强化学习(MARL)绝不是把单智能体算法复制几份就可以了。每个智能体只能看到系统的一部分,它的动作又会改变其他智能体正在学习的问题;团队共享奖励也很难直接说明,究竟是哪一个决策促成了成功或导致了失败。因此,动手实现之前,更应该先回答三个问题:训练时可以使用哪些信息,执行时每个智能体只能依赖哪些局部信息,以及协作关系应当放在系统的哪一部分建模。

先把决策过程说清楚

协作型任务通常可以建模为分散式部分可观测马尔可夫决策过程(Dec-POMDP):

M=S,{Ai}i=1n,P,R,{Oi}i=1n,O,γ.\mathcal{M} = \left\langle \mathcal{S}, \{\mathcal{A}_i\}_{i=1}^{n}, P, R, \{\mathcal{O}_i\}_{i=1}^{n}, O, \gamma \right\rangle .

在时刻 tt,智能体 ii 接收局部观测 otio_t^i,选择动作 atia_t^i,所有智能体的动作共同组成联合动作 at=(at1,,atn)\mathbf{a}_t=(a_t^1,\ldots,a_t^n)。对于完全协作任务,各个策略优化同一个团队回报:

J(θ)=Eτπθ[t=0T1γtrt].J(\theta)=\mathbb{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^{T-1}\gamma^t r_t\right].

环境的马尔可夫状态 sts_t 可能只对仿真器或训练系统可见,任何单个 Actor 都无法直接获得它。如果单步观测不足以作出决策,Actor 就需要结合动作—观测历史,实践中通常用循环网络来编码。部分可观测的本质是状态信息不完整,并不等于环境动力学本身“不稳定”。

真正落到训练系统中,最常见的困难有三类:

  • 学习过程的非平稳性。 对任意一个智能体而言,队友的策略不断更新,它面对的数据分布也随之变化。
  • 信用分配。 团队奖励无法直接指出某个智能体、某个动作究竟贡献了多少。
  • 组合规模。 智能体数量增加后,联合观测空间和联合动作空间会迅速膨胀。

CTDE 首先是一条信息边界

集中训练、分散执行(CTDE)把训练阶段可用的信息与实际执行时可用的信息明确分开。训练时,Critic 或混合网络可以读取全局状态、联合动作,甚至其他智能体的观测;执行时,智能体 ii 只能依据系统允许它获得的局部信息选择动作。

围绕这条边界,常见方法大致可以分为几类:

算法族训练信号执行方式主要取舍
独立策略优化各智能体根据局部数据估计价值局部策略结构简单、扩展方便,但会把不断变化的队友当作环境的一部分
集中式 Actor–CriticCritic 使用联合信息或全局信息局部 Actor训练信号更充分,但 Critic 规模和信用分配都会变得更难处理
价值分解由各智能体效用组合得到联合价值各智能体分别作局部贪心选择分散决策高效,但分解形式限制了可表达的联合价值函数

MADDPG 和 COMA 使用集中式 Critic;VDN 与 QMIX 对团队价值做分解,其中 QMIX 通过单调性约束,使各智能体的局部贪心选择与集中式最大化保持一致。MAPPO 则把集中式价值函数与 PPO 风格的策略优化结合起来。这些方法解决问题的结构不同,不能简单排成一条从“集中程度低”到“集中程度高”的优劣序列。

参数共享也不是必选项。智能体同质、任务近似具有置换对称性时,共享参数往往有效;但如果不同角色即使看到相同观测,也理应采取不同动作,就需要加入智能体标识、角色特征或独立输出头。让异质智能体强行共用一套策略,只会掩盖模型与任务之间的不匹配。

MAPPO 仍然是 on-policy 方法

MAPPO 先用当前行为策略采集 rollout,再通过集中式 Critic 估计优势函数,随后对这批新数据执行有限次数的 PPO 更新。对智能体 ii,概率比为

rti(θ)=πθ(atioti)πθold(atioti).r_t^i(\theta)=\frac{\pi_\theta(a_t^i\mid o_t^i)}{\pi_{\theta_{\mathrm{old}}}(a_t^i\mid o_t^i)}.

对应的裁剪替代目标可以写成

Lclip(θ)=Et[min(rti(θ)A^ti,clip(rti(θ),1ϵ,1+ϵ)A^ti)].L_{\mathrm{clip}}(\theta)=\mathbb{E}_t\left[\min\left(r_t^i(\theta)\hat A_t^i,\operatorname{clip}\left(r_t^i(\theta),1-\epsilon,1+\epsilon\right)\hat A_t^i\right)\right].

一种常见的优势估计方式,会使用集中式价值函数的输入 xtix_t^i

A^ti==0Tt1(γλ)δt+i,δti=rt+γVϕ(xt+1i)Vϕ(xti).\hat A_t^i=\sum_{\ell=0}^{T-t-1}(\gamma\lambda)^\ell\delta_{t+\ell}^i,\qquad \delta_t^i=r_t+\gamma V_\phi(x_{t+1}^i)-V_\phi(x_t^i).

概率比用于衡量当前策略相对采样时旧策略的变化,并配合裁剪限制单次更新幅度;这不会把 MAPPO 变成依赖经验回放的 off-policy 学习。对新采集的同一批轨迹训练多个 epoch,只是一次策略更新内部的近端数据复用;完成预定的有限轮更新后,这批数据就会被丢弃,不会进入跨迭代的经验回放。论文中报告的样本效率是特定基准上的实验结果,也不能据此把 MAPPO 归为 off-policy。

MAPPO 论文指出,下面这些实现选择需要放在一起考虑:

  • 回报尺度变化较大时,对价值目标做归一化;
  • 给 Critic 提供确实有助于预测回报的全局特征和智能体特征,而不是不加选择地拼接所有张量;
  • 限制更新 epoch,并谨慎设置 minibatch,避免同一批数据被重复使用过多次;
  • 联合调整裁剪阈值与 epoch 数量;
  • 对不可用动作进行 mask,并用一致方式表示失活或死亡的智能体,必要时加入身份信号。

这些结论来自基准实验,是值得优先尝试的工程经验,并不是对所有环境都成立的固定参数。回合长度、循环状态处理、奖励尺度和并行环境数量都会影响最合适的配置。

落地实现时的系统设计清单

明确观测与执行约束

先明确记录每个 Actor 在部署时到底能够观测哪些信息,并在移除全局状态张量后测试导出的策略。如果策略依赖历史信息,只能在真实的回合边界重置循环状态;所有损失函数都要正确屏蔽 padding 时间步。

Critic 设计

是否加入全局特征,应取决于它们能否帮助解释未来回报,而不是因为“反正训练时能拿到”。至少应比较局部 Critic、紧凑的集中式 Critic 和使用完整全局状态的 Critic。如果 Critic 的训练损失持续下降,策略表现却越来越差,它可能正在利用一些无法形成有效优势信号的信息。

保存完整的采样批次信息

采样时就要保存行为策略的 log-probability、价值预测、mask、智能体活动状态和循环状态。策略更新之后,不要回头重新计算采样时的行为概率或 mask。比较样本效率时,应报告环境交互步数,不能只给出梯度更新次数。

评估

评估应使用未参与训练的随机种子,并至少同时观察团队回报、任务成功率,以及单个智能体的行为或负载。确定性策略和随机策略需要分开测试;一个看似不错的平均值,可能掩盖少数场景中的协作崩溃。

根据失效表现定位问题

  • 如果每次更新后回报都剧烈振荡,应减少 epoch 或缩小裁剪范围,并检查策略 KL。
  • 如果 Critic 拟合得很好,Actor 却始终无法协作,应检查反事实信用信号,或与价值分解方法对比。
  • 如果所有智能体都退化成相同行为,应确认角色或身份信息是否真的可观测。
  • 如果策略只有在执行阶段也输入全局状态时才能成功,说明 CTDE 的信息边界已经被破坏。
  • 如果增加智能体数量后训练随即崩溃,应先分析联合张量的规模增长,再考虑扩大网络。

可靠的 MARL 基线,往往就是严格遵守执行信息边界的最简单方法。MAPPO 的意义正在于说明,一套实现严谨的 on-policy 基线可以达到相当有竞争力的表现;不能因为它会对同一份 rollout 做若干轮近端更新,就误以为它是 off-policy 方法。

延伸阅读