无效操作的策略梯度 (REINFORCE)

Posted

技术标签:

【中文标题】无效操作的策略梯度 (REINFORCE)【英文标题】:Policy Gradient (REINFORCE) for invalid actions 【发布时间】:2018-06-18 08:43:33 【问题描述】:

目前我正在尝试为游戏实施 REINFORCE 策略梯度方法(使用神经网络)。现在很明显,有些动作在某些状态下是无效的(如果你没有火箭发射器就不能发射火箭发射器!)。

我试图掩盖 softmax 输出(动作概率),以便仅是来自有效动作的样本。这工作正常(或者看起来如此),但是经过几次训练迭代后,不再选择这些动作(对于某些输入组合,这些节点的所有输出都变为 0)。有趣的是,在这些情况下,某些动作节点(无效动作)似乎给出了 1(100% 概率)。

这导致了一个巨大的问题,因为我将不得不随机选择要执行的操作,这显然效果不佳。有没有其他方法可以解决这个问题?

附:我通过将“标签”设置为具有折扣奖励值的所选动作节点来更新网络,而其余动作为 0,然后在 Keras 中执行 categorical_crossentropy。

【问题讨论】:

【参考方案1】:

我最终使用了 2 种不同的方法,但它们都遵循应用无效动作掩码的方法。

一种是在从策略梯度中获得softmax值后使用掩码,然后对剩余动作的概率进行归一化并从中采样。

第二种方法是在logit层之后应用mask,更简单,似乎效果更好(虽然我没有做任何量化的测量来证明这一点)。

【讨论】:

第二种方法与您在问题部分中使用的方法相同吗?问题解决了吗?

以上是关于无效操作的策略梯度 (REINFORCE)的主要内容,如果未能解决你的问题,请参考以下文章

深度强化学习-策略梯度算法深入理解

策略梯度训练cartpole小游戏

强化学习 | 策略梯度 | Natural PG | TRPO | PPO

POMO: Policy Optimization with Multiple Optima for Reinforcement Learning学习笔记

强化学习(David Silver)7:策略梯度算法

基于Pytorch的强化学习(DQN)之REINFORCE VS A2C