体验重放并不总能带来更好的结果

人工智能 强化学习 q学习 dqn 经验回放
2021-11-07 13:37:25

我最近开始使用 DeepMind ( https://arxiv.org/abs/1312.5602 ) 提出的 Deep Q 网络来解决控制问题。最初,我在没有体验重放的情况下实现了它。结果非常令人满意,虽然在实施ER之后,我得到的结果比较差。因此,我开始尝试 BATCH SIZE 和 MEMORY CAPACITY。

  • (1) 我注意到如果我设置 BATCH SIZE = 1 和 MEMORY CAPACITY = 1 即与之前进行正常在线学习相同,那么结果(几乎)与最初相同。

  • (2) 如果我增加 CAPACITY 和 BATCH SIZE 例如 CAPACITY = 2000 和 BATCH SIZE = 128,所有动作的 Q 值趋向于收敛到非常相似的负值。

每个状态转换都会收到一个小的负奖励 -1,除了获得 +10 奖励的所需状态。我的伽玛是0.7。每个状态都是离散的,并且在动作 a 之后环境可以转换到多个 X 状态,X 中的每个状态都有很大的概率。

获得积极的奖励是非常罕见的,因为达到理想状态可能需要很长时间。因此,当对 128 次体验进行抽样时,如果“幸运”,则只有少量体验可能会产生积极的回报。

因为,在进行小批量训练时,我们对所有样本的损失进行平均,然后更新 DQN,我想知道通常正奖励是否会变得毫无意义,因为它们被负奖励“支配”。这意味着这会导致与实际值的收敛速度非常慢?并且还证明收敛到与 (2) 中相似的负值是合理的?这是预期的吗?我正在寻求实施。优先考虑 ER 作为解决此问题的潜在解决方案,但上述逻辑是否有问题?

我希望这确实有意义。如果我在上面做出错误的假设,请原谅我,因为我是该领域的新手。

编辑:问题似乎是,确实很少找到奖励会导致采样几乎永远不会,特别是在训练的乞求时,这反过来导致与实际 Q 值的收敛非常缓慢。使用 Prioritized ER 成功解决了这个问题 - 但我相信任何形式的仔细分层抽样都会产生良好的结果

1个回答

你所描述的对我来说听起来像是政策外学习所固有的问题,而你所描述的在我看来是对可能发生的事情的合理解释。

当您使用 capacity = 1 和 batch_size = 1 实现体验回放时,您说您得到“几乎”与以前相同的结果。这可能有两个原因“几乎”相同。一种是网络的随机初始化,所以当你训练时,你可能会收敛于同一点,但不完全收敛(也是生成训练样本的随机性)。另一个原因可能与每次更新目标净重时已经发生的情况有关,因此您的误差项可能在每个时间点略有不同,但渐近收敛。

这本质上是遵循策略训练,因此每个训练样本都遵循一条轨迹(它们都是顺序状态)。最终,如果有足够的时间,这条轨迹将达到目标状态并获得奖励。奖励将通过网络传播,并且其他状态的备份值也将被更新。所以基本上每一集都以奖励结束(我假设),每集的平均奖励与一集的平均长度成正比。

当增加容量和批量大小 > 1 时,我们转向真正的非策略训练。采样时,更新不遵循轨迹。因此,不能保证我们会采样任何积极的奖励(尽管我相信你会在某个时候这样做)。因此,如果我们对更新中的奖励进行平均,每个“剧集”的平均奖励不再与平均剧集长度成比例(并且剧集的概念开始失去一些相关性 - 因为我们没有关注轨迹)。这种奖励对所有其他状态的影响与遵循政策轨迹时的影响不成比例。

您可以尝试一些技巧来进行调查,例如尝试让您的积极奖励 > batch_size。或者,如果你有一些关于你的目标状态被采样的频率的统计数据,也许可以按这个因素扩大它。(或者如果你知道你的状态空间的大小,让你的奖励大于那个)。

这篇博文提供了一些更优雅的改进,比如您提到的优先 ER。但有趣的是,扩大奖励的效果将克服对许多负面奖励进行平均的效果。