Proximal Policy Optimization Algorithms
openAI
Abstract
我们为强化学习提出了一种新的基于策略梯度(PG,Policy Gradient)的方法。该方法通过与环境相互作用来交替采样数据,同时使用随机梯度上升来优化一个替代的目标函数。虽然标准的策略梯度更新方法对每个采样数据执行一次梯度更新,但我们提出了一个新的目标函数,该目标函数是在multiple epoches上进行minibatch更新。
我们提出的新方法:近端策略优化PPO(proximal policy optimization),它有信赖域策略优化TRPO(trust region policy optimization)的部分优点,相比而言, 它比TRPO更通用,更容易实现,具有更好的采样复杂度(emperically)。
Introduction
本文试图寻找一种算法,在仅仅使用一阶优化的时候,该算法能够拥有TRPO的数据效率和可靠性,我们提出了一个新的目标函数,该目标函数有截断的概率比,而截断的概率比一般会造成对性能比较悲观的估计,即估计出性能下届。为了优化这个策略,我们在从策略中采样的数据进行选择,然后在采样的数据进行几个epoch的优化。
该算法在连续控制任务上表现很好。
Background
Policy Gradient Methods
策略梯度PG算法的工作原理是计算策略的估计量,并将其插入到随机梯度上升算法中。常用的梯度估计有以下形式
g ^ = E ^ t [ ∇ θ log π θ ( a t ∣ s t ) A ^ t ] \hat{g}=\hat{\mathbb{E}}_{t}\left[\nabla_{\theta} \log \pi_{\theta}\left(a_{t} | s_{t}\right) \hat{A}_{t}\right] g^=E^t[∇θlogπθ(at∣st)A^t]
其中:
π
θ
\pi_{\theta}
πθ是一个随机策略
A
t
{A}_{t}
At是
t
t
t时刻的优势函数的估计器
E
^
t
[
…
]
\hat{\mathbb{E}}_{t}[\ldots]
E^t[…]是期望,表示采样值有限batch的平均经验值
该算法在抽样和优化之间及交替使用。
该算法是通过构造一个目标函数并使用自动微分软件的实现的,
该目标函数的梯度是策略梯度估计量;
该估计量
g
^
\hat{g}
g^是通过对目标进行微分得到的。
L
P
G
(
θ
)
=
E
^
t
[
log
π
θ
(
a
t
∣
s
t
)
A
^
t
]
L^{P G}(\theta)=\hat{\mathbb{E}}_{t}\left[\log \pi_{\theta}\left(a_{t} | s_{t}\right) \hat{A}_{t}\right]
LPG(θ)=E^t[logπθ(at∣st)A^t]
虽然人们推荐使用相同的轨迹对loss
L
P
G
L^{P G}
LPG进行多步优化,但这并没有证明是合理的,而且从经验上讲,这会导致破坏性的大规模策略更新。
Trust Region Methods
在TRPO,在策略更新大小时服从约束条件来最大化目标函数。
maximize
θ
E
^
t
[
π
θ
(
a
t
∣
s
t
)
π
θ
o
l
d
(
a
t
∣
s
t
)
A
^
t
]
\underset{\theta}{\operatorname{maximize}} \quad \hat{\mathbb{E}}_{t}\left[\frac{\pi_{\theta}\left(a_{t} | s_{t}\right)}{\pi_{\theta_{\mathrm{old}}}\left(a_{t} | s_{t}\right)} \hat{A}_{t}\right]
θmaximizeE^t[πθold(at∣st)πθ(at∣st)A^t]
s u b j e c t t o E ^ t [ KL [ π θ old ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] ≤ δ subject to \quad \hat{\mathbb{E}}_{t}\left[\operatorname{KL}\left[\pi_{\theta_{\text { old }}}\left(\cdot | s_{t}\right), \pi_{\theta}\left(\cdot | s_{t}\right)\right]\right] \leq \delta subjecttoE^t[KL[πθ old (⋅∣st),πθ(⋅∣st)]]≤δ
其中,
θ
o
l
d
\theta_{old}
θold是更新前的策略的参数向量。在对目标函数机型线性逼近和对约束进行二逼近后,利用共轭梯度算法可以有效的近似求解该问题。
证明TRPO的理论实际上建议使用惩罚而不是约束,即解决无约束优化问题。
maximize θ E ^ t [ π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) A ^ t − β KL [ π θ old ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] \underset{\theta}{\operatorname{maximize}} \hat{\mathbb{E}}_{t}\left[\frac{\pi_{\theta}\left(a_{t} | s_{t}\right)}{\pi_{\theta_{\text { old }}}\left(a_{t} | s_{t}\right)} \hat{A}_{t}-\beta \operatorname{KL}\left[\pi_{\theta_{\text { old }}}\left(\cdot | s_{t}\right), \pi_{\theta}\left(\cdot | s_{t}\right)\right]\right] θmaximizeE^t[πθ old (at∣st)πθ(at∣st)A^t−βKL[πθ old (⋅∣st),πθ(⋅∣st)]]
其中, β \beta β表示惩罚的系数。在策略 π \pi π的性能上,这遵循了一个事实,即一个确定的替代目标函数(它计算状态的最大 K L KL KL而不是均值)形成一个更低的下界。TRPO使用一个硬约束而不是惩罚,因为很难选择一个在不同问题上或甚至在单个问题中表现良好的值,在这个问题中,特性随学习过程而变化。因此,为了实现一阶算法模拟TRPO的单调改进,实验表明,仅仅选择一个固定的惩罚系数并用SGD优化惩罚目标方程是不够的,需要进行额外的修改.
Clipped Surrogate Objective
令
r
t
(
θ
)
r_{t}(\theta)
rt(θ)表示新旧策略动作该利率比
r
t
(
θ
)
=
π
θ
(
a
t
∣
s
t
)
π
θ
o
l
d
(
a
t
∣
s
t
)
r_{t}(\theta)=\frac{\pi_{\theta}\left(a_{t} | s_{t}\right)}{\pi_{\theta_{\mathrm{old}}\left(a_{t} | s_{t}\right)}}
rt(θ)=πθold(at∣st)πθ(at∣st)
因此,
r
(
θ
o
l
d
)
=
1
r\left(\theta_{\mathrm{old}}\right)=1
r(θold)=1
TRPO 是最大化替代目标函数
L
C
P
I
(
θ
)
=
E
^
t
[
π
θ
(
a
t
∣
s
t
)
π
θ
old
(
a
t
∣
s
t
)
A
^
t
]
=
E
^
t
[
r
t
(
θ
)
A
^
t
]
L^{C P I}(\theta)=\hat{\mathbb{E}}_{t}\left[\frac{\pi_{\theta}\left(a_{t} | s_{t}\right)}{\pi_{\theta_{\text { old }}}\left(a_{t} | s_{t}\right)} \hat{A}_{t}\right]=\hat{\mathbb{E}}_{t}\left[r_{t}(\theta) \hat{A}_{t}\right]
LCPI(θ)=E^t[πθ old (at∣st)πθ(at∣st)A^t]=E^t[rt(θ)A^t]
上标
C
P
I
CPI
CPI代表连续的策略迭代
在目标函数中移除了约束项,
L
C
P
I
L^{C P I}
LCPI将会导致策略更新过度,因此,我们现在考虑如何修改目标函数来惩罚策略的变化,其中,策略的目标是从
r
t
(
θ
)
r_{t}(\theta)
rt(θ)来远离1.
修改后的目标函数如下所示:
L
C
L
I
P
(
θ
)
=
E
^
t
[
min
(
r
t
(
θ
)
A
^
t
,
clip
(
r
t
(
θ
)
,
1
−
ϵ
,
1
+
ϵ
)
A
^
t
)
]
L^{C L I P}(\theta)=\hat{\mathbb{E}}_{t}\left[\min \left(r_{t}(\theta) \hat{A}_{t}, \operatorname{clip}\left(r_{t}(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_{t}\right)\right]
LCLIP(θ)=E^t[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
其中:
ϵ
\epsilon
ϵ, epsilon,是超参数,一般取值为0.2
目标函数修改的出发点:
min的第一项是
L
C
L
I
P
L^{C L I P}
LCLIP
min的第二项是
clip
(
r
t
(
θ
)
,
1
−
ϵ
,
1
+
ϵ
)
A
^
t
)
\operatorname{clip}\left(r_{t}(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_{t} )
clip(rt(θ),1−ϵ,1+ϵ)A^t),即通过截断概率比来修改代理函数, 这保证了
r
t
r_{t}
rt始终处于区间
[
1
−
ϵ
,
1
+
ϵ
]
[1-\epsilon, 1+\epsilon]
[1−ϵ,1+ϵ]内。
最后,我们取截断的和未截断的目标函数,因此最终的目标函数是未截断目标函数的下界。在这个方案中,只有当概率比的变化会使目标改善时,我们才忽略概率比的变化,当概率比的变化会使目标恶化时,我们才将概率比包括在内。
Adaptive KL Penalty Cofficient
另一种方法,这可以作为截断代理目标的代替方法,是对KL divergence进行惩罚,调整惩罚系数这样可以实现一些每次策略更新时KLdivergence的目标值。在我们的实验中,我们发现,KL惩罚的表现不如截断代理目标,然鹅我们这里介绍它是因为它是一个非常重要的基础。
在最简单的算法例程中,我们在每次策略更新运行下列步骤:
使用几个时期的最小批SGD优化KL惩罚目标
L
K
L
P
E
N
(
θ
)
=
E
^
t
[
π
θ
(
a
t
∣
s
t
)
π
θ
old
(
a
t
∣
s
t
)
A
^
t
−
β
KL
[
π
θ
old
(
⋅
∣
s
t
)
,
π
θ
(
⋅
∣
s
t
)
]
]
L^{K L P E N}(\theta)=\hat{\mathbb{E}}_{t}\left[\frac{\pi_{\theta}\left(a_{t} | s_{t}\right)}{\pi_{\theta_{\text { old }}\left(a_{t} | s_{t}\right)}} \hat{A}_{t}-\beta \operatorname{KL}\left[\pi_{\theta_{\text { old }}}\left(\cdot | s_{t}\right), \pi_{\theta}\left(\cdot | s_{t}\right)\right]\right]
LKLPEN(θ)=E^t[πθ old (at∣st)πθ(at∣st)A^t−βKL[πθ old (⋅∣st),πθ(⋅∣st)]]
计算
d
=
E
^
t
[
K
L
[
π
θ
old
(
⋅
∣
s
t
)
,
π
θ
(
⋅
∣
s
t
)
]
]
∣
d=\hat{\mathbb{E}}_{t}\left[\mathrm{KL}\left[\pi_{\theta_{\text { old }}}\left(\cdot | s_{t}\right), \pi_{\theta}\left(\cdot | s_{t}\right)\right]\right] |
d=E^t[KL[πθ old (⋅∣st),πθ(⋅∣st)]]∣
d
<
d
targ
/
1.5
,
β
←
β
/
2
d
>
d
targ
×
1.5
,
β
←
β
×
2
\begin{array}{l}{d<d_{\text { targ }} / 1.5, \beta \leftarrow \beta / 2} \\ {d>d_{\text { targ }} \times 1.5, \beta \leftarrow \beta \times 2}\end{array}
d<d targ /1.5,β←β/2d>d targ ×1.5,β←β×2
被更新的用来下次的策略更新。用这个方案,我们偶尔会看到策略更新到KL divergence 和d非常非常不一样的地方,然鹅,这些情况是罕见的,会很快调整。参数1.5和2是通过试验得到的,但是该算法对此并不敏感。的初始值是另一个超参数,但是在实践中并不重要因为算法会很快对他进行调整。