【多智能体强化学习】MAPPO 论文笔记

王 茂南 2024年4月8日07:38:39
评论
1 5626字阅读18分45秒
摘要本文会对多智能体强化学习算法 MAPPO 进行介绍,包含主要想法(其实主要想法和 MADDPG 很类似),和一些训练的建议。

简介

本文会介绍另外一种常见的多智能体强化学习算法, MAPPO。其实直接去看 MAPPO 的原文,会发现他在方法论部分是很少的,大量内容都在实验上面,以及最后的一些关于参数的建议。正如他在文章里面所写得:

我们的目标并不是提出一个全新的 MARL 算法,而是想要通过简单的修改,实证地证明 PPO 能在各种合作型多智能体环境中取得优异的性能。我们还相信,这些建议将帮助实践者利用 PPO 取得竞争力的成果。

所以 MAPPO 这里大部分内容和 PPO 的算法是比较相似的,但是可以写一下文章里面所给出的五个建议,来帮助大家进行调参。

参考资料

 

MAPPO 算法介绍

研究现状

近期在强化学习(RL)和多智能体强化学习(MARL)方面的进展,带来了人工智能体合作解决问题的突破性发展:DeepMind 的 AlphaStar 在《星际争霸 II》中达到了超过职业选手的水平,OpenAI Five 在《Dota II》中战胜了世界冠军,而 OpenAI 则展示了通过多智能体学习出现的类人工具使用行为。这些成就主要得益于如 IMPALA 和 PPO 这样的基于策略的强化学习算法,它们通常与分布式训练系统结合,以利用海量的并行性和计算资源。这与近期学术界在 MARL 研究中的趋势形成鲜明对比,后者更倾向于开发如 MADDPG 和价值分解 Q 学习这样的基于策略的学习框架,并在多智能体基准测试中取得了领先的成果。

于是在这个研究中,重新审视了在多智能体环境下应用 PPO,这是一种在单智能体 RL 中广泛使用,但在近期的 MARL 研究中较少涉及的基于策略算法。技术上说,PPO 采用了基于策略的修正以提高样本的重复使用率,但与基于策略的方法不同,它不依赖于重放缓冲区来训练整个训练过程中收集的样本。

MAPPO 的贡献可以总结如下:

  • 证明了 PPO,在没有领域特定的算法修改或架构,且只进行最小程度调整的情况下,能在四个合作型多智能体基准测试中达到与基于策略方法相媲美的最终性能。
  • 证明了 PPO 在使用与许多基于策略方法相当数量的样本时,能够取得这些强大的成果。
  • 识别并分析了五个影响 PPO 在这些环境中实际性能的关键实施因素和超参数,并针对这些因素提出了最佳实践建议。

 

MAPPO 算法描述

在多智能体设置中,对 PPO 的实现与单智能体环境下的结构相似,通过学习策略 pi 和价值函数 V(s) 来实现;这些函数分别由两个独立的神经网络表示。

价值函数 V(s) 用于减少方差,在训练期间发挥作用;因此,它可以接收 agent 在本地观测中无法得到的额外全局信息,使得 PPO 能够适应多智能体领域中的中央训练分散执行(CTDE)结构。原文具有集中式价值函数输入的 PPO 称为多智能体 PPO(MAPPO),而将策略和价值函数都只基于本地输入的 PPO 称为独立 PPO(IPPO)。我们注意到,无论是 MAPPO 还是 IPPO,都是在智能体共享共同奖励的情况下运作的,因为我们的关注点仅在于合作型环境。

这里算法的核心区别在于:PPO 的 critic 部分使用全局状态 state 而不是 observation 作为输入。同时,对于相同类型的 agent,可以使用一套参数的 actor 和 critic 网络(也可以每一个 agent 一个网络)。

同时,作者这里使用了参数共享:在代理相同(即,代理具有相同的观察和行动空间)的基准环境中,采用参数共享策略;以往的研究已经表明,这能提高学习效率。在这些情况下,代理共享策略 pi 和价值函数 V(s) 的参数。需要注意,这里虽然参数共享,但是还是会给每一个 agent 计算一个 V(s) 值。即使 critic 使用了全局的信息,但是由于合并顺序等原因,每个 agent 输入的 state 还是不一样的,也就是每个 agent 还是会计算出不一样的 V(s) 值。

 

关于 MAPPO 五个有用的建议

作者在本文中进行了大量的实验,实验发现:

  • MAPPO 能够在几乎所有测试中达到与 SAD 和 VDN 相当或更优的最佳和平均回报,同时使用的环境交互次数相同。
  • 在两个智能体的设置中,IPPO 的性能与 MAPPO 相当。然而,随着智能体数量的增加,MAPPO 明显优于 IPPO 和非策略性方法,这表明集中式的评价输入是至关重要的。

同时,作者分析了对 MAPPO 性能特别有影响的五个因素:价值归一化(value normalization)、价值函数的输入(value function inputs,也就是输入信息是否包含全局或是局部)、训练数据的使用(training data usage)、策略/价值的裁剪(policy/value clipping),以及批量大小(batch size)。发现这些因素在性能方面呈现出明确的趋势;利用这些趋势,MAPPO 为每个因素提出最佳实践建议

下面是 MAPPO 给出的 5 个有用的建议的总结:

  • 建议 1:应用价值归一化来稳定价值学习。
  • 建议 2:如果可能,应在价值函数的输入中包含本地的、特定智能体的特征和全局特征。同时要确保这些特征不会不必要地增加输入的维度。
  • 建议 3:在困难环境中最多使用 10 个训练周期,在简单环境中使用 15 个训练周期。此外,避免将数据分割成小批次(也就是数据不要过多的重复使用,同时 batchsize 大一些,可以是一整个 epoch 的数据,或是一个 epoch 一半的数据)。
  • 建议 4:为了获得最佳的 PPO 性能,应保持剪切比率 epsilon 在 0.2 以下;在这个范围内,调整 epsilon,在训练稳定性和快速收敛之间找到一个平衡点。
  • 建议 5:为了获得 MAPPO 的最佳任务性能,请使用较大的批次大小。然后,调整批次大小以优化样本效率(这个和上面的建议 3 是类似的)。
  • 建议 6(这个建议不是来自 MAPPO,但是据说效果不错,也在这里记录一下):对于建议 2,将agent-specific 特征直接换成了随机高斯噪音,效果比上文换了特征的的 MAPPO 更好。参考自,简单分析MARL中为什么IPPO效果比MAPPO好?

下面会详细对这五个建议进行说明。

 

关于价值归一化

在 MAPPO 的训练过程中,由于实际回报的差异,价值目标可能会发生巨大变化,这会导致价值学习的不稳定。为了减少这一问题,可以通过使用价值目标的平均值和标准差的动态估计来标准化价值函数的目标值。具体来说,在价值学习时,价值网络会以归一化的目标值进行学习。在计算广义优势估计(GAE)时,我们使用动态平均值来调整价值网络的输出,确保价值输出的正确比例。我们发现使用价值归一化从不会对训练产生负面影响,并且通常能显著提升 MAPPO 的最终性能。

建议 1:应用价值归一化来稳定价值学习。

 

价值函数的输入

在众多多智能体集中训练分散执行(Centralized Training with Decentralized Execution, CTDE)的梯度策略(Policy Gradient, PG)算法和完全去中心化的 PG 方法之间,最根本的区别在于价值网络的输入。因此,价值输入的表示方式对整个算法至关重要。使用集中式价值函数的假设是,通过观察完整的全局状态可以简化价值学习过程。一个精确的价值函数通过减少方差,进一步改进策略学习。

这里价值函数的输入分为以下的几类,下图对这四类输入进行了总结:

  • CL:所有本地观测的串联(concatenation of local observations, CL)形成的全局状态。随着智能体数量的增加,CL 状态的维度也会增长,并可能忽略所有智能体都未观察到的重要全局信息,这可能会使价值学习变得复杂。
  • EP:另外一种是采用了一个包含环境状态概况信息的环境提供的全局状态(Environment-Provided global state, EP)。然而,EP 状态通常包含所有智能体共有的信息,并可能忽略重要的本地智能体特定信息。
  • AS(EP+特定 agent 的观测):为了克服 CL 和 EP 状态的不足,MAPPO 允许价值函数通过形成一个特定智能体的全局状态(Agent-Specific Global State, AS),它通过连接 EP 状态和 o_i(智能体 i 的本地观测)为智能体 i 创建全局状态。这为价值函数提供了对环境状态的更全面描述。但是,如果 o_iEP 全局状态之间存在信息重叠,那么 AS 状态将包含重复信息,这会不必要地增加价值函数输入的维度。
  • FP:为了评估这种增加的维度对性能的影响,MAPPO 创建了一个特征剪枝的特定智能体全局状态(Featured-Pruned Agent-Specific Global State, FP),通过移除 AS 状态中重复的特征。
【多智能体强化学习】MAPPO 论文笔记

实验结果如下图所示,可以看到,使用维度远高于其他全局状态的 CL 状态效果不佳,特别是在有许多智能体的地图中。相比之下,使用 EP 全局状态可以实现更强的性能,但在更困难的地图上性能明显不佳,这可能是因为缺乏重要的本地信息。ASFP 全局状态都实现了强大的性能,其中 FP 状态在一些地图上的表现超过了 AS 状态。这表明状态的维度、特定智能体的特征和全局信息在形成有效的全局状态方面都是重要的。

【多智能体强化学习】MAPPO 论文笔记

建议 2:如果可能,应在价值函数的输入中包含本地的、特定智能体的特征和全局特征。同时要确保这些特征不会不必要地增加输入的维度。

 

关于训练数据的利用

PPO 的一个重点特性是使用重要性采样(importance sampling)进行非策略(off-policy)校正,这允许重复使用样本数据。也就是将收集的大量样本分成小批次,并进行多个训练周期(epochs)的训练。在单智能体连续控制领域,常见做法是将大量样本分成大约 32 或 64 个小批次,并进行数十个训练周期。然而,在多智能体领域,我们发现当样本被过度重用时,MAPPO 的性能会降低(也就是不能重复使用次数太多)。

因此,我们在简单任务上使用 15 个训练周期,在困难任务上使用 10 或 5 个训练周期。我们推测,这种模式可能是由于多智能体强化学习(Multi-Agent Reinforcement Learning, MARL)中的非平稳性(non-stationarity):减少每次更新的训练周期数可以限制智能体策略的变化,这可能有助于提高策略和价值学习的稳定性(数据复用次数不要太多)。

此外,我们发现使用更多数据来估计梯度通常会带来更好的实际性能。因此,我们将训练数据分成至多两个小批次,并在大多数情况下避免进行小批次分割(batchsize 要稍微大一些)。

关于 epoch 次数的影响】下面是具体的实验结果。可以看到,当使用大量训练周期时会产生负面效果:使用 15 个训练周期时,MAPPO 通常学习到次优策略,在非常困难的 MMM2 和 Corridor 地图上表现尤为差。相比之下,MAPPO 使用 5 或 10 个训练周期表现良好。

关于 mini-batch 的影响】MAPPO 的性能也对训练周期中的小批次数量非常敏感。我们考虑了三种小批次值:1,2 和 4。4 个小批次意味着我们将训练数据分成 4 个小批次进行梯度下降(gradient descent)。根据实验结果可以看到,使用更多小批次会对 MAPPO 的性能产生负面影响:使用 4 个小批次时,MAPPO 未能解决任何选定的地图,而使用 1 个小批次在 22/23 个地图上取得了最佳性能。

【多智能体强化学习】MAPPO 论文笔记

建议 3:在困难环境中最多使用 10 个训练周期,在简单环境中使用 15 个训练周期。此外,避免将数据分割成小批次(batchsize 不要太小)。

 

PPO Clip

PPO 的另一个核心特征是利用剪切的重要性比例(clipped importance ratio)和价值损失(value loss),以防止策略和价值函数在迭代过程中发生剧烈变化。剪切的强度由超参数 epsilon 控制:较大的 epsilon 值允许对策略和价值函数进行更大的更新。

与训练周期数类似,我们假设策略和价值的剪切可以限制由于智能体策略在训练中的变化而引起的非平稳性(non-stationarity)。对于较小的 epsilon,智能体的策略在每次更新中的变化可能会更小,我们认为这可以在可能牺牲学习速度的情况下,提高整体学习的稳定性。

建议 4:为了获得最佳的 PPO 性能,应保持剪切比率 epsilon 在 0.2 以下;在这个范围内,调整 epsilon,在训练稳定性和快速收敛之间找到一个平衡点。

 

PPO Batchsize

在训练更新过程中,PPO 会采样一系列符合策略的轨迹(on-policy trajectories),这些轨迹被用来估计策略和价值函数目标的梯度。由于在我们的训练中小批次的数量是固定的,通常较大的批次会导致更准确的梯度,从而更好地改进价值函数和策略。但是,批次的积累受到可用计算资源和内存的限制:收集大量的轨迹需要有效的并行性,并且这些批次需要存储在 GPU 内存中。因此,使用过大的批次大小可能会在所需的计算资源和样本效率(sample-efficiency)方面造成浪费。

总体来说,MAPPO 需要一个足够大的批次大小来获得强大的性能,但使用过大的批次大小可能会降低样本效率并造成计算资源的浪费。

建议 5:为了获得 MAPPO 的最佳任务性能,请使用较大的批次大小。然后,调整批次大小以优化样本效率(这个和上面的建议 3 是类似的)。

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2024年4月8日07:38:39
  • 转载请务必保留本文链接:https://mathpretty.com/16965.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: