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

1. On-policy vs. Off-policy

Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
所谓 on-policy (左图)指我们学习的 agent(即actor) 和与环境交互的 agent 是相同的,即 agent 一边和环境互动,一边学习;

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

on-policy的过程是这样的:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
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个xix^i,然后代入f(x)求平均(近似表示),即
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
现在假设我们不能从分布 p 中 sample 数据,只能从分布 q 中 sample,这样不能直接套上述近似。而要用:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
即从p分布sample数据变为从q分布sample数据,只需在后面乘上一个weight,即p(x)q(x)\frac {p(x)}{q(x)}

  • Importance Sampling 存在的问题:
    Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
    通过上述公式看出,即便两者期望值一样,但是他们的方差(variance)不同,两式的区别在于红框那里多了一项。
    Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
    这幅图具体说明了上述问题:蓝线代表 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。
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
如上图所示,当从p中sample x时,大多数f(x)是负的,因此Exp[f(x)]E_{x\sim p}[f(x)]应该是负的;当sample次数不够多时(上图所示),上式不一定成立,如上图中从q中采样的x,因为sample次数不够多,很可能使得f(x)均为正(只sample到数量多的x),虽然p(x)q(x)\frac{p(x)}{q(x)}很小,但也是正的,因此Exq[f(x)p(x)q(x)]E_{x\sim q}[f(x)\frac{p(x)}{q(x)}]应该是正的。所以,sample次数不够多时,上式不一定成立。

下面是sample次数足够的情况,此时上式是成立的。
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
可以看到,sample次数够多的时候,(在q中)可能就能sample到左边的点(出现数量少/概率低的x)。这样sample到左边绿线那个点的时候,f(x)是负的,p(x)q(x)\frac {p(x)}{q(x)}会得到一个很大的值,这样就会将原本是正的Exq[f(x)p(x)q(x)]E_{x\sim q}[f(x)\frac{p(x)}{q(x)}]拉回成负的。

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

回到一开始,讲了importance sampling后,我们知道如何由θ变为θ’。只需将:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
这样就能用actor πθ\pi_{\theta'}收集数据,给actor πθ\pi_{\theta}去训练了。

使用 off-policy,使用梯度做参数更新时要注意的点:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)

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

3. PPO / TRPO算法

上面讲了θ\thetaKaTeX parse error: Expected group after '^' at position 7: \theta^̲'相差太多(p分布和q分布相差太多),会导致结果错误。那么为了防止θ\thetaθ\theta'相差太多,就可以使用PPO算法。
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
在原来的目标函数Jθ(θ)J^{\theta'}(\theta)后再加一项约束值 βKL(θ,θ)\beta KL(\theta,\theta'),这个约束就像深度学习中的正则化项。

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

下面这个是TRPO算法:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)

TRPO和PPO的区别:

TRPO在作梯度上升的时候,只对Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)求梯度上升,而KaTeX parse error: Expected group after '^' at position 17: …L(\theta,\theta^̲')只作为一个额外的约束,很难计算。(有约束优化问题)

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

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

β\beta要设多少呢?

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

上面讲的是PPO,下面要讲的是PPO2。
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
min(a,b)函数就是取a和b中的最小值。clip()函数的意思是:pθ(atst)pθk(atst)\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} 小于 1ε1-\varepsilon,则取 1ε1-\varepsilon;若 pθ(atst)pθk(atst)\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} 大于 1+ε1+\varepsilon 则取 1+ε1+\varepsilon ;若介于两者之间,则取 pθ(atst)pθk(atst)\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} ,即输入等于输出。
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
上面为clip()函数的图像,横轴指的就是pθ(atst)pθk(atst)\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}

总的图像:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
绿线代表min()函数的第一项的图像,蓝线代表min()函数的第二项的图像,红线代表最终min()函数的输出结果。

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

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

最后再放一下PPO和PPO2的对比:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
这里有人纠结怎么一开始写的PPO是取期望,而这里的PPO和PPO2怎么变成是累加的?
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
TRPO / PPO2 等方法的实验效果:
Lee Hung-yi强化学习 | (2) Proximal Policy Optimization算法(PPO)
这边可能不清晰,可以看论文原文
简单说一下,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

相关文章:

  • 2022-01-07
  • 2021-07-14
  • 2021-05-25
  • 2021-09-29
  • 2021-09-05
  • 2021-09-17
  • 2021-12-12
  • 2021-06-17
猜你喜欢
  • 2021-05-05
  • 2021-11-05
  • 2021-12-25
  • 2021-08-06
  • 2021-06-07
  • 2021-12-05
  • 2021-07-20
相关资源
相似解决方案