写在前面

这仅仅是用于我个人梳理知识点的文章,不能保证完全正确。

目录

概要

  • Introduction
  • Finite Difference Policy Gradient
  • Monte-Carlo Policy Gradient
  • Actor-Critic Policy Gradient

第五讲主要讲解的是价值函数的近似,然后根据价值函数来制定策略。在本讲中策略$P(a|s)$将从一个概率集合变成函数本身$π(s,a)$,通过借助策略目标函数梯度的引导,寻找目标函数最大值,得到最优策略。

本讲组织架构如下:

  • 先提出价值函数在某些情况下不能很好的解决问题
  • 同时直接基于策略的分析在某些场合具有价值函数不能替代的优点
  • 接着引入了直接基于策略学习所需要的目标函数的设计
  • 引入了策略梯度的概念
  • 从有限差分法、理论分析两种途径解释了策略梯度的计算原理
  • 介绍了两种基本的策略其梯度计算方法
  • 在以上内容基础上,提出了应用策略梯度进行强化学习的Actor-Critic算法
  • 给出了其算法流程并一些算法改善的方法。
  • 同样,随着深度学习库的发展,本讲中提到的一些策略的梯度计算公式在实际应用中不多,但对于理论理解还是非常有帮助的。与对价值函数的近似优化一样,基于策略函数的优化同样是不依赖模型(Model Free)的。

Introduction

上一讲回顾

上一讲主要内容是如何对价值函数进行近似的参数化表达,包括

  • 状态价值函数

  • 行为价值函数

通过价值函数进而选择合适的策略

  • 比如使用$\epsilon$-greedy探索方法。

本节将直接参数化策略本身,同时参数化的策略将不再是一个概率集合而是一个函数:

上式将策略函数理解成参数化的策略函数$ \pi_\theta$。策略函数确定了在给定的状态和一定的参数设置下,采取任何可能行为的概率,因此事实上它是一个 概率密度函数 。在实际应用策略产生行为时,是按照这个概率分布进行行为采样的。策略函数里的参数决定了概率分布的形态。

为什么要参数化?

参数化的目的是为了解决大规模问题。在大规模的问题里,把每一个状态严格的独立出来指出某个状态下应该执行某个行为是不太可能的。因此我们需要参数化,用少量的参数来合理 近似实际的函数

具体怎么做?

我们要做的是利用参数化的策略函数,通过调整这些参数来得到一个较优策略,遵循这个策略产生的行为将得到较多的奖励。具体的机制是设计一个 目标函数 ,对其使用 梯度上升(Gradient Ascent) 算法优化参数以 最大化奖励

如果我们知道用哪个梯度,可以得到马尔科夫决策过程的最大奖励。我们就沿着那个梯度的方向,获得更多的奖励

基于价值的强化学习 VS 基于策略的强化学习

  • 基于价值的强化学习
    • 学习价值函数
    • 隐含策略
      • $\epsilon$-greedy
  • 基于策略的强化学习
    • 无价值函数
    • 学习策略
  • Actor - Critic
    • 学习价值函数
    • 学习策略

image-20180419105317952

基于策略学习的优缺点

  • 优点:

    • 基于策略的学习可能会具有更好的 收敛性 ,这是因为基于策略的学习虽然每次只改善一点点,但总是朝着好的方向在改善;但是上讲提到有些价值函数在后期会一直围绕最优价值函数持续小的 震荡 而不收敛。

    • 在对于那些拥有 高维度或连续状态空间 来说,使用基于价值函数的学习在得到价值函数后,制定策略时,需要比较各种行为对应的价值大小,这样如果行为空间维度较高或者是连续的,则从中比较得出一个有最大价值函数的行为这个过程就比较难了,这时候使用基于策略的学习就高效的多。

    • 能够学到一些 随机策略 ,下文举了一个很好的例子;但是基于价值函数的学习通常是学不到随机策略的。

    • 有时候 计算价值函数非常复杂 。比如当小球从从空中某个位置落下你需要左右移动接住时,计算小球在某一个位置时采取什么行为的价值是很难得;但是基于策略就简单许多,你只需要朝着小球落地的方向移动修改策略就行。

  • 缺点:

    • 原始的、未经改善(Naive)的基于策略的学习有时候效率不够高,有时候还有较高的变异性(方差,Variance)。因为基于价值函数的策略决定每次都是推促个体去选择一个最大价值的行为;但是基于策略的,更多的时候策略的选择时仅会在策略某一参数梯度上移动一点点,使得整个的学习比较平滑,因此不够高效。

    • 有时候计算朝着梯度方向改变的增量也会有较高的变异性(方差),以至于拖累了整个算法速度,但是通过一些修饰,可以改进。

在具体解决问题时,需要评估问题的特点来决定是主要使用基于价值的学习还是基于策略的学习。

例子:剪刀石头布

image-20180419133824656

  • 基本规则
    • 剪刀 胜 布
    • 石头 胜 剪刀
    • 布 胜 石头
  • 策略
    • 确定(固定)的策略容易被利用
      • 对于石头剪刀布的游戏,只要一方有一个确定性的策略,就会被对手抓住进而整体上输掉。
    • 随机的策略是最优的( 纳什平衡 )

又一个例子:格子游戏

image-20180419133844708

  • 基本规则
    • 可以上下左右走,但是不能走出边界
    • 走到钱袋,获得奖励
    • 走到骷髅,获得惩罚

在上方的5个格子组成的“长廊”中,当以某些对个体来说较容易观测的特征来描述状态空间时,灰色的两个格子将会是无法区分的。

基本定义

又比如我们可以用“某格子在北面有墙,同时向东移步”来作为状态行为空间的特征时,也会发生上述情况。

基于价值函数的强化学习,使用如下的近似价值函数:

基于策略函数的强化学习,使用参数化的策略函数 :

重名引发问题

比如我们用某一个格子的某个方向是否有墙挡住这些特征来描述格子状态,也就是作为格子世界状态空间的特征时,就会发生灰色格子状态一样的情况,这就是状态重名(Aliased)。

在发生了格子重名的(Aliased)情况下,如果采用确定性的策略话,在个体处于无论哪个灰色格子时,都只能选取相同的行为。

  • 在所有灰色格子,想西走
  • 在所有灰色格子,想东走

假设个体现在学到了一个价值函数,在这个价值函数里状态就是基于上述特征的参数化表示,此时当个体处在灰色格子中,如果采取的是greedy执行的方式,价值函数给出的策略要么都是向东,要么都是向西。如果是向西,那么当个体处在左侧灰色格子时,它将一直(对于greedy执行)或很长时间(对于$\epsilon$-greedy执行)徘徊在长廊左侧两个格子之间而无法到达有钱袋子的格子,因而很长时间得不到奖励。

重名解决

当发生状态重名情况时,随机策略 将会优于确定性的策略。之前的理论告诉我们对于任何MDP总有一个确定性的最优策略。不过那是针对状态可完美观测、或者使用的特征可以完美描述状态的情况下的。当发生状态重名无法区分或者使用的近似函数里描述状态的特征限制了对状态的完美描述时,个体得到的状态信息等效于部分观测的环境信息,问题将不具备马儿可夫性。此时 最优策略将不再是确定性 的。而直接基于策略的学习将能学习到最优策略,这就是我们为什么要直接基于策略进行强化学习的原因。

回到格子游戏

格子游戏的一个随机策略:

刚开始可能向左向右都是0.5的概率,可能来回走,但是一旦我们发现了宝藏,那对应的策略的概率就会提高,我们可以将其想象成一种以价值函数为基准的方法。

策略目标函数

那么直接基于策略的学习是如何优化策略的呢?要搞清楚这个问题,我们得搞清楚下面这个问题:我们优化策略的最终目的是什么?尽可能获得更多的奖励。我们设计一个目标函数来衡量策略的好坏,针对不同的问题类型,这里有三个目标函数可以选择:

Start value
  • 在能够产生 完整Episode 的环境下,也就是在个体可以到达 终止状态 时,我们可以用这样一个值来衡量整个策略的优劣:从某状态$s_1$算起直到终止状态个体获得的 累计奖励 。这个值称为start value。
  • 这个数值的意思是说:如果个体总是从某个状态$s_1$开始,或者以一定的概率分布从$s_1$开始,那么从该状态开始到 Episode结束 个体将会得到怎样的 最终奖励 。这个时候算法真正关心的是:找到一个策略,当把个体放在这个状态$s_1$让它执行当前的策略,能够获得start value的奖励。这样我们的目标就变成最大化这个start value。

image-20180419150147482

Average Value

注: $d^{\pi_\theta}(s) $是在当前策略下马尔科夫链的关于状态的一个静态分布。

  • 对于连续环境条件,不一定是开始状态,这个时候可以使用 average value
  • 意思是 考虑我们个体在某时刻处在某状态下的概率,也就是个体在该时刻的状态分布,针对每个可能的状态计算从该时刻开始一直持续与环境交互下去能够得到的奖励,按该时刻各状态的概率分布求和:

image-20180419154316657

叶强:对于持续状态,此时要确定个体在某一时刻某个状态开始持续与环境交互能够得到的奖励已经无法得到一个真实确切的结果了,因为要持续交互下去。这里已经用到了状态的价值,而不是收获,并且必须要考虑衰减系数。

Average reward per time-step

注:$d^{\pi_\theta}(s)$ 是在当前策略下马尔科夫链的关于状态的一个静态分布。

  • 又或者我们可以使用每一个时间步长在各种情况下所能得到的平均奖励,也就是说在一个确定的时间步长里,查看个体出于所有状态的可能性,然后每一种状态下采取所有行为能够得到的即时奖励,所有奖励安概率求和得到:

image-20180419160703228

叶强:这里的time-step不是说一定长度的时间平均,而是指一个确定的时刻。其实这三个式子的目标都是同一个目标,都是试图描述(衡量)个体在某一时刻的价值。

如何优化目标函数?

  • 找到目标函数,下一步的工作是优化策略参数然后使得目标函数值最大化。
  • 因此可以说基于策略的强化学习实际上是一个优化问题,找到参数$\theta$来最大化目标函数。
  • 有些方法则不使用梯度
    • Hill climbing
    • Simplex / amoeba / Nelder Mead
    • Genetic algorithms
  • 使用梯度的算法通常可能更加高效
    • Gradient desent
    • Conjugate gradient
    • Quasi-newton
  • 如果有机会得到梯度,那么使用梯度上升的算法通常更加优秀一些
  • 理解了使用梯度的算法的使用,那么也将很容易将不基于梯度的算法应用到策略优化中。

最后

本讲内容将主要聚焦于使用梯度的策略优化,同时使用基于序列结构片段(equential structure)的方法。怎么理解基于序列结构呢?打个比方,我们不会去让个体持续与环境交互直至耗光其整个生命周期,然后得到一个结果,根据这个结果来优化策略,这类似与遗传算法。这样做对于个体来说就没有意义了。我们选取个体与环境交互中的一个序列结构片段,通过这种学列结构片段来学习,优化策略进而知道个体后续与环境的交互。
在整个过程中,我们的agent都是在不停地学习的。

以上就是本讲的简介,下面将终点介绍目标函数、梯度上升等。

Finite Difference Policy Gradient

Policy Gradient定义

令$J(\theta)$可以是任何类型的策略目标函数,策略梯度算法可以使$J(\theta)$沿着其梯度上升至局部最大值。同时确定获得最大值时的参数$\theta$:

上式中$ \nabla_{\theta}J(\theta)$是策略梯度:

$\alpha$是步长参数,又称学习率。

通过有限差分法计算策略梯度

这是非常常用的数值计算方法,特别是当 梯度函数本身很难得到 的时候。具体做法是,针对参数$\theta$的每一个分量$\theta_k$,使用如下的公式粗略计算梯度:

$u_k$ 是一个单位向量,仅在第k个维度上值为1,其余维度为0。

  • 优点
    • 简单,不要求策略函数可微分,适用于任意策略
  • 缺点
    • 但有噪声,且大多数时候不高效。

例子 AIBO

这次课,视频录得不好,都没有看到David,以至于都不知道放的视频到底是啥。

  • 目标是让其跑得最快,因为跑得快在机器人足球比赛里非常重要。
  • AIBO行走策略由12个参数控制
  • 使用有限差分发来训练这些参数
  • 通过往返的时间来评估策略好坏

注:该方法在可以用来检验机器器学习中一些梯度算法是否正确。

看不到视频,只能假设训练之后能跑的特别快吧

Monte-Carlo Policy Gradient

Score Function

现在我们将理论分析并计算策略梯度。这要求

  • 策略在执行行为时刻是 可微分
  • 并且其 梯度 ( ) 是能计算出来的

这里借用了 Likelihood ratios(似然比、似然系数)这个概念。

函数在某个变量$\theta$处的梯度等于该处函数值与该函数的对数函数在此处梯度的乘积:

公式推导

  • 凑微分
    • $d log(y) = dy / y$

我们定义Score function为:

举了两个例子来解释Score Function 函数

Score Function 函数 例子一:Softmax Policy[离散]

  • Softmax策略是针对一些具有离散的行为常用的一个策略
  • 我们希望有平滑的参数化的策略来决策
  • 针对每一个离散的行为,应该以什么样的概率来执行它。

为此,我们把行为看成是多个特征在一定权重下的线性代数和:

而我们采取某一具体行为的概率与$e$的该值次幂成正比:

那么Score Function为:

叶强的例子

举个例子:假设我们在玩一个Atari类游戏,我们想知道应该朝左还是朝右移动。Softmax策略如何做呢?结合下图来解释:

image-20180419172815376

注:这个例子是我自己添加的,旨在解释如何计算Score,其实针对两个离散行为其实不必设计2个输出,读者可以把它看成两个以上的输出来理解。

先为个体能够观测到的状态信息选定一些特征假设现在有$f_1$ - $f_5$共5个特征,这些特征可以是人为选取的,也可以是算法计算得到的(例如可以是把观测状态信息作为输入送入神经网络得到的隐藏层数据)。

向左走与其中的某些特征联系比较紧,向右走与另外一些特征关系比较紧,图中两个行为与每个特征都有联系,这种联系的紧密程度就用参数$\theta$表示,参数$\theta$不是一个值,而是针对每一个特征行为对都有一个具体的数值,因此它可以看成是一个矩阵,现在当环境以每个特征不同强度的形式展现在个体面前时,个体会针对向左、向右两个行为同时计算其带权重的线性代数和,假设算得向左的值为5,向右的为6。

向左(右)这个行为发生的概率就与 $e^5$ ( $e^6$ )成正比。Softmax策略下Score函数的值容易计算,可以写成如下的形式:

上式中,等号右边第一部分是采取某行为的Score,第二部分是当前状态的期望分值。拿回刚才的例子来说,这个期望就是5和6的分别乘以其概率的和:

因此,向左走的Score值是-0.73(5 - 5.73),向右走的Score值是0.27(6 - 5.73),说明向左走比随机行为的价值要低,向右走比随机行为的价值要高。

假如此时个体选择了向左走并且得到了一个正的即时奖励,个体将要提高向左这一行为被采样的概率,也就是提高向左走的分值。那么确定向左走分值的参数如何调整呢?根据每一个参数对应的输入(也就是特征值)的大小做相应的调整,特征值为正,参数值增大;特征值为负,参数值减小。

Score Function函数 例子二:Gaussian Policy[连续]

与Softmax策略不同的是,高斯策略常应用于连续行为空间

打个比方:如果控制机器人行走,要调整流经控制某个电机的电流值,而这是一个连续的取值。

使用高斯策略时,我们通常对于均值有一个参数化的表示,同样可以是一些特征的线性代数和:

方差可以是固定值,也可以用参数化表示。

行为对应于一个具体的数值,该数值从以$\mu(s)$为均值、$\sigma$为标准差的高斯分布中随机采样产生:

对应的Score函数是:

推导
其形式也相对简单

直观解释

下图是引自Karpathy一篇博文的直观解释:

image-20180419175733143

图解翻译:使用score function估计梯度的可视化。

  • 左:高斯分布下的一些采样(蓝点),针对每一个蓝点也画出了根据高斯分布均值得到的概率对数的梯度。箭头指示的方向是能够增加该采样点采样概率的分布的均值(对于高斯分布来说,是等值线的中心点)移动的方向;
  • 中:大多数采样点对应的score function值是-1,除了一小块区域是+1(score function可以是任意、并且不要求可微的标量函数),此时箭头用不同颜色表示,在随后的更新中,我们将要把所有绿色的值和负的红色值进行平均来更新分布参数(均值);
  • 右:参数更新后,绿色箭头的方向和红色箭头的反方向推动了行程均值朝着左下方移动的新的高斯分布,从这个新分布的采样将会按照预期有一个较高的score。

以上只是给了关于Score函数的直观表示,更深入的理解需要结合策略梯度学习来讲解。不过有了这些常用的策略,我们可以看看这些公式是如何体现在优化策略的目标函数里的,这就是后文要介绍的:策略梯度定理

叶强:Softmax策略和高斯策略的编程体会:利用这两个策略进行实际编程时,要特别注意 梯度消失梯度爆炸 的现象,Score Function通常应用于当下代码很难得到梯度的时候;当使用一些机器学习库的时候,可以通过带入损失值,直接计算得出目标函数的梯度,此时就不需要计算Score Function的值了。

策略梯度定理 Policy Gradient Theorem

单步MDP问题

先考虑如下一个非常简单的单步MDP问题:从一个分布 d(s) 中采样得到一个状态$s$,从$s$开始,采取一个行为$a$,得到即时奖励$ r= R_{s,a}$ 然后终止。

整个MDP只有一个状态、行为、即时奖励。在这个MDP过程中,如何最大化奖励?

由于是单步过程,因此三种目标函数的形式是一样的:

相应的梯度是(凑微分,再拼成期望):

可以看出目标函数的梯度等于策略函数对数梯度与即时奖励两部分乘积的期望,而根据之前的介绍,这两部分都是较为容易确定的。因此参数的更新就变得容易了。一个问题是单步MDP的情况是否适用于多步MDP呢?

答案是肯定的。唯一要变动的就是把即时奖励值换成目标的Q值,而且这对于三种目标函数都是通用的。

Policy Gradient Theorem

对于任何可微的策略 ,对于任何策略的目标函数 或者

策略梯度都是:

David在此略微解释了目标函数梯度在强化学习里的特点。

  • 如果在监督学习里,目标函数的梯度不包括价值函数,当前状态、行为的好坏将有监督信息告知;
  • 而在强化学习里,需要通过价值函数来估计当前状态行为的好坏。

有了上述公式,我们就可以着手设计算法,解决实际问题了。

记住在强化学习里,在谈到学习算法时,应该马上能想到三大类算法:

  • 动态规划(DP)
  • 蒙特卡洛(MC)学习
  • 时序差分(TD)学习

DP适用于中小规模问题,不是本讲的重点。我们先从MC学习开始讲起。

蒙特卡洛策略梯度

针对具有完整Episode的情况,我们应用策略梯度理论,使用随机梯度上升来更新参数,对于公式里的期望$\mathbb{E}$,我们通过采样的形式来替代,即使用 $t$ 时刻的收获(return)作为当前策略下行为价值的 无偏估计

算法描述是这样的

  • 我们先随机初始化策略函数的参数$\theta$,对当前策略下的一个Episode:

从t=1到t=T-1间的每一个时刻,计算个体获得的收获 $v_t$ ,然后更新参数$\theta$。如此然后重复每一个Episode,直到结束。

具体算法如下:

image-20180419201429091

注:上面描述中 $v_t$ 就是收获,这里使用 $v$ 而不是 $G$ 可能考虑的是用它来作为价值的期望,从这里也可以看出这是 有噪声 的采样。

例子 Puck世界:

举了一个在区域里追踪一个目标的例子:有一个五边形的目标物体,同时还有一个Agent:

image-20180419202240821

  • 状态空间
    • 个体观察自己的位置(x,y),速度($v_x$,$v_y$)以及目标物体(图中的五角形)的位置($t_x$,$t_y$),共6个特征。
  • 行为空间
    • 个体控制自己在上、下、左、右四个方向上的油门(速率的增量),和不操作5个行为。
  • 环境动力学
    • 将个体的行为转化为其速度和位置的变化。目标物体出现位置随机,且每30秒时间更新位置。
  • 奖励
    • 奖励值的大小基于个体与目标物体之间的距离,距离越小奖励越大。

Puck世界还有很多变种,例如在世界里再增加一个惩罚目标,个体需要在躲避该目标的同时尽可能接近要靠近的目标(请参考这里 )。

使用蒙特卡洛策略梯度算法的弊端

  • 不稳定,易崩塌,有时好有时坏
  • 收敛速度慢,需要的迭代次数长(需要1亿次训练来收敛)
  • 还存在较高的变异性

叶强:那么尝试基于TD的学习算法呢?

Actor-Critic策略梯度

使用蒙特卡洛策略梯度方法使用了收获作为状态价值的估计,它虽然是无偏的,但是噪声却比较大,也就是变异性(方差)较高。如果我们能够相对准确地估计状态价值,用它来指导策略更新,那么是不是会有更好的学习效果呢?这就是Actor-Critic策略梯度的主要思想。

Actor-Critic的字面意思是“演员-评论”,相当于演员在演戏的同时有评论家指点继而演员演得越来越好。即使用Critic来估计行为价值:

基于Actor-Critic策略梯度学习分为两部分内容:

  • Critic:参数化行为价值函数$Q_w(s, a)$
  • Actor:按照Critic部分得到的价值引导策略函数参数$\theta$的更新。

这样,Actor-Critic算法遵循的是一个近似的策略梯度:

估计行为价值函数

可以明显看出,Critic做的事情其实是我们已经见过的:策略评估,他要告诉个体,在由参数 $\theta$ 确定的策略 $\pi_{\theta}$ 到底表现得怎么样。关于策略评估我们之前已经学过如何做了,你可以使用蒙特卡洛策略评估、TD学习以及TD(λ)等,你也可以使用上一讲介绍的最小方差方法。

行为价值 Actor-Critic

一个简单的actor-critic算法可以使用基于行为价值的critic,它使用一个线性价值函数来近似状态行为价值函数:

其中Critic通过线性近似的TD(0)更新w,Actor通过策略梯度更新$\theta$。具体算法流程如下:

image-20180419203704058

注:该算法仅是基于线性价值函数的近似的Actor-Critic算法。

这是一个在线实时算法,针对每一步进行更新,不需要等到Episode结束。

在基于策略的学习算法中,算法挑选策略的时候不需使用Ɛ-贪婪搜索,策略是直接根据参数$\theta$得到的。同时在对策略参数更新时有一个学习率$\alpha$,它体现了在梯度方向上更新参数$\theta$的步长(step size),一般的我们在更新参数时是按梯度方向只更新由$\alpha$确定的一定量。打个比方,当前策略在更新时提示梯度方向倾向于选择“向左”的行为,那么在更新策略参数时,可以朝着向左的方向更新一定的值,如果这个$\alpha$取值增大,则导致决策朝着更容易选择“向左”的行为倾斜,这其实就相当于没有探索的贪婪决策行为。而只要学习在持续,就有可能因为梯度变化而尝试更多的行为,这一过程中参数$\alpha$控制了策略更新的平滑度。

David还回答了一个很好的提问:如果使用策略梯度方法,是否还能确保发现唯一的全局最优解,还是会陷入一个局部最优解?

他的回答是:如果基于价值函数制定策略,使用查表(table look-up)的方式可以保证能收敛到全局最优解,即虽然使用直接基于策略的学习方法,当仍然使用查表的方式时,比如使用softmax策略是可以得到全局最优解的;但是如果使用一些通用化的近似函数表示方法,比如神经网络等,则无论是基于价值函数还是基于策略,都可能陷入局部最优解。对于介于两者之间的部分方法,还没有完整的研究结果。

Actor-Critic算法中偏差(偏倚)

用特征的线性组合来近似 $Q_w(s,a)$ 进而求解策略梯度的方法引入了偏倚,一个偏倚的价值下得到的策略梯度不一定能最后找到较好的解决方案,例如当近似价值函数的 $Q_w(s,a)$ 使用可能会引起状态重名的特征时,还能解决那个格子世界问题吗(指前文提到的在格子世界里找钱袋子的问题),答案是不一定了。不过幸运的是,如果我们小心设计近似的 $Q_w(s,a)$ 函数,是可以避免引入偏倚的,这样我们相当于遵循了准确的策略梯度。

注:table look-up方式表明没有近似。

兼容近似函数 Compatible Function Approximation

那么怎样才算是一个小心设计了的 $Q_w(s,a)$ 呢?需要满足下面两个条件:

  • 近似价值函数的梯度完全等同于策略函数对数的梯度,即不存在重名情况:
  • 价值函数参数w使得均方差最小:

符合这两个条件,则认为策略梯度是准确的,此时:

在这个理论的基础上,我们对Actor-Critic方法做一些改进,其中一个方法是:

通过使用基线的方式来减少变异性

其基本思想是从策略梯度里抽出一个基准函数B(s),要求这一函数仅与状态有关,与行为无关,因而不改变梯度本身。 B(s)的特点是能在不改变行为价值期望的同时降低其Variance。当B(S)具备这一特点时,下面的推导成立:

推导过程解释:

  • 策略函数对数的梯度与基准函数乘积的期望可以表示为第一行等式对策略函数梯度与B(s)的乘积对所有状态及行为分布求的形式,这步推导主要是根据期望的定义,以及B是关于状态s的函数而进行的
  • 由于B(s)与行为无关,可以将其从针对行为a的求和中提出来,同时我们也可以把梯度从求和符号中提出来(梯度的和等于和的梯度),从而后一项求和则变成:策略函数针对所有行为的求和
  • 这一求和根据策略函数的定义肯定是1,而常熟的梯度是0。因此总的结果等于0 。那么如何设计或者寻找这样一个B(s)呢?

原则上,和行为无关的函数都可以作为B(s)。一个很好的B(s)就是基于当前状态的状态价值函数:

这样我们通过使用一个advantage function(便利函数?称为A函数吧),定义:

这个便利函数的现实意义在于,当个体采取行为a离开s状态时,究竟比该状态s总体平均价值要好多少?

如此一来,目标函数的梯度可以写成:

现在目标函数梯度的意义就改变成为了得到那个“好多少”,我应该怎么做(改变策略参数)

估计advantage function

Advantage 函数可以明显减少状态价值的变异性,因此算法的Critic部分可以去估计advantage函数而不是仅仅估计行为价值函数。在这种情况下,我们需要两个近似函数也就是两套参数,一套用来近似状态价值函数,一套用来近似行为价值函数,以便计算advantage函数,并且通过TD学习来更新这两个价值函数。数学表示如下:

不过实际操作时,并不需要这样做。这是因为:

根据定义,TD误差 可以根据真实的状态价值函数 算出:

这样得到的TD误差是advantage函数的无偏估计,这同样是根据行为价值函数的定义推导成立的,即:

如此,我们就可以使用TD误差来计算策略梯度:

实际运用时,我们使用一个近似的TD误差,即用状态函数的近似函数来代替实际的状态函数:

这样做的好处就是,我们只需要一套参数描述状态价值函数,而不再需要针对行为价值近似函数了。

针对Critic过程使用TD(λ)

随后介绍了通过计算不同时间范围内(步长)的TD 误差来更新状态价值函数V$\theta$(s),此时的Critic过程可以根据时间范围的的长短(步长的多少)来分为

MC - 直至Episode结束:

TD(0) - 一步:

TD(λ)的前向视角 - 需要至Episode结束:

TD(λ)的后向视角 - 实时,具备频率记忆和近时记忆功能:

针对Actor过程使用TD(λ)

同样在Actor过程中也可以把时间范围考虑进去用来更新参数,具体公式为:

策略梯度可以表示为。

类似的,

MC - 直至Episode结束:

TD(0) - 一步:

TD(λ)的前向视角 - 需要至Episode结束:

TD(λ)的后向视角 - 实时,具备频率记忆和近时记忆功能:

对于Critic和Actor,将TD(λ)的后向视角算法应用于实际问题时,可以在线实时更新,而且不需要完整的Episode。

【start: 下面的内容由于理解不深,故而仅作了字面翻译,字面翻译可能与作者实际要表达的意思存在较大差异,请酌情阅读】

再认识Compatible Function Approximation和Score函数(从视频1:24:00开始)
用带参数的函数去近似真实状态函数,相当于产生了一些带参数的梯度去代替实际的梯度。但是如果我们小心设计了近似价值函数的特征,那么是可以保证两者梯度是同一的。难点在于近似价值函数特征的选择。事实上我们在构建近似价值函数时选用的特征本身其实是从某一个角度对策略进行评估的Score Function。通过对这些具备Score function特点的特征进行线性求和,我们能确保两者的梯度是一致的。

体会:可以看出兼容近似函数体现了状态价值的特征,而Score function,就如同其名字,是评价这些特征的得分。

近期进展(从视频1:26:20开始)
到目前为止,我们考虑的都是较为随机的策略,像高斯策略等,我们在估计策略梯度时用的都是一些加入了噪声的随机采样。事实上,这种想法其实是很不好的。当你基于高斯策略开始学习时,你会发现随着策略的不断优化,也就是希望高斯分布越来越窄(集中于均值附近)。当策略随着时间优化时,你会发现高斯分布的方差越来越大,准确地估计策略梯度变得越来越困难,这就导致最后并不能找到最优策略,这是目前我们介绍的所有策略梯度算法的不幸的一面。

似乎有一种替代方案,这也是我们最近的发现。与其引入随机策略,使用有噪声的采样,不如直接从有限的确定性的策略开始学习。我们根据这些确定性的策略来调整策略参数。当我们使用在有限Episode(case)中使用确定性的策略学习,我们得到的关于参数的更新表达式和之前介绍的会有些不一样。不过我们可以仅仅把他看成是另一种重写形式。通过这种方式,我们可以把噪声的影响降为0 。

在Critic部分,关于实际Q函数的参数化近似也可以体现对策略更新的方向,我们需要做的事是在设计近似函数时尽可能的考虑每一个参数对于Q的意义。

这相当与一个链式规则:朝着可以得到更多的Q值的方向调整策略。

以上就是确定性策略理论,通常比随机策略效果要好。

Natural Policy Gradient
Natural actor-critic没详细展开讲

总结

重提了许许多多形式的策略梯度函数的形式,都是用随机梯度上升算法;同样Critic部分使用策略评估来实现,这个在之前的lecture里讲过,可以使用MC或者TD,TD(λ)等去估计状态价值函数 、行为价值函数 或advantage函数 等。

image-20180419221158922

个人体会:虽然上述算法是等效的,但是在实际编程实现时效果却相差很多,个人觉得要主要归因于超参数的设置以及一些具体的调参技术。

最后

什么是Policy Gradient?

参考文献

主要来源

  • David Silver 公开课 Lecture 7: Policy Gradient

参考文章

附录

高斯策略得分函数推导

,其概率密度函数如下:

同理我们可以仿照写出

两边同时取对数,然后求偏导

其中,$\mu(s)=\phi(s)^{\top}\theta$

返回