多智能体强化学习实践:CTDE、MAPPO 与系统设计
多智能体强化学习(MARL)绝不是把单智能体算法复制几份就可以了。每个智能体只能看到系统的一部分,它的动作又会改变其他智能体正在学习的问题;团队共享奖励也很难直接说明,究竟是哪一个决策促成了成功或导致了失败。因此,动手实现之前,更应该先回答三个问题:训练时可以使用哪些信息,执行时每个智能体只能依赖哪些局部信息,以及协作关系应当放在系统的哪一部分建模。
先把决策过程说清楚
协作型任务通常可以建模为分散式部分可观测马尔可夫决策过程(Dec-POMDP):
在时刻 ,智能体 接收局部观测 ,选择动作 ,所有智能体的动作共同组成联合动作 。对于完全协作任务,各个策略优化同一个团队回报:
环境的马尔可夫状态 可能只对仿真器或训练系统可见,任何单个 Actor 都无法直接获得它。如果单步观测不足以作出决策,Actor 就需要结合动作—观测历史,实践中通常用循环网络来编码。部分可观测的本质是状态信息不完整,并不等于环境动力学本身“不稳定”。
真正落到训练系统中,最常见的困难有三类:
- 学习过程的非平稳性。 对任意一个智能体而言,队友的策略不断更新,它面对的数据分布也随之变化。
- 信用分配。 团队奖励无法直接指出某个智能体、某个动作究竟贡献了多少。
- 组合规模。 智能体数量增加后,联合观测空间和联合动作空间会迅速膨胀。
CTDE 首先是一条信息边界
集中训练、分散执行(CTDE)把训练阶段可用的信息与实际执行时可用的信息明确分开。训练时,Critic 或混合网络可以读取全局状态、联合动作,甚至其他智能体的观测;执行时,智能体 只能依据系统允许它获得的局部信息选择动作。
围绕这条边界,常见方法大致可以分为几类:
| 算法族 | 训练信号 | 执行方式 | 主要取舍 |
|---|---|---|---|
| 独立策略优化 | 各智能体根据局部数据估计价值 | 局部策略 | 结构简单、扩展方便,但会把不断变化的队友当作环境的一部分 |
| 集中式 Actor–Critic | Critic 使用联合信息或全局信息 | 局部 Actor | 训练信号更充分,但 Critic 规模和信用分配都会变得更难处理 |
| 价值分解 | 由各智能体效用组合得到联合价值 | 各智能体分别作局部贪心选择 | 分散决策高效,但分解形式限制了可表达的联合价值函数 |
MADDPG 和 COMA 使用集中式 Critic;VDN 与 QMIX 对团队价值做分解,其中 QMIX 通过单调性约束,使各智能体的局部贪心选择与集中式最大化保持一致。MAPPO 则把集中式价值函数与 PPO 风格的策略优化结合起来。这些方法解决问题的结构不同,不能简单排成一条从“集中程度低”到“集中程度高”的优劣序列。
参数共享也不是必选项。智能体同质、任务近似具有置换对称性时,共享参数往往有效;但如果不同角色即使看到相同观测,也理应采取不同动作,就需要加入智能体标识、角色特征或独立输出头。让异质智能体强行共用一套策略,只会掩盖模型与任务之间的不匹配。
MAPPO 仍然是 on-policy 方法
MAPPO 先用当前行为策略采集 rollout,再通过集中式 Critic 估计优势函数,随后对这批新数据执行有限次数的 PPO 更新。对智能体 ,概率比为
对应的裁剪替代目标可以写成
一种常见的优势估计方式,会使用集中式价值函数的输入 :
概率比用于衡量当前策略相对采样时旧策略的变化,并配合裁剪限制单次更新幅度;这不会把 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 方法。