这是 Google 的 DeepMind Atari论文中使用的算法
重放内存 D 存储转换(old_state,执行的操作,reward,new_state)
需要old_state和执行的动作a来计算此状态下此动作的 Q 值。但是既然我们已经计算了状态old_state中动作a的 Q 值,以便选择a作为最佳动作,为什么不直接存储 Q 值呢?
这是 Google 的 DeepMind Atari论文中使用的算法
重放内存 D 存储转换(old_state,执行的操作,reward,new_state)
需要old_state和执行的动作a来计算此状态下此动作的 Q 值。但是既然我们已经计算了状态old_state中动作a的 Q 值,以便选择a作为最佳动作,为什么不直接存储 Q 值呢?
但是既然我们已经计算了状态 old_state 中动作 a 的 Q 值,以便选择 a 作为最佳动作,为什么不直接存储 Q 值呢?
这是因为计算相关的 TD 目标,例如需要当前目标策略估计的动作值. 执行步骤时的操作值可能由于两个原因而过时:
由于其他更新,估计已更改,因为已存储经验
由于其他更新,目标策略已更改,因为已存储经验
存储创造体验时的价值应该在一定程度上仍然有效,前提是您不会将体验保留太久以致价值完全不同。但是,它的效率通常会低很多,因为更新将偏向于较旧的不太准确的值。
经验重播表也有类似但破坏性较小的效果,即使重新计算。这是因为经验的分布可能与当前策略生成的不匹配——这是大多数函数逼近器(例如 DQN 中使用的神经网络)都敏感的东西。然而,这里也有其他因素在起作用,对故意不同的经验分布进行训练可能是有益的——例如,优先考虑具有较大更新步骤的经验可以加快学习速度,保持旧经验可用可以减少灾难性遗忘的情况。
请注意,如果您使用的是非策略蒙特卡洛方法,您可以将蒙特卡洛收益存储在体验重放表中,因为它不会通过使用当前值估计来引导。然而,一旦目标策略在学习过程中发生显着变化,旧的不太相关轨迹的早期部分将停止对更新的贡献。