为什么从DQN重放随机采样?
我试图获得深入强化学习的直观理解。 在深度Q网络(DQN)中,我们将所有动作/环境/奖励存储在存储器阵列中,并在情节结束时通过我们的神经网络“重播”它们。 这是有道理的,因为我们试图建立我们的奖励矩阵,看看我们的情节是否以奖励结束,通过矩阵回归。
我会认为导致奖励状态的一系列行为是重要的捕获行为 - 这一系列行为(而不是独立行动)是我们获得奖励状态的原因。
在Mnih的Atari-DQN论文和许多教程中,我们看到了从存储器阵列和训练中随机抽样的做法。 所以如果我们有以下的记忆:
(动作a,状态1) - >(动作b,状态2) - >(动作c,状态3) - >(动作d,状态4) - >奖励!
我们可能会培训一小批:
[(行动c状态3),(行动b,状态2),奖励!]
给出的理由是:
其次,由于样本之间的强相关性,直接从连续样本中学习效率低下; 对样本进行随机化打破了这些相关性,因此降低了更新的方差。
或从这个pytorch教程:
通过随机抽样,建立批次的转换与解相关。 已经表明,这极大地稳定和改进了DQN训练过程。
我的直觉告诉我,顺序是强化学习中最重要的部分。 大多数情节有延迟奖励,所以大多数行动/状态没有奖励(并且没有“加强”)。 将奖励的一部分带到这些先前状态的唯一方法是追溯地在整个序列中分配奖励(通过奖励+奖励* learning_rate(future_reward)的Q算法中的future_reward)
记忆库的随机抽样打破了我们的序列,当您尝试回填Q(奖励)矩阵时,这有什么帮助?
也许这更类似于一个马尔科夫模型,其中每个国家都应该被认为是独立的? 我的直觉中的错误在哪里?
谢谢!
“顺序是强化学习中最重要的部分。” 不:马尔科夫的财产,考虑到目前的状态,你可以“忽略”所有过去的状态,仍然可以学习。
你缺少的一件事是元组不仅仅是(state, action)
,而是(state, action, next state)
。 例如,在DQN中,当您更新Q网络时,您计算TD错误,并在此过程中考虑下一个状态的Q值。 这样即使样本是随机的,您仍然可以通过Q值“反向传播”延迟奖励。
(如果奖励由于稀缺而过于延迟,问题仍然存在,但从理论上讲,无论如何你都可以学习)。