【强化学习】经验回放技巧

Prioritized Experience Replay(PER)

待更新……

Hindsight Experience Replay(HER)

Sparse Reward问题

举例:Bit-Flipping游戏

状态空间就是0,1组成的$N$位数据串,动作$i$就是将数据串中的第$i$位翻转,最终是希望通过若干次翻转,能够让这个数据串和这个target的数据串是一样的。

reward:当前数据串和target一样时reward=0,不一样时reward=-1。

当$N$大于40的时候,一些标准RL算法在这上面都会是失败的。关键问题在于,在如此多可能性中,尤其是在中间状态的时候,reward是一样的,彼此之间是没有区分的,不知道哪一个状态更靠近于目标状态,从而会进行一个盲目的搜寻,因为没有一个reward做很好的引导,在采样过程中几乎很难得到一个成功样例,也就没法学习。

解决思想

举一个非常简单的例子,就比如说在这个sparse reward,机器人去踢球,发现在这个非常大的空间里,他很难踢进这个球框,所以他在反复的尝试中,都获得不了reward。具体来说,当对于智能体而言,他踢到任何一个不理想的状态,他都是等同视之的,觉得这是一个失败的经验,然后并不能从中推导出怎么去成功?而人类,他对失败经验的想法是,如果我想把球踢到A位置,但是我现在把球踢到B位置,那么虽然我失败了,我就会知道,如果球框在B位置的时候,我怎么去发力踢这个球。

Hindsight又称事后诸葛亮,也就是说他要去指导这些Agent从一些失败的经验中去学习,这是它的核心思想。

具体算法

类似于基于子目标的分层强化学习,我们给在原有MDP五元组上增加一个goal变量$g_t$,$g_t$描述了我们希望到达一个什么样的状态,但这并不代表该状态一定能够获得有效的reward。

基本假设:

  1. $\forall g \in G, f_g: S \rightarrow\{0,1\}$,当前状态是否达到目标,达到为1,没达到为0
  2. $r_g(s, a)=-\left[f_g(s)==0\right]$,当前状态未达到目标,给一个-1奖励,达到给0,是一个二值奖励函数
  3. 任意一个状态,能找到其对应的目标,状态与目标为一一映射的关系,最简单的是将$s_t$状态空间一一映射为$g_t$目标空间

简言之就是:1)任意一个目标都对应一套稀疏的二值奖励函数;2)任意一个状态都有与之对应的目标。

此时,经验池里存放的是带有目标的经验$\left(s_t\left|g, a_t, r_{g, t}, s_{t+1}\right| g\right)$,而非普通的$(s_t, a_t, r_{g, t}, s_{t+1})$,行为策略$\pi_b(s_t||g)$也变为以$s_t||g$作为输入。

由于奖励的稀疏性,采集到的一条轨迹大概率地对于所需要最终完成的任务来说是失败的。所以最关键的一步就是在采样一条轨迹之后,对于轨迹上的每一个transition都去计算一下如果换作其他目标该transition会怎样。

又因为系统的dynamics是不变的(这里没有底层策略,不会带来HRL中的non-stationary问题),因此$\left(s_t, a_t, s_{t+1}\right)$这一状态转移(在$s_t$状态下采取$a_t$转移到$s_{t+1}$的概率)是不变的,只需重新选择一下新目标$g’$,计算一下新奖励$r’=r(s_t, a_t, g’)$就可以了。

那么如何得到新的目标$g’$呢?有四种方法:

  1. Final: 每次选择这一条轨迹的最后一个状态,作为新目标;这种情况下只选择一个新目标,加上原目标产生的transition,即经验池里面存放2倍于真实采样到的样本
  2. Future: 随机选这个轨迹上,当前transition之后的K个状态作为新目标,即如果现在的样本为$\left(s_t, a_t, s_{t+1}\right)$,那么会在$s_t, …, S_T$之间选择K个状态对应的目标作为新目标;这种情况下经验池里面存放的样本数目是真实采样到样本数目的K+1倍
  3. Episode: 每次选择轨迹上的K个状态作为新目标,这里是在这个整个轨迹上可以任意选取,即在$s_1, …, S_T$之间选择K个状态对应的目标作为新目标;这种情况下经验池里面存放的样本数目是真实采样到样本数目的K+1倍
  4. Random的话,其实是在每次所有出现过的状态中选择K个就可以了,这里其实都不要求在这个$s_1, …, S_T$里面进行采样

HER伪代码

最后的实验可以看到,前两个方案效果比较好,其中第二个方案效果最好。实验中比较好的取值为K=8。

结论

  • HER可以结合任意的off-policy算法:文中使用了DDPG;

  • 效果好:由于这个任务需要机械臂把物体挪动到随机产生的不同位置,其本身就是一个多目标的任务,如果只设置一个稀疏的奖励,本身就很难学习到有效的东西。因此实验中DDPG+HER相比于纯DDPG的结果有了本质上的提升;(相比于其他count-based exploration策略也有很大的提升)

  • 对于单目标任务也适用:虽然这个方法自然地适用于多目标强化学习问题,但是如果对于单目标任务来说,在训练中只使用这个单一的目标也对于性能提升有帮助;不过文章还是推荐即使最后的任务是单目标,在训练的时候也使用多目标来训练;

  • 效果甚至好于一些reward shaping的尝试:文中简单尝试了几种手工的reward shaping,效果没有直接这样使用系数的目标更好。文章给出的解释是稀疏的奖励最能够反映任务目标,加了shaping之后其实是为了引导智能体学习从而牺牲了对于目标的正确表述;同时,shaping其实惩罚了先验规定的一些不想要的行动,这可能阻碍了智能体的探索。