【问题标题】:How does one implement action masking?如何实现动作屏蔽?
【发布时间】:2016-11-27 10:29:04
【问题描述】:

Actor Mimic 论文讨论了实施动作掩蔽程序。我引用

在玩某个游戏时,我们 屏蔽掉对该游戏无效的 AMN 动作输出,并仅对有效动作的子集采用 softmax

有没有人知道如何在 Tensorflow 中实现这种动作屏蔽?具体来说,如何仅对指定的动作子集采用 softmax?

【问题讨论】:

    标签: tensorflow multitasking reinforcement-learning


    【解决方案1】:

    您应该依赖内置的 softmax 函数。即,您应该首先使用 boolean_mask 屏蔽张量中的无效操作,然后应用 softmax 函数。

    chasep255提供的解决方案存在数值问题。)

    【讨论】:

      【解决方案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,这样您就永远不能除以零。

      【讨论】:

      • 使用此解决方案,您会引入数值不稳定性。 TensorFlow 明确不鼓励用户使用此类结构。
      • 如果他们关心极高的精度,也可以尝试(tf.exp(actions) * is_valid) / (tf.reduce_sum(tf.exp(actions) * is_valid) + (1 - is_valid))。这样,epsilon 就不会模糊您感兴趣的值。
      猜你喜欢
      • 1970-01-01
      • 2013-12-04
      • 2021-11-28
      • 2014-09-04
      • 1970-01-01
      • 2011-03-04
      • 2011-08-11
      • 2017-07-02
      • 2012-08-18
      相关资源
      最近更新 更多