4

强化学习(八)——Actor-Critic

 2 years ago
source link: http://antkillerfarm.github.io/rl/2019/10/01/RL_8.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

策略梯度(续)

策略目标函数(Policy Objective Functions)

首先,我们看看如何评价一个策略的好坏。

  • Start value
J1(θ)=Vπθ(s1)=Eπθ[v1]

上式表示在能够产生完整Episode的环境下,从状态s1开始,直到结束状态所能获得的累计奖励。在这种情况下,由于整个Episode的状态、路径都是确定的,因此奖励也是确定的。我们需要做的只是最大化start value,以找到最佳路径(也就是最佳策略)。

  • Average Value
JavV(θ)=∑sdπθ(s)Vπθ(s)

对于连续环境条件,不存在一个开始状态,这个时候可以使用average value。上式中的dπθ(s)表示πθ对应的MDP过程的Markov chain的稳态分布。

  • Average reward per time-step
JavR(θ)=∑sdπθ(s)∑aπθ(s,a)Rs,a

上式表示每一个time-step在各种情况下所能得到的平均奖励。

当然了,在很多情况下,我们未必可以得到一个真实的奖励值,这时使用相关函数的估计值作为奖励值即可。

策略优化(Policy Optimisation)

主要分为两大类:

1.非gradient算法。

  • Hill climbing
  • Simplex / amoeba / Nelder Mead
  • Genetic algorithms

2.gradient算法。

  • Gradient descent
  • Conjugate gradient
  • Quasi-newton

一般来说,gradient算法的优化效率较高,因此本文只讨论gradient算法。

我们可以仿照ML中的梯度优化算法,定义策略的梯度函数:

Δθ=α∇θJ(θ)∇θJ(θ)=(∂J(θ)∂θ1⋮∂J(θ)∂θn)

然而,梯度函数有的时候并不简单,也许并不可微。这时可以使用有限差分法:

∂J(θ)∂θk≈J(θ+ϵuk)−J(θ)ϵ

这里的uk是第k个元素为1,其余元素为0的单位向量。

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

Monte-Carlo Policy Gradient

∇θπθ(s,a)=πθ(s,a)∇θπθ(s,a)πθ(s,a)=πθ(s,a)∇θlog⁡πθ(s,a)

上式一般被称作Likelihood ratios,这里使用到了一个公式:dlog⁡(y)=dy/y

我们定义Score function为:∇θlog⁡πθ(s,a)

下面讨论几种常见的策略。

Softmax Policy

Softmax Policy适用于离散行为空间,它把行为权重看成是多个特征在一定权重下的线性代数和:ϕ(s,a)Tθ,则采取某一行为的概率为:

πθ(s,a)∝eϕ(s,a)Tθ

相应的Score function为:

∇θlog⁡πθ(s,a)=ϕ(s,a)−Eπθ[ϕ(s,⋅)]

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

Gaussian Policy

Gaussian Policy适用于连续行为空间。比如,如果控制机器人行走要调整流经某个电机的电流值,而这个电流值是连续值。

它用一个正态分布表示策略:a∼N(μ(s),σ2),其中μ(s)=ϕ(s)Tθ。

相应的Score function为:

∇θlog⁡πθ(s,a)=(a−μ(s))ϕ(s)σ2

下面我们用一个图来演示一下相关步骤。

左图的蓝点表示采样X,箭头指示该点的梯度方向,既然是正态分布,这些箭头显然是远离中心的。中图表示,X对应的Score function。我们根据Score function更新参数(沿着绿色箭头方向,或者沿着红色箭头的反方向)。最终得到右图中的新的正态分布。

从贝叶斯学习的角度来看,左图相当于先验分布,而中图相当于后验分布。

https://karpathy.github.io/2016/05/31/rl/

Deep Reinforcement Learning: Pong from Pixels

Policy Gradient Theorem

One-Step MDP是一类特殊的MDP:它从任意状态开始,只执行一次动作,然后就结束了。

J(θ)=Eπθ[r]=∑s∈Sd(s)∑a∈Aπθ(s,a)Rs,a∇θJ(θ)=∑s∈Sd(s)∑a∈A∇θlog⁡πθ(s,a)Rs,a=Eπθ[∇θlog⁡πθ(s,a)r]

One-Step MDP的相关结论可以扩展到multi-step MDP,只需要将即时奖励r,替换为长期奖励(一般使用其估计函数Qπ(s,a))即可。

在监督学习里,当前状态、行为的好坏由监督信息告知;而在强化学习里,则需要通过价值函数来估计当前状态行为的好坏。

我们将Policy Gradient应用到MC算法上,则得到如下流程:

Initialise θ arbitrarily

for each episode {s1,a1,r2,…,sT−1,aT−1,rT}∼πθ {

for t = 1 to T−1 {
θ←θ+α∇θlog⁡πθ(st,at)vt
}

return θ

在基于策略的学习算法中,算法挑选策略的时候不需使用ϵ-贪婪搜索,策略是直接根据参数θ得到的。同时在对策略参数更新时有一个学习率α,它体现了在梯度方向上更新参数θ的步长(step size),一般的我们在更新参数时是按梯度方向只更新由α确定的一定量。

打个比方,当前策略在更新时提示梯度方向倾向于选择“向左”的行为,那么在更新策略参数时,可以朝着向左的方向更新一定的值,如果这个α取值增大,则导致决策朝着更容易选择“向左”的行为倾斜,这其实就相当于没有探索的贪婪决策行为。而只要学习在持续,就有可能因为梯度变化而尝试更多的行为,这一过程中参数α控制了策略更新的平滑度。

如果基于价值函数制定策略,则使用查表(table look-up)的方式可以保证收敛到全局最优解。即使使用的是直接基于策略的学习方法;但是,如果使用的是通用化的近似函数表示方法,比如神经网络等,则无论是基于价值函数,还是基于策略,都可能陷入局部最优解。

https://zhuanlan.zhihu.com/p/54825295

基于值和策略的强化学习入坑

https://blog.csdn.net/gsww404/article/details/80705950

策略梯度(Policy Gradient)

https://zhuanlan.zhihu.com/p/122663529

从Mirror Descent的视角统一强化学习中的策略优化

https://mp.weixin.qq.com/s/a7KN3IjuMcmHNNqQsPn3VQ

函数近似的策略梯度方法

Actor-Critic

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

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

Qw(s,a)≈Qπθ(s,a)

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

1.Critic:更新action-value函数的参数w。

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

∇θJ(θ)≈Eπθ[∇θlog⁡πθ(s,a)Qw(s,a)]Δθ=α∇θlog⁡πθ(s,a)Qw(s,a)

可以看出,Critic做的事情其实是我们已经见过的:策略评估,他要告诉个体,在由参数θ确定的策略πθ到底表现得怎么样。

Compatible Function Approximation

近似策略梯度的方法引入了Bias,从而得到的策略梯度不一定能最后找到较好的解决方案,例如当近似价值函数引起状态重名的特征时。

幸运的是,如果我们小心设计近似函数,是可以避免引入bias的。该近似函数需要满足下面两个条件:

  • 近似价值函数的梯度完全等同于策略函数对数的梯度,即不存在重名情况:
∇wQw(s,a)=∇θlog⁡πθ(s,a)
  • 价值函数参数w使得均方差最小:
ϵ=Eπθ[(Qπθ(s,a)−Qw(s,a))2]

符合这两个条件,则认为策略梯度是准确的,即:

∇θJ(θ)=Eπθ[∇θlog⁡πθ(s,a)Qw(s,a)]

Reducing Variance Using Baseline

除了bias之外,variance也是需要考虑的方面。

我们从策略梯度里抽出一个基准函数B(s),要求这一函数仅与状态有关,而与行为无关,因而不改变梯度本身。

Eπθ[∇θlog⁡πθ(s,a)B(s)]=∑s∈Sdπθ(s)∑a∈A∇θπθ(s,a)B(s)=∑s∈Sdπθ(s)B(s)∇θ∑a∈Aπθ(s,a)=0

由于B(s)与行为无关,可以将其从针对行为a的求和中提出来,同时我们也可以把梯度从求和符号中提出来,而最后一个求和项:策略函数针对所有行为的求和,根据策略函数的定义,这里的结果肯定是1。而常数的梯度是0,因此总的结果等于0。

原则上,和行为无关的函数都可以作为B(s)。一个很好的B(s)就是基于当前状态的状态价值函数:Vπθ(s)。

所以,我们可以用一个advantage function来改写策略梯度:

Aπθ(s,a)=Qπθ(s,a)−Vπθ(s)

上式的现实意义在于评估当个体采取行为a离开s状态时,究竟比该状态s总体平均价值要好多少?

∇θJ(θ)=Eπθ[∇θlog⁡πθ(s,a)Aπθ(s,a)]

advantage function可以明显减少状态价值的variance。(通俗的说法就是A的值有正有负,不像Q和V都是正值。)

因此,现在Critic的任务就改为估计advantage function。

在这种情况下,我们需要两个近似函数也就是两套参数,一套用来近似状态价值函数,一套用来近似行为价值函数。即:

Vv(s)≈Vπθ(s)Qw(s,a)≈Qπθ(s,a)A(s,a)=Qw(s,a)−Vv(s)

不过实际操作时,我们并不需要计算两个近似函数。这里以TD学习为例说明一下。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK