ZAR*_*ZAR 0 reinforcement-learning neural-network q-learning deep-learning
我试图对深度强化学习有一个直观的理解。在深度 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 值“反向传播”延迟奖励,即使样本是随机的。
(如果奖励由于稀疏而太延迟,问题仍然会出现,但理论上你无论如何都可以学习)。