Reinforcement Learning强化学习


参考资料:

纯numpy实现非Deep的RL算法

OpenAI tutorial

1. Introduction

这门课的学习路线如上,强化学习是作为单独一个模块介绍。李宏毅老师讲这门课不是从MDP开始讲起,而是从如何获得最大化奖励出发,直接引出Policy Gradient(以及PPO),再讲Q-learning(原始Q-learning,DQN,各种DQN的升级),然后是A2C(以及A3C, DDPG),紧接着介绍了一些Reward Shaping的方法(主要是Curiosity,Curriculum Learning ,Hierarchical RL),最后介绍Imitation Learning (Inverse RL)。比较全面的展现了深度强化学习的核心内容,也比较直观。

首先强化学习是一种解决序列决策问题的方法,他是通过与环境交互进行学习。首先会有一个Env,给agent一个state,agent根据得到的state执行一个action,这个action会改变Env,使自己跳转到下一个state,同时Env会反馈给agent一个reward,agent学习的目标就是通过采取action,使得reward的期望最大化。

在alpha go的例子中,state(又称observation)为所看到的棋盘,action就是落子,reward通过围棋的规则给出,如果最终赢了,得1,输了,得-1。

下面从2个例子中看强化学习与有监督学习的区别。RL不需要给定标签,但需要有reward。

实际上alphgo是从提前收集的数据上进行有监督学习,效果不错后,再去做强化学习,提高水平。

人没有告诉机器人具体哪里说错了,机器需要根据最终的评价自己总结,一般需要对话好多次。所以通常训练对话模型会训练2个agent互相对话

一个难点是怎么判断对话的效果,一般会设置一些预先定义的规则。

强化学习还有很多成功的应用,凡是序列决策问题,大多数可以用RL解决。

2. Policy Gradient

2.1 Origin Policy Gradient

在alpha go场景中,actor决定下哪个位置,env就是你的对手,reward是围棋的规则。强化学习三大基本组件里面,env和reward是事先给定的,我们唯一能做的就是通过调整actor,使得到的累积reward最大化。

一般把actor的策略定义成Policy,数学符号为$\pi$,参数是$\theta$,本质是一个NN(神经网络)。

那么针对Atari游戏:输入游戏的画面,Policy $\pi$输出各个动作的概率,agent根据这个概率分布采取行动。通过调整$\theta$, 我们就可以调整策略的输出。

每次采取一个行动会有一个reward

玩一场游戏叫做一个episode,actor存在的目的就是最大化所能得到的return,这个return指的是每一个时间步得到的reward之和。注意我们期望最大化的是return,不是一个时刻的reward。

如果max的目标是当下时刻的reward,那么在Atari游戏中如果agent在某个s下执行开火,得到了较大的reward,那么可能agent就会一直选择开火。并不代表,最终能够取得游戏的胜利。

那么,怎么得到这个actor呢?

先定义玩一次游戏,即一个episode的游戏记录为trajectory $\tau$,内容如图所示,是s-a组成的序列对。

假设actor的参数$\theta$已经给定,则可以得到每个$\tau$出现的概率。这个概率取决于两部分,$p\left(s_{t+1} | s_{t}, a_{t}\right)$部分由env的机制决定,actor没法控制,我们能控制的是$p_{\theta}\left(a_{t} | s_{t}\right)$ 由$\pi$的参数$\theta$决定。

定义$R(\tau)$ 为一个episode的总的reward,即每个时间步下的即时reward相加,我习惯表述为return。

定义$\bar{R}_{\theta}$ 为$R(\tau)$的期望,等价于将每一个轨迹$\tau$出现的概率乘与其return,再求和。

由于$R(\tau)$是一个随机变量,因为actor本身在给定同样的state下会采取什么行为具有随机性,env在给定行为下输出什么state,也是随机的,所以只能算$R(\tau)$的期望。

我们的目标就变成了最大化Expected Reward,那么如何最大化?

优化算法是梯度更新,首先我们先计算出$\bar{R}_{\theta}$ 对$\theta$的梯度。

从公式中可以看出$R(\tau)$可以是不可微的,因为与参数无关,不需要求导。

第一个改写(红色部分):将加权求和写成期望的形式。

第二个近似:实际上没有办法把所有可能的轨迹(游戏记录)都求出来,所以一般是采样N个轨迹

第三个改写:将$p_{\theta}\left(\tau^{n}\right)$的表达式展开(前2页slide),去掉跟$\theta$无关的项(不需要求导),则可达到最终的简化结果。具体如下:首先用actor采集一个游戏记录

最终得到的公式相当的直觉,在s下采取了a导致最终结果赢了,那么return就是正的,也就是会增加相应的s-a出现的概率P。

上面的公式推导中可能会有疑问,为什么要引入log?再乘一个概率除一个概率?原因非常的直觉,如下:如果动作b本来出现的次数就多,那么在加权平均所有的episode后,参数会偏好执行动作b,而实际上动作b得到的return比a低,所以除掉自身出现的概率,以降低其对训练的影响。

那么,到底是怎么更新参数的呢?

首先会拿agent跟环境互动,收集大量游戏记录,然后把每一个游戏记录拿到右边,计算一个参数theta的更新值,更新参数后,再拿新的actor去收集游戏记录,不断循环。

注意:一般采样的数据只会用一次,用完就丢弃

具体实现:可当成一个分类任务,只是分类的结果不是识别object,是给出actor要执行的动作。

如何构建训练集? 采样得到的a,作为ground truth。然后去最小化loss function。

一般的分类问题loss function是交叉熵,在强化学习里面,只需要在前面乘一个weight,即交叉熵乘一个return。

实现的过程中还有一些tips可以提高效果:

如果 reward都是正的,那么理想的情况下:reward从大到小 b>a>c, 出现次数 b>a>c, 经过训练以后,reward值高的a,c会提高出现的概率,b会降低。但如果a没有采样到,则a出现的概率最终可能会下降,尽管a的reward高。

解决方法:增加一个baseline,用r-b作为新的reward,让其有正有负。最简单的做法是b取所有轨迹的平均回报。

一般r-b叫做优势函数Advantage Functions。我们不需要描述一个行动的绝对好坏,而只需要知道它相对于平均水平的优势。

在这个公式里面,对于一个轨迹,每一个s-a的pair都会乘同一个weight,显然不公平,因为一局游戏里面往往有好的pair,有对结果不好的pair。所以我们希望给每一个pair乘不同的weight。整场游戏结果是好的,不代表每一个pair都是好的。如果sample次数够多,则不存在这个问题。

解决思路:在执行当下action之前的事情跟其没有关系,无论得到多少功劳都跟它没有关系,只考虑在当下执行pair之后的reward,这才是它真正的贡献。把原来的总的return,换成未来的return。

如图:对于第一组数据,在($s_a$,$a_1$)时候总的return是+3,那么如果对每一个pair都乘3,则($s_b$,$a_2$)会认为是有效的,但如果使用改进的思路,将其乘之后的return,即-2,则能有效抑制该pair对结果的贡献。

再改进:加一个折扣系数,如果时间拖得越长,对于越之后的reward,当下action的功劳越小。

我们将R-b 记为 A,意义就是评价当前s执行动作a,相比于采取其他的a,它有多好。之后我们会用一个critic网络来估计这个评价值。

2.2 PPO

PPO算法是PG算法的变形,目的是把在线的学习变成离线的学习。

核心的idea是对每一条经验(又称轨迹,即一个episode的游戏记录)不止使用一次。

简单理解:在线学习就是一边玩一边学,离线学习就是先看着别人玩进行学习,之后再自己玩

Motivation:每次用$\pi_\theta$去采样数据之后,$\pi_\theta$都会更新,接下来又要采样新的数据。以至于PG算法大部分时间都在采样数据。那么能不能将这些数据保存下来,由另一个$\pi_{\theta’}$去更新参数?那么策略$\pi_\theta$采样的数据就能被$\pi_{\theta’}$多次利用。引入统计学中的经典方法:

重要性采样:如果想求一个函数的期望,但无法积分,则可以通过采样求平均的方法来近似,但是如果p分布不知道(无法采样),我们知道q分布,则如上图通过一个重要性权重,用q分布来替代p分布进行采样。这个重要性权重的作用就是修正两个分布的差异。

存在的问题:如果p跟q的差异比较大,则方差会很大

如果sample的次数不够多,比如按原分布p进行采样,最终f的期望值是负数(大部分概率都在左侧,左侧f是负值),如果按q分布进行sample,只sample到右边,则f就一直是正的,严重偏离原来的分布。当然采样次数够多的时候,q也sample到了左边,则p/q这个负weight非常大,会平衡掉右边的正值,会导致最终计算出的期望值仍然是负值。但实际上采样的次数总是有限的,出现这种问题的概率也很大。

先忽略这个问题,加入重要性采样之后,训练变成了离线的

离线训练的实现:用另一个policy2与环境做互动,采集数据,然后在这个数据上训练policy1。尽管2个采集的数据分布不一样,但加入一个重要性的weights,可以修正其差异。等policy1训练的差不多以后,policy2再去采集数据,不断循环。

由于我们得到的$A^{\theta}\left(s_{t}, a_{t}\right)$(执行当下action后得到reward-baseline)是由policy2采集的数据观察得到的,所以 $A^{\theta}\left(s_{t}, a_{t}\right)$的参数得修正为$\theta’$

根据$\nabla f(x)=f(x) \nabla \log f(x)$反推目标函数$J$,注意要优化的参数是$\theta$ ,$\theta’$只负责采集数据。

利用 $\theta’$采集的数据来训练$\theta$,会不会有问题?(虽然有修正,但毕竟还是不同) 答案是我们需要保证他们的差异尽可能的小,那么在刚刚的公式里再加入一些限制保证其差异足够小,则诞生了 PPO算法。

引入函数KL,KL衡量两个分布的距离。注意:不是参数上的距离,是2个$\pi$给同样的state之后基于各自参数输出的action space的距离

加入KL的公式直觉的理解:如果我们学习出来的$\theta$跟$\theta’$越像,则KL越小,J越大。我们的学习目标还是跟原先的PG算法一样,用梯度上升训练,最大化J。这个操作有点像正则化,用来解决重要性采样存在的问题。

TRPO是PPO是前身,把KL这个限制条件放在优化的目标函数外面。对于梯度上升的优化过程,这种限制比较难处理,使优化变得复杂,一般不用。

实现过程:初始化policy参数,在每一个迭代里面,用$theta^k$采集很多数据,同时计算出奖励A值,接着train这个数据,更新$\theta$优化J。由于是离线训练,可以多次更新后,再去采集新的数据。

有一个trick是KL的权重beta也可以调整,使其更加的adaptive。

实际上KL也是比较难计算的,所以有了PPO2算法,不计算KL,通过clip达到同样效果。

clip(a, b, c): if a<b => b If a>c => c If b<a<c => a

看图:绿色:min里面的第一项,蓝色:min里面的第二项,红色 min的输出

这个公式的直觉理解:希望$\theta$与$\theta^k$在优化之后不要差距太大。如果A>0,即这个state-action是好的,所以需要增加这个pair出现的几率,所以在max J的过程中会增大$\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}$, 但最大不要超过1+eplison,如果A<0,不断减小,小到1-eplison,始终不会相差太大。

PG算法效果非常不稳定,自从有了PPO,PG的算法可以在很多任务上work。

3. Q - Learning

3.1 Q-learning

在之前的policy-based算法里,我们的目标是learn 一个actor,value-based的强化学习算法目标是learn一个critic。

定义一个Critic,也就是状态值函数$V^{\pi}(s)$,它的值是:当使用策略$\pi$进行游戏时,在观察到一个state s之后,环境输出的累积的reward值的期望。注意取决于两个值,一个是state s,一个是actor$\pi$。

如果是不同的actor,在同样的state下,critic给出的值也是不同的。那么怎么估计出这个函数V呢?

主要有MC和TD的方法,实际上还有DP的方法,但是用DP求解需要整个环境都是已知的。而在强化学习的大部分任务里,都是model-free的,需要agent自己去探索环境。

MC:直接让agent与环境互动,统计计算出在$S_a$之后直到一个episode结束的累积reward作为$G_a$。

训练的目标就是让$V^{\pi}(s)$的输出尽可能的接近$G_a$。

MC每次必须把游戏玩到结束,TD不需要把游戏玩到底,只需要玩了一次游戏,有一个状态的变化。

那么训练的目标就是让$V^{\pi}(s_t)$ 和$V^{\pi}(s_t+1)$的差接近$r_t$

MC方差大,因为$r$是一个随机变量,MC方法中的$G$是$r$之和,而TD方法只有$r$是随机变量,r的方差比G小。但TD方法的$V^{\pi}$有可能估计的不准。

用MC和TD估计的结果不一样

定义另一种Critic,状态-动作值函数$Q^{\pi}(s,a)$,有的地方叫做Q-function,输入是一个pair $(s,a)$,意思是用$\pi$玩游戏时,在s状态下强制执行动作a(策略$\pi$在s下不一定会执行a),所得到的累积reward。

有两种写法,输入pair,输出Q,此时的Q是一个标量。

另一种是输入s,输出所有可能的action的Q值,此时Q是一个向量。

那么Critic到底怎么用呢?

Q-learning的过程:

初始化一个actor $\pi$去收集数据,然后learn一个基于$ \pi$的Q-function,接着寻找一个新的比原来的$\pi$要好actor , 找到后更新$\pi$,再去寻找新的Q-function,不断循环,得到更好的policy。

可见Q-learning的核心思想是先找到最优的Q-function,再通过这个Q-function得出最优策略。而Policy-based的算法是直接去学习策略。这是本质区别。

那么,怎么样才算比原来的好?

定义好的策略:对所有可能的s而言,$V_\pi(s)$一定小于$V_\pi’(s)$,则$V_\pi’(s)$就是更好的策略。

$\pi’(s)$的本质:假设已经学习到了一个actor $\pi$的Q-function,给一个state,把所有可能的action都代入Q,执行那个可以让Q最大的action。

注意:实际上,给定一个s,$ \pi$不一定会执行a,现在的做法是强制执行a,计算执行之后玩下去得到的reward进行比较。

在实现的时候$\pi’$没有额外的参数,依赖于Q。并且当动作是连续值的时候,无法进行argmax。

那么, 为什么actor $\pi’$能被找到?

上面是为了证明:只要你估计出了一个actor的Q-function,则一定可以找到一个更好的actor。

核心思想:在一个episode中某一步把$\pi$换成了$ \pi’$比完全follow $ \pi$,得到的奖励期望值会更大。

注意$r_{t+1}$指的是在执行当下$a_t$得到的奖励,有的文献也会写成$r_t$

训练的时候有一些Tips可以提高效率:

Tips 1 引入target网络

训练的时候,每次需要两个Q function(两个的输入不同)一起更新,不稳定。 一般会固定一个Q作为Target,产生回归任务的label,在训练N次之后,再更新target的参数。回归任务的目标,让$Q^\pi(s_t,a_t)$与$\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right))+r$越来越接近,即降低mse。最终希望训练得到的$Q^\pi$能直接估计出这个$(s_t,a_t)$未来的一个累积奖励。

注意:target网络的参数不需要训练,直接每隔N次复制Q的参数。训练的目标只有一个 Q。

Tips2 改进探索机制

PG算法,每次都会sample新的action,随机性比较大,大概率会尽可能的覆盖所有的动作。而之前的Q-learning,策略的本质是绝对贪婪策略,那么如果有的action没有被sample到,则可能之后再也不会选择这样的action。这种探索的机制(收集数据的方法)不好,所以改进贪心算法,让actor每次会$\varepsilon$的概率执行随机动作。

Tips 3 引入记忆池机制

将采集到的一些数据收集起来,放入replay buffer。好处:

1.可重复使用过去的policy采集的数据,降低agent与环境互动的次数,加快训练效率 。

2.replay buffer里面包含了不同actor采集的数据,这样每次随机抽取一个batch进行训练的时候,每个batch内的数据会有较大的差异(数据更加diverse),有助于训练。

那么,当我们训练的目标是$ \pi$的Q-function,训练数据混杂了$\pi’$,$\pi’’$,$\pi’’’$采集的数据 有没有问题呢?没有,不是因为这些$ \pi$很像,主要原因是我们采样的不是一个轨迹,只是采样了一笔experience($s_t,a_t,r_t,s_{t+1}$)。这个理论上证明是没有问题的,很难解释…

采用了3个Tips的Q-learning训练过程如图:

注意图中省略了一个循环,即存储了很多笔experience之后才会进行sample。相比于原始的Q-learning,每次sample是从replay buff里面随机抽一个batch,然后计算用绝对贪心策略得到Q-target的值作为label,接着在回归任务中更新Q的参数。每训练多步后,更新Q-target的参数。

3.2 Tips of Q-learning

DQN估计出的值一般都高于实际的值,double DQN估计出的值与实际值比较接近。

Q是一个估计值,被高估的越多,越容易被选择。

Double的思想有点像行政跟立法分权。

用要训练的Q-network去选择动作,用固定不动的target-network去做估计,相比于DQN,只需要改一行代码!

改了network架构,其他没动。每个网络结构的输出是一个标量+一个向量

比如下一时刻,我们需要把3->4, 0->-1,那么Dueling结构里会倾向于不修改A,只调整V来达到目的,这样只需要把V中 0->1, 如果Q中的第三行-2没有被sample到,也进行了更新,提高效率,减少训练次数。

实际实现的时候,通过添加了限制条件,也就是把A normalize,使得其和为0,这样只会更新V。

这种结构让DQN也能处理连续的动作空间。

加入权重的replay buffer

motivation:TD error大的数据应该更可能被采样到

注意论文原文实现的细节里,也修改了参数更新的方法

原来收集一条experience是执行一个step,现在变成执行N个step。相比TD的好处:之前只sample一个$(s_t,a_t)$pair,现在sample多个才估测Q值,估计的误差会更小。坏处,与MC一样,reward的项数比较多,相加的方差更大。 调N就是一个trade-off的过程。

在Q-function的参数空间上+noise

比较有意思的是,OpenAI DeepMind几乎在同一个时间发布了Noisy Net思想的论文。

在同一个episode里面,在动作空间上加噪声,会导致相同state下执行的action不一样。而在参数空间加噪声,则在相同或者相似的state下,会采取同一个action。 注意加噪声只是为了在不同的episode的里面,train Q的时候不会针对特定的一个state永远只执行一个特定的action。

带分布的Q-function

Motivation:原来计算Q-function的值是通过累积reward的期望,也就是均值,但实际上累积的reward可能在不同的分布下会得到相同的Q值。

注意:每个Q-function的本质都是一个概率分布。

让$Q^ \pi$直接输出每一个Q-function的分布,但实际上选择action的时候还是会根据mean值大的选。不过拥有了这个分布,可以计算方差,这样如果有的任务需要在追求回报最大的同时降低风险,则可以利用这个分布。

Rainbow:集成了7种升级技术的DQN

上图是一个一个改进拿掉之后的效果,看紫色似乎double 没啥用,实际上是因为有Q-function的分布存在,一般不会过高估计Q值,所以double 意义不大。

直觉的理解:使用分布DQN,即时Q值被高估很多,由于最终只会映射到对应的分布区间,所以最终的输出值也不会过大。

3.3 Q-learning in continuous actions

在出现PPO之前, PG的算法非常不稳定。DQN 比较稳定,也容易train,因为DQN是只要估计出Q-function,就能得到好的policy,而估计Q-function就是一个回归问题,回归问题比较容易判断learn的效果,看mse。问题是Q-learning不太容易处理连续动作空间。比如汽车的速度,是一个连续变量。

当动作值是连续时,怎么解argmax:

  1. 通过映射,强行离散化

  2. 使用梯度上升解这个公式,这相当于每次train完Q后,在选择action的时候又要train一次网络,比较耗时间。

  1. 设计特定的网络,使得输出还是一个标量。

最有效的解决方法是,针对连续动作空间,不要使用Q-learning。使用AC算法!

4. Actor Critic

4.1 Advantage Actor-Critic (A2C)

由于每次在执行PG算法之前,一般只能采样少量的数据,导致对于同一个$(s_t,a_t)$,得到的$G$的值方差很大,不稳定。那么能不能直接估计出期望值,来替代采样的结果?

回顾下Q-learning中的定义,我们发现:

PG算法中G的期望的定义恰好也是Q-learning算法中$Q^\pi(s,a)$的定义: 假设现在的policy是$ \pi$的情况下,在某一个s,采取某一个a以后得到的累积reward的期望值。

因此在这里将Q-learning引入到预估reward中,也即policy gradient和q-learning的结合,叫做Actor-Critic。

把原来的reward和baseline分别替换,PG算法中的减法就变成了$Q^{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)-V^{\pi_{\theta}}\left(s_{t}^{n}\right)$。似乎我们需要训练2个网络?

实际上Q与V可以互相转化,我们只需要训练V。转化公式中为什么要加期望?在s下执行a得到的$ r_t$和$s_{t+1}$是随机的。

实际将Q变成V的操作中,我们会去掉期望,使得只需要训练(估计)状态值函数$V^\pi$,这样会导致一点偏差,但比同时估计两个function导致的偏差要好。(A3C原始paper通过实验验证了这一点)。

A2C的训练流程:收集数据,估计出状态值函数$V^\pi(s)$,套用公式更新策略$\pi$,再利用新的$\pi$与环境互动收集新的数据,不断循环。

训练过程中的2个Tips:

  1. Actor与Critic的前几层一般会共用参数,因为输入都是state
  2. 正则化:让采用不同action的概率尽量平均,希望有更大的entropy,这样能够探索更多情况。

4.2 Asynchronous Advantage Actor-Critic (A3C)

A3C算法的motivation:开分身学习~

训练过程:每个agent复制一份全局参数,然后各自采样数据,计算梯度,更新这份全局参数,然后将结果传回,复制一份新的参数。

注意:

  1. 初始条件会尽量的保证多样性(Diverse),让每个agent探索的情况更加不一样。

  2. 所有的actor都是平行跑的,每个worker把各自的参数传回去然后复制一份新的全局参数。此时可能这份全局参数已经发生了改变,没有关系。

4.3 Pathwise Derivative Policy Gradient (PDPG)

在之前Actor-Critic框架里,Critic的作用是评估agent所执行的action好不好?那么Critic能不能不止给出评价,还给出指导意见呢?即告诉actor要怎样做才能更好?于是有了DPG算法:

在上面介绍A2C算法的motivation,主要是从改进PG算法引入。那么从Q-learning的角度来看,PDPG相当于learn一个actor,来解决argmax这个优化问题,以处理连续动作空间,直接根据输入的状态输出动作。

Actor+Critic连成一个大的网络,训练过程中也会采取TD-target的技巧,固定住Critic $\pi’$,使用梯度上升优化Actor

训练过程:Actor会学到策略$\pi$,使基于策略$\pi$,输入s可以获得能够最大化Q的action,天然地能够处理continuous的情况。当actor生成的$Q^\pi$效果比较好时,重新采样生成新的Q。有点像GAN中的判别器与生成器。

注意:从算法的流程可知,Actor 网络和 Critic 网络是分开训练的,但是两者的输入输出存在联系,Actor 网络输出的 action 是 Critic 网络的输入,同时 Critic 网络的输出会被用到 Actor 网路进行反向传播。

由于Critic模块是基于Q-learning算法,所以Q learning的技巧,探索机制,回忆缓冲都可以用上。

与Q-learning相比的改进:

  • 不通过Q-function输出动作,直接用learn一个actor网络输出动作(Policy-based的算法的通用特性)。
  • 对于连续变量,不好解argmax的优化问题,转化成了直接选择$\pi-target$ 输出的动作,再基于Q-target得出y。
    • 引入$\pi-target$,也使得actor网络不会频繁更新,会通过采样一批数据训练好后再更新,提高训练效率。

总结下:最基础的 Policy Gradient 是回合更新的,通过引入 Critic 后变成了单步更新,而这种结合了 policy 和 value 的方法也叫 Actor-Critic,Critic 有多种可选的方法。A3C在A2C的基础上引入了多个 agent 对网络进行异步更新。对于输出动作为连续值的情形,原始的输出动作概率分布的PG算法不能解决,同时Q-learning算法也不能处理这类问题,因此提出了 DPG 。

5. Sparse Reward

大多数RL的任务中,是没法得到reward,reward=0,导致reward空间非常的sparse。

比如我们需要赢得一局游戏才能知道胜负得到reward,那么玩这句游戏的很长一段时间内,我们得不到reward。比如如果机器人要将东西放入杯子才能得到一个reward,尝试了很多动作很有可能都是0。

但是人可以在非常sprse的环境下进行学习,所以这一章节提出的很多算法与人的一些学习机制比较类似。

5.1 Reward Shaping

手动设计新的reward,让agent做的更好。但有些比较复杂的任务,需要domain knowledge去设计新的reward。

5.2 Curiosity

好奇心机制非常的直觉,也非常的强大。有个案例:Happy Bird

好奇心也是reward shaping的一种,引入一个新的reward :ICM,同时优化2个reward。如何设计一个ICM模块,使agent拥有好奇心?

单独训练一个状态估计的模型,如果在某个state下采取某个action得到的下一个state难以预测,则鼓励agent进行尝试这个action。 不过有的state很难预测,但不重要。比如说某个游戏里面背景是树叶飘动,很难预测,接下来agent一直不动看着树叶飘动,没有意义。

再设计一个moudle,判断环境中state的重要性:learn一个feature ext的网络,去掉环境中与action关系不大的state。

原理:输入两个处理过的state,预测action,使逼近真实的action。这样使得处理之后的state都是跟agent要采取的action相关的。

5.3 Curriculum Learning

课程学习:为learning做规划,通常由易到难。

设计不同难度的课程,一开始直接把板子放入柱子,则agent只要把板子压下去就能获得reward,接着把板子的初始位置提高一些,agent有可能把板子抽出则无法获得reward,接着更general的情况,把板子放倒柱子外面,再让agent去学习。

生成课程的方法通常如下:从目标反推,越靠近目标的state越简单,不断生成难度更高的state。

5.4 Hierarchical RL

分层学习:把大的任务拆解成小任务

上层的agent给下层的agent提供一个愿景,如果下层的达不到目标,会获得惩罚。如果下层的agent得到的错误的目标,那么它会假设最初的目标也是错的。

6. Imitation Learning

模仿学习,又叫学徒学习,反向强化学习

之前介绍的强化学习都有一个reward function,但生活中大多数任务无法定义reward,或者难以定义。但是这些任务中如果收集很厉害的范例(专家经验)比较简单,则可以用模仿学习解决。

6.1 Behavior Cloning

本质是有监督学习

存在问题:training data里面没有撞墙的case,则agent遇到这种情况不知如何决策

一个直觉的解决方法是数据增强:每次通过牺牲一个专家,学会了一种新的case,策略$\pi$得到了增强。

行为克隆还存在一个关键问题:agent不知道哪些行为对结局重要,哪些不重要。由于是采样学习,有可能只记住了多余的无用的行为。

同时也由于RL的训练数据不是独立同分布,当下的action会影响之后的state,所以不能直接套用监督学习的框架。

为了解决这些问题,就有了反向强化学习,现在一般说模仿学习指的就是反向强化学习。

6.2 Inverse RL

之前的强化学习是reard和env通过RL 学到一个最优的actor。

反向强化学习是,假设有一批expert的数据,通过env和IRL推导expert因为什么样子的reward function才会采取这样的行为。

好处:也许expert的行为复杂但reward function很简单。拿到这个reward function后我们就可以训练出好的agent。

IRL的框架:先射箭 再画靶。

具体过程:

Expert先跟环境互动,玩N场游戏,存储记录,我们的actor $ \pi$也去互动,生成N场游戏记录。接下来定义一个reward function $R$,保证expert的$R$比我们的actor的$R$大就行。再根据定义的的$R$用RL的方法去学习一个新的actor ,这个过程也会采集新的游戏记录,等训练好这个actor,也就是当这个actor可以基于$R$获得高分的时候,重新定义一个新的reward function$R’$,让expert的$R’$大于agent,不断循环。

IRL与GAN的框架是一样的,学习 一个 reward function相当于学习一个判别器,这个判别器给expert高分,给我们的actor低分。

一个有趣的事实是给不同的expert,我们的agent最终也会学会不同的策略风格。如下蓝色是expert的行为,红色是学习到的actor的行为。

针对训练robot的任务:

IRL有个好处是不需要定义规则让robot执行动作,人给robot示范一下动作即可。但robot学习时候的视野跟它执行该动作时候的视野不一致,怎么把它在第三人称视野学到的策略泛化到第一人称视野呢?

解决思路跟好奇心机制类似,抽出视野中不重要的因素,让第一人称和第三人称视野中的state都是有用的,与action强相关的。


文章作者: 杰克成
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 杰克成 !
评论
  目录