Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)

Lee Hung-yi强化学习专栏系列博客主要转载自CSDN博主 qqqeeevvv,原专栏地址
课程视频
课件地址

1. On-policy vs. Off-policy

在这里插入图片描述
所谓 on-policy (左图)指我们学习的 agent(即actor) 和与环境交互的 agent 是相同的,即 agent 一边和环境互动,一边学习;

而 off-policy (右图)指我们学习的 agent 与环境交互的 agent 是不同的,即 agent 通过看别人玩游戏来学习。

on-policy的过程是这样的:
在这里插入图片描述
1、使用actor π θ \pi_\theta πθ 去收集数据,用这些数据来进行参数的更新,此时参数 θ \theta θ变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲'
2、由于参数 θ \theta θ变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲',原本actor π θ \pi_\theta πθ收集的数据就不能用了,所以要重新收集数据
3、再根据actor KaTeX parse error: Expected group after '^' at position 12: \pi_{\theta^̲'}收集的数据,将参数KaTeX parse error: Expected group after '^' at position 7: \theta^̲'变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲''
一直这样循环下去…………

  • On-policy的不足
    从上面的过程可以看出,更新后的actor KaTeX parse error: Expected group after '^' at position 12: \pi_{\theta^̲'} 的参数变为KaTeX parse error: Expected group after '^' at position 7: \theta^̲',原来的数据就不能用了。就是说每更新一次参数就需要重新去收集数据,这样更新的效率很低,很花时间。

  • 目标
    KaTeX parse error: Expected group after '^' at position 12: \pi_{\theta^̲'} 去收集数据,用这些数据去训练 π θ \pi_\theta πθ。这样就可以更新参数很多次而只用同一批数据,这就是off-policy。

2. Importance sampling

代表从分布p中取样本x送入f(x)并求期望,类似于从p中取N个 x i x^i xi,然后代入f(x)求平均(近似表示),即
在这里插入图片描述
现在假设我们不能从分布 p 中 sample 数据,只能从分布 q 中 sample,这样不能直接套上述近似。而要用:
在这里插入图片描述
即从p分布sample数据变为从q分布sample数据,只需在后面乘上一个weight,即 p ( x ) q ( x ) \frac {p(x)}{q(x)} q(x)p(x)

  • Importance Sampling 存在的问题:
    在这里插入图片描述
    通过上述公式看出,即便两者期望值一样,但是他们的方差(variance)不同,两式的区别在于红框那里多了一项。
    在这里插入图片描述
    这幅图具体说明了上述问题:蓝线代表 p的分布,绿线代表 q 分布,红线代表f(x)函数,现在我们要从 p、q 分布中 sample 出 x ,投到f(x)中计算。

可以看出 p、q 分布对于f(x)的计算而言差别是很大的。如果sample次数不够多,会造成只sample到每一种分布中,数量比较多(出现概率比较大)的那些样本,比如从p中sample,会容易sample到使f(x)小于0的x;从q中sample,会容易sample到使f(x)大于0的x。
在这里插入图片描述
如上图所示,当从p中sample x时,大多数f(x)是负的,因此 E x ∼ p [ f ( x ) ] E_{x\sim p}[f(x)] Exp[f(x)]应该是负的;当sample次数不够多时(上图所示),上式不一定成立,如上图中从q中采样的x,因为sample次数不够多,很可能使得f(x)均为正(只sample到数量多的x),虽然 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)很小,但也是正的,因此 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Exq[f(x)q(x)p(x)]应该是正的。所以,sample次数不够多时,上式不一定成立。

下面是sample次数足够的情况,此时上式是成立的。
在这里插入图片描述
可以看到,sample次数够多的时候,(在q中)可能就能sample到左边的点(出现数量少/概率低的x)。这样sample到左边绿线那个点的时候,f(x)是负的, p ( x ) q ( x ) \frac {p(x)}{q(x)} q(x)p(x)会得到一个很大的值,这样就会将原本是正的 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Exq[f(x)q(x)p(x)]拉回成负的。

但这个前提是sample足够多次。如果sample次数不够多,就会造成 E x ∼ p [ f ( x ) ] E_{x\sim p}[f(x)] Exp[f(x)] E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Exq[f(x)q(x)p(x)]有很大的差别,这就是importance sampling的不足。

回到一开始,讲了importance sampling后,我们知道如何由θ变为θ’。只需将:
在这里插入图片描述
这样就能用actor π θ ′ \pi_{\theta'} πθ收集数据,给actor π θ \pi_{\theta} πθ去训练了。

使用 off-policy,使用梯度做参数更新时要注意的点:
在这里插入图片描述

  1. A θ ( a t , s t ) A^\theta(a_t,s_t) Aθ(at,st)是总计的Reward减掉bias(baseline),即 A θ ( s t , a t ) = R ( τ n ) − b A^\theta (s_t,a_t)=R(\tau^n)-b Aθ(st,at)=R(τn)b,就是衡量在状态st下采取动作at的回报。 A θ ′ ( a t , s t ) A^{\theta'} (a_t,s_t) Aθ(at,st)是根据 sample 到的数据计算。
  2. 因为是KaTeX parse error: Expected group after '^' at position 12: \pi_{\theta^̲'}与环境做互动,所以 A θ ( a t , s t ) A^\theta(a_t,s_t) Aθ(at,st)要变为 A θ ′ ( a t , s t ) A^{\theta'} (a_t,s_t) Aθ(at,st)
  3. 这里我们估计 p θ ( s t ) p θ ′ ( s t ) = 1 \frac {p_\theta(s_t)} {p_{\theta'} (s_t)}=1 pθ(st)pθ(st)=1,因为猜测 state 的出现与θ关系不大,况且这一项本来就无法计算,因为state出现的概率我们是不能控制或估计的。
  4. p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac {p_\theta(a_t|s_t)} {p_{\theta'} (a_t|s_t)} pθ(atst)pθ(atst)可以直接算,
    由此可以得到新的目标函数:
    在这里插入图片描述
    上标 θ ′ \theta' θ代表跟环境互动的, θ \theta θ是要更新的参数。

3. PPO / TRPO算法

上面讲了 θ \theta θKaTeX parse error: Expected group after '^' at position 7: \theta^̲'相差太多(p分布和q分布相差太多),会导致结果错误。那么为了防止 θ \theta θ θ ′ \theta' θ相差太多,就可以使用PPO算法。
在这里插入图片描述
在原来的目标函数 J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ)后再加一项约束值 β K L ( θ , θ ′ ) \beta KL(\theta,\theta') βKL(θ,θ),这个约束就像深度学习中的正则化项。

这一项和衡量 θ \theta θ θ ′ \theta' θ的差距,这里的差距指的是actor行为上的差距而不是参数上的差距。(不是两个网络参数之间的差距,而是两个网络输出的差距)。

下面这个是TRPO算法:
在这里插入图片描述

TRPO和PPO的区别:

TRPO在作梯度上升的时候,只对在这里插入图片描述求梯度上升,而KaTeX parse error: Expected group after '^' at position 17: …L(\theta,\theta^̲')只作为一个额外的约束,很难计算。(有约束优化问题)

而PPO的 β K L ( θ , θ ′ ) \beta KL(\theta,\theta') βKL(θ,θ)是放到优化目标中(无约束优化问题),这样作梯度上升的时候就是将一整个式子(包括 β K L ( θ , θ ′ ) \beta KL(\theta,\theta') βKL(θ,θ))一起算,比较容易算。

所以,为了方便使用,而且两者性能差不多,就直接使用PPO吧.

β \beta β要设多少呢?

PPO中 β \beta β 和学习率有点类似,需要手动设置。我们可以设定两个阈值 K L m a x KL_{max} KLmax K L m i n KL_{min} KLmin 。经过一次参数更新后,查看KL的值,如果KaTeX parse error: Expected group after '^' at position 17: …L(\theta,\theta^̲') 大于 K L m a x KL_{max} KLmax ,说明 θ \theta θ , θ k \theta^k θk 相差太大,需要加大 β \beta β ,加大惩罚。反之则减小 β \beta β ,减小惩罚。

上面讲的是PPO,下面要讲的是PPO2。
在这里插入图片描述
min(a,b)函数就是取a和b中的最小值。clip()函数的意思是: p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(atst)pθ(atst) 小于 1 − ε 1-\varepsilon 1ε,则取 1 − ε 1-\varepsilon 1ε;若 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(atst)pθ(atst) 大于 1 + ε 1+\varepsilon 1+ε 则取 1 + ε 1+\varepsilon 1+ε ;若介于两者之间,则取 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(atst)pθ(atst) ,即输入等于输出。
在这里插入图片描述
上面为clip()函数的图像,横轴指的就是 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(atst)pθ(atst)

总的图像:
在这里插入图片描述
绿线代表min()函数的第一项的图像,蓝线代表min()函数的第二项的图像,红线代表最终min()函数的输出结果。

若A>0,则取下图左边红线部分,若A<0则取下图右边红色部分。

这个式子其实就是让 θ \theta θ θ k \theta^k θk 不要差距太大。如果A(advantage function)>0,代表当前的action是好的,所以我们希望 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst)越大越好(即横轴代表的 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(atst)pθ(atst) 增大),但是 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ k ( a t ∣ s t ) p_{\theta^k}(a_t|s_t) pθk(atst) 二者不能相差太多,所以设了一个上界 1 + ε 1+\varepsilon 1+ε (上图左边);A<0,则说明当前的action不好,所以希望 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) 越小越好(即横轴代表的 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} pθk(atst)pθ(atst) 减小),同理同样要设一个下界 1 − ε 1-\varepsilon 1ε

最后再放一下PPO和PPO2的对比:
在这里插入图片描述
这里有人纠结怎么一开始写的PPO是取期望,而这里的PPO和PPO2怎么变成是累加的?
在这里插入图片描述
TRPO / PPO2 等方法的实验效果:
在这里插入图片描述
这边可能不清晰,可以看论文原文
简单说一下,PPO(Clip)是紫色的线,可以看到每个任务中的效果都是名列前茅。

4. 总结

  1. 介绍了on-policy和off-policy的概念,和on-policy不足
  2. 为了实现 用 π θ ′ \pi_{\theta'} πθ 去收集数据,用这些数据去训练 π θ \pi_\theta πθ (即off-policy),使用Importance sampling方法
  3. 在Importance sampling方法中要求 θ \theta θ θ ′ \theta' θ不要相差太多,否则会导致结果错误。进而引出PPO算法
  4. 介绍了PPO和TRPO和PPO2


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部