• 【强化学习】PPO:从On-policy到Off-policy(PPO/TRPO/PPO-Penalty/PPO-Clip)


    一、为什么要从On- Policy到Off-Policy?

    对于经典的policy gradient,当我们的agent和环境交互之后要进行policy model的更新,对于一个episode只能更新一次,更新后就要重新采集数据,然后再更新。

    因此我们想要off-policy,用另外一个policy,另外一个actor θ ′ \theta' θ与环境交互,用 θ ′ \theta' θ收集的数据训练 θ \theta θ

    On-Policy:要训练的agent和与环境交互的agent是同一个,此时的policy.
    Off-Policy:要训练的agent和与环境交互的agent不是是同一个的policy.

    二、如何从On- Policy到Off-Policy?

    重要性采样(Importance Sampling):从另一个分布中采样从而逼近所求分布。

    从q分布中采样,求p的期望可以通过如下方法:
    ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \int f(x)p(x)dx=\int f(x)\frac{p(x)}{q(x)}q(x)dx=E_{x \sim q}[f(x)\underset {}{\frac{p(x)}{q(x)}}] f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq[f(x)q(x)p(x)]
    p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)是重要性权重,相当于做了一个分布差异的修正。理论上 q ( x ) q(x) q(x)可以是任意分布,但在实际上p和q不能差太多。因为两个随机变量的期望相同不代表它们的方差也相同。
    V a r x ∼ p [ f ( x ) ] = E x ∼ p [ f ( x ) 2 ] − ( E x ∼ ! [ 请 添 加 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 09997 d 816 f 1 f 49398 c 55 a a 105 c 83 f 4 e e . p n g ) p [ f ( x ) ] ) 2 V a r x ∼ q [ f ( x ) p ( x ) q ( x ) ] = E x ∼ q [ f ( x ) 2 p ( x ) q ( x ) ] − ( E x ∼ q [ f ( x ) ] ) 2 Var_{x\sim p}[f(x)]=E_{x\sim p}[f(x)^2]-(E_{x\sim ![请添加图片描述](https://img-blog.csdnimg.cn/09997d816f1f49398c55aa105c83f4ee.png) p}[f(x)])^2 \\Var_{x\sim q}[f(x)\frac{p(x)}{q(x)}]=E_{x\sim q}[f(x)^2 \frac{p(x)}{q(x)}]-(E_{x\sim q}[f(x)])^2 Varxp[f(x)]=Exp[f(x)2](Ex![](https://imgblog.csdnimg.cn/09997d816f1f49398c55aa105c83f4ee.png)p[f(x)])2Varxq[f(x)q(x)p(x)]=Exq[f(x)2q(x)p(x)](Exq[f(x)])2
    如果 p ( x ) , q ( x ) p(x),q(x) p(x),q(x)差异过大,方差就会差很多。请添加图片描述
    请添加图片描述
    从第一个等式到第二个等式利用了重要性采样原理,第二等式到第三个等式利用了条件概率。第三个等式中 p θ ( s t ) p_\theta(s_t) pθ(st) p θ ′ ( s t ) p_{\theta '}(s_t) pθ(st)可以假设是差不多的,因为 p θ ( s t ) p_\theta(s_t) pθ(st)很难算,用 θ \theta θ去跟环境做互动,算 s t s_t st出现的概率,尤其是图片,同样的 s t s_t st不会出现第二次,无法估算这一项因此无视这个问题。
    p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst)很好算, θ \theta θ是一个网络,把 s t s_t st代进去,就会告诉某个状态的 a t a_t at概率是多少。
    利用右上角蓝色方框内的公式,就能够反推原函数
    J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] 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)] Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]

    三、如何使 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)不相差太多?

    3.1 PPO

    我们已经通过重要性采样把on-policy转换成off-policy,但重要性采样有一个问题:若 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)相差太多,重要性采样的结果就会不怎么好。这就是PPO在做的事情。

    在训练的时候增加一个约束,这个约束是限制 θ \theta θ θ ′ \theta' θ输出的动作KL散度。这里并不是指参数上的距离,而是衡量它们动作上的距离。

    PPO的前身是TRPO信任区域策略优化,TRPO式子:
    J T R P O θ ′ = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] K L ( θ , θ ′ ) < δ J^{\theta'}_{TRPO}=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)] \\ KL(\theta,\theta')<\delta JTRPOθ=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]KL(θ,θ)<δ
    PPO的式子是:
    J P P O θ ′ = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta'}_{PPO}=J^{\theta'}(\theta)-\beta KL(\theta,\theta') \\ 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)] JPPOθ=Jθ(θ)βKL(θ,θ)Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]
    所以两者的区别是,TRPO在求解时KL作为约束,PPO将约束放在式子里。在基于梯度的优化时,有约束很难处理,因此两者的效率差不多,但PPO更容易求解。
    PPO算法有两个主要的变种:PPO-Penalty和PPO-Clip。

    3.1.1 PPO-Penalty (PPO1)

    J P P O θ ′ = J θ ′ ( θ ) − β K L ( θ , θ ′ ) i f K L ( θ , θ ′ ) > K L m a x , i n c r e a s e β i f K L ( θ , θ ′ ) < K L m a x , d e c r e a s e β J^{\theta'}_{PPO}=J^{\theta'}(\theta)-\beta KL(\theta,\theta')\\ if KL(\theta,\theta')>KL_{max},increase \beta\\ if KL(\theta,\theta')<KL_{max},decrease \beta JPPOθ=Jθ(θ)βKL(θ,θ)ifKL(θ,θ)>KLmax,increaseβifKL(θ,θ)<KLmax,decreaseβ
    β \beta β是一个自适应调整的权重。当KL过大,增加惩罚;当KL小于能够接受的最大值,减小惩罚项。

    3.1.2 PPO-Clip (PPO2)

    PPO2没有较复杂的KL散度。PPO2要最大化的目标函数如下所示:
    J P P O 2 θ k ( θ ) = ∑ ( a t , s t ) m i n ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) A θ k ( s t , a t ) , c l i p ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) ) J^{\theta^k}_{PPO2}(\theta)=\sum_{(a_t,s_t)}min(\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-\epsilon,1+\epsilon)) JPPO2θk(θ)=(at,st)min(pθk(atst)pθ(atst)Aθk(st,at),clip(pθk(atst)pθ(atst),1ϵ,1+ϵ))

    • clip这里是,如果第一项小于第二项,就输出第二项;如果大于第三项,就输出第三项。
    • ϵ \epsilon ϵ是一个超参数,需要tune,可以取0.1/0.2。

    接下来看一下clip函数算出来究竟是神马形状。
    在这里插入图片描述
    那么,PPO2是如何实现减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)的差异的呢?
    在这里插入图片描述
    A>0时,取蓝线和绿线中最小的,就是红色线。A>0说明 ( s t , a t ) (s_t,a_t) (st,at)是相对较好的,因此我们希望尽可能提升 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst),但为了减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)的差异,训练到 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)大到 1 + ϵ 1+\epsilon 1+ϵ就停止了。
    在这里插入图片描述
    A<0时,为了min,我们需要取蓝线和绿线中最大的,即红色线。A<0说明 ( s t , a t ) (s_t,a_t) (st,at)是相对较差的,因此我们希望尽可能减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst),但为了减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)的差异,训练到 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)小到 1 − ϵ 1-\epsilon 1ϵ就停止了。

  • 相关阅读:
    Mysql双机热备配置方案原理及实战
    Gartner发布2022年新兴技术成熟度曲线,推动沉浸式、AI自动化发展
    python之列表及操作相关知识
    Zemax操作40--序列模式中LD光源模拟
    ARM cortex-A7核UART实验 收发数据
    Java基础面试
    STM32 新建工程
    Redis数据类型-Set-基本使用
    网页JS自动化脚本(四)修改元素的尺寸颜色显隐状态
    docker mysql 提示 Warning: World-writable config file ‘/etc/my.cnf’ is ignored
  • 原文地址:https://blog.csdn.net/qq_42251120/article/details/125473437