清华大学和加州大学伯克利分校联合发现,在不改变任何算法或网络架构的情况下,在三个具有代表性的多智能体任务(Multi-AgentParticleWorld、StarCraftII、Hanabi)中使用MAPPO(Multi-AgentPPO)取得了与SOTA算法。近年来,多智能体强化学习(MARL)取得了突破。比如DeepMind开发的AlphaStar在《星际争霸2》中击败职业星际玩家,超过99.8%的人类玩家;OpenAIFive在DOTA2中多次击败世界冠军队伍,是第一个在电竞比赛中击败冠军的人工智能系统;并训练了一个智能体,可以像人类一样在模拟的物理环境中捉迷藏地使用工具。我们提到的大部分代理都是使用on-policy算法(如IMPALA[8])训练的,这意味着需要高度的并行性和巨大的计算能力支持。例如,OpenAIFive消耗了128,000个块CPU和256个P100GPU来收集数据样本和训练网络。然而,大多数学术机构很难配备如此规模的计算资源。因此,MARL领域几乎达成共识:与on-policy算法(如PPO[3])相比,在计算资源有限的情况下,off-policy算法(如MADDPG[5]、QMix[6]))由于其更高的采样效率更适合训练agent,演化出一系列SOTA算法(如SAD[9]、RODE[7])来解决一些特定的问题(domain-specific)。然而,清华大学和加州大学伯克利分校的研究人员在一篇论文中对这种传统认知提出了不同的看法:MARL算法需要综合考虑数据样本效率(sampleefficiency)和算法运行效率(wall-clockruntimeefficiency)。在计算资源有限的情况下,与off-policy算法相比,on-policy算法——MAPPO(Multi-AgentPPO)具有明显更高的算法运行效率和相当(甚至更高)的数据采样效率。有趣的是,研究人员发现MAPPO只需要非常小的超参数搜索,无需任何算法或网络架构改变,即可达到与SOTA算法相当的性能。此外,还贴心地给出了5条可以提升MAPPO性能的重要建议,并开源了一套优化后的MARL算法源码(代码地址:https://github.com/marlbenchmark/on-policy)。因此,如果你的MARL算法一直没有奏效,不妨参考一下这篇研究。可能是你没有使用正确的算法;如果你专注于研究MARL算法,不妨尝试使用MAPPO作为baseline,这可能会提高taskbenchmark;如果你是MARL研究的入门阶段,这套源码值得拥有,据说开发的很好,也很好用。该论文由清华大学王宇、吴毅等与美国加州大学伯克利分校的研究人员合作完成。研究人员未来会继续开源更多优化的算法和任务(仓库指导:https://github.com/marlbenchmark)论文链接:https://arxiv.org/abs/2103.01955什么是MAPPOPOPO(ProximalPolicyOptimization)[4]是一种非常流行的单智能体强化学习算法,也是OpenAI进行实验时的首选算法,可见其广泛的适用性。PPO使用经典的actor-critic架构。其中,actornetwork,也称为policynetwork,接收局部观察(obs)并输出动作(action);criticnetwork,也称为价值网络,接收状态(state)并输出动作值(value)进行评价,actornetwork输出动作好坏。可以直观地理解为,评委(critic)对演员(actor)的表演(action)进行打分(value)。MAPPO(Multi-agentPPO)是应用于多智能体任务的PPO算法的变体。它还使用actor-critic架构。不同的是critic学习了一个中心价值函数(centralizedvaluefunction)。简而言之,此时critic可以观察到全局信息(globalstate),包括其他agent信息和环境信息。实验环境接下来介绍论文中的实验环境。论文选取了3个具有代表性的协作Multi-agent任务。选择合作任务的一个重要原因是合作任务有明确的评价指标,便于不同算法之间的比较。第一个环境是OpenAI开源的Multi-agentParticleWorld(MPE)任务(源码指导:https://github.com/openai/multiagent-particle-envs)[1],轻量化环境和抽象多种任务设置使其成为快速验证MARL算法的首选测试平台。MPE中有3个协同任务,分别是Spread、Comm和Reference,如图1所示。图1:MPE环境中的3个子任务:Spread、Comm和Reference第二个环境就是著名的星际争霸II(StarCraftII)任务MARL字段(源代码:https://github.com/oxwhirl/smac),如图2所示。这项任务最初是由M.Samvelyan等人提出的。[2],提供23张实验地图,智能体数量从2到27不等,我方智能体需要合作打败敌方智能体才能赢得游戏。自该任务发布以来,许多研究者对其特性进行了算法研究,如经典算法QMix[6]和最新发表的RODE[7]等。由于星际争霸II经历了版本迭代,不同版本之间在性能上存在差距,特此声明,本文使用最新版本SC2.4.10。图2:星际争霸II环境中的2张代表性地图:Corridor和2cvs.64zg第三种环境是Hanabi,NolanBard等人提出的纯协作任务。[3]2019年(源代码:https://github.com/deepmind/hanabi-learning-environment),Hanabi是一款回合制纸牌游戏,即每一轮只能有一名玩家出牌。与之前的多智能体任务相比,Hanabi的一个重要特点是纯协作。每个玩家都需要推理其他玩家的意图。只有完成合作,他们才能获得积分。Hanabi的玩家人数可以是2-5人。图3是4个玩家的任务示意图。试一试。图3:4名玩家的Hanabi-Full任务示意图。实验结果首先我们来看一下论文中给出的实验结果。特别注意,论文中的所有实验都是在一台主机上完成的,主机的配置为256GB内存、一个64核CPU和一块GeForceRTX309024GB显卡。此外,研究人员表示,本文中的所有算法都经过微调(fine-tune),因此本文复现的一些实验结果会比原论文更好。(1)MPE环境图4展示了MPE中不同算法的数据样本效率和算法运行效率对比,其中IPPO(IndependentPPO)是指critic学习到一个分布式价值函数(decentralizedvaluefunction),即critic和的actor的输入都是局部观测,IPPO和MAPPO的超参数是一致的;MADDPG[5]是MARL领域非常流行的off-policy算法,也是针对MPE开发的算法。QMix[6]是为星际争霸II开发的MARL算法,也是星际争霸II中常用的baseline。从图4可以看出,与其他算法相比,MAPPO不仅具有相当的数据采样效率和性能(图(a)),而且算法运行效率也显着提高(图(b))。图4:MPE中不同算法的数据采样效率和算法运行效率对比(2)星际争霸II环境表1为MAPPO和IPPO、QMix和为星际争霸II开发的SOTA算法RODE的对比,在截断到10M的数据中这样的话,MAPPO在19/23地图的胜率已经达到了SOTA。除了3s5zvs.3s6z,其他图和SOTA算法的差距都在5%以内,而且3s5zvs.3s6z在裁到10M的时候也没有完全收敛。如果切到25M,可以达到91%的胜率。图5为星际争霸II中不同算法的数据采样效率和算法运行效率对比。可以看出,MAPPO其实拥有与QMix、RODE不相上下的数据采样效率,以及更快的算法运行效率。由于在星际争霸II任务的实际训练中只使用了8个并行环境,而在MPE任务中使用了128个并行环境,因此图5算法的运行效率没有图4大,但即便如此,仍然可以看出MAPPO令人难以置信的性能和运行效率。表1:星际争霸II23张地图不同算法的胜率比较,其中截断标记表示MAPPO和QMix被截断为与RODE相同的步数,以便与SOTA算法进行公平比较。(3)Hanabi环境SAD是为Hanabi任务开发的SOTA算法。值得注意的是,SAD的分数取自原始论文。原作者跑了13个随机种子,每个种子大约需要10B的数据,而由于时间关系,MAPPO只跑了4个随机种子,每个种子大约有7.2B的数据。从表2可以看出,MAPPO仍然可以取得与SAD相当的分数。表2:MAPPO和SAD在2人Hanabi-Full任务上的得分比较。5条小建议看完论文给出的实验结果,那么,回到最初的问题,你正确使用MAPPO了吗?研究人员发现,即使多智能体任务与单智能体任务有很大不同,其他单智能体任务中给出的PPO实现建议仍然有用,比如输入归一化、值裁剪、最大梯度范数裁剪、Orthogonalinitialization,GAEnormalization等。但除此之外,研究人员针对MARL领域和其他容易被忽视的因素给出了5条额外的建议。值归一化:研究人员使用PopArt对值进行归一化,并指出使用PopArt有益无害。AgentSpecificGlobalState:使用特定于代理的全局信息来避免丢失全局信息和过多的维度。值得一提的是,研究人员发现星际争霸II中原有的全局信息存在信息遗漏,甚至其包含的信息少于agent局部观察,这也是直接应用性能不佳的重要原因星际争霸II中的MAPPO。TrainingDataUsage:对于简单的任务,建议使用15个训练epoch,而对于更难的任务,尝试10或5个训练epoch。此外,尽量使用一整套训练数据,而不是将其切割成许多小的(mini-batch)训练。ActionMasking:在多智能体任务中,经常会发生智能体不能执行某些动作的情况。建议在正向执行或反向传播时将这些无效动作屏蔽掉,使其不参与动作概率的计算。DeathMasking:在多智能体任务中,经常会出现一个智能体或者部分智能体中途死亡的情况(比如星际争霸II)。当agent死亡时,只保留agentid,屏蔽其他信息,学习更准确的state-valuefunction。更多实验细节和分析可以在论文原文中找到。
