【发布时间】:2016-11-27 10:29:04
【问题描述】:
Actor Mimic 论文讨论了实施动作掩蔽程序。我引用
在玩某个游戏时,我们 屏蔽掉对该游戏无效的 AMN 动作输出,并仅对有效动作的子集采用 softmax
有没有人知道如何在 Tensorflow 中实现这种动作屏蔽?具体来说,如何仅对指定的动作子集采用 softmax?
【问题讨论】:
标签: tensorflow multitasking reinforcement-learning
Actor Mimic 论文讨论了实施动作掩蔽程序。我引用
在玩某个游戏时,我们 屏蔽掉对该游戏无效的 AMN 动作输出,并仅对有效动作的子集采用 softmax
有没有人知道如何在 Tensorflow 中实现这种动作屏蔽?具体来说,如何仅对指定的动作子集采用 softmax?
【问题讨论】:
标签: tensorflow multitasking reinforcement-learning
您应该依赖内置的 softmax 函数。即,您应该首先使用 boolean_mask 屏蔽张量中的无效操作,然后应用 softmax 函数。
(chasep255提供的解决方案存在数值问题。)
【讨论】:
假设您有一个包含 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,这样您就永远不能除以零。
【讨论】:
(tf.exp(actions) * is_valid) / (tf.reduce_sum(tf.exp(actions) * is_valid) + (1 - is_valid))。这样,epsilon 就不会模糊您感兴趣的值。