原文链接:https://zhuanlan.zhihu.com/p/356231850
#引引言
作为工作以来写的第一篇相对认真的论文分析笔记,感觉稍微重拾了原来读论文和算法研究时的一些激情。文章正文篇幅不长,核心思想阐述的较为清晰,但是有很多补充资料和一些偏工程性的trick,如果想要完全吃透还是需要多花一些时间。
论文中对很多参数和细节都有详细说明,且附有源码地址,感兴趣的小伙伴可以结合源码进行深入分析或在其他场景对算法进行探索性应用。
#引言
在强化学习算法中,奖励函数(Reward function)用于引导智能体产生一套策略来解决复杂的序列决策问题。但是在某些场景下,奖励函数会给出一些负面反馈,具体表现为奖励的稀疏性(sparse)和欺骗性(deceptive)。在某些问题上,奖励函数很难设定:只给定最终奖励,奖励过于稀疏,智能体很难探索到;人为塑造比较密集的奖励函数,这种奖励还可能具有欺骗性,引导智能体走到错误的路径上(抛出reward hacking概念(举个 ,可以理解为智能体想成为世界上最有钱的人,可能学到kill到其他所有人))。
作者认为阻碍算法探索能力的两个主要问题是detachment和derailment。detachment指的是智能体在探索完当前区域后无法探索其他尚未探索的区域(区域之间有探索过的状态);derailment指的是现有的一些探索机制会阻止智能体返回到已经探索过的状态,即无法通过先到达区域边界再探索其他区域。
(为了防止我的解读有误影响大家对论文的理解,这里附上部分原文:
We argue that two major issues have hindered the ability of previous algorithms to explore: detachment, in which the algorithm loses track of interesting areas to explore from, and derailment, in which the exploratory mechanisms of the algorithm prevent it from returning to previously visited states, preventing exploration directly and/or forcing practitioners to make exploratory mechanisms so minimal that effective exploration does not occur (Supplementary Information).
在补充材料中,作者给出了一个例子来解释上述问题。
![](https://i-blog.csdnimg.cn/blog_migrate/0c9694d70512c0f287b12ca7cf85d0c5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/891186988ab8ca5808fc07a65d4e59b5.png)
在这个例子中,智能体从两个区域中间开始进行探索,且在探索机制中引入了intrinsic reward(绿色部分)。开始时,具有intrinsic motivation(IM)机制的算法将根据IR进行探索(紫色区域);在进行一定程度的探索后,它可能会对右面尚未探索过的绿色区域进行探索(左右绿色区域等可能),并探索完整个右面区域;在这种情况下,智能体将无法探索剩余的绿色区域,且IM机制也会抑制智能体对白色区域的访问。
#正文
##Go explore算法
![](https://i-blog.csdnimg.cn/blog_migrate/2ebb2ffd1e6be44b620f2113a0f42fba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4dba6a762b326eb4d56f5a641dd6cf68.png)
算法整体可以分为两个部分:exploration phase和robustification phase。
1 exploration phase:
a. 根据概率从archive中选择state。
b. 到达该state(如果环境支持,可以直接加载(类似即时存档);如果环境不支持或者环境具有较强随机性,可以使用goal- conditioned的方式进行加载)
c. 进行探索(使用一定策略或者进行随机探索),并行进行。(探索细节:To help explore in a consistent direction, the probability of repeating the previous action is 95% for Atari and 90% for robotics.)
d. state到cell的映射。在atari场景下主要是两步,灰度处理和下采样(downscale)。(粒度调整在论文中有比较详细的说明,个人认为该步处理很依赖场景)
e. 更新archive。见过的cell更新分数、访问次数等参数;没见过的cell补充进去。
2 robustification phase:
运用DQfD算法对智能体进行训练,该阶段使用的数据就是之前exploration phase阶段探索到的轨迹(通常是人类专家数据)。
##场景
应用场景主要分为两部分,第一部分是Atari,第二部分是机械臂。
1 Atari(Pitfall、Montezuma’s Revenge):
Go-explore算法在Atari有着不错的表现。(该部分中,探索阶段采用随机动作)
在atari环境中,作者重点关注了11个游戏(11 hard-exploration and unsolved games in the Atari suite)进行robustification操作。在很多情况下,鲁棒化后的策略会比之前exploration阶段的表现更好。作者分析了两点原因:鲁棒化阶段的训练会在细粒度动作层面表现更好;鲁棒化阶段同时会使用表现好的轨迹和表现差的轨迹,训练时从表现差的轨迹中也可以获益。
![](https://i-blog.csdnimg.cn/blog_migrate/3a12b467b731e11427c12ef4266e4532.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f9391bf12c318b67644312b31da1fd8e.png)
此外,作者还引入了(easy-to-provide)的domain knowledge(包括房间号、等级、钥匙数等)(作者是用小的分类器来提取的)来提升性能(Montezuma’s Revenge和Pitfall中)。
![](https://i-blog.csdnimg.cn/blog_migrate/101b233a59773ccadb35fe1197077f9f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1f0eec443cc3ae6c43b55401759d2ea0.png)
2 机械臂:
![](https://i-blog.csdnimg.cn/blog_migrate/8ce33074d3c66ec4bc26897a64e302ed.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d15e39bfb3f5ef012e2d1dee0c1b84cc.png)
机械臂场景的目的是操作机械臂将一个物体进行抓取并将它放到一个具有四个格子的架子中,其中两个格子是敞开的,另外两个格子是被关上门且带有插销的。机械臂具有9个可控制的关节。(机械臂的Domain knowledge是直接从模拟器里提取的)
论文中将Go-explore算法和PPO+IM相对比,发现前者可以更快的探索到更多状态(包括成功的状态),并且验证了鲁棒化阶段的机械臂表现。
##Policy-based Go-Explore
作者接下来指出利用模拟器恢复state效率很高,但不是必选项,并进而引出了Policy-based Go-Explore算法。
相比原始的算法,Policy-based Go-Explore具有以下特点。
缺点:
相比模拟器直接恢复state效率低(需要一步步操作复现到指定状态)。
优点:
a. 探索具有一定策略性(一旦某次探索成功,后续可以进行泛化,提升探索效率)。
b. 可以消除Robustification(一定程度替代了)。
c. 应对随机环境(原始算法中某些动作序列的效果不可复现,借助策略探索,一定程度回避这种不稳定的动作序列)。
在Policy-based Go-Explore中,作者使用了PPO来作为基础的强化学习算法,并且引入了goal-conditioned机制来进行训练(奖励包括trajectory reward和environment reward)。由于初期很难探索到比较好的轨迹(随机动作),作者还使用了自模仿学习(self-imitation learning)来尽可能提升智能体在初期的学习效率。
引入goal-conditioned的Policy-based Go-Explore在选取goal时采取一个简单的策略:
a. 10%随机选不在archive中的相邻单元
b. 22.5%随机选相邻单元(无论是否在archive中)
c. 67.5%根据权重选archive中的单元
作者提及,这种策略还有助于发现新的单元。最后是老生常谈,给出数据证明效果。
![](https://i-blog.csdnimg.cn/blog_migrate/140076527fc07edf238de8fbb21e98b8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ab5ca3331d9b9ad58791f7eeeee95d85.png)
此外,在探索过程中,智能体可能由于动作存在一定收敛,导致智能体很难到达指定的goal。为了防止goal condition实现不了,探索不足,论文额外增加熵的概念,提升探索率。对于熵的详细定义可以查阅论文第21页。
![](https://i-blog.csdnimg.cn/blog_migrate/c262378cd31acc21943a6a5884f62fbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dbef9df4b2bf78c865698119aac3ff2e.png)
论文中提及到一个实施层面的主要区别在于:Policy-based Go-Explore存在多个独立的actor,每个actor有一个内循环(select、go、和explore);而不是select、go、和explore同步批处理的外部循环。
(With respect to their practical implementation, the main difference between policy-based Go-Explore and Go-Explore without a policy is that in policy-based Go-Explore there exist separate actors that each have an internal loop switching between the “select”, “go”, and “explore” steps, rather than one outer loop in which the “select”, “go”, and “explore” steps are executed in synchronized batches.)
##网络结构
![](https://i-blog.csdnimg.cn/blog_migrate/91466d4f2f9764ef324b1d8bd2940830.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fbfeb072865b814fd6e5517f8f9bf3f3.png)
论文给出了在基础go-explore在atari和机械臂场景下的网络结构,网络结构相对简单(图像数据用卷积处理;机械臂两个独立网络,一个输出值函数,另一个输出机械臂扭矩的均值和方差)。相比atari的智能体网络结构,Policy-based Go-Explor在全连接层额外引入了goal的输入。
##待研究点:
1 cell的表征
2 如何选择要return的cell
3 如何选择探索阶段尝试要达到的cell
4 探索策略的优化
5 在真实场景中进行安全的探索
5 archive从离散到连续
6 高效利用探索到的transitions进行鲁棒化
#参考资料
https://arxiv.org/abs/1901.10995
https://arxiv.org/abs/2004.12919
https://zhuanlan.zhihu.com/p/58053501