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