深度 Q 网络中的 Q 学习方程
Q-Learning equation in Deep Q Network
我对强化学习完全陌生,所以我可能是错的。
我的问题是:
DQN中使用的Q-Learning等式(Q(s, a) = r + y * max(Q(s', a'))
)是否只是为了计算损失函数?
方程是循环的吗?假设我使用 DQN 来玩 Atari Breakout,可能的状态数非常多(假设状态是单个游戏的帧),因此创建所有 Q 值的矩阵效率不高。方程应该更新给定 [state, action] 对的 Q 值,那么在 DQN 的情况下它会做什么?它会递归调用自己吗?如果会,则不能计算方程,因为循环永远不会停止。
我已经尝试找到我想要的东西,我也看过很多教程,但几乎每个人都没有展示背景,只是使用像 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)
只是一个使用 s
和 a
索引到 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
,这可以解释为输入状态 s
的 Q(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 步一次)复制另一个网络并在这些复制操作之间冻结其权重来构建的。
我对强化学习完全陌生,所以我可能是错的。
我的问题是:
DQN中使用的Q-Learning等式(
Q(s, a) = r + y * max(Q(s', a'))
)是否只是为了计算损失函数?方程是循环的吗?假设我使用 DQN 来玩 Atari Breakout,可能的状态数非常多(假设状态是单个游戏的帧),因此创建所有 Q 值的矩阵效率不高。方程应该更新给定 [state, action] 对的 Q 值,那么在 DQN 的情况下它会做什么?它会递归调用自己吗?如果会,则不能计算方程,因为循环永远不会停止。
我已经尝试找到我想要的东西,我也看过很多教程,但几乎每个人都没有展示背景,只是使用像 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)
只是一个使用 s
和 a
索引到 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]
(whereA
,B
andC
are possible actions). We also got a rewardR = 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
,这可以解释为输入状态 s
的 Q(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
. 中执行操作 Q-hat(s', a')
(我们为每个可能的后续动作计算一次a'
)再次是我们神经网络的输出值之一。这一次,它是我们提供s'
作为输入(而不是s
)时得到的值,同样它将是对应于操作a'
. 的输出值
a
后恰好结束的状态
Q-hat
而不是 Q
是因为,在 DQN 中,我们实际上通常使用两个不同的神经网络。 Q
-值是使用我们也通过训练修改的相同神经网络计算的。 Q-hat
-使用不同的 "Target Network" 计算值。此目标网络通常是第一个网络的 "slower-moving" 版本。它是通过偶尔(例如每 10K 步一次)复制另一个网络并在这些复制操作之间冻结其权重来构建的。