Actor Mimic论文讨论了实施动作掩蔽程序。我引用
在玩特定游戏时,我们 屏蔽掉对该游戏无效的AMN动作输出,并将softmax仅用于有效动作的子集
有没有人知道如何在Tensorflow中实现此动作屏蔽?在具体情况下,如何仅在指定的动作子集上使用softmax?
答案 0 :(得分:2)
假设您有一个有效的状态张量,其中包含1和0。
is_valid = [1, 0, 1, ...]
然后你有一个动作张量,你想要将softmax取为那些有效的值。您可以执行以下操作。
(tf.exp(actions) * is_valid) / (tf.reduce_sum(tf.exp(actions) * is_valid) + epsilon)
在这种情况下,is_valid屏蔽了总和中的无效值。为了数值稳定性,我还会在分区中添加一个小epsilon,这样你就永远不能除以零。
答案 1 :(得分:1)
您应该依赖内置的softmax功能。即,您应首先使用boolean_mask屏蔽张量中的无效操作,然后应用softmax函数。
(chasep255提供的解决方案存在数字问题。)