强化学习笔记(九)策略函数近似
强化学习笔记(九)策略函数近似
策略函数近似是强化学习中一种重要的方法,用于解决状态空间和动作空间过大或连续的问题。通过函数近似,我们可以用参数化模型来表示策略,从而避免直接存储所有状态和动作的概率分布。
策略函数的输入是状态,输出是动作的概率分布。常见的近似方法包括线性函数近似、神经网络近似和核方法。其中,神经网络近似最为常用,称为策略网络(Policy Network),记为 π(a|s; θ),其中 θ 是神经网络的参数。
【摘要】(来自元宝) 一、策略梯度方法的基本思想:
1.将策略参数化
在策略梯度方法中,我们不是去估计值函数(如Q值),而是直接用一个可微函数(如神经网络)来表示策略 π(a|s; θ),其中θ是策略的参数。也就是说,策略本身是可以被优化的对象。
2.定义目标函数
策略优化的目标是最大化某个性能指标,通常是期望回报(expected return):
J(θ) = 𝔼πθ[R] = ∑τP(τ; θ)R(τ)
其中τ表示一个轨迹(state-action序列),P(τ; θ)是该轨迹在策略πθ下的概率,R(τ)是该轨迹的总回报。
3.梯度上升更新策略参数
为了最大化J(θ),我们使用梯度上升方法更新θ:
θ ← θ + α∇θJ(θ)
这里的∇θ J(θ)就是所谓的策略梯度(policy gradient)。
二、存在的问题与挑战:
尽管策略梯度方法的想法很简单,但在实现中会遇到一些问题,主要包括:
问题一:如何选择合适的标量指标(scalar metric)
这个标量指标就是我们想要最大化的目标函数J(θ)。理论上我们可以直接用期望回报,但实际操作中,回报的方差可能非常大,导致梯度估计不稳定。
因此,实际中我们会引入一些技巧来改善这个问题,比如:
使用折扣因子γ来控制远期回报的重要性;
使用基线(baseline)来减少方差,如减去状态值V(s);
使用优势函数A(s,a)替代原始回报R(τ),如:A(s, a) = Q(s, a) − V(s);
使用REINFORCE with baseline 或 Actor-Critic 方法。
问题二:如何计算该标量的梯度
由于J(θ)通常是一个期望,直接计算梯度很困难,因此我们需要用采样的方法来估计梯度。
策略梯度定理(Policy Gradient Theorem)告诉我们,可以直接通过采样轨迹来估计梯度,而不需要显式地求P(τ; θ)的导数。
一个常见的梯度估计形式是:
∇θJ(θ) ≈ (1/N)∑i = 1N∑t = 1T∇θlogπθ(ai, t|si, t) · Gt
其中Gt是从时间t开始的总回报,N是采样的轨迹数,T是轨迹长度。
这个形式说明,策略梯度依赖于log概率的梯度乘以回报,这称为“得分函数估计器”(score function estimator)。
一、策略梯度的思路
从 value based 到
policy based,区别:方法是基于值还是基于策略。基于策略的方法会建立策略的目标函数,并用于优化策略。
目录:

基于策略梯度,是用的是梯度上升的方法。
一、策略梯度的基础 在这节课之前,都是用的表格形式的方式去存储状态和动作,以表格的形式储存

对于连续状态,表格形式很难泛化 为此,考虑引入策略网络,这里的π,多了一个参数θ

表格和函数形式的最优策略不同之处 第一点:最优函数的定义不一样,在表格行事历,如果一个policy的状态值比其他状态都好,那他是最优的。在函数形式的优化里面,如果一个策略π能最优化(最大化)一个具体的标量指标,那他是最优的。

第二点:就是获取最优动作的时候,用函数的话得先跑一遍这个函数,到函数里运算得到

第三点:就是更新策略的时候,不能像表格一样直接更新表格里的数,而是更新参数θ去优化。

策略梯度方法的思想 首先梯度的目标函数可以用于优化策略 然后,基于梯度的更新方法可以用于搜索最优策略 虽然思想是简单的,但是还存在几个问题: 第一个是我们如何选取合适的标量(metric) 第二个是我们如何去计算这个标量的梯度?——需要通过策略梯度方法

二、定义优化策略的指标
衡量策略的指标,先介绍一种:平均价值 ①平均价值的定义,其实就是对这个状态值进行加权平均。 这里vπbar的定义是在一个给定的策略π下,不同状态值的平均值

这里d(s)的求和是=1而且各个权重都是大于0

这样定义 ,在后面他就可以对他的梯度起到作用。
d(s)是什么呢? d(s)是一个分布系数,d(s)可以和π有关系,也可以没有关系。如果和π没关系,那么求梯度的时候就可以不考虑d(把他当做常数),否则就得考虑求导带上d。这里为了简化运算 把他当做梯度。

如果d和π没有关系 一种简单的方式是都取平均去选取d,另一种方式是按照具体的状态值去选取。 如果d和π有关系,或者说d依赖于π,那么一种基础的选取方式是用状态转移概率p去选取。另一种是对不同的状态,给不同的权重,这样有一些经常访问到的状态,他的权重就更大,没访问到的状态他的权重就小。

第二种方式是平均奖励,用平均单步奖励作为标量

平均单步奖励的定义如图所示,由两步的加权平均求得。 第一步加权是由于不同的动作有不同的概率 要对动作加权平均 第二步是不同的状态动作采取了之后获得不同奖励的概率不同,又得加权平均一下。
dπ是稳态分布 状态的另一种表达方式: n趋于无穷的时候,跑无穷多步reward的平均,

另一种表达方式是省略了s0,因为当奖励是无穷多步的时候,从哪里开始就不再重要了。这个无穷多步的

三、metrics 的作用和性质
metrics可以用于优化策略梯度。metrics都是和策略π相关的,优化metrics就优化了策略。

第二点是所有metrics都有一个折扣率,在这个书里面都考虑的是有折扣率的情形

第三点是直觉上看,r̄是一个即时量,应该是短视的,$\bar{v_π}$是考虑到所有的reward,应该比r更加长远,但是实际上优化这两,其实是等价的。等价不是说这两个相等,而是说其中一个达到极值的时候另一个也达到极值。

这就是为什么强化里面优化即时奖励就可以优化价值。
在文献里面,经常会见到如下的表述,他是什么呢,其实他就是$\bar{v_π}$这个metric的另一种表述。即优化未来的折扣期望回报和。

文献中,要么是v,要么是r,一定会见到二者其一。
证明如下,其实大R就是从轨迹里采样的,是在不同的状态下连续获得的奖励,这个加起来就是return,也就是Gt,对这个求和就得到了$\bar{v_π}$

四 metric的梯度
metrics的梯度计算是策略梯度方法中最重要的一部分。也是最复杂的一部分。
原因在于可能有不同的metrics,而且要考虑折扣率的情况。

先给出梯度的结果的求和。 其中J(θ)可以是我们要优化的metric, 这里等号不一定是严格相等,可以是≈或近似 η是状态的分布或权重

所有的情况下,求出的式子都和这个类似。

metric是$\bar{r_π}$的时候,如果折扣率是=1,那么是严格等于,不然就是约等于 如果是$\bar{v_π}$,那么他是成比例的

这个梯度的式子也就e有用期望和对数的形式给出,为什么用这个形式比较好?因为这种形式上,梯度的近似可以写成下边的式子

为什么这俩是等价的,因为lnπ求导等于π′/π 所以对于π求梯度就等于π乘以▽lnπ

这样做了之后,我们就可以做出如下推导,其中s服从d,就可以写成期望的形式a服从π,对他求和也可以把这个期望的式子变成E[S d, A π],这样整个式子就相当于是在S,A上进行采样,并求和的方式,能够近似计算出梯度。 注意这里边s,a和S,A的含义区别
需要指出的是,为了要从上面式子中得到lnπ,我们必须有约束:π>0。 而为了引入π>0,我们可以用到softmax函数,这个函数可以进行归一化。我们就直接令这个π的函数长成softmax函数的形式(反正π是个函数,可以任意指定),从而保证他的范围。这里的h函数是feature function,现在都是神经网络里面提取

在神经网络里面提取的方式是输入特征,经过隐藏层,再用softmax激活,就可以得到不同层的概率。

由于每个动作的概率是大于0而且小于1,这里的π就具有随机性和探索性

需要说的是,上面的方法只适合离散动作,像连续动作的话适合用dpg类的方法来处理。
五、梯度上升方法和REINFORCE算法
上面的文章里介绍了策略梯度。可以用梯度上升的方式进行求解。

把上面的梯度公式代进来,就得到了梯度上升的计算公式。但是公式1是没法用的 因为里面有一个期望的形式。 为了计算可以把梯度换成公式2的随机形式,但是公式2也是没法用的,因为里面依赖qπ(s,a),也就是真实的动作值(如果我们知道q_π的真实值那就不用迭代了)。

我们想到既然qπ未知,那么就可以用一个近似量qt去替代,,这个方法就是reinforce方法。他计算qt的方法是用蒙特卡洛,从一个s,a出发,历经一个完整的回合,计算得到完整的轨迹,用轨迹的g去计算qt。
同时还有一些td方法可以介绍,这些是属于a2c方法的范畴。
如何采样s和a? 对于s,我们可以从长期运行的稳定的策略里面得到 对于a,我们可以从给定的π里面采集。这里面π依赖于s和θ。 因此他的行为策略和目标策略是一致的,属于是on-policy。

接下来再来审视一下这个式子,对这个式子进行变形,然后把梯度▽π放到右边,公式就变成了中间的公式的形状。,令中间的q/π=βt,所以梯度上升的式子就变成了在优化π(at|st)

上面的梯度迭代公式变形后,我们发现,如果βt>0,那么在st下选择at的概率就增加了。 如果βt<0,那么概率减小。

从数学上说,当θt + 1 − θt足够小的时候,就有π和后面的梯度是约等的。这个是源于微分。从微分上把第一行的公式代入 就得到了 πθt + 1=πθt + aβt ▽ πt²,也就是说βt决定了优化的方向 当βt>0,概率增大 βt<0,概率减小

βt系数的特性是平衡探索与利用。 βt和qt成正比,如果qt比较大,那么βt也比较大,从而倾向于选,让q比较大的动作。 β和π成反比,如果π是比较小的,那么βt算出来会比较大,从而增加模型的探索性
六、reinforce算法

如果里面的qπ是从蒙特卡洛得到的,那他就是reinforce算法。 reinforce是最早的策略梯度算法 伪代码如下

这里θ更新了之后,并不是立刻用于模型的动作选取。这是因为蒙特卡洛的方法是off-policy的,要等所有的回合都遍历结束了之后才能选取。