我试图获得对深度强化学习的直观理解。在深度 Q 网络 (DQN) 中,我们将所有动作/环境/奖励存储在内存阵列中,并在剧集结束时通过我们的神经网络“重播”它们。这是有道理的,因为我们正在尝试建立我们的奖励矩阵并查看我们的情节是否以奖励结束,然后通过我们的矩阵进行缩放。
我认为导致奖励状态的动作序列是重要的捕获 - 这一系列动作(而不是独立的动作)是导致我们进入奖励状态的原因。
在Mnih 的 Atari-DQN 论文和许多教程中,我们看到了从内存阵列和训练中随机采样的实践。因此,如果我们有以下记忆:
我们可以训练一小批:
[(动作c状态3),(动作b,状态2),奖励!]
给出的理由是:
其次,由于样本之间的强相关性,直接从连续样本中学习效率低下;将样本随机化会破坏这些相关性,从而减少更新的方差。
或者来自这个 pytorch 教程:
通过随机抽样,构建批次的转换是去相关的。已经表明,这极大地稳定和改进了 DQN 训练过程。
我的直觉会告诉我,序列是强化学习中最重要的。大多数情节都有延迟奖励,因此大多数动作/状态没有奖励(并且没有“强化”)。将部分奖励带入这些先前状态的唯一方法是在整个序列中追溯性地打破奖励(通过future_reward
Q 算法中的reward + reward * learning_rate(future_reward))
内存库的随机抽样破坏了我们的序列,当您尝试回填 Q(奖励)矩阵时,这有什么帮助?
也许这更类似于马尔可夫模型,每个状态都应该被认为是独立的?我的直觉错误在哪里?