Introduction
在使用Reinforcement Learning来构造agent时,多数情况下这个agent是得不到任何Reward的。这使得agent的训练变得非常困难。
举例来说,假设我们制作了一个机械手臂,希望让它完成‘用桌上的螺丝刀把螺丝钉栓进去’这个任务,但agent起初是什么都不知道的,它能够完成各种action的原因在于Exploration机制。只有当它随机地将螺丝刀拿起来,再把螺钉栓进去,这个时候它才能得到Reward,但想在随机的情况下完成这一系列的动作就如大海捞针一般困难。
所以说,当环境当中的reward十分稀疏(sparse)时,这个RL的问题就会十分困难。本节课程介绍的就是三种用于解决Sparse Reward的方法。
Reward Shaping
即人工地设计Reward,刻意地引导agent进行我们想要的action,让环境当中的reward变得不那么稀疏。下面是一些人为设计Reward的方法。
Curiosity
先上图:
在Q-learning当中,我们根据每一个状态
s
t
s_t
st和在这个状态下采取的action
a
t
a_t
at 得到了这一个step的reward
r
t
r_t
rt,期望所有step的reward之和越大越好。在Curiosity的机制下,我们加入了另一个得到Reward的方式——ICM
r
i
t
r_i^t
rit,它由当前状态
s
t
s_t
st,采取的action
a
t
a_t
at 以及下一个状态
s
t
+
1
s_{t+1}
st+1计算得到。
ICM最原始的具体设计方式如下:有一个network以
s
t
s_t
st和
a
t
a_t
at作为输入,其输出的是machine自己预测的下一个状态
s
^
t
+
1
{\hat s_{t + 1}}
s^t+1,然后让它和真实发生的下一个状态
s
t
+
1
s_{t+1}
st+1做对比,二者相差越大,ICM得到的reward就越高,即如果未来得到的state越难被预测到,得到的reward就越高。这就鼓励machine在最开始训练模型的时候去主动采取那些风险比较大的action。
(需要注意的是,用于预测下一个状态的network,即上图中的Network 1是已经被训练好的,在整个Q-Learning的过程中它是被固定住不改变任何参数的)
但这样做仍然有局限性,那就是不是所有难以被预测的动作和即将发生的状态都值得去尝试,这就好比Agent在玩游戏,但是游戏画面的背景是树叶在舞动,树叶如何舞动是一个难以预料的东西,这个模型会鼓励这种难以预料的东西。所以这个模型会让Agent一直观察树叶是如何舞动。所以还需要有一个机制去告诉machine哪些冒险是值得的,是和我们想要它完成的任务相关的。
解决这个问题的方法是增加一个network2,它的输入是两个分别和状态
s
t
s_t
st、
s
t
+
1
s_{t+1}
st+1相关的向量(但不是
s
t
s_t
st和
s
t
+
1
s_{t+1}
st+1本身,事实上,
s
t
s_t
st和
s
t
+
1
s_{t+1}
st+1在作为network2的输入前要经过一个Feature Extractor,它将状态向量里那些与问题不相关的特征过滤掉)。network2的输出是一个对
a
t
a_t
at的预测
a
^
t
\hat a_t
a^t,比较
a
t
a_t
at和
a
^
t
\hat a_t
a^t,如果区别不大,证明这个东西是和结果有关系的,但是如果区别大,就证明这是一个无关紧要的东西。
Curriculum Learning
即给机器的学习过程做规划,从简单到困难。
准确的来说,是逐渐提高学习的样本难度,模拟人类的学习过程。
为此,我们需要为机器设计‘课程’,即给机器学习的样本做难度上的规划,一种通用的方法被称作Reverse Curriculum Generation。它的一般步骤如下:
- 确定一个目标状态 s g s_g sg。
- 设计一些与目标状态相近的状态 s 1 s_1 s1
- 以这些 s 1 s_1 s1开始与环境互动,每一个 s 1 s_1 s1得到的状态-行动序列 τ \tau τ都有一个Reward R ( s 1 ) R(s_1) R(s1)
- 删去那些 R ( s 1 ) R(s_1) R(s1)过大或过小的样本(过大代表样本难度过低,反之则代表过高),留下 R ( s 1 ) R(s_1) R(s1)适中的样本
- 在这些适中的样本周围再Sample出更多的状态
s
2
s_2
s2,重复步骤3、4。
Hierarchical Reinforcement Learning
将所有的agent分层,上层的agent将目标分解为小目标,当目标不能再被分解的时候,最底层的agent就付诸行动,采取action以实现这些小目标。当最底层的agent不能完成这些目标时,上层的agent就会受到一定的惩罚(Penalty),所以上层的agent要避免提出下层agent达不到的目标。另外,当下层的agent达成了一个错误的目标的时候,我们就将上层提出的目标直接修改为下层达成的这个目标(即不浪费下层agent训练过程中的任何成果)