强化学习中的负奖励

Negative reward in reinforcement learning

我无法回答这个问题:负面奖励究竟如何帮助机器避免它们?

问题的来源来自google's solution for game Pong。按照他们的逻辑,一旦游戏结束(智能体赢了或输了分),环境 return 的奖励(+1 或 -1)。任何中间状态 return 0 作为奖励。这意味着每个 win/loose 将 return 或者 [0,0,0,...,0,1] 或者 [0,0,0,...,0,-1] 奖励数组。然后他们对奖励进行折扣和标准化:

#rwd - array with rewards (ex. [0,0,0,0,0,0,1]), args.gamma is 0.99
prwd = discount_rewards(rwd, args.gamma)
prwd -= np.mean(prwd)
prwd /= np.std(prwd)

discount_rewards假设是某种标准函数,impl可以是found here。 win (+1) 的结果可能是这样的:

[-1.487 , -0.999, -0.507, -0.010,  0.492, 0.999, 1.512]

松散 (-1):

[1.487 , 0.999, 0.507, 0.010,  -0.492, -0.999, -1.512]

因此,每一步都会得到奖励。他们的损失函数如下所示:

loss = tf.reduce_sum(processed_rewards * cross_entropies + move_cost)

请帮我回答下一个问题:

  1. 交叉熵函数可以产生从 0 -> inf 的输出。对吧?
  2. Tensorflow 优化器通过绝对值最小化损失(不关心符号,完美损失始终为 0)。对吧?
  3. 如果陈述 2 是正确的,那么损失 7.234 与 -7.234 一样糟糕。对吧?
  4. 如果上面的一切都是正确的,那么负奖励如何告诉机器它不好,而正奖励告诉机器它好呢?

我也 ,但是我仍然没有弄明白 为什么消极比积极更糟糕。对我来说更有意义的是:

loss = tf.reduce_sum(tf.pow(cross_entropies, reward))

但是那个实验并不顺利。

"Tensorflow optimizer minimize loss by absolute value (doesn't care about sign, perfect loss is always 0). Right?"

错了。最小化损失意味着尝试获得尽可能小的值。也就是说,-100 比 0 "better"。因此,-7.2 优于 7.2。因此,0 值实际上没有任何特殊意义,除了许多损失函数被设置为 0 决定 "optimal" 值这一事实之外。但是,这些损失函数通常设置为非负值,因此不会出现正值与负值的问题。例如交叉熵、平方误差等

  1. 交叉熵函数可以产生从 0 -> inf 的输出。对吗?

是的,只是因为我们将它乘以 -1。考虑 log(p) 的自然符号。由于 p 是概率(即介于 0 和 1 之间),log(p) 的范围为 (-inf, 0).

  1. Tensorflow 优化器通过绝对值最小化损失(不关心符号,完美损失始终为 0)。对吗?

不,标志很重要。它总结了所有符号完整的损失。

  1. 如果陈述 2 是正确的,那么损失 7.234 与 -7.234 一样糟糕。对吗?

见下文,损失7.234比损失-7.234在增加奖励方面要好得多。整体正损失表明我们的智能体正在做出一系列正确的决定。

  1. 如果上面的一切都是正确的,那么负奖励如何告诉机器它不好,而正奖励告诉机器它好呢?

指出了一个很好的观点,即签名奖励用于控制梯度的大小。正/负奖励对梯度大小执行 "balancing" 操作。这是因为来自大损失的巨大梯度会导致权重发生巨大变化。因此,如果您的智能体犯的错误与正确移动的错误一样多,那么该批次的整体更新应该不会很大。