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)] Ex∼p[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)}] Ex∼q[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)}] Ex∼q[f(x)q(x)p(x)]拉回成负的。
但这个前提是sample足够多次。如果sample次数不够多,就会造成 E x ∼ p [ f ( x ) ] E_{x\sim p}[f(x)] Ex∼p[f(x)]和 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] E_{x\sim q}[f(x)\frac{p(x)}{q(x)}] Ex∼q[f(x)q(x)p(x)]有很大的差别,这就是importance sampling的不足。
回到一开始,讲了importance sampling后,我们知道如何由θ变为θ’。只需将:

这样就能用actor π θ ′ \pi_{\theta'} πθ′收集数据,给actor π θ \pi_{\theta} πθ去训练了。
使用 off-policy,使用梯度做参数更新时要注意的点:

- 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 到的数据计算。
- 因为是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)
- 这里我们估计 p θ ( s t ) p θ ′ ( s t ) = 1 \frac {p_\theta(s_t)} {p_{\theta'} (s_t)}=1 pθ′(st)pθ(st)=1,因为猜测 state 的出现与θ关系不大,况且这一项本来就无法计算,因为state出现的概率我们是不能控制或估计的。
- p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac {p_\theta(a_t|s_t)} {p_{\theta'} (a_t|s_t)} pθ′(at∣st)pθ(at∣st)可以直接算,
由此可以得到新的目标函数:

上标 θ ′ \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(at∣st)pθ(at∣st) 小于 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(at∣st)pθ(at∣st) 大于 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(at∣st)pθ(at∣st) ,即输入等于输出。

上面为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(at∣st)pθ(at∣st)。
总的图像:

绿线代表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θ(at∣st)越大越好(即横轴代表的 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(at∣st)pθ(at∣st) 增大),但是 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st) 和 p θ k ( a t ∣ s t ) p_{\theta^k}(a_t|s_t) pθk(at∣st) 二者不能相差太多,所以设了一个上界 1 + ε 1+\varepsilon 1+ε (上图左边);A<0,则说明当前的action不好,所以希望 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st) 越小越好(即横轴代表的 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(at∣st)pθ(at∣st) 减小),同理同样要设一个下界 1 − ε 1-\varepsilon 1−ε 。
最后再放一下PPO和PPO2的对比:

这里有人纠结怎么一开始写的PPO是取期望,而这里的PPO和PPO2怎么变成是累加的?

TRPO / PPO2 等方法的实验效果:

这边可能不清晰,可以看论文原文
简单说一下,PPO(Clip)是紫色的线,可以看到每个任务中的效果都是名列前茅。
4. 总结
- 介绍了on-policy和off-policy的概念,和on-policy不足
- 为了实现 用 π θ ′ \pi_{\theta'} πθ′ 去收集数据,用这些数据去训练 π θ \pi_\theta πθ (即off-policy),使用Importance sampling方法
- 在Importance sampling方法中要求 θ \theta θ和 θ ′ \theta' θ′不要相差太多,否则会导致结果错误。进而引出PPO算法
- 介绍了PPO和TRPO和PPO2
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
