了解强化损失

数据挖掘 强化学习 损失函数 数学
2021-09-22 06:05:55

REINFORCE 算法中使用的损失让我感到困惑。

来自Pytorch 文档

loss = -m.log_prob(action) * reward

我们希望尽量减少这种损失。


如果采取以下示例:

  • 行动 #1 给予低奖励(例如 -1)
  • 行动 #2 给予高回报(例如 +1)

为了简单起见,让我们比较每个动作的损失,考虑到两者具有相同的概率:

p(a1) = p(a2)
= >m.log_prob(a1) = m.log_prob(a2)
然后loss(a1) = -m.log_prob(a1) * reward(a1) = m.log_prob(a1)
然后loss(a2) = -m.log_prob(a2) * reward(a2) = -m.log_prob(a2) = -m.log_prob(a1)
因为loss(a1) < loss(a2)m.log_prob(X) < 0

在这里我不明白这个结论:损失被最小化,这意味着与高损失相比,小损失是好的。

所以这意味着行动#1 与行动#2 相比是好的?但奖励却说反了!

2个回答

我认为这里的直觉是您希望将负对数似然 (NLL) * 奖励尽可能地推为负数。由于我们的奖励通常是不可微分的,因为它是通过采样获得的,所以我们只能更改 NLL。对于具有高奖励的动作,我们有更大的“压力”/梯度来推动 NLL,而不是奖励低的情况,因为奖励充当 NLL 梯度的乘数。因此,您可以想象在收敛/平衡时,高回报行动比低回报行动更有可能。让我知道这是否有意义!

实际损失应该是.lG_prb(一个C一世n)*rew一个rd没有负号。Pytorch 中的默认优化器使用梯度下降方法,而 REINFORCE 采用梯度上升更新规则。考虑到这一点,损失为负数。这在文档中明确提到。为了得到直观的理解,可以去掉负号。