Prioritized Experience Replay论文提供了两种从重播缓冲区中采样的不同方式。一种称为“比例优先级”,它为每个转换分配与其 TD 误差成比例的优先级。
另一种称为“基于等级的优先级”,为每个转换分配与其等级成反比的优先级。
该论文继续表明,这两种方法在某些问题上具有相似的性能。
有时我应该选择一种采样方法而不是另一种吗?
Prioritized Experience Replay论文提供了两种从重播缓冲区中采样的不同方式。一种称为“比例优先级”,它为每个转换分配与其 TD 误差成比例的优先级。
另一种称为“基于等级的优先级”,为每个转换分配与其等级成反比的优先级。
该论文继续表明,这两种方法在某些问题上具有相似的性能。
有时我应该选择一种采样方法而不是另一种吗?
该论文的作者假设基于等级的优先级对异常值更稳健。他们建议出于这个原因,基于等级的抽样将是首选。然而,正如他们后来指出的那样,DQN 剪辑奖励的事实无论如何都削弱了这一论点。
如果您打算使用其他人的现成代码进行优先体验回放,那么您最终可能会使用比例抽样。我能够找到的每个实现,包括 OpenAI 的基线实现,都使用比例抽样。如果您要自己编写,可能会首选按比例采样,因为它更易于实现(因此不易出错)。
比较这两种采样方法很复杂,因为基于等级的采样涉及一个超参数,该参数确定您对回放缓冲区进行排序的频率。原始 PER 论文的作者只对每时间步长,给出很好的摊销时间, 在哪里是重放缓冲区的大小。采样需要恒定的时间,因此采样一个 minibatch 的大小需要时间。
比例抽样不涉及排序,但确实需要维护一个求和树结构,它取每次我们添加到缓冲区的时间。采样也需要时间,所以采样一小批大小需要时间。
如果我们只对重播缓冲区进行排序时间步长,然后基于等级的采样更快。但是,由于缓冲区几乎总是只进行近似排序,因此我们从中采样的分布只是我们想要的分布的粗略估计。当重播缓冲区的大小扩大到超过论文中使用的过渡。我还没有看到一项研究比较了不同排序频率和不同缓冲区大小的性能。
因此,基于等级的采样可能会更快,但也可能效果不佳。可能需要调整排序频率超参数。更简单和更可靠的方法是使用带有裁剪 TD 误差的比例采样。
似乎基于排名的方法在时间复杂度方面会稍好一些,因为您只对 k 次采样操作进行排序。这篇文章(不是我的)详细解释清楚。https://towardsdatascience.com/how-to-implement-prioritized-experience-replay-for-a-deep-q-network-a710beecd77b