为什么要从 DQN 的回放中随机抽样?

数据挖掘 神经网络 深度学习 强化学习 q学习 dqn
2021-10-02 19:07:57

我试图获得对深度强化学习的直观理解。在深度 Q 网络 (DQN) 中,我们将所有动作/环境/奖励存储在内存阵列中,并在剧集结束时通过我们的神经网络“重播”它们。这是有道理的,因为我们正在尝试建立我们的奖励矩阵并查看我们的情节是否以奖励结束,然后通过我们的矩阵进行缩放。

我认为导致奖励状态的动作序列是重要的捕获 - 这一系列动作(而不是独立的动作)是导致我们进入奖励状态的原因。

Mnih 的 Atari-DQN 论文和许多教程中,我们看到了从内存阵列和训练中随机采样的实践。因此,如果我们有以下记忆:

(actiona,state1)(actionb,state2)(actionc,state3)(actiond,state4)reward!

我们可以训练一小批:

[(动作c状态3),(动作b,状态2),奖励!]

给出的理由是:

其次,由于样本之间的强相关性,直接从连续样本中学习效率低下;将样本随机化会破坏这些相关性,从而减少更新的方差。

或者来自这个 pytorch 教程:

通过随机抽样,构建批次的转换是去相关的。已经表明,这极大地稳定和改进了 DQN 训练过程。

我的直觉会告诉我,序列是强化学习中最重要的。大多数情节都有延迟奖励,因此大多数动作/状态没有奖励(并且没有“强化”)。将部分奖励带入这些先前状态的唯一方法是在整个序列中追溯性地打破奖励(通过future_rewardQ 算法中的reward + reward * learning_rate(future_reward))

内存库的随机抽样破坏了我们的序列,当您尝试回填 Q(奖励)矩阵时,这有什么帮助?

也许这更类似于马尔可夫模型,每个状态都应该被认为是独立的?我的直觉错误在哪里?

2个回答

在这种情况下,去相关效应比跟踪轨迹序列更重要。

单步 Q 学习不依赖于轨迹来学习。在 TD 学习中执行此操作的效率略低 - Q(λ) 如果不是因为使用函数逼近器的不稳定性,对多个轨迹长度进行平均的算法可能会更好。

相反,基于 DQN 的学习跨单个步骤(状态、动作、奖励、下一个状态)进行引导。它不需要更长的轨迹。事实上,由于相关性导致的偏差,如果你尝试过,神经网络可能会受到影响。即使有经验回放,引导——使用一组估计来改进另一组估计——也可能是不稳定的。所以其他稳定影响也是有益的,例如使用网络的冻结副本来估计 TD 目标R+maxaQ(S,a)- 有时写R+maxaq^(S,a,θ¯)在哪里θ是可学习的参数q^功能。

仍然可以使用更长的轨迹,随机采样,以获得基于更多步骤的 TD 目标估计。这可能有利于减少自举产生的偏差,但代价是由于从更大的可能轨迹空间中采样而增加了方差(以及由于探索性动作而“丢失”部分轨迹或改变预测奖励)。然而,DQN 提出的单步法已经取得了成功,目前尚不清楚哪些问题会受益于更长的轨迹。不过,您可能想尝试各种选项。. . 这不是一个打开和关闭的案例,自 DQN 论文以来,已经发布了各种其他改进。

DQN 使用体验回放来打破连续体验之间的相关性。人们认为,对于每个状态,下一个状态都会受到当前动作的影响,因此,由于体验之间的内部相关性,顺序获取体验会导致不稳定。体验由状态、动作、奖励和下一个状态组成;所有需要学习的东西,至少以时间差异的方式。因此,体验重放使我们能够将蒙特卡洛(使用完整剧集)和时间差异(使用单一体验)组合在一个但更强大的方案中。你意识到需要的不是单个奖励的大小,而是一个关于智能体是否在正确轨道上的指示,最好通过平均几次经验给出。

此外,使用相同的网络参数来获得预测和目标 Q 值就像用另一个猜测更新一个猜测,这就像“一条狗追逐自己的尾巴”。使用只是预测网络的克隆(陈旧副本)的目标网络将有助于打破目标和预测之间的这种另一种相关性。在使用经验更新预测网络时,目标网络参数会定期更新,例如在预测网络每更新这么多次之后,其权重就会复制到目标网络。