该问题来自观看以下有关TensorFlow和来自Google I / O 18的强化学习的视频:https://www.youtube.com/watch?v=t1A3NTttvBA
在这里,他们训练了一种非常简单的RL算法来玩Pong游戏。
在他们使用的幻灯片中,损失的定义如下(大约@ 11m 25s):
loss = -R(sampled_actions * log(action_probabilities))
此外,它们还显示以下代码(大约@ 20m 26s):
# loss
cross_entropies = tf.losses.softmax_cross_entropy(
onehot_labels=tf.one_hot(actions, 3), logits=Ylogits)
loss = tf.reduce_sum(rewards * cross_entropies)
# training operation
optimizer = tf.train.RMSPropOptimizer(learning_rate=0.001, decay=0.99)
train_op = optimizer.minimize(loss)
现在我的问题是这个;他们使用+1来赢,而使用-1来输。在提供的代码中,乘以负奖励的交叉熵损失会非常低吗?而且,如果训练操作正在使用优化程序来使损失最小化,那么算法就被训练为损失了吗?
或者我缺少一些基本知识(可能是由于我非常有限的数学技能)
答案 0 :(得分:2)
很好的问题,科里。我还想知道RL中这种流行的损失函数实际上意味着什么。我已经看到了很多实现,但是很多彼此矛盾。据我了解,这意味着:
损失=-log(pi)* A
与基线情况相比,A是优势。在Google的情况下,他们使用的基线为0,因此A =R。在该特定时间乘以该特定操作,因此在您的上述示例中,操作被一个热编码为[1、0、0]。我们将忽略0,而只取1。因此,我们具有上述等式。
如果您凭直觉计算此损失以获得负奖励:
损失=-(-1)* log(P)
但是对于任何小于1的P,该值的对数将为负。因此,您有一个负损失,可以解释为“非常好”,但实际上没有任何物理意义。
正确的方法:
但是,我认为,如果我错了,请他人纠正我,您不会直接计算损失。您采用损失的 梯度 。也就是说,您采用-log(pi)* A的导数。
因此,您将:
-(d(pi)/ pi)* A
现在,如果您获得较大的负奖励,它将转化为非常大的损失。
我希望这是有道理的。