policy - 无效操作的策略梯度 (REINFORCE)
问题描述
目前我正在尝试为游戏实现 REINFORCE 策略梯度方法(使用神经网络)。现在很明显,有些动作在某些状态下是无效的(如果你没有火箭发射器就不能发射火箭发射器!)。
我试图掩盖 softmax 输出(动作概率),以便仅是来自有效动作的样本。这工作正常(或者看起来如此),但是经过几次训练迭代后,不再选择这些动作(对于某些输入组合,这些节点的所有输出都变为 0)。有趣的是,在这些情况下,某些动作节点(无效动作)似乎给出了 1(100% 概率)。
这导致了一个巨大的问题,因为我将不得不随机选择要执行的动作,这显然效果不佳。有没有其他方法来处理这个问题?
PS我通过将“标签”设置为具有折扣奖励值的所选动作节点来更新网络,而其余动作为0,然后在Keras中执行categorical_crossentropy。
解决方案
我最终使用了 2 种不同的方法,但它们都遵循应用无效动作掩码的方法。
一种是在从策略梯度中获得 softmax 值后使用掩码,然后对剩余动作的概率进行归一化并从中采样。
第二种方法是在logit层之后应用mask,这样更简单,似乎效果更好(虽然我没有做任何量化的测量来证明这一点)。
推荐阅读
- r - R转换嵌套的for循环_嵌套的并行foreach不起作用
- ruby-on-rails - 如何在 gem CombinePDF 中使用 UTF-8 字体?
- terragrunt - 无法通过 githubaction 工作流程初始化 terraform
- asp.net-mvc - 将用户分配给特定团队
- python - 如何在 VSCode Ipython 中设置 cwd?
- arrays - 如何从数组中输出无限循环/变量?Javascript 或 Python
- url - XPATH - 多个 URL
- php - 使用 PHP 对具有不同结构的不同表中的数据进行排序
- visual-studio-2019 - VS2019 中 nmake 的位置不是通用的。还是我错过了什么?
- python - 如何在 Django 自定义视图中显示多个模型的子集,其 UI 与其他模型相同?