前言:近端策略优化(proximal policy optimization, PPO)
  首先先进行一个引入。在之前的内容中介绍过同策略和异策略的问题,先来复习下这两个的定义:
  同策略:学习的智能体与和环境交互的智能体是同一个
  异策略:学习的智能体与和环境交互的智能体不是同一个
  之前在将策略梯度的时候,结论式的该出了策略梯度采样的数据只能够使用一次。这个其实很浪费的。策略梯度中只针对了一个智能体做优化,所以策略梯度本身是同策略。而采样数据只能用一次也是同策略的一个特性。
  采样数据只能用一次其实是因为参数改变后之前的采样数据都无法使用了(原因是原来采样数据都是依据之前的固定策略,原始策略采集的值对于新策略没有参考价值)
  但对于异策略来说,参数改变后,数据仍可以使用(因为异策略中学习智能体独立,学习智能体的参数改变不影响探索智能体的环境探索)。也就是说异策略有避免重采样的优点。所以更倾向于异策略。那现在的研究重点就变成了:如何把一个同策略转变成异策略?
  具体的方法就是——重要性采样(important sampling)
  重要性采样:更换采样空间。不能从分布p采样数据,从另一个分布q进行数据采样
  其实这个变化思想很简单,之前说过数据不能使用的原因在于参数改变了。那把同策略的一个参数变成两个参数,不就行了?用更专业的术语就是:不能从分布p中采样数据,那就到分布q中采样数据。只要两个分布可以转换就可以呀!
  重要性采样的实现思想:更换采样空间
  用数学化的语言描述这种变换思想:

 上式把由p采样,变成了由q采样。因为两个采样毕竟不是完全相同的,有一个p/q的系数,称其为重要性权重
  重要性权重:修正采样时两个分布的差异。就是
  看的出来在上面的式子中,使用期望作为衡量分布的标准。但有的时候方差也是衡量分布的重要标准。虽然期望相同,但仍希望方差在一定范围内。这就对p,q提出了一些限制。来计算一下看看究竟,首先明确方差的计算公式:

 二者方差的计算过程如下:

& emsp;可以看出唯一的差别就是第一项不同,有一个系数上的差距(p/q)。当然了如果对分布p,q采样次数足够多的情况下,得到的结果是相同而(因为采样多了就反应真实值了)。但如果采样不够多的情况下又会如何呢?这也就重要性采样的问题。
  举个例子说明p,q差距很大时会产生什么样的问题:

 假设蓝线是 p(x) 的分布,绿线是 q(x) 的分布,红线是 f(x)。
  首先计算从p分布取样的f(x),因为p分布在左侧,少量采样点的话都会分布在左侧。那样f(x)就会全是负值。也就是求出的期望是负值。那再看q分布的,q分布采样点大多会在右边,这个时候f(x)*p/q大概率也是正的。但是如果q分布中出现一个左边的采样点。那么由于p/q很大,f(x)就会乘以一个很大的负权重。那么就有可能求两边期望的时候反而变成了负的。不过q分布的不确定性就会和p分布可能存在很大差距,这就是重要采样性的问题。
  不管怎么说,现在可以用重要性采样的思路把同策略改成异策略了,就是乘以一个重要性权重。就可以把之前策略梯度的表达式写成下面这样了:

  原来的数据是从Θ采样得到的,现在是从Θ’得到的了。就解决了之前数据无法复用的问题了。
  之前将策略梯度的时候,引入优势函数就是R-b,用A(s,a)表示,如果是正的要增加概率,如果是负的降低概率。现在把策略改了,表示的时候应该使用Θ’的状态动作对表示了,数学式如下:

  为了简化这个式子,做以下两个假设:

 简化利用了下面这个等式:

  那么上式就可以简化成:

 那为什么要做这个假设呢?根本的思路是便于计算
  第一个假设我也不知道,可能单纯是为了方便计算。第二个给出了原因:

 不过最终的优化目标函数和之前有所不同:

 上面说到==不希望两个分布相差太多,那有没有什么方法可以避免呢?==这就是本章的主人公:PPO
  PPO的作用:通过限制重要性采样结果之间的差距,避免异策略两个分布差太多
  需要注意的是:PPO本身是一种同策略的算法。
  优化的目标是J函数,而这个目标函数又牵扯到重要性采样。既然两个分布不能相差太多,那就给两个分布加上一个约束就行了。称这个约束是Θ和Θ’动作的KL散度(KL divergence)。
  KL散度:衡量Θ和Θ’有多像
  PPO的数学表达式如下:

  很容易理解上面的式子,J是优化的目标函数,后面是约束,两项组成。那个β可以理解成惩罚因子,因为之前还有一个版本叫信任区域策略优化(TRPO),那个是式子中明显有约束。这个β相当于有约束优化变成无约束优化乘的那个惩罚因子。
  之前说KL散度是衡量两个分布有多像,那到底指的是什么?KL散度指的是行为上的像,但 ==为什么用行为上的像而不是距离(比如欧氏距离等等)?==这个其实是因为参数数值上的变化并不一定能够体现在行为上。参数变得很小,行为差距也可能很大。反之亦然。

  PPO还有两个变种:PPO-penalty ,PPO-clip。下面简单介绍一下:
  1)近端策略优化惩罚(PPO-penalty)
  这个事情做的简单,就是动态的调整β。也叫自适应KL散度。这个方法中先自行设定一个可以接受的KL散度最大值,如果发现KL散度项太大,说明惩罚项没作用就调大β。同理设置一个最小值,如果小于最小值,调小β。
  2)近端策略优化裁剪(PPO-clip)
  上面只是介绍了KL散度的概念,而并没有说如何去计算(谁知道呢~)。如果它的计算太过于复杂,那能不能绕过这个呢?这就是PPO-clip干的事情。PPO-clip的思想是绕过KL散度。它修改了优化的目标:

里面有一个clip操作符,它的意思是如果第一项小于第二项,最终值取第二项。如果第一项值大于第三项,最终值取第三项。如果在二者之间,则保持自己的值。图像就是这样的:

  那 PPO-clip是怎么实现限制的呢?这个从它的目标优化式来看,把目标优化式分成两部分。一部分是概率,一部分是A。来看看最终目标优化式的取值。可以知道概率值都是正的,所以概率部分实际上是从两个之间选个最小的。但A可能是正的,也可能是负的。代表着这个状态动作对的概率将被增大或者是减少。

  假设上图中绿线是概率,蓝线是clip函数。当A为正的时候就取小,如左边红线。A为负的时候就取大,如右边红线。以A为正举例,A正代表要增大概率,但概率超过1+ε就不会增大了,这就是上线。同理A为负时规定了下限。这样限制两个概率的比值就限制两个分布之间的关系。让他们差距不要打大,太大得不到任何收益。

  这样这一章的主要内容就结束啦~
  老规矩,上个习题课:

因作者水平有限,如有错误之处,请在下方评论区指正,谢谢!