我无法理解这个问题:负面奖励究竟是如何帮助机器避免它们的?
这个问题源自于谷歌针对Pong游戏的解决方案。根据他们的逻辑,一旦游戏结束(代理赢得或输掉一分),环境会返回奖励(+1或-1)。任何中间状态的奖励为0。这意味着每次赢或输都会返回[0,0,0,…,0,1]或[0,0,0,…,0,-1]的奖励数组。然后他们对奖励进行折扣和标准化:
#rwd - 奖励数组(例如 [0,0,0,0,0,0,1]),args.gamma 为 0.99prwd = discount_rewards(rwd, args.gamma)prwd -= np.mean(prwd)prwd /= np.std(prwd)
discount_rewards 应该是一种标准函数,其实现可以在这里找到。赢得比赛(+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到无穷大的输出,对吗?
- Tensorflow优化器通过绝对值最小化损失(不关心符号,完美的损失总是0),对吗?
- 如果第2条陈述正确,那么损失7.234和-7.234一样差,对吗?
- 如果以上所有都正确,那么负面奖励如何告诉机器它是坏的,而正面奖励告诉机器它是好的?
我还阅读了这个回答,然而我仍然没有完全理解为什么负面奖励比正面奖励更差。对我来说,更有意义的是这样做:
loss = tf.reduce_sum(tf.pow(cross_entropies, reward))
但这个实验并没有成功。
回答:
“Tensorflow优化器通过绝对值最小化损失(不关心符号,完美的损失总是0),对吗?”
不对。最小化损失意味着尽可能地达到最小的值。也就是说,-100比0“更好”。因此,-7.2比7.2更好。因此,0值实际上并没有特别的意义,除了许多损失函数被设置为0来确定“最优”值。然而,这些损失函数通常被设置为非负的,因此正值与负值的问题不会出现。例子有交叉熵、平方误差等。