Value-Based与Policy-Based

RL问题,本质上是求解一个policy函数,policy类似监督学习中的model。之前求解policy都是通过间接的方式,即根据最大Q(s,a)获取执行动作。Policy Gradient不同,直接将policy放到求解问题中,通过梯度方法直接获取最优policy函数。Policy Gradient的解法属于RL问题解法中的另外一个流派,policy-based;之前提到的解法,属于value-based。这些解法的关系参考下面,

Policy Gradient的优缺点总结如下

  • 优点
    • 收敛性质好
    • 可以应用于高纬度连续动作空间
    • 可以学习随机策略
  • 缺点
    • 一般情况收敛到局部最优
    • 策略评估效率低且方差大

举个例子,理解如何学习到随机策略。

上面一个地图,agent可以移动,遇到骷髅结束,遇到金币获得奖励,其他获得负的奖励。在灰色地带,agent无法区分两个灰色地带,即agent无法知道是在左边的灰色还是右边的灰色。

上面左图是Value-Based的学习的策略,如果agent不幸走到左边,会在那里来回震荡。而右图是Policy-Based的策略,在灰色地带,动作在两边都有概率,无论agent在哪里,都不会出现来回震荡。

何为称作Policy Gradient?

为了求解最优函数πθ(s,a),需要构建一个目标函数,然后用各种最优化方法求解,得到最优函数。

  • 阶段(Episodic)场景,使用开始状态的值函数作为目标函数,J1(θ)=Vπθ(S1)=Eπθ[V1]
  • 连续(Continuous)场景,使用平均值函数,JavV(θ)=sdπθ(s)Vπθ(s)=sdπθ(s)aπθ(s,a)Rsa

所以,将此问题转成一个最优化问题(套路与监督学习非常类似),优化问题的解法非常多,这里专注梯度解法。并且,此最优化问题是求最大值,所以参数更新方法是梯度递增(Gradient Ascent)而不是梯度递减。即Δθ=αθJ(θ)。 这也就是Policy Gradient的由来,通过Gradient求解Policy。

梯度有时候不能太好计算,尤其是那些复杂的目标函数,但是可以通过有限差分初步估算梯度,原理是在梯度点附近,通过泰勒展开,保留线性部分,剔除其他余项,类似计算切线斜率,方法如下

J(θ)θkJ(θ+ϵuk)J(θ)ϵ

可以看到,只需要定义步长ϵ,无需求解梯度,十分方便。

得分函数Score Function

得分函数是Policy Gradient求解过程中的一个通用形式,对πθ(s,a)变形,

πθ=πθ(s,a)πθ(s,a)πθ(sa)=πθ(s,a)ln(πθ(s,a))

其中,θlnπθ(s,a)称为得分函数,后面会经常遇到。此函数有一个比较好的性质,对数函数会将乘法变成加法,这样非常方便求导。

比如使用Softmax和线性模型构建策略函数,

πθ(s,a)=eϕ(s,a)Tθbeϕ(s,b)Tθ

对应得分函数形式如下,

lnπθ(s,a)=ϕ(s,a)Tbπθ(s,b)ϕ(s,b)=ϕ(s,a)TEπθ[ϕ(s,)]

上式计算技巧:不要用ln与分母过早的结合,而是先求导,然后得到策略函数。

在比如,在连续动作场景,一般假设动作a符合正太分布,其分布均值与状态s有关,方差认为设定为σ ,那么aN(μ(s),σ2)。此时,πθ(s,a)是正太分布的概率密度,代入得分函数得后形式非常简单

lnπθ(s,a)=(aμ(s))ϕ(s)σ2

一步MDP

在一步的情况下,epsoide和continues的场景是一致的,可以用即时奖励作为回报,即r=Rsa,代入到目标函数中

J(θ)=Eπθ[r]=sSd(s)aAπθ(s,a)Rs,a

对目标函数求导,代入得分函数,

θJ(θ)=sSd(s)aAπθ(s,a)((θlnπθ(s,a))Rs,a)=Eπθ[(θlnπθ(s,a))r]

Policy Gradient定理

该定理将一部MDP泛化到多步MDP,主要是用长期回报估计Qπ(s,a)替换即时奖励Rsa。后面将要介绍的一些列估算算法也是在奖励这块变化,得到不同的衍生算法。

REINFORCE算法

PolicyGradient的Monte-Carlo版本,大致思路沿用前面提到的方法。只是将r换成vt的无偏估计,伪代码如下

此算法具有MC类算法的统一缺点,效率低,收敛慢。同时,其方差还比较大。

Actor-Critic算法

RINFORCE算法方差很大,可以使用评论家(Critic)评估行为值函数,而不是MC采样,即Qw(s,a)=Qπθ(s,a),实验证明这样可以有效减少方差,提高训练效率。Actor更新策略参数θ,critic更新行为值函数的参数w。critic做的事情就是行为值函数评估,之前的章节已经讨论过,可以使用MC,TD,TD(λ)等方法完成。下面举个列子,使用线性模型模拟行为值函数,使用TD(0)评估行为值函数,此算法称为QAC,伪代码如下

此方法效率比MC高,无需等待评估vt可以逐步在线学习。

Bias和避免方法

Actor-Critic算法存在bias,因为Critic是biasd,所以根据biased的数据学习的策略也是biased。幸运的是,如果适当的选取Critic的近似函数,可以确保整个过程not biased。近似函数Qw(s,a)需要满足下面两点,

  1. Qw(s,a)=θlnπθ(s,a),行为值函数的梯度向量与值函数的梯度向量相同。
  2. ε=E[(Qπθ(s,a)Qw(s,a))2]w用于最小化ε

此时,θJ(θ)=Eπθ[(θlnπθ(s,a))Qw(s,a)]无偏移。证明过程比较简单,直接按定义展看即可。所以,得分函数在Actor-Critic过程中非常重要。

减少Variance

之前提到REINFORCE有较大Variance,但是使用一个基础函数B(s),只要与动作action无关,对梯度没有影响,但是可以有效减少Variance。值函数V(s)与动作无关,一般可以作为比较好的基础函数。令Aπθ(s,a)=Qπθ(s,a)Vπθ(s),用A代替Action-Critic中的r,可以有效减少variance。

但是,这样需要而外计算值函数,所以现在需要计算三套参数,

  • Vv(s)Vπθ(s)
  • Qw(s,a)Qπθ(s,a)
  • πθ(s,a)π(s,a)

这不是增加了计算负担了?其实不是,回忆TD方法评估值函数,每次更新方法为

δπθ=r+γVπθ(s)Vπθ(s)

此更新方法恰巧是优势函数Aπθ(s,a)的无偏估计,

Eπθ[δπθ|s,a]=Eπθ[r+γVπθ(s)|s,a]Vπθ(s)=Qπθ(s,a)Vπθ(s)=Aπθ(s,a)

所以,可以使用TD错误计算梯度,并且只需要两组参数,而不是三组,最后梯度为

θJ(θ)=Eπθ[(θlnπθ(s,a))(r+γVv(s)Vv(s))]

目前,讲解的全是TD(0),后面可以扩展为TD(λ),这里就不一一展开,详情可以参考教材,最后给出本将总结,

实验

小车爬坡(连续版本)中的数据显示,如果不用RBF作特征,收敛会比较慢,并且最优解也比较差。RBF虽然计算量大,但是在维度较少清苦下,对收敛速率的影响还是非常明显。

参考资料