机器学习与深度学习系列连载: 第三部分 强化学习(七) 策略梯度

策略梯度

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

1. 简介 Introduction

上一篇主要内容是如何对价值函数进行近似的参数化表达,包括状态价值函数和行为价值函数:
在这里插入图片描述

随后一个策略可以直接从价值函数中产生,比如使用Ɛ-greedy探索方法。

本篇直接参数化策略本身,同时参数化的策略将不再是一个概率集合而是一个函数:
在这里插入图片描述

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

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

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

2. 基于价值和基于策略的强化学习

Value-Based和Policy-Based的强化学习

  • 前者通过学习价值函数指导策略制定(例如Ɛ-greedy执行方法);
  • 后者则没有价值函数,直接学习策略;
  • 还有一种既学习价值函数也学习策略的方法,叫Actor-Critic强化学习
    在这里插入图片描述

3. 基于策略学习的优缺点

优点:

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

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

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

  4. 有时候计算价值函数非常复杂。比如当小球从从空中某个位置落下你需要左右移动接住时,计算小球在某一个位置时采取什么行为的价值是很难得;但是基于策略就简单许多,你只需要朝着小球落地的方向移动修改策略就行
    原始的、未经改善(Naive)的基于策略的学习有时候效率不够高,有时候还有较高的变异性(方差,Variance)。因为基于价值函数的策略决定每次都是推促个体去选择一个最大价值的行为;但是基于策略的,更多的时候策略的选择时仅会在策略某一参数梯度上移动一点点,使得整个的学习比较平滑,因此不够高效。有时候计算朝着梯度方向改变的增量也会有较高的变异性(方差),以至于拖累了整个算法速度,但是通过一些修饰,可以改进。

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

原始的、未经改善(Naive)的基于策略的学习有时候效率不够高,有时候还有较高的变异性(方差,Variance)。因为基于价值函数的策略决定每次都是推促个体去选择一个最大价值的行为;但是基于策略的,更多的时候策略的选择时仅会在策略某一参数梯度上移动一点点,使得整个的学习比较平滑,因此不够高效。有时候计算朝着梯度方向改变的增量也会有较高的变异性(方差),以至于拖累了整个算法速度,但是通过一些修饰,可以改进。

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

3 最优策略

(1) 随机策略有时是最优策略

对于石头剪刀布的游戏,只要一方有一个确定性的策略,就会被对手抓住进而整体上输掉。这个时候最好的策略就是随机选择每次出法,以得到最大可能的总体奖励。

再举一个例子:在下图的格子世界中,个体需要避免碰到骷髅而尽可能找到钱袋子。在上方的5个格子组成的“长廊”中,当以某些对个体来说较容易观测的特征来描述状态空间时,灰色的两个格子将会是无法区分的。

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

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

(2) 基于价值函数的策略有时无法得到最优策略

在上述情况中,发生了格子重名的(Aliased)情况,如果采用确定性的策略话,在个体处于无论哪个灰色格子时,都只能选取相同的行为。假设个体现在学到了一个价值函数,在这个价值函数里状态就是基于上述特征的参数化表示,此时当个体处在灰色格子中,如果采取的是greedy执行的方式,价值函数给出的策略要么都是向东,要么都是向西。如果是向西,那么当个体处在左侧灰色格子时,它将一直(对于greedy执行)或很长时间(对于Ɛ-greedy执行)徘徊在长廊左侧两个格子之间而无法到达有钱袋子的格子,因而很长时间得不到奖励。

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

4. 策略目标函数

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

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

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

在这里插入图片描述

  1. Average reward per time-step:又或者我们可以使用每一个时间步长在各种情况下所能得到的平均奖励,也就是说在一个确定的时间步长里,查看个体出于所有状态的可能性,然后每一种状态下采取所有行为能够得到的即时奖励,所有奖励安概率求和得到:
    在这里插入图片描述

5. 优化目标函数

找到目标函数,下一步的工作是优化策略参数然后使得目标函数值最大化。因此可以说基于策略的强化学习实际上是一个优化问题,找到参数θ来最大化目标函数。有些算法使用梯度,有些则不使用梯度。如果有机会得到梯度,那么使用梯度上升的算法通常更加优秀一些。理解了使用梯度的算法的使用,那么也将很容易将不基于梯度的算法应用到策略优化中。

(1) 策略梯度 Policy Gradient

令J(θ)可以是任何类型的策略目标函数,策略梯度算法可以使J(θ)沿着其梯度上升至局部最大值。同时确定获得最大值时的参数θ:
在这里插入图片描述
上式中▽θ J(θ)是策略梯度:
在这里插入图片描述

α是步长参数,又称学习率
在这里插入图片描述

(2) 有限差分法计算策略梯度

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

在这里插入图片描述

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

有限差分法简单,不要求策略函数可微分,适用于任意策略;但有噪声,且大多数时候不高效。

举了一个利用有限差分法训练机器人足球运动员,指出其训练参数是控制机器人运动的12个参数,其目标是让其跑得最快,因为跑得快在机器人足球比赛里非常重要。

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

(2) 蒙特卡罗策略梯度 Monte-Carlo Policy Gradient

现在我们将理论分析并计算策略梯度。这要求策略在执行行为时刻是可微分的,并且其梯度是能计算出来的。

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

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

在这里插入图片描述

这里使用到了一个关系:
在这里插入图片描述

我们定义Score function为:

在这里插入图片描述

(3) Softmax策略

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

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

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

在这里插入图片描述

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

在这里插入图片描述
对应的score函数是:
在这里插入图片描述

等号右边第一部分是采取某行为的Score,第二部分是当前状态的期望分值。

(2) 高斯策略

与Softmax策略不同的是,高斯策略常应用于连续行为空间,打个比方:如果控制机器人行走,要调整流经控制某个电机的电流值,而这是一个连续的取值。

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

在这里插入图片描述

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

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

在这里插入图片描述

对应的Score函数是:

在这里插入图片描述

其形式也相对简单。下图是引自Karpathy一篇博文的直观解释:

在这里插入图片描述

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

6. 策略梯度定理 Policy Gradient Theorem

先考虑如下一个非常简单的单步MDP问题:从一个分布 d(s) 中采样得到一个状态s,从s开始,采取一个行为a,得到即时奖励 r= R_{s,a} 然后终止。整个MDP只有一个状态、行为、即时奖励。在这个MDP过程中,如何最大化奖励?

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

在这里插入图片描述

相应的梯度是:
在这里插入图片描述

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

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

定理:对于任何可微的策略 π θ ( s , a ) \pi_{\theta}(s,a) πθ(s,a),对于任何策略的目标函数 J = J 1 , J a v R 或 者 J a v R / ( 1 − γ ) J = J_1 , J_{avR}或者 J_{avR}/(1-\gamma) J=J1JavRJavR/(1γ) ,策略梯度都是:
在这里插入图片描述

在这里插入图片描述

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

7. 策略梯度

(1) 蒙特卡洛策略梯度

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

算法描述是这样的:我们先随机初始化策略函数的参数θ,对当前策略下的一个Episode:
在这里插入图片描述

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

在这里插入图片描述

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

举例: 示例——Puck世界:

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

状态空间:个体观察自己的位置(x,y),速度(vx,vy)以及目标物体(图中的五角形)的位置(tx,ty),共6个特征。

行为空间:个体控制自己在上、下、左、右四个方向上的油门(速率的增量),和不操作5个行为。

环境动力学:将个体的行为转化为其速度和位置的变化。目标物体出现位置随机,且每30秒时间更新位置。

奖励:奖励值的大小基于个体与目标物体之间的距离,距离越小奖励越大。

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

(2) Actor-Critic策略梯度

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

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

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

  1. Critic:参数化行为价值函数Qw(s, a)

  2. Actor:按照Critic部分得到的价值引导策略函数参数θ的更新。

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

在这里插入图片描述

在这里插入图片描述

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

一个简单的actor-critic算法可以使用基于行为价值的critic,它使用一个线性价值函数来近似状态行为价值函数: Q w ( s , a ) = ϕ ( s , a ) T w Q_w(s,a) = \phi(s,a)^Tw Qw(s,a)=ϕ(s,a)Tw

其中Critic通过线性近似的TD(0)更新w,Actor通过策略梯度更新θ。具体算法流程如下:
在这里插入图片描述

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

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

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

如果使用策略梯度方法,是否还能确保发现唯一的全局最优解,还是会陷入一个局部最优解?

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

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

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

  1. 近似价值函数的梯度完全等同于策略函数对数的梯度,即不存在重名情况:
    在这里插入图片描述

  2. 价值函数参数w使得均方差最小:
    在这里插入图片描述

符合这两个条件,则认为策略梯度是准确的,此时:
在这里插入图片描述

(3) 基线的方式来减少变异性 Reducing Variance Using Baseline.

基本思想是从策略梯度里抽出一个基准函数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离开s状态时,究竟比该状态s总体平均价值要好多少?

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

在这里插入图片描述

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

在这里插入图片描述

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

根据定义,TD误差 δ π θ \delta^{\pi_{\theta}} δπθ 可以根据真实的状态价值函数 V π θ ( s ) V^{\pi_{\theta}}(s) Vπθ(s) 算出:

在这里插入图片描述

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

在这里插入图片描述

因此, 我们就可以使用TD误差来计算策略梯度:
在这里插入图片描述

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

在这里插入图片描述

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

(4) 针对Critic过程使用TD(λ)

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

MC - 直至Episode结束:

在这里插入图片描述

TD(0) - 1步:
在这里插入图片描述

TD(λ)的前向视角 - 需要至Episode结束:
在这里插入图片描述

TD(λ)的后向视角 - 实时,具备频率记忆和近时记忆功能:
在这里插入图片描述

(5) 针对Actor过程使用TD(λ)

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

策略梯度可以表示为
在这里插入图片描述

类似的,

MC - 直至Episode结束:
在这里插入图片描述

TD(0) - 1步:
在这里插入图片描述

TD(λ)的前向视角 - 需要至Episode结束:
在这里插入图片描述

TD(λ)的后向视角 - 实时,具备频率记忆和近时记忆功能:
在这里插入图片描述

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

8. 总结

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

在这里插入图片描述

下一篇将讲解个体如何构建一个模型,并依赖该模型整合学习与规划,这一讲里将接触到AlphaGo战胜人类围棋大师使用的主要算法思想。敬请期待。

本专栏图片、公式很多来自David Silver主讲的UCL-Course强化学习视频公开课和台湾大学李宏毅老师的深度强化学习课程,在这里,感谢这些经典课程,向他们致敬!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值