Shortcuts

HER

概述

HER(Hindsight Experience Replay)最初在Hindsight Experience Replay中提出,用于应对由稀疏奖励带来的挑战。HER可以轻松地与任何离策略强化学习算法结合,允许从稀疏且二元的奖励中进行高效样本学习,从而避免了复杂的奖励工程需求。

HER的核心是从失败中学习。HER提出,即使任务的最终目标没有实现,这一过程仍然有用,因为在此过程中可能会实现其他目标。因此,HER从原始过程中创建一个新的过程,通过改变期望的任务目标来为新过程标记新的奖励。

快速事实

  1. HER 不是一个独立的算法,它可以与任何离策略算法结合使用。

  2. HER 需要在改变期望目标后定义奖励,但它不需要与环境中的奖励函数相同。

  3. 在DI-engine的实现中,HER收集回合数据并将其推入缓冲区,然后对回合进行采样并修改奖励,这将在伪代码部分详细解释。

  4. HER 有不同的策略来创建虚拟目标。它们都来自与正在重放的转换相同的片段,但有以下不同之处:

    • 未来:转换后的状态

    • episode: 剧集中的任何状态

    • final: 剧集的最终状态

伪代码

../_images/HER_psuedo_code.png

注意

与原始论文中提出的伪代码相比,DI-engine采用了一种略有不同的方式来实现HER。在原始论文中,在将转换推入缓冲区之前,它将用于创建几个具有不同目标的转换。然而,这有两个缺点:1)内存浪费。所有转换(原始的和虚拟的)都存储在缓冲区中。2)固定数据集。一旦转换被推入缓冲区,它们将不会被更改。

因此,在DI-engine中,我们首先将原始转换(以完整剧集格式)推入缓冲区。在剧集被采样出来后,我们将开始基于虚拟目标创建更多的转换。目标在每次采样时随机创建,因此即使同一剧集被多次采样出来,创建的新训练数据也不会相同。

实现

DI-engine 中的实现不在 ding.policy 中,像许多其他算法一样,而是在 ding.reward_model.her_reward_model 中:

class ding.reward_model.her_reward_model.HerRewardModel(cfg: dict, cuda: bool = False)[源代码]
Overview:

后见之明经验回放模型。

注意

  • her_strategy (str): HER使用的策略类型,应在[‘final’, ‘future’, ‘episode’]中

  • her_replay_k (int): 由原始情节生成的新情节的数量。(在情节HER中未使用)

  • episode_size (int): 每次迭代中采样多少个episode。

  • sample_per_episode (int): 每集生成多少新样本。

注意

在HER中,我们需要通过改变目标来调整情节轨迹。然而,情节的长度各不相同,可能会有很大的差异。因此,我们建议您通过在配置中指定episode_sizesample_per_episode,仅使用完整情节中的一些转换。因此,在一次迭代中,batch_size将是episode_size * sample_per_episode

基准测试

Benchmark and comparison of c51 algorithm

环境

最佳平均奖励

评估结果

配置链接

BitFLip-15位

0.9

../_images/bitflip15bit-herdqn.png

config_link

BitFLip-20位

0.9

../_images/bitflip20bit-herdqn.png

config_link

附注。

上述结果是通过在3个不同的随机种子(0, 1, 2)上运行相同的配置获得的

参考

  • Andrychowicz M, Wolski F, Ray A, 等. 后见之明经验回放[J]. arXiv 预印本 arXiv:1707.01495, 2017.

其他公共实现