深Q网络中的Q学习方程

时间:2018-05-29 09:45:55

标签: neural-network deep-learning artificial-intelligence reinforcement-learning q-learning

我根本不熟悉强化学习,所以我可能错了。

我的问题是:

  • DQN中使用的Q-Learning公式(Q(s, a) = r + y * max(Q(s', a')))是否仅用于计算损失函数?

  • 这个等式是否经常出现?假设我使用DQN,比如玩Atari Breakout,可能状态的数量非常大(假设状态是单个游戏的帧),因此创建所有Q的矩阵效率不高 - 值。等式应该更新给定[状态,动作]对的Q值,那么在DQN的情况下它会做什么?它会递归调用自己吗?如果可以的话,就不能计算出这个数字,因为重新定居不会停止。

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

提前致谢,如果听起来很蠢,我道歉,我只是不明白。

2 个答案:

答案 0 :(得分:2)

  

DQN中使用的Q-Learning等式( Q(s, a) = r + y * max(Q(s', a')) )仅用于计算损失函数吗?

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

  

这个等式是否经常出现?假设我使用DQN,比如玩Atari Breakout,可能状态的数量非常大(假设状态是单个游戏的帧),因此创建所有Q值的矩阵效率不高。等式应该更新给定[状态,动作]对的Q值,那么在DQN的情况下它会做什么?它会递归调用自己吗?如果愿意的话,就无法计算出这个数字,因为重新定位不会停止。

实际上,状态 - 动作对的空间太大而无法在矩阵/表中枚举它们。换句话说,我们不能使用 Tabular RL。这正是我们在DQN中使用神经网络的原因。您可以将Q(s, a)视为一项功能。在表格的情况下,Q(s, a)只是一个使用sa索引到值/表格矩阵的函数。

在DQN和其他Deep RL方法的情况下,我们使用神经网络近似这样的“函数”。我们使用s(可能a(尽管不是DQN)来创建基于该状态(和操作)的功能。在DQN和Atari游戏的情况下,我们只需将一堆原始图像/像素作为特征。然后将它们用作神经网络的输入。在NN的另一端,DQN提供Q - 值作为输出。在DQN的情况下,提供多个输出;每个动作a一个。因此,总之,当您阅读Q(s, a)时,当我们将a的要素/图片/像素作为输入插入我们的网络时,您应该考虑“与s对应的输出”。

评论中的进一步提问:

  

我想我仍然没有得到这个想法...假设我们通过状态为S的网络进行了一次迭代,我们得到了以下输出[A = 0.8, B = 0.1, C = 0.1](其中A,{{1} }和B是可能的行动)。我们还获得了奖励C并将y(a.k.a. gamma)设置为0.95。现在,我们如何将这些变量放入损失函数公式https://imgur.com/a/2wTj7Yn?如果DQN输出采取的行动,我不明白预测是什么?另外,目标Q是什么?你可以用放置的变量发布公式吗?

首先进行小的修正:DQN不输出要采取的动作。给定输入(状态R = 1),它为每个操作s提供一个输出值,可以将其解释为输入状态a的{​​{1}}值的估计值与该特定输出对应的动作Q(s, a)。通常在之后使用这些值来确定要采取的操作(例如,通过选择与最大s值对应的操作),因此在某种意义上,操作可以从输出中派生 DQN,但DQN不直接提供采取行动的行动。

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

a

请注意,图片中存在一个小错误,它在Q而不是新状态loss = (r + gamma max_a' Q-hat(s', a') - Q(s, a))^2中具有旧状态sQ-hat就是正确的。

在这个公式中:

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

s代替a',因为在DQN中,我们通常使用两个不同的神经网络。 Q-hat - 使用我们也通过训练修改的相同神经网络计算值。 Q - 使用不同的“目标网络”计算值。此目标网络通常是第一个网络的“慢速移动”版本。它偶尔构建(例如每10K步骤一次)复制另一个网络,并将其权重冻结在这些复制操作之间。

答案 1 :(得分:0)

首先,Q函数既用于损失函数,也用于策略。 Q函数的实际输出和“理想”函数用于计算损失。将Q函数输出的最高值用于状态中的所有可能操作是您的策略。

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

无论如何,Q值会在您继续执行更新时传播通过网络,但可能需要一段时间。