深度强化学习课程文档

深度Q学习算法

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

深度Q学习算法

我们了解到,深度Q学习通过使用深度神经网络来近似某个状态下每个可能动作的Q值(值函数估计)。

不同之处在于,在训练阶段,我们不是像Q学习那样直接更新状态-动作对的Q值

Q Loss

在深度Q学习中,我们创建一个损失函数,该函数比较我们的Q值预测和Q目标,并使用梯度下降来更新深度Q网络的权重,以更好地近似我们的Q值

Q-target

深度Q学习训练算法有两个阶段

  • 采样:我们执行动作并将观察到的经验元组存储在重放记忆中
  • 训练:随机选择一小批元组,并使用梯度下降更新步骤从该批次中学习
Sampling Training

这与Q学习不同。深度Q学习训练可能会遇到不稳定性,这主要是由于结合了非线性Q值函数(神经网络)和自举(当我们用现有估计而不是实际完整回报来更新目标时)。

为了帮助我们稳定训练,我们实施了三种不同的解决方案

  1. 经验回放 以便更有效地利用经验
  2. 固定Q目标 以稳定训练
  3. 双深度Q学习,以处理Q值高估的问题

让我们逐一了解它们!

经验回放以更有效地利用经验

我们为什么要创建重放记忆?

深度Q学习中的经验回放有两个作用

  1. 更有效地利用训练期间的经验。通常,在在线强化学习中,智能体与环境交互,获取经验(状态、动作、奖励和下一状态),从中学习(更新神经网络),然后丢弃它们。这效率不高。

经验回放通过更有效地利用训练经验来提供帮助。我们使用一个重放缓冲区来保存经验样本,这些样本可以在训练期间重复使用。

Experience Replay

⇒ 这允许智能体多次从相同的经验中学习

  1. 避免忘记以前的经验(也称为灾难性干扰或灾难性遗忘)并减少经验之间的相关性.
  • 灾难性遗忘:如果我们给神经网络连续的经验样本,就会出现这个问题,它会倾向于随着获得新的经验而忘记以前的经验。例如,如果智能体在第一级,然后在第二级,这与第一级不同,它可能会忘记如何在第一级行为和玩耍。

解决方案是创建一个重放缓冲区,在与环境交互时存储经验元组,然后采样一小批元组。这可以防止网络只学习它之前立即做过的事情。

经验回放还有其他好处。通过随机采样经验,我们消除了观测序列中的相关性,并避免了动作值发生剧烈波动或发散。

在深度Q学习伪代码中,我们初始化一个容量为N的重放记忆缓冲区D(N是您可以定义的超参数)。然后我们将经验存储在内存中,并采样一批经验在训练阶段馈送给深度Q网络。

Experience Replay Pseudocode

固定Q目标以稳定训练

当我们想计算TD误差(即损失)时,我们计算TD目标(Q目标)与当前Q值(Q的估计)之间的差值

但是我们不知道真正的TD目标。我们需要估计它。使用贝尔曼方程,我们看到TD目标只是在该状态下采取该动作的奖励加上下一状态的折现最高Q值。

Q-target

然而,问题在于我们使用相同的参数(权重)来估计TD目标Q值。因此,TD目标与我们正在更改的参数之间存在显著的相关性。

因此,在训练的每一步,我们的Q值和目标值都会发生变化。我们正在接近我们的目标,但目标也在移动。这就像追逐一个移动的目标!这可能导致训练中的剧烈振荡。

这就像你是一个牛仔(Q估计),你想抓一头奶牛(Q目标)。你的目标是靠近(减少误差)。

Q-target

在每个时间步,你都试图接近奶牛,而奶牛在每个时间步也都在移动(因为你使用相同的参数)。

Q-target Q-target 这导致了一条奇怪的追逐路径(训练中出现剧烈振荡)。 Q-target

相反,我们在伪代码中看到的是,我们

  • 使用一个具有固定参数的独立网络来估计TD目标
  • 每C步从我们的深度Q网络复制参数以更新目标网络。
Fixed Q-target Pseudocode

双DQN

双DQN,或双深度Q学习神经网络,由Hado van Hasselt提出。该方法处理Q值高估的问题。

为了理解这个问题,请记住我们如何计算TD目标

TD target

我们在计算TD目标时面临一个简单的问题:我们如何确定下一状态的最佳动作是具有最高Q值的动作?

我们知道Q值的准确性取决于我们尝试的动作我们探索的相邻状态。

因此,在训练开始时,我们没有足够的信息来判断要采取的最佳动作。因此,将最大Q值(有噪声)作为要采取的最佳动作可能导致假阳性。如果非最优动作经常被赋予高于最优最佳动作的Q值,学习将变得复杂。

解决方案是:当我们计算Q目标时,我们使用两个网络来解耦动作选择和目标Q值生成。我们

  • 使用我们的DQN网络选择下一状态要采取的最佳动作(具有最高Q值的动作)。
  • 使用我们的目标网络计算在下一状态采取该动作的目标Q值。

因此,双DQN帮助我们减少Q值的高估,从而帮助我们更快、更稳定地训练。

自从深度Q学习的这三项改进以来,又增加了许多其他改进,例如优先经验回放和对偶深度Q学习。这些超出了本课程的范围,但如果您感兴趣,请查看我们在阅读列表中列出的链接。

< > 在 GitHub 上更新