标题:First return, then explore
发表:Nature 2021
领域:强化学习 —— Exploration
- 本文最初版本 2019 年挂在 arXiv 上,文章链接:Go-Explore: a New Approach for Hard-Exploration Problems
- 2021 发在 Nature 的完整版主要的改动是在 return 阶段(阶段1)增加了基于 goal-condition 的方法,解除了训练阶段环境必须是确定性环境(deterministic env)的限制;另外补充了很多实验
- 本文主要围绕 21 年的 First return, then explore 文章进行说明,同时兼顾 19 年的原版论文。为了区别两篇文章的方法,19 年论文的方法称为 “原始 Go-Explore”;21 年论文的方法称为 “policy-based Go-Explore”
本文主要考虑 难探索hard-exploration 问题,即状态动作空间非常大,而奖励相对非常稀疏的 RL 任务,这种情况下 agent 面对以下两个困境
过去的研究已经表明,如果能对状态空间进行充分探索,就能发现稀疏的奖励,并避免欺骗性的局部最优,这引发了对于探索方法的诸多研究。基于内部激励的好奇心探索方法(intrinsic motivation, IM)是一类比较流行的鼓励探索方案,这类方法会对访问过的状态进行计数,根据状态的新奇程度给予内部奖励(intrinsic reward, IR),从而无差别地鼓励 agent 探索新状态
作者认为 IM 类方法有以下两个问题
分离Detachment:agent 在 IR 的驱使下部分探索了一个区域,然后由于轨迹结束或随机性切换到第二个区域(IM 方法常要求智能体随机尝试新行为以找到更多的 IR)。由于深度学习的 灾难性遗忘,agent 会忘记如何返区域一,又因为此时区域一边缘部分的 IR 已经被大量消耗,agent 不会被鼓励回到之前的探索边界,这样探索范围就十分有限

脱轨Derailment:即使 agent 记住了去往当前探索边界的完整动作序列,由于一般策略的探索机制(如
ϵ
\epsilon
ϵ-greedy),agent 会边走边试探,无法准确地返回目标边界位置;如果为了有效返回减小探索动作,又无法进行有效的探索了。另外环境的随机性也会导致这个问题
作者希望能解决 IM 类方法的上述两个问题,达成两个目标
作者自己把这两个总结为 first return ,then explore;first solve, then robustify
第一阶段(Exploration phase)维护一个访问状态存档(archive),其中记录了前往此状态的动作序列。每轮迭代按一定规则选出一个状态,利用存档中的信息走到这个状态上,再从此出发做探索,如果探索到了新的状态,或者到达某个状态更好的路径,就记录下来加入/更新存档(类似最短路的 Dijsktra 算法)。只要这个探索阶段做得足够好,我们几乎可以找到去向任何状态的较好的轨迹,其中也包括可以完成既定任务的轨迹,即 explore until solved
第二阶段(Robustification phase)使用阶段一得到的轨迹做模仿学习,得到足够鲁棒的策略。这里作者借鉴了《Learning Montezuma’s Revenge from a single demonstration.》这篇文章提出的 “backward algorithm” 方法
这个方法大致上来说,就是拿到一条高奖励的轨迹之后,先把智能体放在离轨迹末端较近的位置,让智能体能够学习到如何从这个离目标很近状态走到目标,然后再逐步把智能体放在轨迹上离目标更远一些的地方。通过这种方式智能体就能逐步学习到如何从初始位置走到目标位置。其学习的算法还是使用的 PPO 等通用 RL 算法 。这个过程也可以看做是一个课程学习(curriculum learning),使用第一部分生成的反向轨迹来作为由易到难设定的课程。
注意第一阶段可能是在确定性环境中得到的示范轨迹(用 2019 年文章的纯随机探索方法探索方法),而我们最终的目标是在随机性环境中完成任务,因此阶段二必须在随机环境中完成。这个 “backward algorithm” 算法本质是在用课程学习的方式做一系列 RL,所以它可以处理环境的随机性,并实现比示范轨迹更好的性能。由于阶段一生成轨迹的能力非常强,作者将 “backward algorithm” 算法修改为可以从多个示范轨迹中学习版本,进一步提升了性能
Policy-based Go-Explore先放一张带说明的算法流程图

注意上面的阶段1(Exploration phase)
Note:在 2019 年文章中作者还用了 ‘no-ops’ trick 技巧加入随机性,即在环境启动初期不操作随机长度的时间,这样环境会自己运行到某个随机状态,从而对起始状态加入随机性。这种方法现在不被社区提倡了

注意:探索阶段需要探索尽量多的状态空间,而 agent 持有的 domain-knowledge 往往是指引它到达新位置的重要启示,使用这种 cell 表示方法可以大幅提升 Go-Explore 的性能
不考虑 domain-knowledge 时,使用类似基于计数的好奇心机制来从 archive 中选择去向的 cell。各个 cell 权重如下
W
=
1
C
seen
+
1
W = \frac{1}{\sqrt{C_{\text{seen}}+1}}
W=Cseen+11 其中
C
seen
C_{\text{seen}}
Cseen 是该探索过程中该 cell 被访问的次数
如果使用 goal-condition 方式实现 “go” step,改用以下权重
W
=
1
0.5
C
seen
+
1
W = \frac{1}{0.5C_{\text{seen}+1}}
W=0.5Cseen+11 这时分母增大速度变快很多,即更加强调最近发现的 cell,这是为了

作者注意到,如果目标位置很远,直接训练 goal-condition 会策略不稳定,所以这里使用了 Efficient exploration with self-imitation learning via trajectory-conditioned policy 这篇文章中的方法,以一个 soft order 跟踪存档轨迹
简单说就是把很长的轨迹分成小段,逐段设置子目标
- agent 每到达一个子目标 cell(或轨迹中该 cell 后方指定窗口范围内的后续 cell),就给予
轨迹奖励r t τ = 1 r_t^\tau=1 rtτ=1- 当到达最后一个子目标(即真正的目标时),给予
轨迹奖励r t τ = 3 r_t^\tau=3 rtτ=3 (要高于中间子目标的奖励值,实践上看这样效果好)
另外,合理地利用 domain-knowledge 可以大幅提升探索效率(比如 agent 可以利用位置信息更快地找出已探索区域的边界),作者也尝试了基于游戏的 domain-knowledge 设计更好的启发式的权重,并取得良好效果
19 年的论文本中进行了放松,无论任务环境是确定性还是随机性的,都用模拟器把训练阶段强行搞成确定性环境,这样重放动作序列就能回到指定 state,为了提升效率,直接将模拟器设定那个状态即可,文中称之为 “leverage the availability and wide-spread use of simulators”。显然,这种确定性环境下探索出的成功轨迹是很脆弱的,因此不得不加上在随机性环境中做模仿学习的第二阶段,以获取有鲁棒性的策略
21 年的论文中,作者用 goal-condition 方法实现了指定 cell 的返回,这样有三个好处
所谓 “goal-condition RL” 其实和普通 RL 区别很小,某种程度上可以理解成把要去向的目标 g g g 增加到状态空间中,具体而言,本文中
环境奖励
r
t
e
r_t^e
rte 和上面 2.2.3 节轨迹奖励
r
t
τ
r_t^\tau
rtτ 之和
Note:相比遵循轨迹,我们认为在环境中获取更高性能更重要,所以这里对 r t e r_t^e rte 进行处理,使得 r t e > r t τ r_t^e>r_t^\tau rte>rtτ 绝大多数时刻成立
下面给出这个 PPO 训练使用的损失函数
L
(
θ
)
=
L
P
G
(
θ
)
+
w
V
F
L
V
F
(
θ
)
+
w
E
N
T
L
E
N
T
(
θ
)
+
w
L
2
L
L
2
+
w
S
I
L
L
S
I
L
(
θ
)
\mathcal{L}(\theta)=\mathcal{L}^{P G}(\theta)+w_{V F} \mathcal{L}^{V F}(\theta)+w_{E N T} \mathcal{L}^{E N T}(\theta)+w_{L 2} \mathcal{L}^{L 2}+w_{S I L} \mathcal{L}^{S I L}(\theta)
L(θ)=LPG(θ)+wVFLVF(θ)+wENTLENT(θ)+wL2LL2+wSILLSIL(θ) 其中前三项都是 PPO 原文中的损失,最后一项是 self-imitation learning 的损失,中间是
L
2
L_2
L2 正则化项。对于这些损失的详细说明可以参考对应论文和本论文 supplementary information 材料 14 节
此外,作者注意到 agent 可能由于动作存在一定收敛,导致很难到达指定的 goal。为了防止 goal condition 实现不了,探索不足,论文额外增加熵的概念来提升探索率,这部分详见论文21页
2.2.4 节的探索过程中,存档会在两种情况下进行更新
因为 cell 合并了许多 state,不能假设从 cell A → \to → cell B → \to → cell C 的轨迹在 cell A → \to → cell B 的轨迹替换后还能到达 C;因此更好的轨迹不会整合到建立到其他包含原始轨迹的细胞的记录轨迹中
注意上面这个过程其实很像 Dijsktra,只是 Dijsktra 中的轨迹更新会作用到所有节点的轨迹记录上
考虑存档更新的影响








还有一点,即使只使用最易于获取的 domain-knowledge,也可大幅提升探索效率