您如何管理策略梯度中的负奖励?

人工智能 强化学习 喀拉斯 政策梯度 奖励 交叉熵
2021-10-31 10:50:58

这个老问题还没有明确的答案,这就是我在这里再次问它的原因。我在这里也问了同样的问题

如果我在 Keras 中做策略梯度,使用以下形式的损失:

rewards*cross_entropy(action_pdf, selected_action_one_hot)

如何管理负奖励?

在奖励总是积极的情况下,我在这种形式上取得了成功,但它不会以消极的奖励进行训练。失败模式是它一直驱动自己做出非常自信的预测,这会由于诱发的探索偏差而导致非常大的负面损失。我可以通过将奖励削减为零来训练它,但这会在桌面上抛出很多有价值的信息(只有胡萝卜,没有大棒)。

1个回答

您不需要单独管理负奖励,如果您正确实施算法,无论奖励是否为负,它都会起作用。您似乎使用奖励来弥补损失,但您应该使用回报,即从该点到轨迹结束的某个状态动作对的回报之和。

你似乎也失踪了从损失中签字。我们想要最大化的普通策略梯度算法(REINFORCE)的目标函数是

J=aπ(a|s)qπ(s,a)
可以证明,这种策略梯度方法的梯度样本是
J=Gtlog(π(At|St))
所以在TensorFlow中你应该定义你的损失为
J=Gtπ(At|St)
我们需要因为在 TensorFlow 中你使用最小化器,但是我们想要最大化这个函数,所以最小化这个损失与最大化目标函数是一样的。总之,与您编写的代码类似的代码应该是
-return * cross_entropy(action_pdf, selected_action_one_hot)

编辑

正如评论中指出的,我们实际上并不需要因为它已经包含在cross_entropy函数中。