策略梯度
前一讲主要讲解的是价值函数的近似,然后根据价值函数来制定策略。 本讲中策略P(a|s)将从一个概率集合摇身变成函数本身π(s,a),通过借助策略相关的目标函数梯度的引导,寻找与目标函数的极值,进而得到最优策略。
本讲组织架构如下:先提出价值函数在某些情况下不能很好的解决问题,同时直接基于策略的分析在某些场合具有价值函数不能替代的优点,接着引入了直接基于策略学习所需要的目标函数的设计,引入了策略梯度的概念,从有限差分法、理论分析两种途径解释了策略梯度的计算原理,介绍了两种基本的策略其梯度计算方法。在以上内容基础上,提出了应用策略梯度进行强化学习的Actor-Critic算法,给出了其算法流程并一些算法改善的方法。同样,随着深度学习库的发展,本讲中提到的一些策略的梯度计算公式在实际应用中不多,但对于理论理解还是非常有帮助的。与对价值函数的近似优化一样,基于策略函数的优化同样是不依赖模型(Model Free)的。
简介
上一讲主要内容是如何对价值函数进行近似的参数化表达,包括状态价值函数和行为价值函数:
V
θ
(
s
)
≈
V
π
(
s
)
Q
θ
(
s
,
a
)
≈
Q
π
(
s
,
a
)
V_\theta(s) \approx V^{\pi}(s)\\ Q_\theta(s,a) \approx Q^{\pi}(s,a)
Vθ(s)≈Vπ(s)Qθ(s,a)≈Qπ(s,a)
随后一个策略可以直接从价值函数中产生,比如使用Ɛ-greedy探索方法。
本节将直接参数化策略本身,同时参数化的策略将不再是一个概率集合而是一个函数,即从离散变为连续:
π
θ
(
s
,
a
)
=
P
[
a
∣
s
,
θ
]
\pi_{\theta}(s,a) = \mathbb{P}[a|s,\theta]
πθ(s,a)=P[a∣s,θ]
上式将策略函数理解成参数化的策略函数
π
θ
\pi_\theta
πθ,策略函数确定了在给定的状态和一定的参数设置下,采取任何可能行为的概率,因此事实上它是一个概率密度函数。在实际应用策略产生行为时,是按照这个概率分布进行行为采样的。策略函数里的参数决定了概率分布的形态。
参数化的目的是为了解决大规模问题。在大规模的问题里,把每一个状态严格的独立出来指出某个状态下应该执行某个行为是不太可能的。因此我们需要参数化,用少量的参数来合理近似实际的函数。
我们要做的是利用参数化的策略函数,通过调整这些参数来得到一个较优策略,遵循这个策略产生的行为将得到较多的奖励。具体的机制是设计一个目标函数,对其使用梯度上升(Gradient Ascent)算法优化参数以最大化奖励。
基于价值和基于策略的强化学习
比较了Value-Based和Policy-Based的强化学习,指出前者通过学习价值函数指导策略制定(例如Ɛ-greedy执行方法);后者则没有价值函数,直接学习策略;还有一种既学习价值函数也学习策略的方法,叫Actor-Critic强化学习。
policy based方法的优缺点
优点:
-
基于策略的学习可能会具有更好的收敛性,这是因为基于策略的学习虽然每次只改善一点点,但总是朝着好的方向在改善;但是上讲提到有些价值函数在后期会一直围绕最优价值函数持续小的震荡而不收敛。
-
在对于那些拥有高维度或连续状态空间来说,使用基于价值函数的学习在得到价值函数后,制定策略时,需要比较各种行为对应的价值大小,这样如果行为空间维度较高或者是连续的,则从中比较得出一个有最大价值函数的行为这个过程就比较难了,这时候使用基于策略的学习就高效的多。
-
能够学到一些随机策略,下文举了一个很好的例子;但是基于价值函数的学习通常是学不到随机策略的。
-
有时候计算价值函数非常复杂。比如当小球从从空中某个位置落下你需要左右移动接住时,计算小球在某一个位置时采取什么行为的价值是很难得;但是基于策略就简单许多,你只需要朝着小球落地的方向移动修改策略就行。
缺点:
- 原始的、未经改善(Naive)的基于策略的学习有时候效率不够高,有时候还有较高的方差。因为基于价值函数的策略决定每次都是推促个体去选择一个最大价值的行为;但是基于策略的,更多的时候策略的选择时仅会在策略某一参数梯度上移动一点点,使得整个的学习比较平滑,因此不够高效。有时候计算朝着梯度方向改变的增量也会有较高的方差,以至于拖累了整个算法速度,但是通过一些修饰,可以改进。
- 在具体解决问题时,需要评估问题的特点来决定是主要使用基于价值的学习还是基于策略的学习。
基于价值函数的策略有时无法得到最优策略
当发生状态重名情况时,随机策略将会优于确定性的策略。之前的理论告诉我们对于任何MDP总有一个确定性的最优策略。不过那是针对状态可完美观测、或者使用的特征可以完美描述状态的情况下的。当发生状态重名无法区分或者使用的近似函数里描述状态的特征限制了对状态的完美描述时,个体得到的状态信息等效于部分观测的环境信息,问题将不具备马尔可夫性。此时最优策略将不再是确定性的。而直接基于策略的学习将能学习到最优策略,这就是我们为什么要直接基于策略进行强化学习的原因。
策略目标函数
三种形式的策略目标函数
那么直接基于策略的学习是如何优化策略的呢?要搞清楚这个问题,我们得搞清楚下面这个问题:我们优化策略的最终目的是什么?尽可能获得更多的奖励。我们设计一个目标函数来衡量策略的好坏,针对不同的问题类型,这里有三个目标函数可以选择:
目标:给定策略 π θ ( s , a ) \pi_\theta(s,a) πθ(s,a),找到最佳的参数 θ \theta θ。
- Start value:在能够产生完整Episode的环境下,也就是在个体可以到达终止状态时,我们可以用这样一个值来衡量整个策略的优劣:从某状态s1算起直到终止状态个体获得的累计奖励。这个值称为start value. 这个数值的意思是说:如果个体总是从某个状态s1开始,或者以一定的概率分布从s1开始,那么从该状态开始到Episode结束个体将会得到怎样的最终奖励。这个时候算法真正关心的是:找到一个策略,当把个体放在这个状态s1让它执行当前的策略,能够获得start value的奖励。这样我们的目标就变成最大化这个start value。
J 1 ( θ ) = V π θ ( s 1 ) = E π θ [ v 1 ] J _ { 1 } ( \theta ) = V ^ { \pi _ { \theta } } \left( s _ { 1 } \right) = \mathbb { E } _ { \pi _ { \theta } } \left[ v _ { 1 } \right] J1(θ)=Vπθ(s1)=Eπθ[v1] - Average Value:对于连续环境条件,不存在一个开始状态,这个时候可以使用 average value。意思是考虑我们个体在某时刻处在某状态下的概率,也就是个体在该时刻的状态分布,针对每个可能的状态计算从该时刻开始一直持续与环境交互下去能够得到的奖励,按该时刻各状态的概率分布求和:
J a v V ( θ ) = ∑ s d π θ ( s ) V π θ ( s ) J _ { \mathrm { av } V } ( \theta ) = \sum _ { s } d ^ { \pi _ { \theta } } ( s ) V ^ { \pi _ { \theta } } ( s ) JavV(θ)=s∑dπθ(s)Vπθ(s)
注: d π θ ( s ) d ^ { \pi _ { \theta } } ( s ) dπθ(s) 是在当前策略下马尔科夫链的关于状态的一个静态分布。 - Average reward per time-step:又或者我们可以使用每一个时间步长在各种情况下所能得到的平均奖励,也就是说在一个确定的时间步长里,查看个体出于所有状态的可能性,然后每一种状态下采取所有行为能够得到的即时奖励,所有奖励按概率求和得到:
J a v R ( θ ) = ∑ s d π θ ( s ) ∑ a π θ ( s , a ) R s a J _ { a v R } ( \theta ) = \sum _ { s } d ^ { \pi _ { \theta } } ( s ) \sum _ { a } \pi _ { \theta } ( s , a ) \mathcal { R } _ { s } ^ { a } JavR(θ)=s∑dπθ(s)a∑πθ(s,a)Rsa
其实这三个式子的目标都是同一个目标,都是试图描述(衡量)个体在某一时刻某一状态的价值。
优化目标函数
找到目标函数,下一步的工作是优化策略参数然后使得目标函数值最大化。因此可以说基于策略的强化学习实际上是一个优化问题,找到参数θ来最大化目标函数。有些算法使用梯度,有些则不使用梯度。如果有机会得到梯度,那么使用梯度上升的算法通常更加优秀一些。理解了使用梯度的算法的使用,那么也将很容易将不基于梯度的算法应用到策略优化中。
本讲内容将主要聚焦于使用梯度的策略优化,同时使用基于序列结构片段(sequential structure)的方法。怎么理解基于序列结构呢?打个比方,我们不会去让个体持续与环境交互直至耗光其整个生命周期,然后得到一个结果,根据这个结果来优化策略,这样做对于个体来说就没有意义了。我们选取个体与环境交互中的一个序列结构片段,通过这种序列结构片段来学习,优化策略进而知道个体后续与环境的交互。
以上就是本讲的简介,下面将终点介绍目标函数、梯度上升等。
有限差分策略梯度
策略梯度
令J(θ)可以是任何类型的策略目标函数,策略梯度算法可以使J(θ)沿着其梯度上升至局部最大值。同时确定获得最大值时的参数θ:
Δ
θ
=
α
∇
θ
J
(
θ
)
\Delta \theta = \alpha \nabla _ { \theta } J ( \theta )
Δθ=α∇θJ(θ)
上式中▽θ J(θ)是策略梯度:
∇
θ
J
(
θ
)
=
(
∂
J
(
θ
)
∂
θ
1
⋮
∂
J
(
θ
)
∂
θ
n
)
\nabla _ { \theta } J ( \theta ) = \left( \begin{array} { c } \frac { \partial \mathcal { J } ( \theta ) } { \partial \theta _ { 1 } } \\ \vdots \\ \frac { \partial J ( \theta ) } { \partial \theta _ { n } } \end{array} \right)
∇θJ(θ)=⎝⎜⎜⎛∂θ1∂J(θ)⋮∂θn∂J(θ)⎠⎟⎟⎞
有限差分法计算策略梯度
这是非常常用的数值计算方法,特别是当梯度函数本身很难得到的时候。具体做法是,针对参数θ的每一个分量θk,使用如下的公式粗略计算梯度:
∂
J
(
θ
)
∂
θ
k
≈
J
(
θ
+
ϵ
u
k
)
−
J
(
θ
)
ϵ
\frac { \partial J ( \theta ) } { \partial \theta _ { k } } \approx \frac { J \left( \theta + \epsilon u _ { k } \right) - J ( \theta ) } { \epsilon }
∂θk∂J(θ)≈ϵJ(θ+ϵuk)−J(θ)
u
k
u_k
uk是一个单位向量,仅在第k个维度上值为1,其余维度为0。有限差分法简单,不要求策略函数可微分,适用于任意策略;但有噪声,且大多数时候不高效。
蒙特卡洛策略梯度
现在我们将理论分析并计算策略梯度。这要求策略在执行行为时刻是可微分的,并且其梯度是能计算出来的。
这里借用了Likelihood ratios(似然比、似然系数)这个概念。函数在某个变量θ处的梯度等于该处函数值与该函数的对数函数在此处梯度的乘积:
∇
θ
π
θ
(
s
,
a
)
=
π
θ
(
s
,
a
)
∇
θ
π
θ
(
s
,
a
)
π
θ
(
s
,
a
)
=
π
θ
(
s
,
a
)
∇
θ
log
π
θ
(
s
,
a
)
\begin{aligned} \nabla _ { \theta } \pi _ { \theta } ( s , a ) & = \pi _ { \theta } ( s , a ) \frac { \nabla _ { \theta } \pi _ { \theta } ( s , a ) } { \pi _ { \theta } ( s , a ) } \\ & = \pi _ { \theta } ( s , a ) \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) \end{aligned}
∇θπθ(s,a)=πθ(s,a)πθ(s,a)∇θπθ(s,a)=πθ(s,a)∇θlogπθ(s,a)
我们定义Score function为:
∇
θ
log
π
θ
(
s
,
a
)
\nabla _ { \theta } \log \pi_{\theta}(s,a)
∇θlogπθ(s,a)
softmax 策略
Softmax策略是针对一些具有离散的行为常用的一个策略。我们希望有平滑的参数化的策略来决策:针对每一个离散的行为,应该以什么样的概率来执行它。
为此,我们把行为看成是多个特征在一定权重下的线性代数和:
ϕ
(
s
,
a
)
⊤
θ
\phi ( s , a ) ^ { \top } \theta
ϕ(s,a)⊤θ
而我们采取某一具体行为的概率与e的该值次幂成正比:
π
θ
(
s
,
a
)
∝
e
ϕ
(
s
,
a
)
⊤
θ
\pi _ { \theta } ( s , a ) \propto e ^ { \phi ( s , a ) ^ { \top } \theta }
πθ(s,a)∝eϕ(s,a)⊤θ
此时的score function的表达式如下:
∇
θ
log
π
θ
(
s
,
a
)
=
ϕ
(
s
,
a
)
−
E
π
θ
[
ϕ
(
s
,
⋅
)
]
\nabla _ { \theta } \log \pi_{\theta}(s,a) = \phi(s,a) -\mathbb{E}_{\pi_\theta}[\phi(s,·)]
∇θlogπθ(s,a)=ϕ(s,a)−Eπθ[ϕ(s,⋅)]
推导过程如下:
d
d
θ
l
n
π
=
d
d
θ
[
ϕ
θ
−
l
n
(
∑
e
ϕ
θ
)
]
=
ϕ
−
∑
ϕ
e
ϕ
θ
∑
e
ϕ
θ
=
ϕ
−
∑
ϕ
e
ϕ
θ
∑
e
ϕ
θ
=
ϕ
−
∑
ϕ
π
=
ϕ
−
E
π
\begin{aligned} \frac{d}{d\theta}ln\pi & = \frac{d}{d\theta}[\phi\theta-ln(\sum e^{\phi\theta})] \\ & = \phi-\frac{\sum\phi e^{\phi\theta}}{\sum e^{\phi\theta}} \\ & = \phi-\sum\phi\frac{e^{\phi\theta}}{\sum e^{\phi\theta}} \\ & = \phi-\sum\phi\pi \\ & = \phi-E\pi \end{aligned}
dθdlnπ=dθd[ϕθ−ln(∑eϕθ)]=ϕ−∑eϕθ∑ϕeϕθ=ϕ−∑ϕ∑eϕθeϕθ=ϕ−∑ϕπ=ϕ−Eπ
这里的
ϕ
,
θ
\phi,\theta
ϕ,θ都是向量。
假如在状态s此时个体选择了向左走并且得到了一个正的即时奖励,个体将要提高向左这一行为被采样的概率,也就是提高在状态s向左走的score。那么确定向左走分值的参数如何调整呢?根据每一个参数对应的输入(也就是特征值)的大小做相应的调整,特征值为正,参数值增大;特征值为负,参数值减小。
高斯策略
与Softmax策略不同的是,高斯策略常应用于连续行为空间。
使用高斯策略时,我们通常对于均值有一个参数化的表示,同样可以是一些特征的线性代数和:
μ
(
s
)
=
ϕ
(
s
)
T
θ
\mu(s) = \phi(s)^T\theta
μ(s)=ϕ(s)Tθ
方差可以是固定值,也可以用参数化表示。行为对应于一个具体的数值,该数值从以μ(s)为均值、σ为标准差的高斯分布中随机采样产生:
a
∼
N
(
μ
(
s
)
,
σ
2
)
a \sim \mathcal { N } \left( \mu ( s ) , \sigma ^ { 2 } \right)
a∼N(μ(s),σ2)
即:
π
θ
(
s
,
a
)
∝
e
−
(
a
−
ϕ
(
s
)
T
θ
)
2
σ
2
\pi _ { \theta } ( s , a ) \propto e ^ {-\frac{(a-\phi(s)^T\theta)^2}{\sigma^2}}
πθ(s,a)∝e−σ2(a−ϕ(s)Tθ)2
对应的Score函数是:
∇
θ
log
π
θ
(
s
,
a
)
=
(
a
−
μ
(
s
)
)
ϕ
(
s
)
σ
2
\nabla _ { \theta } \log \pi _ { \theta } ( s , a ) = \frac { ( a - \mu ( s ) ) \phi ( s ) } { \sigma ^ { 2 } }
∇θlogπθ(s,a)=σ2(a−μ(s))ϕ(s)
策略梯度定理
先考虑如下一个非常简单的单步MDP问题:从一个分布
d
(
s
)
d(s)
d(s)中采样得到一个状态s,从s开始,采取一个行为a,得到即时奖励
r
=
R
s
,
a
r = R_{s,a}
r=Rs,a然后终止。整个MDP只有一个状态、行为、即时奖励。在这个MDP过程中,如何最大化奖励?
由于是单步过程,因此三种目标函数的形式是一样的:
J
(
θ
)
=
E
π
θ
[
r
]
=
∑
s
∈
S
d
(
s
)
∑
a
∈
A
π
θ
(
s
,
a
)
R
s
,
a
\begin{aligned} J ( \theta ) & = \mathbb { E } _ { \pi _ { \theta } } [ r ] \\ & = \sum _ { s \in \mathcal { S } } d ( s ) \sum _ { a \in \mathcal { A } } \pi _ { \theta } ( s , a ) \mathcal { R } _ { s , a } \end{aligned}
J(θ)=Eπθ[r]=s∈S∑d(s)a∈A∑πθ(s,a)Rs,a
注:在这
d
(
s
)
d(s)
d(s)和
R
s
,
a
R_{s,a}
Rs,a并不是
θ
\theta
θ的函数。对于多步也是一样。
相应的梯度是:
∇
θ
J
(
θ
)
=
∑
s
∈
S
d
(
s
)
∑
a
∈
A
π
θ
(
s
,
a
)
∇
θ
log
π
θ
(
s
,
a
)
R
s
,
a
=
E
π
θ
[
∇
θ
log
π
θ
(
s
,
a
)
r
]
\begin{aligned} \nabla _ { \theta } J ( \theta ) & = \sum _ { s \in \mathcal { S } } d ( s ) \sum _ { a \in \mathcal { A } } \pi _ { \theta } ( s , a ) \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) \mathcal { R } _ { s , a } \\ & = \mathbb { E } _ { \pi _ { \theta } } \left[ \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) r \right] \end{aligned}
∇θJ(θ)=s∈S∑d(s)a∈A∑πθ(s,a)∇θlogπθ(s,a)Rs,a=Eπθ[∇θlogπθ(s,a)r]
可以看出目标函数的梯度等于策略函数对数梯度与即时奖励两部分乘积的期望,而根据之前的介绍,这两部分都是较为容易确定的。因此参数的更新就变得容易了。一个问题是单步MDP的情况是否适用于多步MDP呢?答案是肯定的。唯一要变动的就是把即时奖励值换成目标的Q值,而且这对于三种目标函数都是通用的。有如下定理:
定理:对于任何可微的策略
π
θ
(
s
,
a
)
\pi_\theta(s,a)
πθ(s,a),对于三种策略的目标函数策略梯度都为:
∇
θ
J
(
θ
)
=
E
π
θ
[
∇
θ
log
π
θ
(
s
,
a
)
Q
π
θ
(
s
,
a
)
]
\nabla _ { \theta } J ( \theta ) = \mathbb { E } _ { \pi _ { \theta } } \left[ \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) Q ^ { \pi \theta } ( s , a ) \right]
∇θJ(θ)=Eπθ[∇θlogπθ(s,a)Qπθ(s,a)]
有了上述公式,我们就可以着手设计算法,解决实际问题了。记住在强化学习里,在谈到学习算法时,应该马上能想到三大类算法:动态规划(DP)、蒙特卡洛(MC)学习和时序差分(TD)学习。DP适用于中小规模问题,不是本讲的重点。我们先从MC学习开始讲起。
蒙特卡洛策略梯度定理
针对具有完整Episode的情况,我们应用策略梯度理论,使用随机梯度上升来更新参数,对于公式里的期望,我们通过采样的形式来替代,即使用t时刻的收获(return)作为当前策略下行为价值的无偏估计。
算法描述是这样的:我们先随机初始化策略函数的参数θ,对当前策略下的一个Episode:
{
s
1
,
a
1
,
r
2
,
…
,
s
T
−
1
,
a
T
−
1
,
r
T
}
∼
π
θ
\left\{ s _ { 1 } , a _ { 1 } , r _ { 2 } , \ldots , s _ { T - 1 } , a _ { T - 1 } , r _ { T } \right\} \sim \pi _ { \theta }
{s1,a1,r2,…,sT−1,aT−1,rT}∼πθ
从t=1到t=T-1间的每一个时刻,计算个体获得的收获
v
t
v_t
vt,然后更新参数θ。如此然后重复每一个Episode,直到结束。具体算法如下:
注:上面描述中 v t v_t vt 就是之前定义的累积回报奖励。
Actor-Critic 策略梯度定理
使用蒙特卡洛策略梯度方法使用了收获作为状态价值的估计,它虽然是无偏的,但是噪声却比较大,也就是变异性(方差)较高。如果我们能够相对准确地估计状态价值,用它来指导策略更新,那么是不是会有更好的学习效果呢?这就是Actor-Critic策略梯度的主要思想。
Actor-Critic的字面意思是“演员-评论”,相当于演员在演戏的同时有评论家指点继而演员演得越来越好。即使用Critic来估计行为价值:
Q
w
(
s
,
a
)
≈
Q
π
θ
(
s
,
a
)
Q _ { w } ( s , a ) \approx Q ^ { \pi _ { \theta } } ( s , a )
Qw(s,a)≈Qπθ(s,a)
基于Actor-Critic策略梯度学习分为两部分内容:
- Critic:参数化行为价值函数 Q w ( s , a ) Q_w(s, a) Qw(s,a)
- Actor:按照Critic部分得到的价值引导策略函数参数θ的更新。
这样,Actor-Critic算法遵循的是一个近似的策略梯度:
∇
θ
J
(
θ
)
≈
E
π
θ
[
∇
θ
log
π
θ
(
s
,
a
)
Q
w
(
s
,
a
)
]
Δ
θ
=
α
∇
θ
log
π
θ
(
s
,
a
)
Q
w
(
s
,
a
)
\begin{aligned} \nabla _ { \theta } J ( \theta ) & \approx \mathbb { E } _ { \pi _ { \theta } } \left[ \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) Q _ { w } ( s , a ) \right] \\ \Delta \theta & = \alpha \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) Q _ { w } ( s , a ) \end{aligned}
∇θJ(θ)Δθ≈Eπθ[∇θlogπθ(s,a)Qw(s,a)]=α∇θlogπθ(s,a)Qw(s,a)
可以明显看出,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结束。因为这里是线性表示价值行为函数,故在更新的时候乘的就是
ϕ
(
s
,
a
)
\phi(s,a)
ϕ(s,a),有疑惑的话可以看前一节的总结。
在基于策略的学习算法中,算法挑选策略的时候不需使用Ɛ-贪婪搜索,策略是直接根据参数θ得到的。同时在对策略参数更新时有一个学习率α,它体现了在梯度方向上更新参数θ的步长(step size),一般的我们在更新参数时是按梯度方向只更新由α确定的一定量。打个比方,当前策略在更新时提示梯度方向倾向于选择“向左”的行为,那么在更新策略参数时,可以朝着向左的方向更新一定的值,如果这个α取值增大,则导致决策朝着更容易选择“向左”的行为倾斜,这其实就相当于没有探索的贪婪决策行为。而只要学习在持续,就有可能因为梯度变化而尝试更多的行为,这一过程中参数α控制了策略更新的平滑度。
问:如果使用策略梯度方法,是否还能确保发现唯一的全局最优解,还是会陷入一个局部最优解?
回答是:如果基于价值函数制定策略,使用查表(table look-up)的方式可以保证能收敛到全局最优解,即虽然使用直接基于策略的学习方法,当仍然使用查表的方式时,比如使用softmax策略是可以得到全局最优解的;但是如果使用一些通用化的近似函数表示方法,比如神经网络等,则无论是基于价值函数还是基于策略,都可能陷入局部最优解。对于介于两者之间的部分方法,还没有完整的研究结果。
用特征的线性组合来近似
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a),进而求解策略梯度的方法引入了偏倚,一个偏倚的价值下得到的策略梯度不一定能最后找到较好的解决方案,例如当近似价值函数的
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a),使用可能会引起状态重名的特征时,还能解决那个格子世界问题吗(指前文提到的在格子世界里找钱袋子的问题),答案是不一定了。不过幸运的是,如果我们小心设计近似的
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a)函数,是可以避免引入偏倚的,这样我们相当于遵循了准确的策略梯度。
兼容近似函数 Compatible Function Approximation
那么怎样才算是一个小心设计了的
Q
w
(
s
,
a
)
Q_w(s,a)
Qw(s,a)呢?
定理:
如果想使用通用化的近似值函数策略来使策略梯度能收敛到最优解:
需要满足下面两个条件:
- 近似价值函数的梯度完全等同于策略函数对数的梯度,即不存在重名情况:
∇ w Q w ( s , a ) = ∇ θ log π θ ( s , a ) \nabla _ { w } Q _ { w } ( s , a ) = \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) ∇wQw(s,a)=∇θlogπθ(s,a) - 价值函数参数w使得均方差最小:
ε = E π θ [ ( Q π θ ( s , a ) − Q w ( s , a ) ) 2 ] \varepsilon = \mathbb { E } _ { \pi _ { \theta } } \left[ \left( Q ^ { \pi _ { \theta } } ( s , a ) - Q _ { w } ( s , a ) \right) ^ { 2 } \right] ε=Eπθ[(Qπθ(s,a)−Qw(s,a))2]
证明:
通过使用基线的方式来减少变异性 Reducing Variance Using Baseline
其基本思想是从策略梯度里抽出一个基准函数B(s),要求这一函数仅与状态有关,与行为无关,因而不改变梯度本身。 B(s)的特点是能在不改变行为价值期望的同时降低其Variance。当B(S)具备这一特点时,下面的推导成立:
E
π
θ
[
∇
θ
log
π
θ
(
s
,
a
)
B
(
s
)
]
=
∑
s
∈
S
d
π
θ
(
s
)
∑
a
∇
θ
π
θ
(
s
,
a
)
B
(
s
)
=
∑
s
∈
S
d
π
θ
B
(
s
)
∇
θ
∑
a
∈
A
π
θ
(
s
,
a
)
=
0
\begin{aligned} \mathbb { E } _ { \pi _ { \theta } } \left[ \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) B ( s ) \right] & = \sum _ { s \in \mathcal { S } } d ^ { \pi _ { \theta } ( s ) } \sum _ { a } \nabla _ { \theta } \pi _ { \theta } ( s , a ) B ( s ) \\ & = \sum _ { s \in \mathcal { S } } d ^ { \pi _ { \theta } } B ( s ) \nabla _ { \theta } \sum _ { a \in \mathcal { A } } \pi _ { \theta } ( s , a ) \\ & = 0 \end{aligned}
Eπθ[∇θlogπθ(s,a)B(s)]=s∈S∑dπθ(s)a∑∇θπθ(s,a)B(s)=s∈S∑dπθB(s)∇θa∈A∑πθ(s,a)=0
推导过程解释:策略函数对数的梯度与基准函数乘积的期望可以表示为第一行等式对策略函数梯度与B(s)的乘积对所有状态及行为分布求的形式,这步推导主要是根据期望的定义,以及B是关于状态s的函数而进行的。由于B(s)与行为无关,可以将其从针对行为a的求和中提出来,同时我们也可以把梯度从求和符号中提出来(梯度的和等于和的梯度),从而后一项求和则变成:策略函数针对所有行为的求和,这一求和根据策略函数的定义肯定是1,而常数的梯度是0。因此总的结果等于0 。
原则上,和行为无关的函数都可以作为B(s)。一个很好的B(s)就是基于当前状态的状态价值函数:
B
(
s
)
=
V
π
θ
(
s
)
B(s) = V^{\pi_\theta}(s)
B(s)=Vπθ(s)
这样我们通过使用一个advantage function(优势函数),定义:
如此一来,目标函数的梯度可以写成:
∇
θ
J
(
θ
)
=
E
π
θ
[
∇
θ
log
π
θ
(
s
,
a
)
A
π
θ
(
s
,
a
)
]
\nabla _ { \theta } J ( \theta ) = \mathbb { E } _ { \pi _ { \theta } } \left[ \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) A ^ { \pi _ { \theta } } ( s , a ) \right]
∇θJ(θ)=Eπθ[∇θlogπθ(s,a)Aπθ(s,a)]
Advantage 函数可以明显减少状态价值的变异性,因此算法的Critic部分可以去估计advantage函数而不是仅仅估计行为价值函数。在这种情况下,我们需要两个近似函数也就是两套参数,一套用来近似状态价值函数,一套用来近似行为价值函数,以便计算advantage函数,并且通过TD学习来更新这两个价值函数。数学表示如下:
V
v
(
s
)
≈
V
π
θ
(
s
)
Q
w
(
s
,
a
)
≈
Q
π
θ
(
s
,
a
)
A
(
s
,
a
)
=
Q
w
(
s
,
a
)
−
V
v
(
s
)
\begin{aligned} V _ { v } ( s ) & \approx V ^ { \pi _ { \theta } } ( s ) \\ Q _ { w } ( s , a ) & \approx Q ^ { \pi _ { \theta } } ( s , a ) \\ A ( s , a ) & = Q _ { w } ( s , a ) - V _ { v } ( s ) \end{aligned}
Vv(s)Qw(s,a)A(s,a)≈Vπθ(s)≈Qπθ(s,a)=Qw(s,a)−Vv(s)
不过实际操作时,并不需要这样做。这是因为:
根据定义,TD误差
δ
π
θ
\delta^{\pi_\theta}
δπθ可以根据真实的状态价值函数
V
π
θ
(
s
)
V^{\pi_\theta}(s)
Vπθ(s) 算出:
δ
π
θ
=
r
+
γ
V
π
θ
(
s
′
)
−
V
π
θ
(
s
)
\delta ^ { \pi _ { \theta } } = r + \gamma V ^ { \pi _ { \theta } } \left( s ^ { \prime } \right) - V ^ { \pi _ { \theta } } ( s )
δπθ=r+γVπθ(s′)−Vπθ(s)
δ
π
θ
\delta ^ { \pi _ { \theta } }
δπθ可以通过下面的推导看到,是
A
(
s
,
a
)
A ( s , a )
A(s,a)的无偏估计:
E
π
θ
[
δ
π
θ
∣
s
,
a
]
=
E
π
θ
[
r
+
γ
V
π
θ
(
s
′
)
∣
s
,
a
]
−
V
π
θ
(
s
)
=
Q
π
θ
(
s
,
a
)
−
V
π
θ
(
s
)
=
A
π
θ
(
s
,
a
)
\begin{aligned} \mathbb { E } _ { \pi _ { \theta } } \left[ \delta ^ { \pi _ { \theta } } | s , a \right] & = \mathbb { E } _ { \pi _ { \theta } } \left[ r + \gamma V ^ { \pi _ { \theta } } \left( s ^ { \prime } \right) | s , a \right] - V ^ { \pi _ { \theta } } ( s ) \\ & = Q ^ { \pi _ { \theta } } ( s , a ) - V ^ { \pi _ { \theta } } ( s ) \\ & = A ^ { \pi _ { \theta } } ( s , a ) \end{aligned}
Eπθ[δπθ∣s,a]=Eπθ[r+γVπθ(s′)∣s,a]−Vπθ(s)=Qπθ(s,a)−Vπθ(s)=Aπθ(s,a)
如此,我们就可以使用TD误差来计算策略梯度:
∇
θ
J
(
θ
)
=
E
π
θ
[
∇
θ
log
π
θ
(
s
,
a
)
δ
π
θ
]
\nabla _ { \theta } J ( \theta ) = \mathbb { E } _ { \pi _ { \theta } } \left[ \nabla _ { \theta } \log \pi _ { \theta } ( s , a ) \delta ^ { \pi _ { \theta } } \right]
∇θJ(θ)=Eπθ[∇θlogπθ(s,a)δπθ]
实际运用时,我们使用一个近似的TD误差,即用状态函数的近似函数来代替实际的状态函数:
δ
v
=
r
+
γ
V
v
(
s
′
)
−
V
v
(
s
)
\delta _ { v } = r + \gamma V _ { v } \left( s ^ { \prime } \right) - V _ { v } ( s )
δv=r+γVv(s′)−Vv(s)
这样做的好处就是,我们只需要一套参数描述状态价值函数,而不再需要针对行为价值近似函数了。
针对Critic过程使用TD(λ)
注:MC需要直至Episode结束,公式里的
v
t
v_t
vt就是
G
t
G_t
Gt;TD(0)仅需一步,TD(λ)的前向视角 - 需要至Episode结束,TD(λ)的后向视角 - 实时,具备频率记忆和近时记忆功能。
针对Actor过程使用TD(λ)
对于Critic和Actor,将TD(λ)的后向视角算法应用于实际问题时,可以在线实时更新,而且不需要完整的Episode。
许许多多形式的策略梯度函数的形式,都是用随机梯度上升算法;同样Critic部分使用策略评估来实现,这个在之前的lecture里讲过,可以使用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)等。
最后的总结: