我正处于强化学习环境中,我的环境动作空间取决于状态。因此,在采样行为操作时,我会执行以下过程:
(1)生成所有可能行动的概率记录
(2)计算这些logits的softmax
(3)屏蔽在此状态下无效的动作(通过乘以0和1的向量),这会将某些概率归零
(4)重新规范有效动作概率
(5)来自此分布的样本
这非常适合生成动作。但是,当我需要计算策略梯度更新时,我遇到了问题。通常会做以下事情:
tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=A)
其中logits是概率logits,A是采样的操作。但是,由于我在执行softmax之后进行了掩码/重新规范化,因此上面的代码片段在我的情况下不是正确的交叉熵。我想知道是否有一种优雅的方式来处理这种情况。我的理解是应该总是使用张量流的交叉熵计算来保证数值稳定性,但是我不确定如何正确地结合这种掩蔽/重整化。