【发布时间】:2019-07-12 12:57:11
【问题描述】:
我无法解决这个问题:负奖励究竟如何帮助机器避免它们?
问题的起源来自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)
请帮我回答下一个问题:
- 交叉熵函数可以产生从 0 -> inf 的输出。对吗?
- Tensorflow 优化器通过绝对值最小化损失(不关心符号,完美损失始终为 0)。对吗?
- 如果语句 2 正确,则损失 7.234 与 -7.234 一样糟糕。对吗?
- 如果以上所有内容都是正确的,那么负奖励如何告诉机器它是坏的,而正奖励如何告诉机器它是好的?
我也有read this answer,但我仍然无法理解究竟为什么消极比积极更糟糕。对我来说更有意义的是:
loss = tf.reduce_sum(tf.pow(cross_entropies, reward))
但是那个实验并不顺利。
【问题讨论】:
标签: python tensorflow machine-learning reinforcement-learning pong