深度 Q 网络中的 Q 学习方程

Q-Learning equation in Deep Q Network

我对强化学习完全陌生,所以我可能是错的。

我的问题是:

我已经尝试找到我想要的东西,我也看过很多教程,但几乎每个人都没有展示背景,只是使用像 Keras 这样的 Python 库实现它。

提前致谢,如果有什么东西听起来很蠢,我深表歉意,我只是不明白。

首先,在损失函数和策略中都使用了 Q 函数。 Q 函数和 'ideal' 函数的实际输出用于计算损失。对一个状态下所有可能的动作取 Q 函数输出的最高值是你的策略。

其次,不,它不是经常性的。该等式实际上与您发布的略有不同(也许数学家可以纠正我)。实际上是Q(s, a) := r + y * max(Q(s', a'))。注意等号前的冒号。这称为赋值运算符,意味着我们更新等式的左侧,使其等于右侧一次(不是循环)。您可以认为它与大多数编程语言中的赋值运算符相同(x = x + 1 不会造成任何问题)。

当您继续执行更新时,Q 值将通过网络传播,但这可能需要一段时间。

Is the Q-Learning equation ( Q(s, a) = r + y * max(Q(s', a')) ) used in DQN only for computing a loss function?

是的,一般来说,该等式仅用于定义我们的损失。更具体地说,它被重新排列了一点;这个等式是我们期望成立的,但在训练期间它通常还不能精确成立。我们从左侧减去右侧以计算(时间差异)误差,并且该误差用于损失函数。

Is the equation recurrent? Assume I use DQN for, say, playing Atari Breakout, the number of possible states is very large (assuming the state is single game's frame), so it's not efficient to create a matrix of all the Q-Values. The equation should update the Q-Value of given [state, action] pair, so what will it do in case of DQN? Will it call itself recursively? If it will, the quation can't be calculated, because the recurrention won't ever stop.

确实,状态-动作对的 space 太大了,无法将它们全部列举在 matrix/table 中。换句话说,我们不能使用 Tabular RL。这正是我们在 DQN 中使用神经网络的原因。您可以将 Q(s, a) 视为一个函数。在表格示例中,Q(s, a) 只是一个使用 sa 索引到 table/matrix 值的函数。

在 DQN 和其他深度 RL 方法的情况下,我们使用神经网络 近似 这样的 "function"。我们使用 s(可能还有 a,尽管在 DQN 的情况下并非如此)来创建基于该状态(和动作)的特征。在 DQN 和 Atari 游戏的情况下,我们只需将一堆原始 images/pixels 作为特征。然后将这些用作神经网络的输入。在 NN 的另一端,DQN 提供 Q 值作为输出。在 DQN 的情况下,提供了多个输出;每个动作一个 a。因此,总而言之,当您阅读 Q(s, a) 时,您应该想到 "the output corresponding to a when we plug the features/images/pixels of s as inputs into our network".


来自评论的进一步问题:

I think I still don't get the idea... Let's say we did one iteration through the network with state S and we got following output [A = 0.8, B = 0.1, C = 0.1] (where A, B and C are possible actions). We also got a reward R = 1 and set the y (a.k.a. gamma) to 0.95 . Now, how can we put these variables into the loss function formula https://imgur.com/a/2wTj7Yn? I don't understand what's the prediction if the DQN outputs which action to take? Also, what's the target Q? Could you post the formula with placed variables, please?

首先是一个小的更正:DQN 不输出要采取的操作。给定输入(状态 s),它为每个动作提供一个输出值 a,这可以解释为输入状态 sQ(s, a) 值的估计和对应于该特定输出的操作 a。这些值通常用于事后确定要采取的操作(例如通过选择与最大 Q 值对应的操作),因此在某种意义上可以 派生 来自 DQN 的输出,但 DQN 不直接提供作为输出的操作。

无论如何,让我们考虑示例情况。图像的损失函数为:

loss = (r + gamma max_a' Q-hat(s', a') - Q(s, a))^2

请注意,图像中有一个小错误,Q-hat 中的旧状态 s 而不是新状态 s's'里面是对的

在这个公式中:

  • r是观察到的奖励
  • gamma 是(通常)常数值
  • Q(s, a) 是我们的神经网络的输出值之一,当我们向它提供 s 作为输入时,我们得到它。具体来说就是我们执行过的动作a对应的输出值。因此,在您的示例中,如果我们选择在状态 s 中执行操作 A,我们有 Q(s, A) = 0.8.
  • s' 是我们在状态 s.
  • 中执行操作 a 后恰好结束的状态
  • Q-hat(s', a')(我们为每个可能的后续动作计算一次 a')再次是我们神经网络的输出值之一。这一次,它是我们提供 s' 作为输入(而不是 s)时得到的值,同样它将是对应于操作 a'.
  • 的输出值

Q-hat 而不是 Q 是因为,在 DQN 中,我们实际上通常使用两个不同的神经网络。 Q-值是使用我们也通过训练修改的相同神经网络计算的。 Q-hat-使用不同的 "Target Network" 计算值。此目标网络通常是第一个网络的 "slower-moving" 版本。它是通过偶尔(例如每 10K 步一次)复制另一个网络并在这些复制操作之间冻结其权重来构建的。