这是当下RL最流行的算法之一。它把基于value的方法,特别是值函数近似,引入到了policy
gradient中,便得到了AC。AC方法仍然是一种PG方法。actor和critic分别代表什么意思呢?这里,actor指policy
update,因为策略是用来采取行动的;critic代表policy evaluation或value
estimation,是用来估计s和q的value的,以评价策略好坏。如果要引入deterministic的策略,就得到了最后的DPG算法。
QAC
先来介绍最简单的AC算法,以此学习AC算法核心思想。回顾我们的SGD下的PG算法:
因为参数在变化,所以这个算法就是在更新策略,那么这个算法其实就是actor。那么critic是啥呢?显然就是对的估计。我们之前提过用MC估计q值,如果用TD方法估计的话,这个算法就一般被称为AC。QAC算法如下:

我们得到实际就是一个experience
sample,就可以用他们去估计action
value;这就是我们先前讲过的结合了值函数近似的sarsa算法,也就是AC里的critic。
PG算法是on-policy的,而且我们不用变成epsilon-greedy的,因为ln的存在使得π值必须大于0,所以它本身就是stochastic的。
A2C
为什么叫A2C呢?因为这个算法叫Advantage
actor-critic。A2C是QAC的一个推广,基本思想是引入一个baseline(这里是“偏置”)来减少估计的方差。首先要介绍一个性质:我们所推导的策略梯度,如果引入一个新的偏置,是不会发生变化的。写成公式就是这个样子:
这里的b(S)是一个标量函数,作为我们的baseline。为什么引入b不会变化?它有什么用?首先考虑前者。要证明不会变化,根据期望的线性关系,就是证明:
我们按照定义,把它展开,一步步推导: 这里的是s的分布。可以看出也是因为这个b和a没关系,所以不会改变期望,因为可以从求和内提出去。
下面回答另一个问题:有什么用呢?为了方便表示,我们令: 这样梯度就可以写成。我们已经知道,b(S)不管咋变,E(X)是不会变的,但是var(X)(也就是概统里的方差D(X))是会变的。首先引入一点。我们先前学的概统没有涉及到矩阵随机变量。如果X是个矩阵,那么我们有:
我们用迹来作为评价方差的工具,这里的。这个公式的推导根据定义即可:
显然是保持不变的,但可能会受到baseline的影响。为说明此,我们可以计算一下它:
由此看出baseline对方差有影响。因此我的目标就是找到一个最好的baseline让方差达到最小。那为什么要让方差达到最小?这是希望在采样的时候得到最小的误差。之前介绍的REINFORCE和QAC的baseline都是等于0的,但是这不是一个很好的baseline。最好的baseline应该是对任意的s,都有如下等式:
这其实是对的解,具体过程就不提及了。这个公式里的可以看作是一个权重。这个b虽然是最优的,但是太复杂了,实际中我们经常把权重去掉,直接求q的期望,那显然我们的b这时候就变成了v(s):
我们已经介绍了baseline的基本性质,下面看看怎么把它用到AC算法中。我们设定:,那么梯度上升算法就变成了:
这里的,它有个名字叫做advantage
function,常用的表示符号是A,这里因为有A了所以用表示。它为什么叫优势函数呢?根据这一定义,我们可以把看作是在某一状态下的一个平均值。那如果某一个action比这个平均值大,那就说明它比较好,有一定优势,所以叫优势函数。那很自然的,我们可以得到这个算法的通过采样的stochastic
version: 类似于上节课,我们可以把式子重新组织为: 显然比上节课的要好,因为我们更在乎相对值而不是绝对值。更长远的,我们可以用TD
error的形式来估计优势函数: 为什么这样是合理的?因为从期望的角度来看,我们有: 这样做的好处是,对于,我们要两个神经网络来近似q和v,但是现在只需要一个神经网络近似v就可以了。到此,我们就得到了A2C的算法:

可以看出这是一个on-policy的算法。因为π是stochastic的,所以也不用epsilon-greedy。
Off-policy actor-critic
如果我们之前有一些经验了,我们想用这些经验,我们就要用off
policy的方法。我们将会介绍重要性采样这一方法,来把on-policy转化成off-policy的。我们之前说过,PG是on-policy的,是因为它的梯度是一个期望,这个期望中的A要服从策略π,它即是behavior又是target。我们为什么要转化成off-policy?因为我们希望复用一些其他方法得到的经验。
我们转化的工具就是importance
sampling。实际上,任何要求期望的算法,都可以用到重要性采样的技术,包括之前的MC和TD。我们先看一些直观的例子:假设有个随机变量X属于{+1,-1},服从一个分布:。这时显然期望就是0.但是如果我们不知道分布的表达式,那我们能不能通过采样的方式求期望呢?
讲MC的时候,我们提到过大数定律相关的方法。现在我们考虑一种新的情况:我们有一些样本,它们是在而非下采样的。假设分布为:,;那显然E(X)=0.6,与之前的是不相等的。我们的问题是,我们想用产生的采样来估计下的期望。我们这样做的原因是因为,off-policy里有一个behavior
policy ,就是我们产生数据的;还有个target policy ,作为我们的。
Importance Sampling
我们的核心公式是: 这就是重要性采样最核心的方法;我们拥有在下的采样。怎么求呢?不难,我们只需要令: 因此根据大数定理就有: 进而我们得到了我们最终的算法: 这个式子实际上是一个加权平均是,权重叫做importance
weight。如果,那么显然就成了;如果,说明在下比在下更容易采样到x;所以要给一个重要性权重。
有同学可能会问:既然我们的计算需要知道,那既然知道了,为什么不直接求期望呢?这是因为有时候我们有时候是确实不能直接求的,就比如考虑连续的情况,这时候期望是积分,如果太复杂就求不出来了;再比如假如是个神经网络,我们根本无从知道的表达式,就根本没法求。
off-policy PG
有了重要性采样,我们把他用到PG中来实现off-policy学习。假设是behavior
policy,用来生成经验;我们的目标是用这些经验更新target policy
π,π的参数是,我们要优化这样的目标函数: 利用重要性采样,我们的梯度可以求得(细节略): 可以看出,这是的A服从的不是π而是;期望内部与之前的差别就在于多了个重要性采样的权重(蓝色部分),分母就对应那个,分母就对应那个。
off-policy AC算法
有了off-policy
PG表达式,就可以应用到梯度上升里进行优化。off-policy里仍然可以加上baseline。我们依旧可以选择baseline为:。这样就可以得到: 此时的随机梯度下的算法就可以写为: 与A2C一样,我们用优势函数去近似代替: 就得到了最后的算法: 这里,lnπ的梯度就和分子的π约掉了,于是我们得到了最终版本:
但是注意一下,这里我们的分母是固定的值,所以我们这里就没有探索了,只剩下exploitation了。off-policy
AC和A2C伪代码基本差不多:

DPG
我们之前提到的QAC,A2C,Off-policy
AC的π都是严格大于0的,即策略都是stochastic的。现在我们要使用deterministic
policies。为什么要关心这样的策略?这是因为如果action有无限个的话,这种方式就不能表示了(神经网络没法输出无限个π值的,对吧?)。现在,我们把deterministic
policy定义为: 可以把看作状态空间到动作空间的映射,实际就用神经网络表示。之前我们的都是针对stochastic
policies的。现在我们必须推导在deterministic下的策略梯度是什么。考虑我们的目标函数:
其中是概率分布。独立于。有两种重要的选择的情况:第一种是我们只关心某个特殊的状态,我们每次任务都会从这个状态出发,那么就有,这样就有;另一种情况是是behavior policy的stationary
distribution,这个和off-policy是有关系的。实际上DPG是天然off-policy的,不用再用重要性采样去转换。原因在于求梯度的结果:
这里的是一个state
distribution。这个梯度的具体推导不太好在这里给出,略过。这个公式的意思是,先求q对a的梯度,然后再把所有a全替换成。这个梯度和stochastic的梯度是不一样的,重要的区别在于这里不涉及A,也就没有A的梯度,因此这是一个off-policy的算法(因为我们没有要求a要从哪一个策略得到)。
有了梯度后,就可以得到优化J的公式,在随机梯度算法下的公式为: deterministic actor-critic算法的伪代码如下:

这是一个off-policy的实现,注意和可以是一致的,我可以给加上一些噪音变成,让它具备一定的探索性,这时候就变成了on-policy的情况了。当然本质上还是off-policy的。另外一个问题就是,如何选取?一种方法是早期运用比较广泛的线性函数,即令,是feature
vector;另一种方法就是使用神经网络,这样的方法就成了DDPG(deep
deterministic policy gradient)。
到此我们的RL基础就讲完了,拜拜~