David Silver强化学习课程笔记(七)

第七课:策略梯度方法

        最近在瞎忙,以致于离上一篇本专栏博客已经过去三个月了,春节在家准备写一写,又因为懒而没有下笔,今天是放假最后一天,所以准备安慰安慰自己,至少一个假期得做了点东西对吧,哈哈,不过我是认真写的,下面我们开始本课的介绍。

        本文主要介绍策略梯度方法,它是策略搜索方法的一种。我们将从Policy-Based RL的优势进行引入,重点介绍score function、策略梯度定理、REINFORCE算法(即Monte-Carlo策略梯度方法)、兼容函数估计、优势函数、自然策略梯度。下面我们一一进行介绍。

        什么是Policy-Based RL?它与Value-Based RL有什么区别?我们在值函数估计中介绍了DQN,它的本质是对于Q-learning做了简要的修改,也即引入了回放记忆(replay buffer)以及目标网络(target network),其算法核心为值函数的更新,所谓的策略是通过对值函数进行greedy得到的,这类方法就叫做Value-Based方法。我们这里将要介绍的Policy-Based方法则是指我们直接对策略进行学习,本节中我们关注模型无关的强化学习方法。下图是三种主流RL方法的关系:

487

        Policy-Based RL有什么优势呢?

        1)有着更好的收敛性质。Value-Based方法需要对值函数进行更新,然后才能反映到策略中,而值函数中的一些小小改变可能会使得策略发生较大改变,从而收敛性较差。当然,我们在模型无关的控制中谈到过,如果将探索因子epsilon设定为1/k,则得到的Monte-Carlo Control是符合GLIE条件的,此时该方法对应的值函数将收敛于最优值函数。那有小伙伴就会问了,不是说值函数方法收敛性较差么?其实仔细想想,这并不矛盾,前面说的Value-Based方法收敛性较差指的是较容易震荡而难以收敛,而后面说的将收敛于最优值函数是指“最终”将收敛于最优值函数。谁知道这里的“最终”指的是多久呢?所以,我们还是觉得Policy-Based在这个问题上是有优势的。

        2)在高维度和连续动作空间上有着更高的效率。毕竟Value-Based方法需要计算,如果动作集很大,那么这个max操作的计算量就很大,而Policy-Based RL方法就不存在这种问题。

        3)可以学习随机性策略。Value-Based方法是隐式地对策略进行表示,需要用greedy方法得到策略,所以学习到的是确定性策略。

        当然,Policy-Based方法也有它的缺点:

        1)通常都是收敛到局部极值;

        2)Evaluating a policy is typically inefficient and high variance.(关于这点先挖个坑后面我们再补充)。

        举个例子,在我们所熟知的“石头剪刀布”游戏中,需要寻求纳什均衡,所以并不能弄一个确定性策略,这种情况下,一个均匀的随机策略就是最优的。

        再举个例子:

        在上面的这个格子世界中,两个灰色方格对于智能体而言并没有什么区别。如果使用一个确定性策略,那么在灰色方格处的决策要么都向左,要么都向右,不管是向左还是向右,都有可能卡住,如下图:

        当然,Value-Based方法也可以学习一个near-deterministic策略,比如说epsilon-greedy,这样的方法虽然不会一直卡住,但是一般需要较长时间才能结束这一episode。课程中有这么一句话:Whenever stochastic policy occurs, a stochastic policy can do better than a deterministic policy。也就是说,一般而言,只要出现随机性策略的时候,一般都会比确定性策略要好

        下面来看一下常用的几个目标函数:

        1)episodic环境中,我们使用start value:

        2)continuing环境中,我们使用average value:

        3)continuing环境中,也可以使用average reward per time-step:

        其中d为利用对应策略生成的马尔可夫链的稳态分布。1)中为从某个状态开始,后面将得到的奖励;2)中为continuing环境,所以并没有一个所谓的初始状态,也没有一个结束状态;3)中表示平稳状态分布下单步的奖励。

        有了目标函数之后,就可以考虑如何进行优化了。要么使用无梯度的方法,比如爬山法、遗传算法等,要么使用梯度方法,如梯度下降、共轭梯度、拟牛顿法等。在这里,我们可以通过选用梯度方法来获得更高的效率,因为这是一种有方向性的算法。在David Silver的课程中,有几句话值得注意:

        “发掘序列结构的优化方法”可以拿来搞点事情,这里先挖个坑,到时候有机会再补一补。

        

        OK,说完了目标函数的定义和优化方法的选择之后,我们来看一看score function:

        也即策略梯度可以等价地表示为策略乘以一个似然函数的导数,这个与极大似然操作形式一致的式子叫做score function,表述出来为:

        既然聊到了score function,那么我们通过两个例子来看一看,一是softmax policy,二是gaussian policy。下面我们对softmax policy的score function进行推导。

        首先假设我们使用特征的线性组合对动作进行加权:

 

 

        此时,score function为:

 

 

        同理,我们可以得到服从的高斯分布的score function:

        考虑完策略的导数之后,接着我们讨论奖励函数的导数。首先考虑一个简单的one-step MDP:

  

        推导奖励函数的梯度:

 

        我们通过这个简单的one-step MDP可知,奖励函数的导数等于socre function乘以reward在策略下的期望,也即:

        策略梯度定理正是这一简单情形的拓展:

        与上面的one-step MDP的情形相比,这里将其拓展到了multi-step MDP,并且将即时奖励r替换为了long-term值函数,这一定理非常重要。我们知道,我们对于策略参数的更新都是沿着极大化奖励函数的方向进行的,所以由上式我们可以对参数进行更新。

        接下来将将该定理结合model-free情形进行使用,得到REINFORCE算法:

        其想法非常简单,就是将奖励函数的梯度中的期望换为采样,在一个episode结束之后,利用该episode中的每一个step对参数进行更新。不过这个算法中对于的估计使用的是回报(return),这是一个无偏估计,但是却有着较大的方差,所以,我们考虑换成其他方法对值函数进行逼近,比如说利用神经网络或其他参数化方法,记参数为w(此处可回想DDPG算法形式):

        我们称之为Critic,并将上面的参数化策略称为Actor,将这二者结合起来,叫做Actor-Critic算法:

        对于参数w的更新,我们可以将回报(return)或者TD target作为目标,最小化当前值函数与目标的平方。此外,在Actor-Critic算法中,我们可以在每个step对策略进行更新,而不用像REINFORCE一样,只能在每个episode运行完成之后进行更新。因为这里每个step我们可以使用对奖励进行估计,然后代入上面的式子,对策略进行更新,而REINFORCE使用回报(return)决定了它不能实时更新。当然,在这里使用的是单样本更新,我们也可以将其换为least-squares方法,也即replay buffer方法。

        Actor-Critic算法虽然降低了方差,但是一般来说是有偏的,因为在approximating的时候引入了bias。那是否能够通过恰当地选择值函数估计器来避免引入bias呢?这是可以的。由此我们引出兼容函数估计(Compatible Function Approximation):

        考虑条件1中提到的式子,用语言表述为:“score function = the gradient of Critic”,将其代入到中,可得:

        比方说,在某个状态s和动作a下,假设为正,则沿着的梯度方向进行更新,且越大,越大,如果为负,则朝着与的梯度相反的方向更新。换句话说,我们这里的朝着大的方向更新,关于兼容函数估计定理的证明就不在这里赘述了。关于score function的理解可以参考Karpathy的博客,给出一幅有助于理解的图在下面,帮助大家理解。

        其中最左边一幅图表示score function向量,其实就是朝着使p(x)增大的方向;中间的图则是表示一个加权函数f,比方说我们的 等(值得注意的是,图中标示的score function并不是我们这里的score function,只是因为f作为一个加权,所以这样叫罢了),这个函数在除了三个小圆圈范围内的其他区域的值均为-1,小圆圈内的值为+1;最右边的图则是表明,除了在小圆圈中的区域外,其他区域对于参数的更新是与score function相反的,所以分布p(x)进行了相应更新。

        前面我们说过,为了降低REINFORCE算法的方差,我们引入了Critic,现在,我们进一步使用Baseline来降低RL中的方差。首先我们可以推导出如下式子:

        该式表明,对于某一个与动作a无关的基准函数B(s),它乘以score function之后,计算在策略下的期望,结果为0。换句话说,我们可以在奖励函数的梯度的基础上任意的增减一个这样的式子,而保持梯度不变。一个不错的Baseline函数就是值函数是,在原奖励函数梯度的计算式上减去该值,得到:

        我们称为优势函数,用其表示奖励函数的梯度为:

        优势函数的意义是,在动作值函数的基础上减去了对应状态拥有的基准值,使之变为动作带来的增益,因而降低了方差(降低了由于状态基准值的抖动引起的方差)。当然,这样做也有缺点(笔者观点),那就是相当于将不同状态下的动作带来的奖励放在同一水平考虑,实质上是应该结合状态进行考虑的,关于奖励函数,我们可以结合Dueling Network进行理解与深思(提示:Dueling Network中使用双流结构,考虑了优势函数以及状态值函数,从二者的作用来看,状态值函数那一项也是有意义的)。

        现在我们给出的计算优势函数的公式是理论上的,或者说是策略对应的真实优势函数,但实际上,我们并不知道该函数,因而只能对其进行估计,就像我们前面估计状态值函数和动作值函数一样:

        我们可以不断地更新以及,比方说利用TD方法进行更新,然后通过计算得到。不过令人感到不开心的是,这里我们需要维持两个逼近器,有没有方法能够让我们用一个逼近器就能够给出优势函数的估计呢?有的,具体见下面的PPT:

        其中最为重要的结论是:“如果我们使用真实的状态值函数来计算TD error,则TD error为优势函数的一个无偏估计”。并且,在这种方法中,我们仅需一组参数就能够对优势函数进行估计

        关于不同Time-Scales下的Critics、Actors以及考虑资格迹的策略梯度我们并不详细讨论,鉴于其重要性,因而直接给出课程PPT如下:

        好了,最后我们介绍一下自然策略梯度作为本文的收尾。

        自然策略梯度也即直接对原始策略梯度进行修正,乘以一个Fisher信息阵的逆。这样做有什么用处呢?它使得策略梯度变成parametrisation无关的了。举个例子,对于一个softmax策略,我们增大其中所有动作的score,此时各个动作的概率并不会发生改变,这可以通过其score function来考虑:

        比方说,我们反过来想,成比例的增大策略中各个动作对应的分子,也即,因为softmax策略中的分母也会成比例的增大,所以最终各个动作的概率并没有发生改变。如果这里我们是通过增加来增加分子的值的,所以上面的score function也可能会随之增大,这样的话,虽然该策略各个动作对应的概率没有变,但是下一步对于策略的改进却发生了改变(想想对于策略参数的更新公式),这并不是我们想看到的。而自然策略梯度可以很好地解决这一问题,对于刚刚提及的这种情形,Fisher信息阵也将增大,从而使得下一步对于策略的改进与reparametrisation无关,就很开心了。关于自然梯度可以参考前面的一篇博客:《关于Fisher信息阵自然梯度摘录》

        将自然策略梯度与Actor-Critic结合,得到Natural Actor-Critic如下:

        在上面的推导中,我们可以将compatible function approximation积分代入对于奖励函数的求导中,得到最终的奖励函数的自然梯度,发现它就等于Critic的参数w,这并不是巧合,当我们结合natural policy gradient + compatible function approximation之后,就可以推到得到这一结论:对Actor参数的更新就等于Critic的参数。

        

        本文的介绍就到这里,最后给出一页总结性的PPT:

        其中,如果我们要实现Advantage Actor-Critic的话,则可以根据前面说到的“TD-error是Advantage的无偏估计(当状态值函数为真实状态值函数时)”这一点来实现,所以,此时我们的Critic实质上仍然为状态值函数V(s),对V(s)进行估计,然后利用TD-error计算得到Advantage,当然,算法如TRPO、PPO实现中用到的Advantage也是这样计算得到的,毕竟一般我们不会去用一个神经网络直接拟合Advantage吧?这样的话我们怎么知道拟合出来的不是Q呢?不过在Dueling Network里面直接拟合了Advantage网络,这篇文章使用了一个小技巧,就是在A的基础上减去了A的均值,从而使A不至于学成Q。这样做的具体原因是,我们对Advantage的定义式求取期望:

        由值函数和状态值函数的定义可得:

        从而有:

        对于确定性策略而言:

        此时,去掉取期望操作,可得:

        所以,在实现时,可以利用这一性质,将对于A的学习换为下面的式子:

        由于对于一个连续变量求max计算量太大,所以一般在工程上都会用求平均替代,这种做法在TRPO、Dueling Network中都有体现:

        至于具体细节可以参考《Dueling Network Architectures for Deep Reinforcement Learning》。

 

        新的一年祝大家快快乐乐,开开心心~

 

 

 

 

 

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值