前言:演员-评论员算法又叫actor-critic算法
  先从宏观上把握下本章的的内容:之前介绍过actor-critic是一种value base和policy base的结合体。首先要说明各自的缺点,再整体介绍一下actor-critic算法本身。最后会介绍几种基于actor-critic的改进算法。让我们开始吧!
  actor-critic是一种结合策略梯度(policy base)和时序差分学习(value base)的RL方法。对actor和critic进行下介绍:
  actor指策略函数,即学习一个策略来得到尽量高的回报
  critic指价值函数,即对当前策略的值函数进行估计,评估演员的好坏
  首先来回顾一下单纯的policy base和value base有什么问题:

  策略梯度回顾:
  从之前的计算知道策略梯度的表达式是:

之前说过策略梯度的数据是不能重用的,也就是每次进行参数更新时都要采样一次。因为评价策略的好坏就是价值,价值在具体的轨迹中就是奖励。如果用G来表示累计奖励的话,因为状态执行动作得到奖励的随机性,G本身是有随机性的。当然采样足够多会服从某个分布。但在采样很少的情况下,G本身的随机性还是很大的。所以说策略梯度这种方法很不稳定

  深度Q网络回顾:
  通过网络训练可以解决上面的随机性,一个中心思想就是利用G期望代替采样值(普遍认为期望的稳定性更好)。那==如何利用期望代替采样值呢?==方法就是DQN,DQN本身是value-base,两种value本身计算的都是期望。实际估计实现时可以用MC(更精确)或者TD(更稳定)

  演员-评论家算法
  回想一个Q函数的定义,就是在状态s执行a并保持策略Π后累计奖励的期望值。累计奖励的期望不就是E(G)吗!所以存在一个等式:

在策略梯度公式中,表达累计奖励的是:

 所以对这个进行一次替换,用Q函数来表示。对于后面的baseline,之前讲过baseline的计算。有一个普遍认同的做法是用状态价值函数来表示。状态价值函数没有涉及到action,对于同一个策略Π来说,状态价值函数就会是动作价值函数的期望值。最终会得到下面这

这个等式:

回想一下实现原理,用Q函数代表的期望值替换掉策略梯度中随机性较大的累计奖励。然后后面的过程按照策略梯度的方式做更新,这就是actor-critic
actor-critic本身是一种方法,但还有三种改进的方法:优势演员-评论员算法、异步优势演员-评论员算法、路径衍生策略梯度

  优势演员-评论员算法(A2C)
  从上面的actor-critic的算法表达式中得知,Q-V这个计算式中涉及到两个网络:Q网络和V网络,它们都在进行估计。如果估计不准的话就是两倍的风险。所以一种想法是:把其中一个网络用另一个来表示,这就A2C的思想,把Q用V来表示。Q函数可以写成r+V的期望

值,即:
  因为随机性,总是要取期望才能够得到Q函数。期望本身是很烦的,直接把期望拿下去:

期望可以直接拿下去的原因:通过试验得到的,效果很好
  所以现在的表达式变成了:

这个式子之前叫做优势函数,所以这种方法叫做优势演员-评论家方法。它整体的运作流程如下:

 有一个初始策略Π,初始actor和环境互动收集资料。拿着资料去估计价值函数(MC或TD)。然后利用新的策略梯度表达式更新策略,获取新策略Π。再和环境互动(上图是顺时针运转的)
  在A2C实现的时候有两个小策略:
  1)网络复用 其中涉及到价值网络V和策略网络Π,前面一部分可复用,后面再分开
  2)继续使用探索机制

  异步优势演员-评论员算法(A3C)
  RL有一个问题:训练慢。那==怎么提升训练速度呢?==这里有一个例子我真的觉得妙极了。就是那鲁多当年搓丸子的时候自己练比较慢,于是在提示下用影分身进行训练。影分身的得到的经验最后都会给主体。所以相当于并行训练。A3C也是这个思路,它同时开很多个线程,把策略网络和价值网络绑在一起。最开始做复制,然后各自更新。最终把结果反馈给中央的控制中心。实现的原理图如下:

不过有一个点需要注意下:在各自进行训练的时候还是要注意保证多样性。这样才能够得到更好效果(反复训练一个没什么意思)。而且对于参数是直接覆盖,网络A训练完之后进行覆盖原值。网络B训练完之后又会覆盖A值。

  路径衍生策略梯度(pathwise derivative policy gradient)
  首先明确一下这种方法的两个作用:
  1)之前的actor-critic中critic只会判断一个策略好于不好,而路径衍生的critic会直接告诉更好的策略(从actor-critic角度)
  2)路径衍生策略梯度可以来解决DQN不适用连续动作的问题(从DQN角度)
  先从actor-critic角度看:
  之前说先学习Q函数(critic),然后确定argmax。在路径衍生中直接设计一个演员的角色,这个演员的作用是通过学习可以输出一个动作a使Q函数最大化。它的输入是状态,输出就是动作。
  ==但这个演员具体的训练怎么实现呢?==实际上在训练时会把Q和演员接起来拼成一个大网络,固定住Q的参数,只调演员的参数,用梯度上升最大化Q
  从DQN角度
  之前连续动作时,用优化问题解决argmax。路径衍生中直接设计一个solver。这个solver的作用就是输入状态s,输出能最大化Q的动作a。
  其实从两个角度看就是都是一件事,重新设计了一个演员/solver。输入状态能够输出最大化Q的动作a。
  它的算法流程是:最开始演员Π与环境互动,然后估计Q值。估计完后确定Q值,只学习一个演员,接下来的过程就是学习这个演员

(策略梯度了~)。流程图如下:

 把DQN改成路径衍生策略梯度需要进行四个改变:
  1)把Q换成Π,之前使用Q决定产生动作,现在要换成Π(演员)
  2)存储缓冲区要计算s(t+1),代表采取动嘴a得到的Q值。之前是用argmax求,但argmax不好求。把任务交给演员。Q函数中有两个Q网络:真正Q网络和目标Q网络。也对应有两个演员:真正演员和目标演员。
  3)之前只要学Q,现在还要学一个演员Π
  4)目标Q函数是定期更新的,那目标演员也是要定期更新的

  以上就是关于actor-critic的全部内容啦~来看看课后题吧:

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