论文信息
name_en: Proximal Policy Optimization Algorithms
name_ch: 近端策略优化算法
paper_addr: http://arxiv.org/abs/1707.06347
date_publish: 2017-08-28
if: IF 8.665 Q1 B1 Top EI
author: John Schulman
citation: 9685
读后感
PPO近端策略优化是一种强化学习算法,具体是对深度学习策略梯度方法的优化。
策略是强化学习中用于决定在每个时刻采取哪个动作的函数。近端约束用于限制策略的变化,以避免过于激进地改变策略。
文中介绍了两种方法:截断和KL散度,近端约束通常使用梯度截断来实现,即将梯度限制在一个特定范围内,让学习的步调不要太大。
介绍
一种改进版的强化学习策略梯度算法。它从与环境交互的数据中采样。不同于标准的策略梯度方法对每次采样执行一次梯度更新,文中提出了一个新的目标函数,可以实现多个epoch的minibatch数据更新,另外,它是TRPO的改进算法,相对TRPO更为简单,InstructGPT的强化学习用的就是PPO(ChatGPT可能也是)。
方法
优化算法
文章介绍了三种方法,其差别主要在损失函数,公式如下图所示:
第一种方法的目标是对神经网络theta调参,其中L表示损失Loss,At是时间步t的优势函数,注意这里的r不是奖励,而是新旧策略的变化,当策略不变时r=1:
r
t
(
θ
)
=
π
θ
(
a
t
∣
s
t
)
π
θ
old
(
a
t
∣
s
t
)
,
so
r
(
θ
old
)
=
1
r_{t}(\theta)=\frac{\pi_{\theta}\left(a_{t} \mid s_{t}\right)}{\pi_{\theta_{\text {old }}}\left(a_{t} \mid s_{t}\right)}, \text { so } r\left(\theta_{\text {old }}\right)=1
rt(θ)=πθold (at∣st)πθ(at∣st), so r(θold )=1
第二种是本文中推荐的剪裁方法,它通过限制损失函数,从而限制了后续调参;其中epsilon是超参数,一般是0.2,它将变化范围限制在0.8-1.2之间(上图是论文的截图,我觉得括号位置好像写错了)。
第三种是将KL散度作为惩罚项加入了公式,以保证旧策略pi_old与新策略pi尽量相似,其中Beta是超参数,可以是固定的,也可以自动计算,文中还引入了一种自动计算Beta的方法,dtarg为超参数,先根据当前状态计算d,然后计算beta:
d
=
E
^
t
[
KL
[
π
θ
old
(
⋅
∣
s
t
)
,
π
θ
(
⋅
∣
s
t
)
]
]
- If
d
<
d
targ
/
1.5
,
β
←
β
/
2
- If
d
>
d
targ
×
1.5
,
β
←
β
×
2
\begin{array}{l} d=\hat{\mathbb{E}}_{t}\left[\operatorname{KL}\left[\pi_{\theta_{\text {old }}}\left(\cdot \mid s_{t}\right), \pi_{\theta}\left(\cdot \mid s_{t}\right)\right]\right] \\ \text { - If } d<d_{\operatorname{targ}} / 1.5, \beta \leftarrow \beta / 2 \\ \text { - If } d>d_{\operatorname{targ}} \times 1.5, \beta \leftarrow \beta \times 2 \end{array}
d=E^t[KL[πθold (⋅∣st),πθ(⋅∣st)]] - If d<dtarg/1.5,β←β/2 - If d>dtarg×1.5,β←β×2
具体实现
PPO也属于一种A-C方法,即结合策略和价值的方法。为了同时优化价值和策略,设置最终的目标函数如下:
L
t
C
L
I
P
+
V
F
+
S
(
θ
)
=
E
^
t
[
L
t
C
L
I
P
(
θ
)
−
c
1
L
t
V
F
(
θ
)
+
c
2
S
[
π
θ
]
(
s
t
)
]
L_{t}^{C L I P+V F+S}(\theta)=\hat{\mathbb{E}}_{t}\left[L_{t}^{C L I P}(\theta)-c_{1} L_{t}^{V F}(\theta)+c_{2} S\left[\pi_{\theta}\right]\left(s_{t}\right)\right]
LtCLIP+VF+S(θ)=E^t[LtCLIP(θ)−c1LtVF(θ)+c2S[πθ](st)]
其中c1,c2是超参数,用于设置各方占比;CLIP指的是策略目标,即上面描述的裁剪方法;LV 是状态价值的差;优化的目标是最大化整体L,所以对其中的VF项做减法;和S是熵奖励,用于增强熵,以确保充分的探索。
具体算法如下:
其中优化的点是:使用并行的N个actors分别收集T时间步的数据;然后针对NT数据,通过K次epoch,用小批量数据M调整梯度,实验证明效果更好。
实验
三种方法对比效果如表-1所示:
其中Clipping在epsilon设为0.2时效果最好;对于KL散度方法,测试了通过dtarg自动计算beta和设固定beta两种方式,可以看到自动计算的方式略好。
与其它强化学习相比,从图-3可以看到,在大多数任务中PPO(Clip)都优于其它算法。除此以外,实验部分还针对连续领域及atari游戏对比了PPO与其它算法的效果。