当神经网络在深度 Q 学习中输出多个 Q 值时,目标应该是什么?

人工智能 神经网络 强化学习 dqn 深度学习
2021-10-19 16:40:18

我对在 Deep-Q 网络中执行梯度下降的理解存在一些差距。Atari 的原始深度 q 网络执行梯度下降步骤以最小化yjQ(sj,aj,θ), 在哪里yj=rj+γmaxaQ(s,a,θ).

在我对单一体验进行采样的示例中(s1,a2,r1,s2)我尝试进行一个梯度下降步骤,然后输入s1神经网络输出一个数组Q(s1,a0),Q(s1,a1),Q(s1,a2),价值观。

在为这个单个示例进行梯度下降更新时,为网络设置的目标输出是否应该等价于Q(s1,a0),Q(s1,a1),r1+γmaxaQ(s2,a,θ),Q(s1,a3),?

我知道神经网络的输入是sj, 给出相应的 Q 值。但是,我无法具体化网络应该优化的目标值。

2个回答

在为这个单个示例进行梯度下降更新时,为网络设置的目标输出是否应该等价于Q(s1,a0),Q(s1,a1),r2+γmaxaQ(s,a,θ),Q(s1,a3),...?

除了看起来像几个小错别字之外,是的。

这是 DQN 的一个实现问题,您决定创建一个同时输出多个 Q 函数的函数。Q 学习理论中没有这方面的内容,因此您需要弄清楚什么会为更新步骤生成正确的错误(以及梯度)。

您不知道未执行操作的 TD 目标,也无法对其进行任何更新,因此这些操作的梯度必须为零。实现这一目标的一种方法是为这些操作反馈网络自己的输出。这是常见的做法,因为您可以使用神经网络库中的内置函数来处理小批量*。

有一些细节值得澄清:

  • 您已将数组中的第三个条目替换为计算的 TD 目标,因为来自经验回放的动作是a2. 一般来说,你代替采取的行动。看起来你有这个正确的。

  • 你有r1在你的经验重播表中,但把r2在您的 TD 目标公式中。看起来像一个错字。另一个错字是你最大化a但参考a. 另外,你参考s但不要在任何地方定义它。解决这些问题可以r1+γmaxaQ(s2,a,θ)

  • 对于 TD 目标,通常值得使用一个专用的目标网络,每 N 步从学习网络中复制。它有助于稳定。这可以被称为“冻结副本”θ著名的θ, 和神经网络的近似 Q 函数经常注意到q^给出公式r1+γmaxaq^(s2,a,θ)以你为例。


* 如果您愿意,您还可以更直接地从所采取的单个动作计算梯度,然后从那里反向传播,因为知道所有其他输出的梯度分量都为零。这需要自己至少实现一些反向传播。

您正在寻找最小化损失函数的最佳操作。您对一批内存缓冲区进行统一采样,并根据该批次定义损失函数。内存缓冲区由轨迹组成。每个轨迹都包含一个状态和在该状态下采取的导致下一个状态和立即奖励的动作。如果轨迹显示为(s,a,r,s),这个单一状态的损失被简单地定义为:(r+maxaQ(s,a,w)Q(s,a,w))2.

参数上方的减号表示您应该固定目标参数以确保学习的稳定性。所以整批的损失函数是: L(w)=E(s,a,r,s)U(D)(r+maxaQ(s,a,w)Q(s,a,w))2.