第三章 强化学习之Actor-Critic(演员-评论家)算法

本文转自蘑菇书强化学习基础,是根据台湾李宏毅老师《深度强化学习》整理而来。

       演员-评论员算法是一种结合策略梯度时序差分学习的强化学习方法,其中,演员是指策略函数\pi_{\theta}(a|s),即学习一个策略以得到尽可能高的回报。评论员是指价值函数V_{\pi}(s),对当前策略的值函数进行估计,即评估演员的好坏。借助于价值函数,演员-评论员算法可以进行单步参数更新,不需要等到回合结束才进行更新。

        优势演员-评论员(advantage actor-critic,A2C)算法:一种改进的演员-评论员(actor-critic)算法。
        异步优势演员-评论员(asynchronous advantage actor-critic,A3C)算法:一种改进的演员-评论员算法,通过异步的操作,实现强化学习模型训练的加速。

3.1策略梯度

        策略梯度在更新参数\theta时,通过

 来计算梯度。上式表示我们首先通过智能体与环境的交互,可以计算出在某一个状态 s 采取某一个动作 a 的概率p_{\theta}(a_t|s_t)。接下来,我们计算在某一个状态 s 采取某一个动作 a 之后直到游戏结束的累积奖励。\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n} 表示我们把从时间 t到时间 T 的奖励相加,并且在前面乘一个折扣因子,通常将折扣因子设置为 0.9 或 0.99等数值,与此同时也会减去一个基线值 b,减去值 b 的目的是希望括号里面这一项是有正有负的。如果括号里面这一项是正的,我们就要增大在这个状态采取这个动作的概率;如果括号里面是负的,我们就要减小在这个状态采取这个动作的概率。

        我们使用 G 表示累积奖励,G 是非常不稳定的。对于同样状态的 s 与同样的动作 a ,G可能有一个固定的分布。把 G 想成一个随机变量,实际上是在对 G 做采样,用这些采样的结果去更新参数。但实际上在某一个状态 s 采取某一个动作 a,接下来会发生什么事,其本身是有随机性的。虽然说有一个固定的分布,但其方差可能会非常大。智能体在同一个状态采取同一个动作时,最后得到的结果可能会是很不一样的。当然,假设我们在每次更新参数之前,都可以采样足够多次,那当然就没有以上的问题了。但我们每次做策略梯度,每次更新参数之前都要做一些采样时,采样的次数是不可能太多的,我们只能够做非常少量的采样。如果我们正好采样到差的结果,比如采样到 G=100、采样到 G=−10,显然结果会是很差的。

3.2深度Q网络

Q:我们能不能让整个训练过程变得稳定,能不能直接估测随机变量 G 的期望值?

A:我们直接用一个网络去估测在状态 s 采取动作 a 时 G 的期望值。如果这样是可行的,那么在随后的训练中我们就用期望值代替采样的值,这样就会让训练变得更加稳定。

Q:怎么使用期望值代替采样的值呢?

A:这里就需要引入基于价值的(value-based)的方法。基于价值的方法就是 深度Q网络 。深度Q网络 有两种函数,有两种评论员。如下图所示,第一种评论员是 V_{\pi}(s)。即假设演员的策略是 \pi,使用 \pi 与环境交互,当智能体看到状态 s 时,接下来累积奖励的期望值是多少。第二种评论员是 Q_{\pi}(s,a)Q_{\pi}(s,a) 把 s 与 a 当作输入,它表示在状态 s 采取动作 a,接下来用策略 \pi 与环境交互,累积奖励的期望值是多少。V_{\pi}接收输入 s,输出一个标量。Q_{\pi}​ 接收输入 s,它会给每一个 a 都分配一个 Q值。

3.3优势演员-评论员算法 

        如下图所示,随机变量G的期望就是Q值,即

 上式也为Q函数的定义,即在某一状态s,采取某一动作a,假设策略是π的情况下所能得到的累积奖励的期望值,即G的期望值。

        有不同的方法表示基线,一个常见的方法是用价值数V_{\pi_{\theta}}\left(s_{t}^{n}\right) 来表示基线。价值函数的定义为,假设策略是 \pi,其在某个状态 s 一直与环境交互直到游戏结束,期望奖励有多大。V_{\pi_{\theta}}\left(s_{t}^{n}\right) 没有涉及动作,Q_{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right) 涉及动作。 V_{\pi_{\theta}}\left(s_{t}^{n}\right) 是 Q_{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right) 的期望值, Q_{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)-V_{\pi_{\theta}}\left(s_{t}^{n}\right) 会有正有负,所以 \sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b 这一项就会有正有负。所以我们就把策略梯度里面 \sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b 这一项换成了优势函数A^{\theta}\left(s^{n}_{t}, a^{n}_{t}\right),即 Q_{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)-V_{\pi_{\theta}}\left(s_{t}^{n}\right)。因此该算法称为优势演员-评论员算法。

        如果我们这么实现,有一个缺点,即我们需要估计两个网络————Q网络和 V网络,估计不准的风险就变成原来的两倍。所以我们何不只估计一个网络呢?事实上,在演员-评论员算法中,我们可以只估计网络 V,并利用 V 的值来表示 Q 的值,Q_{\pi}\left(s_{t}^{n}, a_{t}^{n}\right) 可以写成 r_{t}^{n}+V_{\pi}\left(s_{t+1}^{n}\right) 的期望值,即

         在状态 s 采取动作 a,我们会得到奖励 r,进入状态 s_{t+1}​。但是我们会得到什么样的奖励 r,进入什么样的状态 s_{t+1}​,这件事本身是有随机性的。所以要把r_{t}^{n}+V_{\pi}\left(s_{t+1}^{n}\right)取期望值才会等于Q函数的值。但我们现在把取期望值去掉,即

         我们就可以把Q函数的值用 r_t^n + V_{\pi}\left(s_{t+1}^{n}\right) 取代,可得

        把取期望值去掉的好处就是我们不需要估计 Q 了,只需要估计 V。但与此同时我们会引入一个随机的参数 r。r 是有随机性的,它是一个随机变量,但是 r 相较于累积奖励 G 是一个较小的值,因为它是某一个步骤得到的奖励,而 G 是所有未来会得到的奖励的总和,G 的方差比较大。r 虽然也有一些方差,但它的方差比 G 的要小。所以把原来方差比较大的 G 换成方差比较小的 r 也是合理的。

        优势演员-评论员算法的流程如下所示,我们有一个 \pi,有个初始的演员与环境交互,先收集资料。在策略梯度方法里收集资料以后,就来更新策略。但是在演员-评论员算法里面,我们不是直接使用那些资料来更新策略。我们先用这些资料去估计价值函数,可以用时序差分方法或蒙特卡洛方法来估计价值函数。接下来,我们再基于价值函数,有了新的 \pi 以后,再与环境交互,收集新的资料,去估计价值函数。再用新的价值函数更新策略,更新演员。整个优势演员-评论员算法就是这么运作的。

        实现优势演员-评论员算法的时候,有两个一定会用到的技巧。第一个技巧是,我们需要估计两个网络:V 网络和策略的网络(也就是演员)。评论员网络 V_\pi(s) 接收一个状态,输出一个标量。演员的策略 \pi(s) 接收一个状态,如果动作是离散的,输出就是一个动作的分布。如果动作是连续的,输出就是一个连续的向量。

        下图所示为离散动作的例子,连续动作的情况也是一样的。输入一个状态,网络决定现在要采取哪一个动作。演员网络和评论员网络的输入都是 s,所以它们前面几个层(layer)是可以共享的。

        会让演员与评论员共享前面几层,并且共用同一组参数,这一组参数大部分都是卷积神经网络的参数。先把输入的像素变成比较高级的信息,再让演员决定要采取什么样的动作,让评论员即价值函数计算期望奖励。

        第二个技巧是我们需要探索的机制。在演员-评论员算法中,有一个常见的探索的方法是对 \pi输出的分布设置一个约束。这个约束用于使分布的熵(entropy)不要太小,也就是希望不同的动作被采用的概率平均一些。这样在测试的时候,智能体才会多尝试各种不同的动作,才会把环境探索得比较好,从而得到比较好的结果。

3.4异步优势演员-评论员算法

        强化学习有一个问题,就是它很慢,怎么提高训练的速度呢?例如,如下图所示,在动漫《火影忍者》中,有一次鸣人想要在一周之内打败晓,所以要加快修行的速度,鸣人的老师就教他一个方法:用影分身进行同样的修行。两个一起修行,经验值累积的速度就会变成两倍,所以鸣人就使用了 1000 个影分身来进行修行。这就是异步优势演员-评论员算法的体现。

        异步优势演员-评论员算法同时使用很多个进程(worker),每一个进程就像一个影分身,最后这些影分身会把所有的经验值集合在一起。如果我们没有很多 CPU,不好实现异步优势演员-评论员算法,但可以实现优势演员-评论员算法。

        异步优势演员-评论员算法的运作流程,如下图所示,异步优势演员-评论员算法一开始有一个全局网络(global network)。全局网络包含策略网络和价值网络,这两个网络是绑定(tie)在一起的,它们的前几个层会被绑在一起。 假设全局网络的参数是 \theta_1​,我们使用多个进程,每个进程用一张 CPU 去跑。比如我们有 8 个进程,则至少 8 张 CPU。每一个进程在工作前都会把全局网络的参数复制过来。接下来演员就与环境交互,每一个演员与环境交互的时候,都要收集到比较多样的数据。例如,如果是走迷宫,可能每一个演员起始的位置都会不一样,这样它们才能够收集到比较多样的数据。每一个演员与环境交互完之后,我们就会计算出梯度。计算出梯度以后,要用梯度去更新参数。我们就计算一下梯度,用梯度去更新全局网络的参数。就是这个进程算出梯度以后,就把梯度传回给中央的控制中心,中央的控制中心就会用这个梯度去更新原来的参数。

        注意,A3C使用了平行探索的方法,所有的演员都是平行跑的,每一个演员各做各的,不管彼此。所以每个演员都是去要了一个参数以后,做完就把参数传回去。当第一个进程做完想要把参数传回去的时候,本来它要的参数是 \theta_1​,等它要把梯度传回去的时候,可能别人已经把原来的参数覆盖掉,变成 \theta_2​了。但是没有关系,它一样会把这个梯度就覆盖过去。

3.5路径衍生策略梯度

        路径衍生策略梯度可以看成深度Q网络解连续动作的一种特别的方法,也可以看成一种特别的演员-评论员的方法。一般的演员-评论员算法的评论员就是输入状态或输入状态-动作对,给演员一个值,所以对演员来说,它只知道它做的这个动作到底是好还是不好。但在路径衍生策略梯度里面,评论员会直接告诉演员采取什么样的动作才是好的,什么动作可以获得较大的值

        路径衍生策略梯度算法如下图所示,假设我们学习了一个Q函数,Q函数的输入是 s 与 a,输出是 Q_{\pi}(s,a)。接下来,我们要学习一个演员,这个演员的工作就是解决 arg max 的问题,即输入一个状态 s,希望可以输出一个动作 a。a 被代入Q函数以后,它可以让 Q_{\pi}(s,a)尽可能大,即

        实际上在训练的时候,我们就是把 Q 与演员连接起来变成一个比较大的网络。Q 是一个网络,接收输入 s 与 a,输出一个值。演员在训练的时候,它要做的事就是接收输入 s,输出 a。把 a 代入 Q 中,希望输出的值越大越好。我们会固定住 Q 的参数,只调整演员的参数,用梯度上升的方法最大化 Q 的输出,这就是一个 生成对抗网络,即有条件的生成对抗网络(conditional GAN)。Q 就是判别器,但在强化学习里就是评论员,演员在生成对抗网络里面就是生成器。

        路径衍生策略梯度算法如下图所示,一开始会有一个策略 \pi,它与环境交互并估计 Q 值。估计完 Q 值以后,我们就把 Q 值固定,只去学习一个演员。假设这个 Q 值估得很准,它知道在某一个状态采取什么样的动作会得到很大的Q值。接下来就学习这个演员,演员在给定 s 的时候,采取了 a,可以让最后Q函数算出来的值越大越好。我们用准则(criteria)去更新策略 \pi,用新的 \pi 与环境交互,再估计 Q值,得到新的 \pi 去最大化 Q值的输出。深度Q网络 里面的技巧,在这里也几乎都用得上,比如经验回放、探索等技巧。

 关键词

  • 优势演员-评论员(advantage actor-critic,A2C)算法:一种改进的演员-评论员(actor-critic)算法。

  • 异步优势演员-评论员(asynchronous advantage actor-critic,A3C)算法:一种改进的演员-评论员算法,通过异步的操作,实现强化学习模型训练的加速

  • 路径衍生策略梯度(pathwise derivative policy gradient):一种使用Q学习来求解连续动作的算法,也是一种演员-评论员算法。其会对演员提供价值最大的动作,而不仅仅是提供某一个动作的好坏程度。

面试题

3-1 友善的面试官:请简述一下异步优势演员-评论员算法(A3C),另外A3C是同策略还是异策略的模型呀?

        A3C是异步优势演员-评论员算法,其中,评论员学习价值函数,同时有多个演员并行训练并且不时与全局参数同步。A3C旨在并行训练,是同策略算法。        

3-2 友善的面试官:请问演员-评论员算法有何优点呢?

(1)相比以价值函数为中心的算法,演员-评论员算法应用了策略梯度的技巧,这能让它在连续动作或者高维动作空间中选取合适的动作,而Q学习做这件事会很困难。

(2)相比单纯策略梯度,演员-评论员算法应用了Q学习或其他策略评估的做法,使得演员-评论员算法能进行单步更新而不是回合更新,比单纯的策略梯度的效率要高。

3-3 友善的面试官:演员-评论员算法中,演员和评论员两者的区别是什么?

        演员是策略模块,输出动作;评论员是判别器,用来计算价值函数。

3-4 友善的面试官:演员-评论员算法框架中的评论员起了什么作用?

        评论员衡量当前决策的好坏。结合策略模块,当评论员判别某个动作的选择是有益的时候,策略就更新参数以增大该动作出现的概率,反之减小该动作出现的概率。

3-5 友善的面试官:简述异步优势演员-评论员算法的优势函数。

        优势函数的计算公式为 A(s,a)=Q(s,a)-V(s)=r+\gamma V(s')-V(s) ,其可以定量地表示选择动作 a 的优势。即当动作 a 低于价值函数的平均值的时候,优势函数为负值;反之为正值。其是一个标量,具体来说:

        (1)如果 A(s,a)>0 ,梯度被推向正方向;

        (2)如果 A(s,a)<0 ,即我们的动作比该状态下的平均值还差,则梯度被推向反方向。

        这样就需要两个价值函数,所以可以使用时序差分方法做误差估计:A(s,a)=r+\gamma V(s')-V(s) 。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值