首页 > 解决方案 > 强化学习中的负回报

问题描述

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

问题的起源来自谷歌对游戏 Pong 的解决方案。按照他们的逻辑,一旦游戏结束(代理赢或输点),环境就会返回奖励(+1 或 -1)。任何中间状态都返回 0 作为奖励。这意味着每次赢/输都将返回 [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 可以在这里找到。获胜(+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))

但那个实验并不顺利。

标签: pythontensorflowmachine-learningreinforcement-learningpong

解决方案


  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. 如果以上所有内容都是正确的,那么负奖励如何告诉机器它是坏的,而正奖励如何告诉机器它是好的?

在强化学习中将奖励归一化以产生回报提出了一个很好的观点,即签名奖励用于控制梯度的大小。正/负奖励对梯度大小执行“平衡”行为。这是因为大损失产生的大梯度会导致权重发生大的变化。因此,如果您的代理犯了与正确移动一样多的错误,那么该批次的整体更新不应该很大。


推荐阅读