前一讲主要讲解的是价值函数的近似,然后根据价值函数来制定策略。本讲中策略P(a|s)将从一个概率集合摇身变成函数本身π(s,a),通过借助策略相关的目标函数梯度的引导,寻找与目标函数的极值,进而得到最优策略。
本讲组织架构如下:先提出价值函数在某些情况下不能很好的解决问题,同时直接基于策略的分析在某些场合具有价值函数不能替代的优点,接着引入了直接基于策略学习所需要的目标函数的设计,引入了策略梯度的概念,从有限差分法、理论分析两种途径解释了策略梯度的计算原理,介绍了两种基本的策略及梯度计算方法。在以上内容基础上,提出了应用策略梯度进行强化学习的Actor-Critic算法,给出了其算法流程并一些算法改善的方法。同样,随着深度学习库的发展,本讲中提到的一些策略的梯度计算公式在实际应用中不多,但对于理论理解还是非常有帮助的。与对价值函数的近似优化一样,基于策略函数的优化同样是不依赖模型(Model Free)的。
由于本讲的视频中少了David Silver的现场讲解,因此对于理解部分内容增加了难度,特别是本讲后期的一些讲解,我没有完全弄明白,理解不深,只是按照字面做了一些翻译。这其中可能存在较大的错误。我会阅读一些相关文献以加深对这部分内容的理解,而后逐渐修改完善这部分内容,使得其尽可能准确。同时我在理解本讲时做了较多的编程实践,其中有很多次不好的结果,结合这些实践,写了较多的“个人体会”,这些体会也可能是不准确的,欢迎读者批评指正。
上一讲主要内容是如何对价值函数进行近似的参数化表达,包括状态价值函数和行为价值函数:
随后一个策略可以直接从价值函数中产生,比如使用Ɛ-greedy探索方法。
本节将直接参数化策略本身,同时参数化的策略将不再是一个概率集合而是一个函数:
上式将策略函数理解成参数化的策略函数 。策略函数确定了在给定的状态和一定的参数设置下,采取任何可能行为的概率,因此事实上它是一个概率密度函数。在实际应用策略产生行为时,是按照这个概率分布进行行为采样的。策略函数里的参数决定了概率分布的形态。
参数化的目的是为了解决大规模问题。在大规模的问题里,把每一个状态严格的独立出来指出某个状态下应该执行某个行为是不太可能的。因此我们需要参数化,用少量的参数来合理近似实际的函数。
我们要做的是利用参数化的策略函数,通过调整这些参数来得到一个较优策略,遵循这个策略产生的行为将得到较多的奖励。具体的机制是设计一个目标函数,对其使用梯度上升(Gradient Ascent)算法优化参数以最大化奖励。
比较了Value-Based和Policy-Based的强化学习,指出前者通过学习价值函数指导策略制定(例如Ɛ-greedy执行方法);后者则没有价值函数,直接学习策略;还有一种既学习价值函数也学习策略的方法,叫Actor-Critic强化学习,本讲稍后会讲解它。
优点:
1. 基于策略的学习可能会具有更好的收敛性,这是因为基于策略的学习虽然每次只改善一点点,但总是朝着好的方向在改善;但是上讲提到有些价值函数在后期会一直围绕最优价值函数持续小的震荡而不收敛。
2. 在对于那些拥有高维度或连续状态空间来说,使用基于价值函数的学习在得到价值函数后,制定策略时,需要比较各种行为对应的价值大小,这样如果行为空间维度较高或者是连续的,则从中比较得出一个有最大价值函数的行为这个过程就比较难了,这时候使用基于策略的学习就高效的多。
3. 能够学到一些随机策略,下文举了一个很好的例子;但是基于价值函数的学习通常是学不到随机策略的。
4. 有时候计算价值函数非常复杂。比如当小球从从空中某个位置落下你需要左右移动接住时,计算小球在某一个位置时采取什么行为的价值是很难得;但是基于策略就简单许多,你只需要朝着小球落地的方向移动修改策略就行。
缺点:
原始的、未经改善(Naive)的基于策略的学习有时候效率不够高,有时候还有较高的变异性(方差,Variance)。因为基于价值函数的策略决定每次都是推促个体去选择一个最大价值的行为;但是基于策略的,更多的时候策略的选择时仅会在策略某一参数梯度上移动一点点,使得整个的学习比较平滑,因此不够高效。有时候计算朝着梯度方向改变的增量也会有较高的变异性(方差),以至于拖累了整个算法速度,但是通过一些修饰,可以改进。
在具体解决问题时,需要评估问题的特点来决定是主要使用基于价值的学习还是基于策略的学习。
对于石头剪刀布的游戏,只要一方有一个确定性的策略,就会被对手抓住进而整体上输掉。这个时候最好的策略就是随机选择每次出法,以得到最大可能的总体奖励。
再举一个例子:在下图的格子世界中,个体需要避免碰到骷髅而尽可能找到钱袋子。在上方的5个格子组成的“长廊”中,当以某些对个体来说较容易观测的特征来描述状态空间时,灰色的两个格子将会是无法区分的。
比如我们用某一个格子的某个方向是否有墙挡住这些特征来描述格子状态,也就是作为格子世界状态空间的特征时,就会发生灰色格子状态一样的情况,这就是状态重名(Aliased)。
又比如我们可以用“某格子在北面有墙,同时向东移步”来作为状态行为空间的特征时,也会发生上述情况。
在上述情况中,发生了格子重名的(Aliased)情况,如果采用确定性的策略话,在个体处于无论哪个灰色格子时,都只能选取相同的行为。假设个体现在学到了一个价值函数,在这个价值函数里状态就是基于上述特征的参数化表示,此时当个体处在灰色格子中,如果采取的是greedy执行的方式,价值函数给出的策略要么都是向东,要么都是向西。如果是向西,那么当个体处在左侧灰色格子时,它将一直(对于greedy执行)或很长时间(对于Ɛ-greedy执行)徘徊在长廊左侧两个格子之间而无法到达有钱袋子的格子,因而很长时间得不到奖励。
当发生状态重名情况时,随机策略将会优于确定性的策略。之前的理论告诉我们对于任何MDP总有一个确定性的最优策略。不过那是针对状态可完美观测、或者使用的特征可以完美描述状态的情况下的。当发生状态重名无法区分或者使用的近似函数里描述状态的特征限制了对状态的完美描述时,个体得到的状态信息等效于部分观测的环境信息,问题将不具备马儿可夫性。此时最优策略将不再是确定性的。而直接基于策略的学习将能学习到最优策略,这就是我们为什么要直接基于策略进行强化学习的原因。
那么直接基于策略的学习是如何优化策略的呢?要搞清楚这个问题,我们得搞清楚下面这个问题:我们优化策略的最终目的是什么?尽可能获得更多的奖励。我们设计一个目标函数来衡量策略的好坏,针对不同的问题类型,这里有三个目标函数可以选择:
1. Start value:在能够产生完整Episode的环境下,也就是在个体可以到达终止状态时,我们可以用这样一个值来衡量整个策略的优劣:从某状态s1算起直到终止状态个体获得的累计奖励。这个值称为start value. 这个数值的意思是说:如果个体总是从某个状态s1开始,或者以一定的概率分布从s1开始,那么从该状态开始到Episode结束个体将会得到怎样的最终奖励。这个时候算法真正关心的是:找到一个策略,当把个体放在这个状态s1让它执行当前的策略,能够获得start value的奖励。这样我们的目标就变成最大化这个start value:
2. Average Value:对于连续环境条件,不存在一个开始状态,这个时候可以使用 average value。意思是 考虑我们个体在某时刻处在某状态下的概率,也就是个体在该时刻的状态分布,针对每个可能的状态计算从该时刻开始一直持续与环境交互下去能够得到的奖励,按该时刻各状态的概率分布求和:
注: 是在当前策略下马尔科夫链的关于策略的一个静态分布。
个人体会:对于持续状态,此时要确定个体在某一时刻某个状态开始持续与环境交互能够得到的奖励已经无法得到一个真实确切的结果了,因为要持续交互下去。这里已经用到了状态的价值,而不是收获,并且必须要考虑衰减系数。
3. Average reward per time-step:又或者我们可以使用每一个时间步长在各种情况下所能得到的平均奖励,也就是说在一个确定的时间步长里,查看个体出于所有状态的可能性,然后每一种状态下采取所有行为能够得到的即时奖励,所有奖励按照概率求和得到:
个人体会:这里的time-step不是说一定长度的时间平均,而是指一个确定的时刻。其实这三个式子的目标都是同一个目标,都是试图描述(衡量)个体在某一时刻的价值。
找到目标函数,下一步的工作是优化策略参数然后使得目标函数值最大化。因此可以说基于策略的强化学习实际上是一个优化问题,找到参数θ来最大化目标函数。有些算法使用梯度,有些则不使用梯度。如果有机会得到梯度,那么使用梯度上升的算法通常更加优秀一些。理解了使用梯度的算法的使用,那么也将很容易将不基于梯度的算法应用到策略优化中。
本讲内容将主要聚焦于使用梯度的策略优化,同时使用基于序列结构片段(equential structure)的方法。怎么理解基于序列结构呢?打个比方,我们不会去让个体持续与环境交互直至耗光其整个生命周期,然后得到一个结果,根据这个结果来优化策略,这类似于遗传算法。这样做对于个体来说就没有意义了。我们选取个体与环境交互中的一个序列结构片段,通过这种序列结构片段来学习,优化策略进而指导个体后续与环境的交互。
以上就是本讲的简介,下面将终点介绍目标函数、梯度上升等。
令J(θ)可以是任何类型的策略目标函数,策略梯度算法可以使J(θ)沿着其梯度上升至局部最大值。同时确定获得最大值时的参数θ:
上式中▽θ J(θ)是策略梯度:
α是步长参数,又称学习率。
这是非常常用的数值计算方法,特别是当梯度函数本身很难得到的时候。具体做法是,针对参数θ的每一个分量,使用如下的公式粗略计算梯度:
是一个单位向量,仅在第k个维度上值为1,其余维度为0。
有限差分法简单,不要求策略函数可微分,适用于任意策略;但有噪声,且大多数时候不高效。
举了一个利用有限差分法训练机器人足球运动员,指出其训练参数是控制机器人运动的12个参数,其目标是让其跑得最快,因为跑得快在机器人足球比赛里非常重要。
注:该方法在可以用来检验机器器学习中一些梯度算法是否正确。
现在我们将理论分析并计算策略梯度。这要求策略在执行行为时刻是可微分的,并且其梯度是能计算出来的。
这里借用了Likelihood ratios(似然比、似然系数)这个概念。
函数在某个变量θ处的梯度等于该处函数值与该函数的对数函数在此处梯度的乘积:
这里使用到了一个关系:
我们定义Score function为:
举了两个例子来解释Score function 函数:
Softmax策略是针对一些具有离散的行为常用的一个策略。我们希望使用平滑的参数化的策略来决策:针对每一个离散的行为,应该以什么样的概率来执行它。
为此,我们把行为看成是多个特征在一定权重下的线性代数和:
而我们采取某一具体行为的概率与e的该值次幂成正比:
举个例子:假设我们在玩一个Atari类游戏,我们想知道应该朝左还是朝右移动。Softmax策略如何做呢?结合下图来解释:
注:这个例子是我自己添加的,旨在解释如何计算Score,其实针对两个离散行为其实不必设计2个输出,读者可以把它看成两个以上的输出来理解。
先为个体能够观测到的状态信息选定一些特征假设现在有f1-f5共5个特征,这些特征可以是人为选取的,也可以是算法计算得到的(例如可以是把观测状态信息作为输入送入神经网络得到的隐藏层数据)。向左走与其中的某些特征联系比较紧,向右走与另外一些特征关系比较紧,图中两个行为与每个特征都有联系,这种联系的紧密程度就用参数θ表示,参数θ不是一个值,而是针对每一个特征行为对都有一个具体的数值,因此它可以看成是一个矩阵,现在当环境以每个特征不同强度的形式展现在个体面前时,个体会针对向左、向右两个行为同时计算其带权重的线性代数和,假设算得向左的值为5,向右的为6。向左(右)这个行为发生的概率就与 ( )成正比。Softmax策略下Score函数的值容易计算,可以写成如下的形式:
上式中,等号右边第一部分是采取某行为的Score,第二部分是当前状态的期望分值。拿回刚才的例子来说,这个期望就是5和6的分别乘以其概率的和:
因此,向左走的Score值是-0.73(5 - 5.73),向右走的Score值是0.27(6 - 5.73),说明向左走比随机行为的价值要低,向右走比随机行为的价值要高。假如此时个体选择了向左走并且得到了一个正的即时奖励,个体将要提高向左这一行为被采样的概率,也就是提高向左走的分值。那么确定向左走分值的参数如何调整呢?根据每一个参数对应的输入(也就是特征值)的大小做相应的调整,特征值为正,参数值增大;特征值为负,参数值减小。
与Softmax策略不同的是,高斯策略常应用于连续行为空间,打个比方:如果控制机器人行走,要调整流经控制某个电机的电流值,而这是一个连续的取值。
使用高斯策略时,我们通常对于均值有一个参数化的表示,同样可以是一些特征的线性代数和:
方差可以是固定值,也可以用参数化表示。
行为对应于一个具体的数值,该数值从以μ(s)为均值、σ为标准差的高斯分布中随机采样产生:
对应的Score函数是:
其形式也相对简单。下图是引自Karpathy一篇博文的直观解释:
图解翻译:使用score function估计梯度的可视化。左:高斯分布下的一些采样(蓝点),针对每一个蓝点也画出了根据高斯分布均值得到的概率对数的梯度。箭头指示的方向是能够增加该采样点采样概率的分布的均值(对于高斯分布来说,是等值线的中心点)移动的方向;中:大多数采样点对应的score function值是-1,除了一小块区域是+1(score function可以是任意、并且不要求可微的标量函数),此时箭头用不同颜色表示,在随后的更新中,我们将要把所有绿色的值和负的红色值进行平均来更新分布参数(均值);右:参数更新后,绿色箭头的方向和红色箭头的反方向推动了行程均值朝着左下方移动的新的高斯分布,从这个新分布的采样将会按照预期有一个较高的score。
以上只是给了关于Score函数的直观表示,更深入的理解需要结合策略梯度学习来讲解。不过有了这些常用的策略,我们可以看看这些公式是如何体现在优化策略的目标函数里的,这就是后文要介绍的:策略梯度定理。
Softmax策略和高斯策略的编程体会:利用这两个策略进行实际编程时,要特别注意梯度消失或梯度爆炸的现象,Score Function通常应用于当下代码很难得到梯度的时候;当使用一些机器学习库的时候,可以通过带入损失值,直接计算得出目标函数的梯度,此时就不需要计算Score Function的值了。
先考虑如下一个非常简单的单步MDP问题:从一个分布 中采样得到一个状态s,从s开始,采取一个行为a,得到即时奖励 然后终止。整个MDP只有一个状态、行为、即时奖励。在这个MDP过程中,如何最大化奖励?
由于是单步过程,因此三种目标函数的形式是一样的:
相应的梯度是:
可以看出目标函数的梯度等于策略函数对数梯度与即时奖励两部分乘积的期望,而根据之前的介绍,这两部分都是较为容易确定的。因此参数的更新就变得容易了。一个问题是单步MDP的情况是否适用于多步MDP呢?
答案是肯定的。唯一要变动的就是把即时奖励值换成目标的Q值,而且这对于三种目标函数都是通用的。有如下定理:
定理:对于任何可微的策略 ,对于任何策略的目标函数 , 或者 ,策略梯度都是:
David在此略微解释了目标函数梯度在强化学习里的特点。如果在监督学习里,目标函数的梯度不包括价值函数,当前状态、行为的好坏将有监督信息告知;而在强化学习里,需要通过价值函数来估计当前状态行为的好坏。
有了上述公式,我们就可以着手设计算法,解决实际问题了。记住在强化学习里,在谈到学习算法时,应该马上能想到三大类算法:动态规划(DP)、蒙特卡洛(MC)学习和时序差分(TD)学习。DP适用于中小规模问题,不是本讲的重点。我们先从MC学习开始讲起。
针对具有完整Episode的情况,我们应用策略梯度理论,使用随机梯度上升来更新参数,对于公式里的期望,我们通过采样的形式来替代,即使用t时刻的收获(return)作为当前策略下行为价值的无偏估计。
算法描述是这样的:我们先随机初始化策略函数的参数θ,对当前策略下的一个Episode:
从t=1到t=T-1间的每一个时刻,计算个体获得的收获 ,然后更新参数θ。如此然后重复每一个Episode,直到结束。具体算法如下:
注:上面描述中 就是收获,这里使用 而不是 可能考虑的是用它来作为价值的期望,从这里也可以看出这是有噪声的采样。
示例——Puck世界:
举了一个在区域里追踪一个目标的例子:有一个五边形的目标物体,同时还有一个Agent:
状态空间:个体观察自己的位置(x,y),速度(vx,vy)以及目标物体(图中的五角形)的位置(tx,ty),共6个特征。
行为空间:个体控制自己在上、下、左、右四个方向上的油门(速率的增量),和不操作5个行为。
环境动力学:将个体的行为转化为其速度和位置的变化。目标物体出现位置随机,且每30秒时间更新位置。
奖励:奖励值的大小基于个体与目标物体之间的距离,距离越小奖励越大。
Puck世界还有很多变种,例如在世界里再增加一个惩罚目标,个体需要在躲避该目标的同时尽可能接近要靠近的目标(请参考这里)。
使用蒙特卡洛策略梯度算法收敛速度慢,需要的迭代次数长,还存在较高的变异性。那么尝试基于TD的学习算法呢?
使用蒙特卡洛策略梯度方法使用了收获作为状态价值的估计,它虽然是无偏的,但是噪声却比较大,也就是变异性(方差)较高。如果我们能够相对准确地估计状态价值,用它来指导策略更新,那么是不是会有更好的学习效果呢?这就是Actor-Critic策略梯度的主要思想。
Actor-Critic的字面意思是“演员-评论”,相当于演员在演戏的同时有评论家指点继而演员演得越来越好。即使用Critic来估计行为价值:
基于Actor-Critic策略梯度学习分为两部分内容:
1. Critic:参数化行为价值函数
2. Actor:按照Critic部分得到的价值引导策略函数参数θ的更新。
这样,Actor-Critic算法遵循的是一个近似的策略梯度:
可以明显看出,Critic做的事情其实是我们已经见过的:策略评估,他要告诉个体,在由参数 确定的策略 到底表现得怎么样。关于策略评估我们之前已经学过如何做了,你可以使用蒙特卡洛策略评估、TD学习以及TD(λ)等,你也可以使用上一讲介绍的最小方差方法。
一个简单的actor-critic算法可以使用基于行为价值的critic,它使用一个线性价值函数来近似状态行为价值函数:
其中Critic通过线性近似的TD(0)更新w,Actor通过策略梯度更新θ。具体算法流程如下:
注:该算法仅是基于线性价值函数的近似的Actor-Critic算法。
这是一个在线实时算法,针对每一步进行更新,不需要等到Episode结束。
在基于策略的学习算法中,算法挑选策略的时候不需使用Ɛ-贪婪搜索,策略是直接根据参数θ得到的。同时在对策略参数更新时有一个学习率α,它体现了在梯度方向上更新参数θ的步长(step size),一般的我们在更新参数时是按梯度方向只更新由α确定的一定量。打个比方,当前策略在更新时提示梯度方向倾向于选择“向左”的行为,那么在更新策略参数时,可以朝着向左的方向更新一定的值,如果这个α取值增大,则导致决策朝着更容易选择“向左”的行为倾斜,这其实就相当于没有探索的贪婪决策行为。而只要学习在持续,就有可能因为梯度变化而尝试更多的行为,这一过程中参数α控制了策略更新的平滑度。
David还回答了一个很好的提问:如果使用策略梯度方法,是否还能确保发现唯一的全局最优解,还是会陷入一个局部最优解?
他的回答是:如果基于价值函数制定策略,使用查表(table look-up)的方式可以保证能收敛到全局最优解,即虽然使用直接基于策略的学习方法,当仍然使用查表的方式时,比如使用softmax策略是可以得到全局最优解的;但是如果使用一些通用化的近似函数表示方法,比如神经网络等,则无论是基于价值函数还是基于策略,都可能陷入局部最优解。对于介于两者之间的部分方法,还没有完整的研究结果。
用特征的线性组合来近似 进而求解策略梯度的方法引入了偏倚,一个偏倚的价值下得到的策略梯度不一定能最后找到较好的解决方案,例如当近似价值函数的 使用可能会引起状态重名的特征时,还能解决那个格子世界问题吗(指前文提到的在格子世界里找钱袋子的问题),答案是不一定了。不过幸运的是,如果我们小心设计近似的 函数,是可以避免引入偏倚的,这样我们相当于遵循了准确的策略梯度。
注:table look-up方式表明没有近似。
兼容近似函数 Compatible Function Approximation
那么怎样才算是一个小心设计了的 呢?需要满足下面两个条件:
1. 近似价值函数的梯度完全等同于策略函数对数的梯度,即不存在重名情况:
2. 价值函数参数w使得均方差最小:
符合这两个条件,则认为策略梯度是准确的,此时:
在这个理论的基础上,我们对Actor-Critic方法做一些改进,其中一个方法是:
通过使用基线的方式来减少变异性 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函数吧),定义:
这个便利函数的现实意义在于,当个体采取行为a离开s状态时,究竟比该状态s总体平均价值要好多少?
如此一来,目标函数的梯度可以写成:
现在目标函数梯度的意义就改变成为了得到那个“好多少”,我应该怎么做(改变策略参数)
Advantage 函数可以明显减少状态价值的变异性,因此算法的Critic部分可以去估计advantage函数而不是仅仅估计行为价值函数。在这种情况下,我们需要两个近似函数也就是两套参数,一套用来近似状态价值函数,一套用来近似行为价值函数,以便计算advantage函数,并且通过TD学习来更新这两个价值函数。数学表示如下:
不过实际操作时,并不需要这样做。这是因为:
根据定义,TD误差 可以根据真实的状态价值函数 算出:
这样得到的TD误差是advantage函数的无偏估计,这同样是根据行为价值函数的定义推导成立的,即:
如此,我们就可以使用TD误差来计算策略梯度:
实际运用时,我们使用一个近似的TD误差,即用状态函数的近似函数来代替实际的状态函数:
这样做的好处就是,我们只需要一套参数描述状态价值函数,而不再需要针对行为价值近似函数了。
针对Critic过程使用TD(λ)
随后介绍了通过计算不同时间范围内(步长)的TD 误差来更新状态价值函数,此时的Critic过程可以根据时间范围的的长短(步长的多少)来分为
MC - 直至Episode结束:
TD(0) - 一步:
TD(λ)的前向视角 - 需要至Episode结束:
TD(λ)的后向视角 - 实时,具备频率记忆和近时记忆功能:
针对Actor过程使用TD(λ)
同样在Actor过程中也可以把时间范围考虑进去用来更新参数,具体公式为:
策略梯度可以表示为。
类似的,
MC - 直至Episode结束:
TD(0) - 一步:
TD(λ)的前向视角 - 需要至Episode结束:
TD(λ)的后向视角 - 实时,具备频率记忆和近时记忆功能:
对于Critic和Actor,将TD(λ)的后向视角算法应用于实际问题时,可以在线实时更新,而且不需要完整的Episode。
【start: 下面的内容由于理解不深,故而仅作了字面翻译,字面翻译可能与作者实际要表达的意思存在较大差异,请酌情阅读】
用带参数的函数去近似真实状态函数,相当于产生了一些带参数的梯度去代替实际的梯度。但是如果我们小心设计了近似价值函数的特征,那么是可以保证两者梯度是同一的。难点在于近似价值函数特征的选择。事实上我们在构建近似价值函数时选用的特征本身其实是从某一个角度对策略进行评估的Score Function。通过对这些具备Score function特点的特征进行线性求和,我们能确保两者的梯度是一致的。
体会:可以看出兼容近似函数体现了状态价值的特征,而Score function,就如同其名字,是评价这些特征的得分。
到目前为止,我们考虑的都是较为随机的策略,像高斯策略等,我们在估计策略梯度时用的都是一些加入了噪声的随机采样。事实上,这种想法其实是很不好的。当你基于高斯策略开始学习时,你会发现随着策略的不断优化,也就是希望高斯分布越来越窄(集中于均值附近)。当策略随着时间优化时,你会发现高斯分布的方差越来越大,准确地估计策略梯度变得越来越困难,这就导致最后并不能找到最优策略,这是目前我们介绍的所有策略梯度算法的不幸的一面。
似乎有一种替代方案,这也是我们最近的发现。与其引入随机策略,使用有噪声的采样,不如直接从有限的确定性的策略开始学习。我们根据这些确定性的策略来调整策略参数。当我们使用在有限Episode(case)中使用确定性的策略学习,我们得到的关于参数的更新表达式和之前介绍的会有些不一样。不过我们可以仅仅把他看成是另一种重写形式。通过这种方式,我们可以把噪声的影响降为0 。
在Critic部分,关于实际Q函数的参数化近似也可以体现对策略更新的方向,我们需要做的事是在设计近似函数时尽可能的考虑每一个参数对于Q的意义。
这相当与一个链式规则:朝着可以得到更多的Q值的方向调整策略。
以上就是确定性策略理论,通常比随机策略效果要好。
Natural actor-critic没详细展开讲。
重提了许许多多形式的策略梯度函数的形式,都是用随机梯度上升算法;同样Critic部分使用策略评估来实现,这个在之前的lecture里讲过,可以使用MC或者TD,TD(λ)等去估计状态价值函数 、行为价值函数 或advantage函数 等。
个人体会:虽然上述算法是等效的,但是在实际编程实现时效果却相差很多,个人觉得要主要归因于超参数的设置以及一些具体的调参技术。
本讲完。本讲是我个人认为的第二部分最具亮点同时也是比较难的一部分内容。下一讲将讲解个体如何构建一个模型,并依赖该模型整合学习与规划,这一讲里将接触到AlphaGo战胜人类围棋大师使用的主要算法思想。敬请期待。