Andrej Karpathy 的 pong 代码是如何计算梯度的?

人工智能 深度学习 强化学习 反向传播 政策梯度
2021-10-31 11:41:09

我正在阅读Andrej Karpathy 关于使用策略梯度进行强化学习的代码。我对代码有一些疑问。

  1. 计算概率的对数在哪里?我在代码中没有看到他在计算。

  2. 请给我解释一下dlogps.append(y - aprob)线的用途。我知道这是在计算loss,但这在我们没有正确标签的强化学习环境中有何帮助?

  3. 工作情况如何policy_backward()权重如何变为上述损失函数?更具体地说,dh这里有什么?

1个回答
  1. logp在代码中看到的实际上logit p是有这个故事的:

给定概率 p,相应的赔率计算为 p / (1 – p)。例如,如果 p=0.75,赔率是 3 比 1:0.75/0.25 = 3。

logit 函数只是几率的对数:logit(x) = log(x / (1 – x))。

Sigmoid nearlogp如下:

logit 函数的反函数是 sigmoid 函数。也就是说,如果你有一个概率 p,sigmoid(logit(p)) = p。

资料来源:[1]

  1. 在强化学习中,我们在游戏结束时知道所采取的行动是否成功。然后在下一轮之前,我们可以调整渐变。从您的链接(评论部分):

例如,在 Pong 中,我们可以等到游戏结束,然后获取我们获得的奖励(如果我们赢了,则为 +1,如果我们输了,则为 -1),然后输入该标量作为我们所采取行动的梯度(DOWN在这种情况下)。在下面的示例中,DOWN 最终导致我们输掉比赛(-1 奖励)。因此,如果我们将 DOWN 的对数概率填入 -1 并进行反向传播,我们会发现一个梯度会阻止网络在未来对该输入采取 DOWN 动作(这是正确的,因为采取该动作会导致我们输掉比赛)。

  1. 在相同的评论部分(稍后)有一张图片,并解释了 h 是什么。不幸的是,您必须自己检查,图片不兼容,无法附在此处。通过描述图片,我可以说 h 等于隐藏层中的权重,在梯度情况下,dh 是 h 的导数。

粗略地说,反向传播是在一轮完成后向后校正网络的权重。更详尽的解释在提到的评论部分。

资料来源:

[1] https://www.google.com/amp/s/nathanbrixius.wordpress.com/2016/06/04/functions-i-have-known-logit-and-sigmoid/amp/