强化学习中的负奖励

时间:2019-02-19 05:05:29

标签: python tensorflow machine-learning reinforcement-learning pong

我无法回答以下问题:负面奖励到底是如何帮助机器避免奖励的?

问题的来源来自google's solution for game 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可以是found here。获胜(+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. 如果以上所有内容都是正确的,那么负奖励如何告诉机器不好,而积极奖励则告诉机器好的呢?

我也read this answer,但是我仍然没有设法确切地解释为什么消极劣于积极的想法。像这样对我来说更有意义:

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

但是那个实验进行得不好。

2 个答案:

答案 0 :(得分:2)

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

Normalizing Rewards to Generate Returns in reinforcement learning很好的一点是,签名的奖励在那里可以控制渐变的大小。正/负奖励为渐变大小执行“平衡”操作。这是因为来自较大损失的巨大梯度将导致权重发生较大变化。因此,如果您的代理人犯下的错误与执行正确举动一样多,那么该批次的总体更新就不会太大。

答案 1 :(得分:1)

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

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