强化学习原理与应用作业三
目录
- 0. 说明
- 1. MATD3 for simple spread
- 1.1 gumbel-softmax重参数技巧
- 1.2 熵正则化
- 1.3 细节及展示
- 2. VDN for simple spread
- 2.1 VDN思想
- 2.2 细节及展示
- 3. QMIX for simple spread
- 3.1 从VDN到QMIX
- 3.2 细节
- 3.3 全局状态分析
- 4. 总结
0. 说明
不同算法分别建立单独的.py文件 (例如MATD3_simple_spread.py
、VDN_simple_spread.py
、QMIX_simple_spread.py
等) 编写实现,算法参数均在代码中体现。
每个算法的训练数据见result文件下相应的.log
文件和.pkl
文件,例如MATD3.log
、MATD3.pkl
。学习曲线在learning_curves/png
目录下。
所有随机种子均已固定,在本机上可以复现。
所有代码已设置为测试模式,即载入训练的模型进行测试,所有路径为相对路径可以直接运行。
1. MATD3 for simple spread
1.1 gumbel-softmax重参数技巧
MADDPG是确定性策略梯度算法,输出的是确定性动作,针对离散型的动作(例如MPE环境),DDPG本应用uθ(s)=argmaxaA(s,a)u_\theta(s)=\underset{a}{argmax}\;A(s,a)uθ(s)=aargmaxA(s,a)作为其确定性策略来输出一个确定性的离散动作,但argmaxargmaxargmax操作将使Actor网络的参数θ\thetaθ梯度中断,进而导致后续无法用梯度上升的方法由Q(s,uθ(s))Q(s, u_\theta(s))Q(s,uθ(s))来更新Actor网络。
解决方法:使用gumbel-softmax
代替argmax
,通过调低温度系数τ\tauτ(代码中设置为0.5)使其逼近argmax。
1.2 熵正则化
通过阅读MADDPG源码,得知actor的更新使用了熵正则化技巧。区别与SAC的最大化熵学习,MADDPG的熵只是作为一个正则项加在loss上,而SAC显式地在优化目标中使用熵,并学习一个自动调节的温度系数α\alphaα。
MADDPG源码部分如下,看到最终loss除了基本的梯度上升最大化Q值,还包括了熵正则项,系数为1e-3。实验中该部分的设置与MADDPG源码一致。
使用熵正则化技巧可以让策略更鲁棒。对比实验结果具体见下图。
1.3 细节及展示
MPE的simple spread环境中,所有智能体的观测空间、动作空间以及功能完全一致,属于同构智能体,故所有智能体可以共享参数,进而减缓惰性智能体lazy agent的出现。
与作业2一致,这里的MADDPG使用其改进版MATD3实现。即使用探索噪声和策略噪声、使用Twin网络、延迟更新Actor网络和目标网络。
具体实现中设置一个episode后更新n次,而不是一个step更新一次,具体地设置n=1,即一个episode后更新一次网络参数。尽管n取2或者更大可能会带来更好的收敛效果,但这里没有进行繁琐的参数尝试和调试。
使用熵正则项和不使用熵正则项的收敛值分别为-4.7、-4.8,学习曲线如下,具体数值见相应的MATD3.log
文件。
可以发现使用熵正则化后效果稍优,而且可以清晰地看到,在训练后期会更加稳定。
2. VDN for simple spread
2.1 VDN思想
VDN的思想是用各合作智能体自己的局部Q值之和,来近似团队的Q值,并基于团队Q值的TD error来更新参数。由于团队Q值QtotQ_{tot}Qtot来自各智能体的Q值QaQ_aQa,故TD error反向传播会分散到各个智能体的Q网络,体现出值分解Value Decomposition。
2.2 细节及展示
实现中使用DRQN代替DQN,希望使用循环神经网络(具体为GRU)结合过往的观测及动作信息 (具体实现为隐藏状态+上一时刻的动作),缓解局部观测带来的局限性,进而使输出的Q值更加准确。
由于每个timestep的动作不仅与当前的局部观测有关,还与上一时刻的动作以RNN的隐藏状态相关,因此就不能以timestep为单位从经验池随机抽取经验进行学习。所以这里以episode为单位存储经验,训练时从经验池一次随机采样多个episode进行学习。与Double DQN的思想类似,为减缓高估,计算下一时刻的Q值时,用maxa′Qtarget(s′,a′)\underset{a'}{max}\,Q_{target}(s', a')a′maxQtarget(s′,a′)代替maxa′Q(s′,a′)\underset{a'}{max}\,Q(s', a')a′maxQ(s′,a′),即单个智能体自己的局部Q值计算方式为target_q=r+γ∗(1−mask)∗Qtarget(s′,argmaxa′Q(s′,a′))target\_q = r + \gamma*(1-mask) *Q_{target}(s',\underset{a'}{arg\,max} \,Q(s',a'))target_q=r+γ∗(1−mask)∗Qtarget(s′,a′argmaxQ(s′,a′))
ϵ−greedy\epsilon-greedyϵ−greedy设值起始最大值为0.9,终止最小值为0.01,且在前total_episodes/5total\_episodes/5total_episodes/5 回合内由起始最大值指数递减为终止最小值,然后保持最小值不变。
同质智能体间使用共享参数,进而减缓惰性智能体lazy agent的出现。
实现中设置一个episode后更新n次,而不是一个step更新一次,具体地设置n=1,即一个episode后更新一次网络参数。
学习曲线如下,收敛在-5.2左右,具体数值见VDN.log
。
3. QMIX for simple spread
3.1 从VDN到QMIX
基于价值的MARL算法的基本假定是IGM (Individual Global Max)条件,即整体Q值QtotQ_{tot}Qtot最大时对应的联合动作为各智能体局部Q值QaQ_aQa最大时对应的动作。
VDN为了满足IGM条件,直接简单地将QtotQ_{tot}Qtot分解为各QaQ_aQa的加和形式,此时∂QtotQa=1\frac{\partial Q_{tot}}{Q_a} =1Qa∂Qtot=1。
QMIX对VDN作出改进,针对如何分解QtotQ_{tot}Qtot这一点,提出了更一般化的单调性条件,即只要求∂QtotQa≥0\frac{\partial Q_{tot}}{Q_a} \geq 0Qa∂Qtot≥0即可,具体代码实现时将分解系数www设置为非负。
3.2 细节
使用的技巧与上述VDN中2.1节完全一致,即用DRQN代替DQN,Double DQN减缓Q值高估,ϵ−greedy\epsilon-greedyϵ−greedy的设置、参数共享等。它们在VDN部分已经介绍,这里不再展开。
3.3 全局状态分析
全局状态s的获取,通常有两种做法,使用环境接口提供的全局状态,或者拼接concate各个智能体的局部观测作为全局状态。
此外,MAPPO论文中还介绍了Agent-Specific Global State (AS)
,即拼接环境提供的全局状态和各智能体的局部观测。显然AS会造成输入维度过高,因为存在重复冗余的信息。为此,MAPPO还提出了Feature-Pruned Agent-Specific Global State (FP)
,即在AS基础上去除重复的特征。
由于simple spread场景 (包括整个MPE环境) 没有提供全局状态,故MAPPO中的AS
及FP
方法没法使用。
关于全局状态,这里做了三种定义:
- 拼接各智能体的局部观测作为全局状态,其
dim_state=dim_obs∗num_agentsdim\_state=dim\_obs*num\_agentsdim_state=dim_obs∗num_agents; - 拼接各智能体的局部观测和上一时刻的动作作为全局状态,其
dim_state=(dim_obs+dim_action)∗num_agentsdim\_state=(dim\_obs+dim\_action)*num\_agentsdim_state=(dim_obs+dim_action)∗num_agents; - 拼接各智能体的局部观测、上一时刻的动作及RNN的隐藏状态作为全局状态,其
dim_state=(dim_obs+dim_action+dim_hidden_size)∗num_agentsdim\_state=(dim\_obs+dim\_action+dim\_hidden\_size)*num\_agentsdim_state=(dim_obs+dim_action+dim_hidden_size)∗num_agents。
由于作业要求QMIX算法对episodes总数不设限制,加之其本身网络结构比VDN更加复杂,这里又定义了三种全局状态用以对比实验,训练时间较久,调参实在不易,而且对算法思想的学习没有太大帮助,这里没有进行全面、细粒度的调参。
三类全局状态的对应的收敛曲线如下,最终的收敛值分别为-5.2、-5.3、-5.0,具体数值见相应的log文件。
可以看到,拼接各智能体的局部观测、上一时刻的动作及RNN的隐藏状态作为全局状态,这种情况下,效果最优(收敛值在-5.0之上)。
4. 总结
MADDPG、VDN、QMIX都采用了集中式训练、分散式执行 (CTDE) 的框架,即训练时用到了全局信息,包括全局状态 (或所有智能体的局部观测) 和全局动作,每个智能体决策时仅基于自己的局部观测。它们的区别在于:
VDN、QMIX是基于值分解的算法,是单智能体DQN算法在多智能体上的扩展。由于基于团队奖励,它们只能处理合作型的任务或环境,并且和DQN一样,它们没法直接处理连续性动作,因为没法穷举所有动作来选取使Q最大的动作,即argmaxaQ(s,a)\underset{a}{argmax}\,Q(s,a)aargmaxQ(s,a)。
MADDPG算法,属于Actor-Critic算法,Actor网络使用策略梯度的梯度上升方法训练,Critic使用TD error训练。每个智能体都有其自己的中心式的Critic网络 (同质智能体可以采用参数共享),专门对该智能体进行评价,而不是采用值分解的方式对整个团队评价,这一性质也使得MADDPG能够处理异质智能体间的竞争情形及混合情形,当然也能处理合作型的场景。
强化学习原理与应用作业三相关推荐
- 强化学习原理及应用作业之动态规划算法【SYSU_2023SpringRL】
强化学习原理及应用作业之动态规划算法[SYSU_2023SpringRL] 题目描述: 任务一:动态规划方法 一.策略迭代算法 1.代码 2.结果 3.思路讲解 策略评估 策略提升 二.价值迭代算法 ...
- 强化学习(十九) AlphaGo Zero强化学习原理
在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...
- 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理
转自:https://www.cnblogs.com/pinard/p/10609228.html 本篇主要参考了AlphaGo Zero的论文, AlphaGo Zero综述和AlphaGo Zer ...
- 独家 | 浅谈强化学习原理(附代码链接)
作者:Michel Kana 翻译:王琦 校对:王雨桐 本文约4900字,建议阅读15分钟. 本文介绍了强化学习的基本原理,并通过代码实例来讲解如何找到最优策略. Google在2017年年底发布了A ...
- 强化学习原理与python实现原理pdf_纯Python实现!Facebook发布PyTorch分布式强化学习库...
图灵TOPIA来源:Facebook编译:刘静图灵联邦编辑部出品Facebook于近日发布了PyTorch中用于强化学习(RL)研究的平台:TorchBeast.TorchBeast实现了流行的IMP ...
- 图解强化学习 原理 超详解 (一)
强化学习 一.背景 机器学习是人工智能的一个分支,在近30多年已发展为一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.计算复杂性理论等的学科.强化学习(RL)作为机器学习的一个子领域,其灵感来 ...
- 【强化学习论文合集】三十三.2021国际人工智能联合会议论文(IJCAI2021)
欢迎订阅本专栏:<强化学习论文合集> 专栏介绍: 本专栏整理了2017~2022年(后面会持续更新)强化学习领域国际顶级会议已录用的论文,会议包括但不限于:ICML.NeurIPS.AAA ...
- 【强化学习论文合集】三十五.2021神经信息处理系统大会论文(NIPS2021)
欢迎订阅本专栏:<强化学习论文合集> 专栏介绍: 本专栏整理了2017~2022年(后面会持续更新)强化学习领域国际顶级会议已录用的论文,会议包括但不限于:ICML.NeurIPS.AAA ...
- 【强化学习论文合集】三十四.2021机器人与自动化国际会议论文(ICRA2021)
欢迎订阅本专栏:<强化学习论文合集> 专栏介绍: 本专栏整理了2017~2022年(后面会持续更新)强化学习领域国际顶级会议已录用的论文,会议包括但不限于:ICML.NeurIPS.AAA ...
最新文章
- 洛谷 P1142 轰炸
- 数据库对象 同义词 索引 序列 视图
- WindowsPhone7入手,实在的照片
- 方差分析中怎么看有无显著性影响_用R语言做单因素方差分析及多重比较
- stm32 bootloader跳转
- hibernate底层dao
- MemCache 分布式缓存
- 字节内部前端开发手册(完整版)开放下载!
- openshift k8s_带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8
- 书摘:刘润《5分钟商学院》之“结果偏见”
- 「写论文」“常用关联词”汇总
- Jupyter 安装与应用
- 3dsmax2014安装激活之 “软件许可证检出失败 错误20”或者显示错误5。
- 阿里云轻量应用服务器部署Node.js+React+MongoDB前后端分离项目
- 【webservice】Two classes have the same XML type name(转)
- Python学习记录-项目案例实现:爬虫篇 02
- 当 BBR 面对时延抖动
- Linux查看服务器的cpu和内存的硬件信息
- 徐州当铺模型,乡村金融中心的建立
- 2022年第3周(1月10日-1月16日)中国各影院电影票房排行榜:榜首票房83万元,8家影院观影人次超过万人(附年榜TOP100详单)