在有了上一节一些有关PPO算法的概念作为基础后,我们就可以正式开始对于MAPPO这一算法的学习。

那么,既然要学习一个算法,就不得不去阅读提出这一算法的论文。那么本篇博客将从MAPPO的论文出发,对MAPPO这一算法进行一定的介绍。

论文的地址在这里:https://arxiv.org/pdf/2103.01955.pdf

同时,作者也在github上公布了源码:https://github.com/marlbenchmark/on-policy

但我个人更推荐这个轻量级的MAPPO,因为它的环境更简单,更容易理解:

https://github.com/tinyzqh/light_mappo

1.MAPPO论文

首先看论文的摘要部分,作者在摘要中说,PPO作为一个常见的在线强化学习算法,在许多任务中都取得了极为优异的表现。但是,当我们面对一个多智能体环境时,在线策略的表现往往不如某些离线策略,造成这种结果的原因很多,首先,就像我们上一节提到的,PPO由于是在线策略,即使是使用了另外一个不同的网络来收集数据,但它的网络依旧是在不断更新的,因此数据利用率较低,尤其是在多智能体环境中;另一方面,PPO的一些调参技巧在多智能体环境中也可能并不适用。

为了解决PPO在多智能体环境中遇到的种种问题,作者在PPO的基础上增加了智能体与智能体之间的信息交互,从而提出了MAPPO这一概念,并且作者还将MAPPO与VQN、QMIX等算法进行了对比(在文章中,作者主要使用了星际争霸、Hanabi-Full、multi-agent particle world environments (MPE)与Google Research Football (GRF)这几个不同的环境,有关这几个环境的简单介绍,可以参考:https://blog.51cto.com/u_15485092/5037000# ),当然,从论文的结果看,不出意外的,MAPPO在这几个测试环境中都取得了较为优异的表现。

值得一提的是,文章中作者并没有对MAPPO的整个结构,包括MAPPO的理论进行过多的介绍,于是我们只能够从代码中获取与MAPPO结构有关的信息,这一块很有可能放到下一节代码梳理中进行详细的说明(如果有下一节的话)

这篇论文的第二个部分就是作者对于MAPPO在上述提到的几个环境下结果的展示,我们这里以SMAC的结果为例:

上面这张表格是几个多智能体算法在SMAC环境中的表现,第一列的Map代表该环境中的地图,每一张地图上的地形、兵种配置各不相同,表格中的数字则代表着该算法在目前这张地图中的胜率,从表格中我们不难看出,如果实验结果正确,那么MAPPO的表现是超过IPPO与QMIX的(这里补充说明一下IPPO,IPPO中的"I"代表着independent,意为多个独立的,无信息交互的PPO智能体,将这几个智能体放在同一个环境中进行实验,并将实验结果汇总,就是IPPO的结果)

此外,我们还留意到,即使是同样使用MAPPO算法,后面也有一个小括号(FP)与(AS),它代表着信息输入的几种不同的形式,这个会在之后的部分做介绍。

上面是MAPPO与其它算法在SMAC(星际争霸)环境中的表现对比。除了这个环节之外,作者还在其它的环境中进行了测试,这里附上结果,并不对所有的结果进行详细的说明。

Hanabi的实验结果:

GRF的实验结果:

论文的的第三部分,也是最重要的一个部分,在有了这些实验结果后,接下来作者列出了几个会对实验结果产生较大影响的因素,包括值标准化、值函数的输入表示、训练数据的使用、PPO裁剪、Batchsize,在下面一个部分将会对这些因素进行一一介绍。

1.2. 实验影响因素分析

1. 值标准化

由于在训练过程中,目标值是在不断变化的,因此整个值函数的学习过程是不稳定的,为了应对这一点,作者对value进行了移动移动标准化,当计算GAE时,再将value反标准化,作者发现这样就可以提升MAPPO的效果。

2.值函数的输入形式

当我们将信息输入值函数时,首先要解决的一个问题就是:输入什么样的信息。在论文中,作者给出了以下几种信息输入的形式:



我们先假设存在这样一个环境,在这个环境中,我们把智能体分为两队,那么对于每一个智能体而言,就会存在多个“队友”与“对手”,并且每一队智能体都存在着一个“中心”。

那么上图中的第一种输入形式IND,就是所有智能体的信息的concatenate,而上图中的第二种输入形式EP,就是所有队伍中心信息的concatenate,上图中的第三种输入形式AS,就是EPIND的concatenate,上图中的第四种输入形式FP,就是在AS的基础上去除了一些冗余的信息。

当然,这四种输入形式的表现在实验中自然会有许多区别,作者在实验环境中测试了这几种输入形式,并给出了数值分析结果,由于篇幅限制,这里还请各位读者自行阅读置顶链接中的原论文。但是结果具体如何,还是要依据实际情况做出实践再进行讨论(具体情况具体分析)。

3.训练数据的使用方式

PPO的一个重要机制就是重要性采样,这个重要性采样机制可以使我们重复地利用样本。那么接下来的问题是,我们该如何去使用这些样本。在PPO算法中,我们经常使用的就是将一个很大的batch分为32个,或者64个mini batch,,并且训练数十或者数百个epoch。但是在MAPPO中,作者发现,MAPPO的性能会随着数据重复使用的频率产生明显的下降,因此,作者进行研究时,对简单的任务使用了15个epoch,而较为复杂的任务则进行了10个或5个epoch (这里要注意强化学习中epoch、episode、time_step的区别)

4. PPO Clipping

在上一篇帖子中,我们提到了使用PPO_clipping来防止计算entropy以及重要性时产生过大的波动,作者在论文中也对最优的裁剪率ε进行了研究,并最终将ε设定为0.2。

以上就是MAPPO的作者在其论文中对一些机制进行的讨论,在下一篇博客中,我们将看一看MAPPO的代码,并从代码的角度加深理解。

MAPPO学习笔记(2) —— 从MAPPO论文入手的更多相关文章

  1. 树莓派学习笔记(5):成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 一.家庭服务器实现的主要功能 1.流媒体播放服务:利用DLNA实现电视.手机.电脑播放其上面 ...

  2. 深度学习笔记(七)SSD 论文阅读笔记简化

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  3. 深度学习笔记(七)SSD 论文阅读笔记

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  4. Lasso估计论文学习笔记(一)

    最近课程作业让阅读了这篇经典的论文,写篇学习笔记. 主要是对论文前半部分Lasso思想的理解,后面实验以及参数估计部分没有怎么写,中间有错误希望能提醒一下,新手原谅一下. 1.整体思路 作者提出了一种 ...

  5. 论文学习笔记 - 高光谱 和 LiDAR 融合分类合集

    A³CLNN: Spatial, Spectral and Multiscale Attention ConvLSTM Neural Network for Multisource Remote Se ...

  6. Apache Calcite 论文学习笔记

    特别声明:本文来源于掘金,"预留"发表的[Apache Calcite 论文学习笔记](https://juejin.im/post/5d2ed6a96fb9a07eea32a6f ...

  7. 2019国家集训队论文《整点计数》命题报告 学习笔记/Min25

    \(2019\)国家集训队论文<整点计数>命题报告 学习笔记/\(Min25\) 补了个大坑 看了看提交记录,发现\(hz\)的\(xdm\)早过了... 前置知识,\(HAOI\)< ...

  8. 2万字长文包教包会 JVM 内存结构 保姆级学习笔记

    写这篇的主要原因呢,就是为了能在简历上写个"熟悉JVM底层结构",另一个原因就是能让读我文章的大家也写上这句话,真是个助人为乐的帅小伙....嗯,不单单只是面向面试学习哈,更重要的 ...

  9. LevelDB学习笔记 (3): 长文解析memtable、跳表和内存池Arena

    LevelDB学习笔记 (3): 长文解析memtable.跳表和内存池Arena 1. MemTable的基本信息 我们前面说过leveldb的所有数据都会先写入memtable中,在leveldb ...

  10. CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

随机推荐

  1. C# 动态操作 控件位置绑定 [ Anchor ] 属性

    注: 1.此类属于非常用类,只因本人需要编写的...顺便刷贴一下 2.对于初学,其中的枚举使用可以为你加深一点印象 以下为操作类代码: public class AchCtrer { #region ...

  2. Think Python 学习笔记

    #!/usr/bin/env python# coding: utf-8# # Think Python 学习笔记# 1.关于异或计算符# In[2]:6^2# 2.关于函数# 注意:变量名称不能用数 ...

  3. element表格数据v-for替换期望文字

    后端返回等级编码 "1","2"....并给你一个字典obj[ {dicCode: "4", dictFlag: "riskLev ...

  4. Vscode 界面语言换成中文

    作为编译器,Visual Studio Code是非常多能化的,但是界面英文对于我这种菜鸟新手造成了很大的困扰. 所以切换成中文更方便. Ctrl+shift+x   在左侧出现"扩展&qu ...

  5. 给jui(dwz)的navTab换一套漂亮的图标

    上次讲了给jui(dwz)的菜单树换一套漂亮的图标,这次讲一下在点击菜单后,怎么把设置的漂亮图标带到navTab上去. 官方的navTab是这样显示的,除了默认的我的主页外,tab页上只有标题没有图标 ...

  6. Caused by: java.lang.NoSuchMethodError

    ERROR [localhost-startStop-1] - Context initialization failedorg.springframework.beans.factory.BeanD ...

  7. 关于Android开发工具的下载之ADT篇

    ADT的下载 首先可以选择下面推荐的两个网站去下载相应的安装包,网址如下: http://tools.android-studio.org/index.php/adt-bundle-plugin 或者 ...

  8. Spring--案例:测试业务层接口万次执行效率

    案例来袭 这样,并不能够分辨出哪个的效率是哪个 可以利用pjp进行这样的操作: 结果:

  9. RHEL系列邮箱配置mail.rc和s-nail.rc

    RHEL8 1.首先安装postfix和mailx dnf install postfix mailx -y 2.开启postfix服务开机运行 systemctl enable --now post ...

  10. 用户user退出登录

    /** * 用户退出登录 * @param request * @return */ @PostMapping("/loginout") public R<String> ...