首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单强化学习算法的损失函数

简单强化学习算法的损失函数
EN

Stack Overflow用户
提问于 2018-12-04 13:08:23
回答 1查看 6.1K关注 0票数 4

这个问题来自于在TensorFlow上观看以下视频和从Google /O 18中强化学习:https://www.youtube.com/watch?v=t1A3NTttvBA

在这里,他们训练一个非常简单的RL算法来玩Pong游戏。

在他们使用的幻灯片中,损失的定义如下(约@11m25s ):

代码语言:javascript
复制
loss = -R(sampled_actions * log(action_probabilities))

此外,它们还显示了以下代码(约@20m26s):

代码语言:javascript
复制
# 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作为奖励。在提供的代码中,任何交叉熵损失乘以负回报都会非常低?如果训练操作是使用优化器来最小化损失,那么算法是否会被训练成失败呢?

或者说,我缺少一些基本的东西(可能是因为我的数学技能非常有限)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 18:28:18

问得好科里。我也想知道这个在RL中流行的损失函数到底意味着什么。我已经看到了许多实现,但许多相互矛盾。据我理解,这意味着:

损失=- log(pi) *A

其中A是相对于基线情况的优势。在Google的例子中,他们使用了0的基线,所以A= R,这乘以那个特定时间的特定动作,所以在上面的例子中,动作被编码为1,0,0。我们将忽略0,只取1,因此我们得到了上面的方程。

如果你凭直觉计算这个负报酬的损失:

损失=- (-1) *日志(P)

但如果P小于1,则该值的对数将为负值。因此,你有一个负损失,可以被解释为“非常好”,但真的没有意义。

正确的方式:

但是在我看来,请别人纠正我,如果我错了,你不能直接计算损失。取损失的梯度。也就是说,你取-log(pi)*A的导数。

因此,你应该:

-(d(pi) / pi) *A

现在,如果你有一个巨大的负面回报,它将转化为一个非常大的损失。

我希望这是合理的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53613722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档