【李宏毅深度强化学习2018】P2 Proximal Policy Optimization (PPO)

                         第二讲 Proximal Policy Optimization(PPO)

视频地址:https://www.bilibili.com/video/av24724071

课件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html

第一讲:【李宏毅深度强化学习2018】P1 Policy Gradient(Review)

两种策略:on-policy 和 off-policy:

所谓 on-policy 指我们学习的 agent(即actor) 和与环境交互的 agent 是相同的,即 agent 一边和环境互动,一边学习

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

注:RL中的 actor/agent 概念和 policy 概念其实有时候会指代同一个东西。因为 policy 即是 actor 要学习的策略,并在是在学习以后用来生成 action 的依据。actor/policy 都可以代表一个网络/函数,一个用来生成 action 的网络/函数。所以下文有时对二者不加以严格区分。

off-policy 方法,利用 q 分布计算 p 分布下的期望:

上一讲提到的 policy gradient 是指 on-policy 的方法,即跟环境互动的 policy 与要 learn 的 policy 是同一个

整个 actor 网络的目标是学习参数 \theta 生成 【能使 reward R_\theta 最大的 action】。为了使 \bar{R_\theta} 最大化,我们需要做gradient ascent。而 \nabla \bar{R_\theta}  是上一讲提到的做 gradient ascent 时需要计算的梯度。

E_{\tau \sim p_\theta(\tau)} 意味着如果更新参数后,要重新 sample 一堆 trajectory \tau,之前的 trajectory 全部不能用了。所以 policy gradient 会花很多时间做sample,因为 sample 一堆 data 后只够做一次参数更新。

而 off-policy 的好处就是,我们可以用另一个 \theta ' 对应的 policy \pi_{\theta '} 来和环境互动,而用其收集到的数据来训练,这样可以把 \pi_{\theta '} 收集到的数据重复利用。

现在介绍 Importance Sampling 的思想

E_{x \sim p}[f(x)] 代表从分布 p 中取样本 x 送入函数 f(x) 并求期望,这可以近似于 sample N 个 x^i,然后带入 f(x) 求平均,即E_{x \sim p}[f(x)]\approx \frac{1}{N}\sum_{i=1}^{N}f(x^i)。现在假设我们不能从分布 p 中 sample 数据,只能从分布 q 中 sample,这样不能直接套上述近似。而要用:E_{x \sim p}[f(x)]=\int f(x)p(x)dx = \int f(x)\frac{p(x)}{q(x)}q(x)dx = E_{x \sim q}[f(x)\frac{p(x)}{q(x)}]

\int f(x)p(x)dx 就是从 p 中 sample 的期望,现在要改为分布 q,所以同时乘 q 除 q,最后多出一项即为 importance weight,代表分布 p 和分布 q 间的差异。

Importance Sampling 存在的问题:

E_{x \sim p}[f(x)] = E_{x \sim q}[f(x)\frac{p(x)}{q(x)}] 成立,但是二者的方差(variance)不同,多出来的一项在上图用红框圈出。所以如果对于两个分布p、q sample 得足够多,那么可以用上述公式算期望,但是如果 sample 得不多,二者的方差又相差很大,那么这样算就有问题。

这幅图具体说明了上述问题:蓝线代表 p 的分布,绿线代表 q 分布,红线代表 f(x) 函数,现在我们要从 p、q 分布中 sample 出 x ,投到 f(x) 中计算。可以看出 p、q 分布对于 f(x) 的计算而言差别是很大的,因为在蓝线附近 sample 到的 x 丢到 f(x) 中算出来的是负值,而绿线附近 sample 到的 x 丢到 f(x) 中算出的是正值。

现在我们关注右边E_{x \sim q}[f(x)\frac{p(x)}{q(x)}]  这项,如果对 q 分布 sample 得不够多,只在红线右边得到 6 个绿点,那么 p(x)q(x)f(x) 都是正的,E_{x \sim q}[f(x)\frac{p(x)}{q(x)}]  恒为正;但是如果 sample 到红线左边的 1 个绿点(概率很小),则f(x)为负,同时 f(x) 乘上的 importance weight \frac{p(x)}{q(x)} 是一个很大的正值,这样会得到一个比较大的负值,对期望起到平衡作用,期望有可能变成负的。所以我们要求  \theta , \theta'  要比较接近。

现在 off-policy 就是让 p_{\theta'}(\tau) 给  p_{\theta}(\tau) 做示范,即从 p_{\theta'}(\tau) 的分布 sample 数据,同时用 importance weight 做修正。

使用 off-policy,使用梯度做参数更新时要注意的点:

用 off-policy 要注意的一点就是原来 advantage function中  A^\theta (s_t,a_t)=R(\tau^n)-b (见第一讲) 的 \theta 也要改为 \theta',因为现在是 \pi_{\theta'} 在和环境互动。

我们估计 \frac{p_\theta(s_t)}{p_{\theta'} (s_t)} =1,因为猜测 state 的出现与 \theta 关系不大,况且这一项本来就无法计算,因为state出现的概率我们是不能控制或估计的。

由此可以得到新的目标函数 J^{\theta'}(\theta)=E_{(s_t,a_t)\sim \pi_{\theta'}}[\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)] 。上标 \theta' 代表跟环境互动的是 \theta' , \theta 是要更新的参数。

\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)} 可以直接算,A^{\theta'}(s_t,a_t) 可以根据 sample 到的数据计算。

PPO / TRPO 算法:

我们之前提到要求  \theta , \theta'  比较接近,所以提出了 PPO 算法,在目标函数 J^{\theta'}(\theta) 后加了一个约束KL散度 \beta KL(\theta,\theta'),来保证  \theta , \theta'  的相似性,这个约束就像深度学习中的正则化项。TRPO也是同样的思想,但是很难计算,建议就用PPO。

KL散度在意的是actor行为上的差距而不是参数上的差距。

TODO

\beta 其实和学习率有点类似,需要手动设置。我们可以设定两个阈值 KL_{max} 和 KL_{min} ,如果算出来的 KL散度\beta KL(\theta,\theta') 大于 KL_{max} ,说明  \theta , \theta^k  相差太大,需要加大\beta ,加大惩罚。反之则减小\beta ,减小惩罚。

PPO / PPO2 的目标函数公式:

还有一种PPO2,是PPO的简化。PPO2原始的公式为:

里面是对 \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}A^{\theta^k}(s_t,a_t) 和 clip(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)},1-\varepsilon ,1+\varepsilon )A^{\theta^k}(s_t,a_t) 取最小值 min。

clip(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)},1-\varepsilon ,1+\varepsilon )A^{\theta^k}(s_t,a_t) 中 clip 函数的意思是如果 \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} 小于 1-\varepsilon,则取 1-\varepsilon;若 \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} 大于 1+\varepsilon 则取 1+\varepsilon ;若介于两者之间,则取 \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)} 。clip函数的图像为:

其中横轴为 \frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}

现在综合考虑 min 中的两项,第二项对应上图蓝色的折线,第一项对应下图绿色的斜线,若A>0,则取下图左边红线部分,若A<0则取下图右边红色部分。

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

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

上图给出了PPO在不同任务上的表现(紫色的线)

猜你喜欢

转载自blog.csdn.net/qq_36829091/article/details/83241600