百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

听说你的多智能体强化学习算法不work?你用对MAPPO了吗

toyiye 2024-09-16 06:12 7 浏览 0 评论

机器之心发布

机器之心编辑部

清华和UC伯克利联合研究发现,在不进行任何算法或者网络架构变动的情况下,用 MAPPO(Multi-Agent PPO)在 3 个具有代表性的多智能体任务(Multi-Agent Particle World, StarCraftII, Hanabi)中取得了与 SOTA 算法相当的性能。

近些年,多智能体强化学习(Multi-Agent Reinforcement Learning,MARL)取得了突破性进展,例如 DeepMind 开发的 AlphaStar 在星际争霸 II 中打败了职业星际玩家,超过了 99.8% 的人类玩家;OpenAI Five 在 DOTA2 中多次击败世界冠军队伍,是首个在电子竞技比赛中击败冠军的人工智能系统;以及在仿真物理环境 hide-and-seek 中训练出像人一样可以使用工具的智能体。我们提到的这些智能体大多是采用 on-policy 算法(例如 IMPALA[8])训练得到的,这就意味着需要很高的并行度和庞大的算力支持,例如 OpenAI Five 消耗了 12.8 万块 CPU 和 256 块 P100 GPU 来收集数据样本和训练网络。

然而,大多数的学术机构很难配备这个量级的计算资源。因此,MARL 领域几乎已经达成共识:与 on-policy 算法(例如 PPO[3])相比,在计算资源有限的情况下,off-policy 算法(例如 MADDPG[5],QMix[6])因其更高的采样效率更适合用来训练智能体,并且也演化出一系列解决某些具体问题(domain-specific)的 SOTA 算法(例如 SAD[9],RODE[7])。

但是,来自清华大学与 UC 伯克利的研究者在一篇论文中针对这一传统认知提出了不同的观点:MARL 算法需要综合考虑数据样本效率(sample efficiency)和算法运行效率(wall-clock runtime efficiency)。在有限计算资源的条件下,与 off-policy 算法相比,on-policy 算法 --MAPPO(Multi-Agent PPO)具有显著高的算法运行效率和与之相当(甚至更高)的数据样本效率。有趣的是,研究者发现只需要对 MAPPO 进行极小的超参搜索,在不进行任何算法或者网络架构变动的情况下就可以取得与 SOTA 算法相当的性能。更进一步地,还贴心地给出了 5 条可以提升 MAPPO 性能的重要建议,并且开源了一套优化后的 MARL 算法源码(代码地址:https://github.com/marlbenchmark/on-policy)。

所以,如果你的 MARL 算法一直不 work,不妨参考一下这项研究,有可能是你没有用对算法;如果你专注于研究 MARL 算法,不妨尝试将 MAPPO 作为 baseline,说不定可以提高任务基准;如果你处于 MARL 研究入门阶段,这套源码值得拥有,据说开发完备,简单易上手。这篇论文由清华大学的汪玉、吴翼等人与 UC 伯克利的研究者合作完成。研究者后续会持续开源更多优化后的算法及任务(仓库指路:https://github.com/marlbenchmark)

论文链接:https://arxiv.org/abs/2103.01955

什么是 MAPPO

PPO(Proximal Policy Optimization)[4]是一个目前非常流行的单智能体强化学习算法,也是 OpenAI 在进行实验时首选的算法,可见其适用性之广。PPO 采用的是经典的 actor-critic 架构。其中,actor 网络,也称之为 policy 网络,接收局部观测(obs)并输出动作(action);critic 网络,也称之为 value 网络,接收状态(state)输出动作价值(value),用于评估 actor 网络输出动作的好坏。可以直观理解为评委(critic)在给演员(actor)的表演(action)打分(value)。MAPPO(Multi-agent PPO)是 PPO 算法应用于多智能体任务的变种,同样采用 actor-critic 架构,不同之处在于此时 critic 学习的是一个中心价值函数(centralized value function),简而言之,此时 critic 能够观测到全局信息(global state),包括其他 agent 的信息和环境的信息。

实验环境

接下来介绍一下论文中的实验环境。论文选择了 3 个具有代表性的协作 Multi-agent 任务,之所以选择协作任务的一个重要原因是合作任务具有明确的评价指标,便于对不同的算法进行比较。

第一个环境是 OpenAI 开源的 Multi-agent Particle World(MPE)任务(源代码指路:https://github.com/openai/multiagent-particle-envs)[1],轻量级的环境和抽象多样的任务设定使之成为快速验证 MARL 算法的首选测试平台。在 MPE 中有 3 个协作任务,分别是 Spread,Comm 和 Reference,如图 1 所示。

图 1:MPE 环境中的 3 个子任务:Spread,Comm 和 Reference

第二个环境是 MARL 领域著名的 StarCraftII(星际争霸 II)任务(源代码:https://github.com/oxwhirl/smac),如图 2 所示。这一任务最初由 M. Samvelyan 等人提出 [2],提供了 23 个实验地图,agent 数量从 2 到 27 不等,我方 agent 需要进行协作来打败敌方 agent 以赢得游戏。自该任务发布以来,有很多研究人员针对其特点进行了算法研究,例如经典算法 QMix[6] 以及最新发表的 RODE[7]等等。由于 StarCraftII 经过了版本迭代,并且不同版本之间性能有差距,特别说明,这篇论文采用的是最新版本 SC2.4.10。

图 2:StarCraftII 环境中的 2 个代表性地图:Corridor 和 2c vs. 64zg

第三个环境是由 Nolan Bard 等人 [3] 在 2019 年提出的一个纯协作任务 Hanabi(源代码:https://github.com/deepmind/hanabi-learning-environment),Hanabi 是一个 turn-based 的纸牌类游戏,也就是每一轮只有一个玩家可以出牌,相较于之前的多智能体任务,Hanabi 的一个重要特点是纯合作,每个玩家需要对其他玩家的意图进行推理,完成协作才能获得分数,Hanabi 的玩家数可以是 2-5 个,图 3 是 4 个玩家的任务示意图,感兴趣的读者可以自己尝试玩一下。

图 3:4 个玩家的 Hanabi-Full 任务示意图

实验结果

首先来看一下论文给出的实验结果,特别注意,论文所有的实验都在一台主机中完成,该主机的配置是 256 GB 内存, 一块 64 核 CPU 和一块 GeForce RTX 3090 24GB 显卡。另外,研究者表示,本文的所有的算法都进行了微调(fine-tune),所以本文中的复现的某些实验结果会优于原论文。

(1)MPE 环境

图 4 展示了在 MPE 中不同算法的数据样本效率和算法运行效率对比,其中 IPPO(Independent PPO)表示的是 critic 学习一个分布式的价值函数(decentralized value function),即 critic 与 actor 的输入均为局部观测,IPPO 和 MAPPO 超参保持一致;MADDPG[5]是 MARL 领域十分流行的 off-policy 算法,也是针对 MPE 开发的一个算法,QMix[6]是针对 StarCraftII 开发的 MARL 算法,也是 StarCraftII 中的常用 baseline。

从图 4 可以看出与其他算法相比,MAPPO 不仅具有相当的数据样本效率和性能表现(performance)(图(a)),同时还具有显著高的算法运行效率(图(b))。

图 4:在 MPE 中不同算法的数据样本效率和算法运行效率对比

(2)StarCraftII 环境

表 1 展示了 MAPPO 与 IPPO,QMix 以及针对 StarCraftII 的开发的 SOTA 算法 RODE 的胜率对比,在截断至 10M 数据的情况下,MAPPO 在 19/23 个地图的胜率都达到了 SOTA,除了 3s5z vs. 3s6z,其他地图与 SOTA 算法的差距小于 5%,而 3s5z vs. 3s6z 在截断至 10M 时并未完全收敛,如果截断至 25M,则可以达到 91% 的胜率。

图 5 表示在 StarCraftII 中不同算法的数据样本效率和算法运行效率对比。可以看出 MAPPO 实际上与 QMix 和 RODE 具有相当的数据样本效率,以及更快的算法运行效率。由于在实际训练 StarCraftII 任务的时候仅采用 8 个并行环境,而在 MPE 任务中采用了 128 个并行环境,所以图 5 的算法运行效率没有图 4 差距那么大,但是即便如此,依然可以看出 MAPPO 惊人的性能表现和运行效率。

表 1:不同算法在 StarCraftII 的 23 个地图中的胜率对比,其中 cut 标记表示将 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 实现建议依然很有用,例如 input normalization,value clip,max gradient norm clip,orthogonal initialization,GAE normalization 等。但是除此之外,研究者额外给出了针对 MARL 领域以及其他易被忽视的因素的 5 条建议。

Value normalization: 研究者采用 PopArt 对 value 进行 normalization,并且指出使用 PopArt 有益无害。

Agent Specific Global State: 采用 agent-specific 的全局信息,避免全局信息遗漏以及维度过高。值得一提的是,研究者发现 StarCraftII 中原有的全局信息存在信息遗漏,甚至其所包含的信息少于 agent 的局部观测,这也是直接将 MAPPO 应用在 StarCraftII 中性能表现不佳的重要原因。

Training Data Usage: 简单任务中推荐使用 15 training epochs,而对于较难的任务,尝试 10 或者 5 training epochs。除此之外,尽量使用一整份的训练数据,而不要切成很多小份(mini-batch)训练。

Action Masking: 在多智能体任务中经常出现 agent 无法执行某些 action 的情况,建议无论前向执行还是反向传播时,都应将这些无效动作屏蔽掉,使其不参与动作概率计算。

Death Masking: 在多智能体任务中,也经常会出现某个 agent 或者某些 agents 中途死掉的情况(例如 StarCraftII)。当 agent 死亡后,仅保留其 agent id,将其他信息屏蔽能够学得更加准确的状态价值函数。

更多的实验细节和分析可以查看论文原文。

参考链接:

[1] Lowe, R., Wu, Y., Tamar, A., Harb, J., Abbeel, P., and Mor-datch, I. Multi-agent actor-critic for mixed cooperative-competitive environments.Neural Information Process-ing Systems (NIPS), 2017.

[2] M. Samvelyan, T. Rashid, C. Schroeder de Witt, G. Farquhar, N. Nardelli, T.G.J. Rudner, C.-M. Hung, P.H.S. Torr, J. Foerster, S. Whiteson. The StarCraft Multi-Agent Challenge, CoRR abs/1902.04043, 2019.

[3] Bard, N., Foerster, J. N., Chandar, S., Burch, N., Lanctot,M., Song, H. F., Parisotto, E., Dumoulin, V., Moitra, S.,Hughes, E., et al. The Hanabi challenge: A new frontierfor AI research.Artificial Intelligence, 280:103216, 2020.

[4] Schulman, J., Wolski, F., Dhariwal, P., Radford, A., andKlimov, O. Proximal policy optimization algorithms.CoRR, abs/1707.06347, 2017.

[5] Lowe, R., Wu, Y., Tamar, A., Harb, J., Abbeel, P., and Mor-datch, I. Multi-agent actor-critic for mixed cooperative-competitive environments.Neural Information Process-ing Systems (NIPS), 2017.

[6] Rashid, T., Samvelyan, M., Schroeder, C., Farquhar, G.,Foerster, J., and Whiteson, S. QMIX: Monotonic valuefunction factorisation for deep multi-agent reinforcementlearning. volume 80 ofProceedings of Machine LearningResearch, pp. 4295–4304. PMLR, 10–15 Jul 2018.

[7] Wang, T., Gupta, T., Mahajan, A., Peng, B., Whiteson, S.,and Zhang, C. RODE: Learning roles to decompose multi-agent tasks. InInternational Conference on LearningRepresentations, 2021.

[8] Espeholt, L., Soyer, H., Munos, R., Simonyan, K., Mnih, V., Ward, T., Doron, Y., Firoiu, V., Harley, T., Dunning,I., et al. Impala: Scalable distributed deep-rl with importance weighted actor-learner architectures. In International Conference on Machine Learning, pp. 1407–1416, 2018.

[9] Hu, H. and Foerster, J. N. Simplified action decoder for deep multi-agent reinforcement learning. In International Conference on Learning Representations, 2020.

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码