带有action mask动作掩码的PPO算法(附代码实现)

Actor神经网络输出的动作概率是全部动作的概率,而在应用PPO算法解决实际问题的时候,经常会遇到动作action受到限制的情形,也就是部分动作action是合理的,智能体动作采样select_action的时候也就只能从那些合理的动作action集合中采样。

常见的解决方案有两种,一种是给非法动作action增加惩罚奖励,另一种是动作掩码action mask。动作掩码action mask的基本想法是,给actor神经网络输出的动作概率加上一层掩码,合法动作的掩码是1意味着输出对应的动作概率, 非法动作的掩码是0意味着不输出对应的动作概率。

下面逐渐介绍动作掩码action mask原理以及在PPO算法上的实现,以截取几份讲解中肯的参考资料关键部分的形式进行介绍~

一般而言,动作掩码action mask方法相比于方法一训练时给非法action增加penalty的做法,效果要好很多(参考资料:DRL算法落地笔记 - 知乎 https://zhuanlan.zhihu.com/p/412520739)
在这里插入图片描述

动作掩码action mask原理讲解

强化学习中无效动作应该如何屏蔽(mask)处理? - 知乎 https://zhuanlan.zhihu.com/p/538953546
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

PPO算法使用动作掩码action mask的方法

以离散动作的PPO算法为例,Actor网络输出仍然是全部动作的动作概率,有两处需要增加动作掩码action mask,一处是选择动作select action采样时候,另一处是训练actor网络,经常容易忘记的是第二处训练actor网络的时候也是同样要带上采样时的action mask(参考资料:腾讯人工智能绝悟的action mask是什么意思? - 知乎 https://www.zhihu.com/question/446176024#)
在这里插入图片描述

动作掩码action mask代码实现

最初,我在实现动作掩码action mask的时候,是这样操作的:采样时logits层非法action对应位置换成一个绝对值很大的负数,再经过softmax函数以后非法动作的概率就变成0(参考资料:Softmax如何进行mask操作 - 知乎 https://zhuanlan.zhihu.com/p/543736799)。它会遇到报错:神经网络输出nan。一般来说,神经网络输出nan大概是因为梯度更新时除数遇到0、log函数遇到0的原因。

解决方法是不使用手工的softmax函数,采用torch.distributions.Categorical自带函数库(参考资料:PPO 实践指南 - 知乎 https://zhuanlan.zhihu.com/p/627389144)

参考资料

特别感谢以上参考资料博主的真诚分享!!!

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值