我无法回答以下问题:负面奖励到底是如何帮助机器避免奖励的?
问题的来源来自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)
请帮我回答下一个问题:
我也read this answer,但是我仍然没有设法确切地解释为什么消极劣于积极的想法。像这样对我来说更有意义:
loss = tf.reduce_sum(tf.pow(cross_entropies, reward))
但是那个实验进行得不好。
答案 0 :(得分:2)
是的,只是因为我们将其乘以-1。思考log(p)的自然符号。由于p是概率(即介于0和1之间),因此log(p)的范围是(-inf,0]。
不,标志很重要。它对所有损失进行了总结,并保留了完整的迹象。
请参阅下文,就增加奖励而言,损失7.234比损失-7.234更好。总体正损失表明我们的代理商正在做出一系列明智的决定。
Normalizing Rewards to Generate Returns in reinforcement learning很好的一点是,签名的奖励在那里可以控制渐变的大小。正/负奖励为渐变大小执行“平衡”操作。这是因为来自较大损失的巨大梯度将导致权重发生较大变化。因此,如果您的代理人犯下的错误与执行正确举动一样多,那么该批次的总体更新就不会太大。
答案 1 :(得分:1)
“ Tensorflow优化器通过绝对值使损失最小化(不关心符号,完美损失始终为0。”对吗?”
错了。最小化损失意味着试图获得尽可能小的值。也就是说,-100比0“好”。因此,-7.2比7.2好。因此,除了设置许多损失函数以使0决定“最佳”值之外,值0实际上没有任何特殊意义。但是,这些损失函数通常设置为非负值,因此不会出现正值与负值的问题。例如交叉熵,平方误差等。