详解近端策略优化
Posted 行者AI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解近端策略优化相关的知识,希望对你有一定的参考价值。
本文首发于行者AI
引言
上一篇文章我们详细介绍了策略梯度算法(PG),ppo其实就是策略梯度的一种变形。首先介绍一下同策略(on-policy)与异策略(off-policy)的区别。
在强化学习里面,我们需要学习的其实就是一个智能体。如果要学习的智能体跟和环境互动的智能体是同一个的话,称之为同策略。如果要学习的智能体跟和环境互动的智能体不是同一个的话,称之为异策略。那么先给童鞋们提出一个问题,ppo算法是同策略还是异策略?
1. 同策略的不足之处
首先我们回顾一下PG的期望奖励值,公式如下。
∇
R
ˉ
θ
=
E
τ
∼
p
θ
(
τ
)
[
R
(
τ
)
∇
log
p
θ
(
τ
)
]
\\beginaligned \\nabla \\barR_\\theta &=E_\\tau \\sim p_\\theta(\\tau)\\left[R(\\tau) \\nabla \\log p_\\theta(\\tau)\\right] \\endaligned
∇Rˉθ=Eτ∼pθ(τ)[R(τ)∇logpθ(τ)]
上面更新的公式中的
E
τ
∼
p
θ
(
τ
)
E_\\tau \\sim p_\\theta(\\tau)
Eτ∼pθ(τ)是在策略
π
θ
\\pi_\\theta
πθ的情况下, 所采样出来的轨迹
τ
\\tau
τ做期望。但是如果更新了参数,从
θ
\\theta
θ变成
θ
′
\\theta^\\prime
θ′,概率
p
θ
(
τ
)
p_\\theta(\\tau)
pθ(τ)就不对了,之前采样出来的数据就不能用了。所以PG会花很多时间去采样数据,可以说大多数时间都在采样数据,智能体去跟环境做互动以后,接下来就要更新参数,只能用这些数据更新参数一次。接下来就要重新再去收集数据,才能再次更新参数。
2. 改进同策略的思路
策略梯度是同策略的算法,所以非常耗费时间,那么一个可能的改进思路是将同策略变成异策略。简单的思路就是用另外一个策略 π θ ′ \\pi_\\theta^\\prime πθ′, 另外一个演员 θ ′ \\theta^\\prime θ′去跟环境做互动。用 θ ′ \\theta^\\prime θ′收集到的数据去训练 θ \\theta θ。假设我们可以用 θ ′ \\theta^\\prime θ′收集到的数据去训练 θ \\theta θ,意味着说我们可以把 θ ′ \\theta^\\prime θ′收集到的数据用很多次,也就是可以执行梯度上升好几次,更新参数好几次,这都只要用同一笔数据就可以实现。因为假设 θ \\theta θ有能力学习另外一 个演员 θ ′ \\theta^\\prime θ′所采样出来的数据的话,那 θ ′ \\theta^\\prime θ′就只要采样一次,也许采样多一点的数据,让 θ \\theta θ去更新很多次, 这样就会比较有效率。
3. 同策略到异策略的具体实现
那么问题来了, 我们怎么找到这样的一个演员 θ ′ \\theta^\\prime θ′,使其收集到的数据可以用于训练 θ \\theta θ,且他们之间的差异可以被忽略不计呢?
首先我们先介绍一个名词,重要性采样(importance sampling)。 假设有一个函数 f ( x ) f(x) f(x), x x x需要从分布 p p p中采样。我们应该如何怎么计算 f ( x ) f(x) f(x)的期望值呢?假设分布 p p p不能做积分,那么我们可以从分布 p p p尽可能多采样更多的 x i x^i xi。这样就会得到更多的 f ( x ) f(x) f(x),取它的平均值就可以近似 f ( x ) f(x) f(x)的期望值。
现在另外一个问题也来了,假设我们不能在分布
p
p
p中采样数据,只能从另外一个分布
q
q
q中去采样数据,
q
q
q可以是任何分布。我们从
q
q
q中采样
x
i
x^i
xi的话就不能直接套下面的式子。
E
x
∼
p
[
f
(
x
)
]
≈
1
N
∑
i
=
1
N
f
(
x
i
)
E_x \\sim p[f(x)] \\approx \\frac1N \\sum_i=1^N f\\left(x^i\\right)
Ex∼p[f(x)]≈N1i=1∑Nf(xi)
因为上式是假设
x
x
x都是从
p
p
p采样出来的。如果我们想要在
q
q
q中采样的情况下带入上式,就需要做些变换。期望值
E
x
∼
p
[
f
(
x
)
]
E_x \\sim p[f(x)]
Ex∼p[f(x)]的另一种写法是
∫
f
(
x
)
p
(
x
)
d
x
\\int f(x) p(x) d x
∫f(x)p(x)dx,不知道的童鞋可以补习一下万能的学科–数学,对其进行变换,如下式所示,
∫
f
(
x
)
p
(
x
)
d
x
=
∫
f
(
x
)
p
(
x
)
q
(
x
)
q
(
x
)
d
x
=
E
x
∼
q
[
f
(
x
)
p
(
x
)
q
(
x
)
]
\\int f(x) p(x) d x=\\int f(x) \\fracp(x)q(x) q(x) d x=E_x \\sim q\\left[f(x) \\fracp(x)q(x)\\right]
∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Ex∼q[f(x)q(x)p(x)]
整理得下式,
E
x
∼
p
[
f
(
x
)
]
=
E
x
∼
q
[
f
(
x
)
p
(
x
)
q
(
x
)
]
E_x \\sim p[f(x)]=E_x \\sim q\\left[f(x) \\fracp(x)q(x)\\right]
Ex∼p[f(x)]=Ex∼q[f(x)q(x)p(x)]
这样就可以对分布
q
q
q中采样的
x
x
x取期望值。具体来说,我们从
q
q
q中采样
x
x
x,再去计算
f
(
x
)
p
(
x
)
q
(
x
)
f(x) \\fracp(x)q(x)
f(x)q(x)p(x),最后取期望值。所以就算我们不能从
p
p
p里面去采样数据,只要能够从
q
q
q里面去采样数据,代入上式,就可以计算从分布
p
p
p采样
x
x
x代入
f
(
x
)
f(x)
f(x)以后所算出来的期望值。
这边是从 q q q做采样,所以我们从 q q q里采样出来的每一笔数据,需要乘上一个重要性权重(importance weight) p ( x ) q ( x ) \\fracp(x)q(x) q(x)p(x)来修正这两个分布的差异。 q ( x ) q(x) q(x)可以是任何分布。重要性采样有一些问题。虽然我们可以把 p p p换成任何的 q q q。但是在实现上, p p p和不强化学习笔记:PPO 近端策略优化(Proximal Policy Optimization)
近端策略优化算法(Proximal Policy Optimization Algorithms, PPO)