强化学习中的负奖励
Negative reward in reinforcement learning
我无法回答这个问题:负面奖励究竟如何帮助机器避免它们?
问题的来源来自google's solution for game Pong。按照他们的逻辑,一旦游戏结束(智能体赢了或输了分),环境 return 的奖励(+1 或 -1)。任何中间状态 return 0 作为奖励。这意味着每个 win/loose 将 return 或者 [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。 win (+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 一样糟糕。对吧?
- 如果上面的一切都是正确的,那么负奖励如何告诉机器它不好,而正奖励告诉机器它好呢?
我也 ,但是我仍然没有弄明白 为什么消极比积极更糟糕。对我来说更有意义的是:
loss = tf.reduce_sum(tf.pow(cross_entropies, reward))
但是那个实验并不顺利。
"Tensorflow optimizer minimize loss by absolute value (doesn't care about sign, perfect loss is always 0). Right?"
错了。最小化损失意味着尝试获得尽可能小的值。也就是说,-100 比 0 "better"。因此,-7.2 优于 7.2。因此,0 值实际上没有任何特殊意义,除了许多损失函数被设置为 0 决定 "optimal" 值这一事实之外。但是,这些损失函数通常设置为非负值,因此不会出现正值与负值的问题。例如交叉熵、平方误差等
- 交叉熵函数可以产生从 0 -> inf 的输出。对吗?
是的,只是因为我们将它乘以 -1。考虑 log(p) 的自然符号。由于 p 是概率(即介于 0 和 1 之间),log(p) 的范围为 (-inf, 0).
- Tensorflow 优化器通过绝对值最小化损失(不关心符号,完美损失始终为 0)。对吗?
不,标志很重要。它总结了所有符号完整的损失。
- 如果陈述 2 是正确的,那么损失 7.234 与 -7.234 一样糟糕。对吗?
见下文,损失7.234比损失-7.234在增加奖励方面要好得多。整体正损失表明我们的智能体正在做出一系列正确的决定。
- 如果上面的一切都是正确的,那么负奖励如何告诉机器它不好,而正奖励告诉机器它好呢?
指出了一个很好的观点,即签名奖励用于控制梯度的大小。正/负奖励对梯度大小执行 "balancing" 操作。这是因为来自大损失的巨大梯度会导致权重发生巨大变化。因此,如果您的智能体犯的错误与正确移动的错误一样多,那么该批次的整体更新应该不会很大。
我无法回答这个问题:负面奖励究竟如何帮助机器避免它们?
问题的来源来自google's solution for game Pong。按照他们的逻辑,一旦游戏结束(智能体赢了或输了分),环境 return 的奖励(+1 或 -1)。任何中间状态 return 0 作为奖励。这意味着每个 win/loose 将 return 或者 [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。 win (+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 一样糟糕。对吧?
- 如果上面的一切都是正确的,那么负奖励如何告诉机器它不好,而正奖励告诉机器它好呢?
我也
loss = tf.reduce_sum(tf.pow(cross_entropies, reward))
但是那个实验并不顺利。
"Tensorflow optimizer minimize loss by absolute value (doesn't care about sign, perfect loss is always 0). Right?"
错了。最小化损失意味着尝试获得尽可能小的值。也就是说,-100 比 0 "better"。因此,-7.2 优于 7.2。因此,0 值实际上没有任何特殊意义,除了许多损失函数被设置为 0 决定 "optimal" 值这一事实之外。但是,这些损失函数通常设置为非负值,因此不会出现正值与负值的问题。例如交叉熵、平方误差等
- 交叉熵函数可以产生从 0 -> inf 的输出。对吗?
是的,只是因为我们将它乘以 -1。考虑 log(p) 的自然符号。由于 p 是概率(即介于 0 和 1 之间),log(p) 的范围为 (-inf, 0).
- Tensorflow 优化器通过绝对值最小化损失(不关心符号,完美损失始终为 0)。对吗?
不,标志很重要。它总结了所有符号完整的损失。
- 如果陈述 2 是正确的,那么损失 7.234 与 -7.234 一样糟糕。对吗?
见下文,损失7.234比损失-7.234在增加奖励方面要好得多。整体正损失表明我们的智能体正在做出一系列正确的决定。
- 如果上面的一切都是正确的,那么负奖励如何告诉机器它不好,而正奖励告诉机器它好呢?