作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!
PPO实现策略上的单调提升(Monotonic Improvement with PPO )
相比上面使用natural gradients进行KL constraint的近似,PPO则另辟蹊径,它并不直接求解这个约束,而是通过一些启发式的方法达到这个目的,论文中主要提出PPO1和PPO2两类算法:
PPO1:Adaptive KL penalty,它直接将KL divergence从constraint转化为penalize项,作为目标函数的一部分,每次更新时候则计算当前迭代对KL divergence的违反程度,如果KL值过大,则增大它的系数,强化这个penalty term的重要程度,反之亦然。
L
t
K
L
P
E
N
(
θ
)
=
1
N
∑
t
=
1
N
[
π
(
a
∣
s
)
π
o
l
d
(
a
∣
s
)
A
π
o
l
d
(
s
,
a
)
−
β
K
L
[
π
θ
o
l
d
(
⋅
∣
s
t
)
,
π
θ
(
⋅
∣
s
t
)
]
]
L_{t}^{\mathrm{KLPEN}}(\theta)=\frac{1}{N} \sum_{t=1}^{N}\left[\frac{\pi(a \mid s)}{\pi_{\mathrm{old}}(\boldsymbol{a} \mid s)} A_{\pi_{\mathrm{old}}}(\boldsymbol{s}, \boldsymbol{a})-\beta \mathrm{KL}\left[\pi_{\theta_{\mathrm{old}}}\left(\cdot \mid s_{t}\right), \pi_{\theta}\left(\cdot \mid s_{t}\right)\right]\right]
LtKLPEN(θ)=N1t=1∑N[πold(a∣s)π(a∣s)Aπold(s,a)−βKL[πθold(⋅∣st),πθ(⋅∣st)]]
我们会预先设定超参数提供我们能接受的策略之间差异的最大值和最小值,如果实际策略的差异比最大值要大,那么我们就会增大
β
\beta
β的值,相当于增大KL约束限制;如果如果实际策略的差异比最小值要小,那么我们就会减小
β
\beta
β的值,相当于减小KL约束限制。
PPO2:Clipped Surrogate Objective,对目标做clip。前面使用到KL divergence是要约束policy space,从而约束trajectory的distribution。那么这里则直接对这个概率比值做clip,设置一个阈值,直接从根源上限制policy space的差异。
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} \mid s_{t}\right)}{\pi_{\theta_{\text {old }}}\left(a_{t} \mid 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]
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)]
这里稍微解释一下clip操作,clip指的是,如果第一项小于第二项,那么输出的结果就是第二项,如果第一项大于第三项,那么输出的结果就是第三项。可以看出目标函数为了确保算法能达到 TRPO 中置信区域的效果, 为算法上了两把 “锁”: 第一把锁是对新旧策略概率比率 r t ( θ ) r_{t}(\theta) rt(θ) 的限制, 这个比率只能限制在 [ 1 − ϵ , 1 + ϵ ] , [1-\epsilon, 1+\epsilon], [1−ϵ,1+ϵ], 这确保了每一次的更新不会有太大的波动; 第二把锁就是 min 函数,它将在两个结果 中选择一个较低值作为结果。如果我们能够将较低值优化到令人满意的程度,那么对于其他的情况,模型一定会表现得更好。
这里想引用一下李宏毅老师的课上讲PPO的那张图来解释一下Clip操作,首先我们看一下PPO2里面的整合的目标函数:
J
P
P
O
2
θ
k
(
θ
)
≈
∑
(
s
t
,
a
t
)
min
(
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
A
θ
k
(
s
t
,
a
t
)
clip
(
p
θ
(
a
t
∣
s
t
)
p
θ
k
(
a
t
∣
s
t
)
,
1
−
ε
,
1
+
ε
)
A
θ
k
(
s
t
,
a
t
)
)
\begin{aligned} J_{P P O 2}^{\theta^{k}}(\theta) \approx \sum_{\left(s_{t}, a_{t}\right)} \min (& \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) \\ &\left.\operatorname{clip}\left(\frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)}, 1-\varepsilon, 1+\varepsilon\right) A^{\theta^{k}}\left(s_{t}, a_{t}\right)\right) \end{aligned}
JPPO2θk(θ)≈(st,at)∑min(pθk(at∣st)pθ(at∣st)Aθk(st,at)clip(pθk(at∣st)pθ(at∣st),1−ε,1+ε)Aθk(st,at))
那么我们来画一个图,这个横轴表示的意思是策略之间从比值,纵轴就是最终的输出,那么其实下图里面的这挑浅蓝色的虚线就是clip函数
而 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) pθk(at∣st)pθ(at∣st)Aθk(st,at)就是绿色的虚线。
那如果当A>0,也就是表示我们现在的这个(s,a)是好的时候,我们会希望增大 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) pθk(at∣st)pθ(at∣st)Aθk(st,at),来提高这种好的(s,a)出现的概率,但是,我们不希望它无限制的增大,因为当 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) pθk(at∣st)pθ(at∣st)Aθk(st,at)很大的时候,采样策略和实际的策略之间就会差很多,那么增加 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) pθk(at∣st)pθ(at∣st)Aθk(st,at)所带来的坏处就会大于好处,所以我们使用clip操作让最终的输出是红色的这条线:
那如果当A<0,也就是表示我们现在的这个(s,a)是不好的时候,我们会希望减小 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) pθk(at∣st)pθ(at∣st)Aθk(st,at),来减小这种不好的(s,a)出现的概率,但是,我们不希望它无限制地变小,因为当 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) pθk(at∣st)pθ(at∣st)Aθk(st,at)很小的时候,采样策略和实际的策略之间就会差很多,那么减小 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) \frac{p_{\theta}\left(a_{t} \mid s_{t}\right)}{p_{\theta^{k}}\left(a_{t} \mid s_{t}\right)} A^{\theta^{k}}\left(s_{t}, a_{t}\right) pθk(at∣st)pθ(at∣st)Aθk(st,at)所带来的坏处就会大于好处,所以我们使用clip操作让最终的输出是红色的这条线:
这也就是clip函数所带来的好处!
上一篇:强化学习的学习之路(四十九)2021-02-18基于GAE和TRPO的值函数优化
下一篇:强化学习的学习之路(五十一)2021-02-20 Retrace