深度Q网络中的Q-Learning方程

我对强化学习完全是新手,所以我可能会有错。

我的问题是:

  • Q-Learning方程( Q(s, a) = r + y * max(Q(s', a')) )在DQN中是否只用于计算损失函数?

  • 这个方程是否是递归的?假设我用DQN来玩Atari Breakout,状态的可能数量非常大(假设状态是单个游戏画面),所以创建一个包含所有Q值的矩阵效率不高。这个方程应该更新给定[状态,动作]对的Q值,那么在DQN的情况下它会做什么?它会递归调用自己吗?如果是的话,方程将无法计算,因为递归永远不会停止。

我已经尝试寻找我想要的答案,看了很多教程,但几乎每个人都不展示背景知识,只是用像Keras这样的Python库来实现它。

先谢谢你们,如果有什么听起来很傻,我道歉,我只是不明白这一点。


回答:

Q-Learning方程 ( Q(s, a) = r + y * max(Q(s', a')) ) 在DQN中是否只用于计算损失函数?

是的,通常这个方程只用于定义我们的损失。更具体地说,它稍作调整;这个方程是我们期望成立的,但在训练期间通常还不完全成立。我们从左边减去右边来计算一个(时间差分)误差,这个误差被用在损失函数中。

这个方程是否是递归的?假设我用DQN来玩Atari Breakout,状态的可能数量非常大(假设状态是单个游戏画面),所以创建一个包含所有Q值的矩阵效率不高。这个方程应该更新给定[状态,动作]对的Q值,那么在DQN的情况下它会做什么?它会递归调用自己吗?如果是的话,方程将无法计算,因为递归永远不会停止。

确实,状态-动作对的空间太大,无法在矩阵/表中枚举所有。换句话说,我们不能使用表格式强化学习。这正是我们使用DQN中的神经网络的原因。你可以将 Q(s, a) 视为一个函数。在表格式的情况下, Q(s, a) 只是一个使用 sa 索引到一个值表/矩阵的函数。

在DQN和其他深度强化学习方法的情况下,我们使用神经网络来近似这样的“函数”。我们使用 s (以及可能的 a,虽然在DQN的情况下不是这样)来基于那个状态(和动作)创建特征。在DQN和Atari游戏的情况下,我们简单地将一组原始图像/像素作为特征。这些然后被用作神经网络的输入。在神经网络的另一端,DQN提供 Q 值作为输出。在DQN的情况下,提供多个输出;每个动作 a 一个。因此,总的来说,当你读到 Q(s, a) 时,你应该想到“当我们将 s 的特征/图像/像素作为输入插入我们的网络时,对应于 a 的输出”。


来自评论的进一步问题:

我想我仍然不明白这个想法…假设我们用状态S通过网络进行了一次迭代,我们得到了以下输出 [A = 0.8, B = 0.1, C = 0.1] (其中 ABC 是可能的动作)。我们还得到了奖励 R = 1 并将y(也称为gamma)设置为0.95。现在,我们如何将这些变量放入损失函数公式 https://i.sstatic.net/Bu3S8.jpg?如果DQN输出要采取的动作,我不明白预测是什么?还有,目标Q值是什么?请你发布带有放置变量的公式,好吗?

首先进行一个小修正:DQN不会输出要采取的动作。给定输入(一个状态 s),它为每个动作 a 提供一个输出值,可以解释为对输入状态 s 和对应于该特定输出的动作 aQ(s, 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 值。这个目标网络通常是第一个网络的“移动较慢”的版本。它是通过偶尔(例如每10K步一次)复制另一个网络,并在这些复制操作之间保持其权重冻结来构建的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注