MellowMax 是一个 softmax 运算符,可以在深度 Q 学习的上下文中代替 Max 使用。使用 Mellow Max 已被证明可以消除对目标网络的需求。论文链接:https://arxiv.org/abs/1612.05628
要估计目标 Q 值,您可以对下一个状态的 Q 值执行 mellow max。 mellow max 函数看起来像这样:
其中x是Q值的张量,w是温度参数。
我的实现是:
def mellow_max(q_values):
q_values = tf.cast(q_values, tf.float64)
powers = tf.multiply(q_values, DEEP_MELLOW_TEMPERATURE_VALUE)
summation_values = tf.math.exp(powers)
summation = tf.math.reduce_sum(summation_values, axis=1)
val_for_log = tf.multiply(summation,(1/NUM_ACTIONS))
numerator = tf.math.log(val_for_log)
mellow_val = tf.math.divide(numerator, DEEP_MELLOW_TEMPERATURE_VALUE).numpy()
return mellow_val
我的问题是,当使用 1000 的温度值“w”时,此函数的第三行返回值 +inf。我使用的温度值“w”为 1,000,因为这在上面显示为最佳申请 Atari Breakout 测试平台时的论文。
关于如何防止第三行干扰计算的任何建议,我们将不胜感激。也许,将函数的限制设置为“w”达到 1,000 会奏效。关于我如何在 tensorflow 中做到这一点有什么建议吗?