无效操作的策略梯度 (REINFORCE)
Policy Gradient (REINFORCE) for invalid actions
目前我正在尝试为游戏实现 REINFORCE 策略梯度方法(使用神经网络)。现在很明显,有些动作在某些状态下是无效的(没有火箭筒就不能发射!)。
我试图屏蔽 softmax 输出(动作概率),这样它只是来自有效动作的样本。这工作正常(或者看起来如此),但是经过几次训练迭代后,不再选择这些动作(对于某些输入组合,这些节点的所有输出都变为 0)。有趣的是,在这些情况下,某些动作节点(无效动作)似乎给出 1(100% 概率)。
这导致了一个大问题,因为我将不得不求助于随机选择要执行的操作,这显然效果不佳。还有其他方法可以解决这个问题吗?
P.S。我通过将 "label" 设置为具有折扣奖励值的选定动作节点来更新网络,而其余动作为 0,然后在 Keras 中执行 categorical_crossentropy。
我最终使用了 2 种不同的方法,但它们都遵循应用无效动作掩码的方法。
一种是在从策略梯度中获得softmax值后使用掩码,然后将剩余动作的概率归一化并从中采样。
第二种方法是在logit层之后应用mask,这种方法更简单,而且效果似乎更好(虽然我没有做任何量化测量来证明这一点)。
目前我正在尝试为游戏实现 REINFORCE 策略梯度方法(使用神经网络)。现在很明显,有些动作在某些状态下是无效的(没有火箭筒就不能发射!)。
我试图屏蔽 softmax 输出(动作概率),这样它只是来自有效动作的样本。这工作正常(或者看起来如此),但是经过几次训练迭代后,不再选择这些动作(对于某些输入组合,这些节点的所有输出都变为 0)。有趣的是,在这些情况下,某些动作节点(无效动作)似乎给出 1(100% 概率)。
这导致了一个大问题,因为我将不得不求助于随机选择要执行的操作,这显然效果不佳。还有其他方法可以解决这个问题吗?
P.S。我通过将 "label" 设置为具有折扣奖励值的选定动作节点来更新网络,而其余动作为 0,然后在 Keras 中执行 categorical_crossentropy。
我最终使用了 2 种不同的方法,但它们都遵循应用无效动作掩码的方法。
一种是在从策略梯度中获得softmax值后使用掩码,然后将剩余动作的概率归一化并从中采样。
第二种方法是在logit层之后应用mask,这种方法更简单,而且效果似乎更好(虽然我没有做任何量化测量来证明这一点)。