3.Proximal Policy Optimization(PPO)+on/off policy

目录

深度强化学习目录

简介

策略梯度(Policy Gradient)的缺点在于采样量大,且每一次更新参数都需要采样n轮,更新完又要去采样……换言之,对游戏数据的利用率很低,太慢了。
这种采样-学习-采样的过程,是一种on-policy策略,接下来我们要将的PPO则不同,是一种off-policy的策略。

符号

本篇中运用到的符号和上一篇中的基本一致。

On/Off Policy

  • On Policy:训练同一个agent,同时还要求他去对环境进行交互。
  • Off Policy:训练的是一个agent,实际和环境交互的是另一个agent。

举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的

Off-poicy的好处是什么?他能重复利用别人的数据来进行训练。我update了1次参数,可以用他的数据来训练;我update了100次参数,还是可以用他的数据来训练。
这听起来似乎是反直觉的:我参数都变了100次了,为什么还能用别人之前得到的数据来训练?这就涉及到一个重要性采样(importance sampling)的问题了。

重要性采样(importance sampling)

重要性采样,即使用q分布来逼近p分布的方法。公式如下: E x ∼ p [ f ( x ) ] = ∫ 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 ) ] \begin{aligned} \mathbb{E}_{x\sim p}[f(x)]&=\int f(x)p(x)dx\\ &=\int f(x)\frac{p(x)}{q(x)}q(x)dx\\ &=\mathbb{E}_{x\sim q}[f(x)\frac{p(x)}{q(x)}] \end{aligned} Exp[f(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)叫作重要性权重(importance weight)。
这样,我们就完成用q分布逼近p分布,也即用训练的actor来逼近与环境交互的actor。
实际运用中,p和q的分布不能相差过大,否则需要多次采样才能得到较为近似的结果。
来自B站李宏毅深度学习
如上图,当 x ∼ p ( x ) x\sim p(x) xp(x)时,我们采样的 p ( x ) p(x) p(x)大部分在右半侧,这是由p的分布决定的。这样的采样会导致我们得到 f ( x ) f(x) f(x)结果为正的错误结论。只有当采样数量非常多时,我们才能采样到左半侧的点,这里的点q很小p很大,所以重要性权重 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)也很大,这样就会一下把 f ( x ) f(x) f(x)的期望值往负数上拉,从而得到正确结果。而这一切的前提在于,足够多的的采样量,如果采样次数不够,可能一直采的都是右半侧的点。
好在实际训练的时候我们可以延迟更新参数 θ ′ \theta' θ(即不断更新分布 q ( x ) q(x) q(x)),大概50轮更新一次的样子,这样既能保证pq之间的距离不要太大,训练又不会太慢。

修改 ∇ R ˉ θ \nabla\bar{R}_\theta Rˉθ

在policy gradient(即on-policy)中,有: ∇ R ˉ θ = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ l o g p θ ( τ ) ] \nabla\bar{R}_\theta=\mathbb{E}_{\tau \sim p_\theta (\tau)}[R(\tau)\nabla logp_\theta(\tau)] Rˉθ=Eτpθ(τ)[R(τ)logpθ(τ)]
公式作出如下变换:
∇ R ˉ θ = E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R ( τ ) ∇ l o g p θ ( τ ) ] \nabla\bar{R}_\theta=\mathbb{E}_{\tau \sim p_\theta' (\tau)}[\frac{p_\theta(\tau)}{p_{\theta'}(\tau)}R(\tau)\nabla logp_\theta(\tau)] Rˉθ=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)]
在原来的方法里,我们用 π θ \pi_\theta πθ采样更新参数,更新完参数后又用模型 π θ \pi_\theta πθ重新采样,很慢。现在我们换一种方式,用 π θ ′ \pi_{\theta'} πθ采样,再用采样来的数据训练 π θ \pi_\theta πθ。由于固定 θ ′ \theta' θ不变,这样我们就能重复利用不变的q分布(即 θ ′ \theta' θ)来逼近变化的p分布(即 θ \theta θ),而且大大减少了采样花费的时间。

不是 R ( τ ) R(\tau) R(τ)而是 A θ ( s t , a t ) A^\theta(s_t,a_t) Aθ(st,at)

上一篇中我们讨论过了,直接计算整个游戏过程的reward再反馈到所有行为上是不合理的,所以我们用优势函数A来代替R。同样地,接下来我们讨论更改为A后的公式应该怎么修改。
∇ R ˉ θ = E ( s t , a t ) ∼ π θ [ A θ ( s t , a t ) ∇ l o g p θ ( a t n ∣ s t n ) ] = E ( s t , a t ) ∼ π θ ′ [ P θ ( s t , a t ) P θ ′ ( s t , a t ) A θ ′ ( s t , a t ) ∇ l o g p θ ( a t n ∣ s t n ) ] = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) p θ ( s t ) p θ ′ ( s t ) A θ ′ ( s t , a t ) ∇ l o g p θ ( a t n ∣ s t n ) ] = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) ∇ l o g p θ ( a t n ∣ s t n ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] = E ( s t , a t ) ∼ π θ ′ [ ∇ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] \begin{aligned} \nabla\bar{R}_\theta&=\mathbb{E}_{(s_t,a_t) \sim \pi_\theta }[A^\theta (s_t,a_t)\nabla logp_\theta(a_t^n \vert s_t^n)]\\ &=\mathbb{E}_{(s_t,a_t) \sim \pi_{\theta'} }[\frac{P_\theta(s_t,a_t)}{P_{\theta'}(s_t,a_t)}A^{\theta'} (s_t,a_t)\nabla logp_\theta(a_t^n \vert s_t^n)]\\ &=\mathbb{E}_{(s_t,a_t) \sim \pi_{\theta'} }[\frac{p_\theta(a_t\vert s_t)}{p_{\theta'}(a_t\vert s_t)}\frac{p_{\theta}(s_t)}{p_{\theta'}(s_t)}A^{\theta'} (s_t,a_t)\nabla logp_\theta(a_t^n \vert s_t^n)]\\&=\mathbb{E}_{(s_t,a_t) \sim \pi_{\theta'} }[\frac{p_\theta(a_t\vert s_t)\nabla logp_\theta(a_t^n \vert s_t^n)}{p_{\theta'}(a_t\vert s_t)}A^{\theta'} (s_t,a_t)]\\ &=\mathbb{E}_{(s_t,a_t) \sim \pi_{\theta'} }[\frac{\nabla p_{\theta}(a_t\vert s_t)}{p_{\theta'}(a_t\vert s_t)}A^{\theta'} (s_t,a_t)]\\ \end{aligned} Rˉθ=E(st,at)πθ[Aθ(st,at)logpθ(atnstn)]=E(st,at)πθ[Pθ(st,at)Pθ(st,at)Aθ(st,at)logpθ(atnstn)]=E(st,at)πθ[pθ(atst)pθ(atst)pθ(st)pθ(st)Aθ(st,at)logpθ(atnstn)]=E(st,at)πθ[pθ(atst)pθ(atst)logpθ(atnstn)Aθ(st,at)]=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]
推导过程中有三个问题需要注意。

  • 第一点,在第二步中我们将分布从 π θ \pi_\theta πθ转换为 π θ ′ \pi_{\theta'} πθ,实际采样用的是 θ ′ \theta' θ,因此优势函数给出的值不再是依靠参数 θ \theta θ,而是参数 θ ′ \theta' θ,我们是直接假设两者近似的。
  • 第二点,在第四步中我们要假设 p θ ( s t ) p θ ′ ( s t ) \frac{p_{\theta}(s_t)}{p_{\theta'}(s_t)} pθ(st)pθ(st)为1,即两个参数下 s t s_t st出现的概率接近。这个假设是直觉性的,也是为了便于计算,没什么好说的。
  • 第三点, ∇ f ( x ) = f ( x ) ∇ l o g f ( x ) \nabla f(x)=f(x)\nabla logf(x) f(x)=f(x)logf(x),简单地高数知识。

于是我们得到了 ∇ R ˉ θ \nabla\bar{R}_\theta Rˉθ。等式右侧只有一项与 θ \theta θ相关,而且这一项同样也是 ∇ p \nabla p p,是梯度。等式两边同时去掉梯度算子符号,于是可以获得以下目标函数: J θ ′ ( θ ) = R ˉ θ = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta'}(\theta)=\bar{R}_\theta=\mathbb{E}_{(s_t,a_t) \sim \pi_{\theta'} }[\frac{p_{\theta}(a_t\vert s_t)}{p_{\theta'}(a_t\vert s_t)}A^{\theta'} (s_t,a_t)] Jθ(θ)=Rˉθ=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]
目标函数的上标 θ ′ \theta' θ是说明它是用参数 θ ′ \theta' θ采样的数据来估计 θ \theta θ的。

添加约束

有了目标函数,一切看起来都很不错。但是实际上有一个问题: p θ p_\theta pθ p θ ′ p_{\theta'} pθ不能差太多。这是我们之前的一个假设。现在,我们需要添加约束来证实这一点成立,而这也是PPO实际在做的。
怎么做呢?很简单,PPO的目标函数如下:
J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J^{\theta'}_{PPO}(\theta)=J^{\theta'}(\theta)-\beta KL(\theta,\theta') JPPOθ(θ)=Jθ(θ)βKL(θ,θ)
其中,KL是KL散度,详情百度,可以理解为一种距离公式。不同的是,他计算的不是 θ \theta θ θ ′ \theta' θ参数上的距离,而是行为上的距离。
什么叫参数上的距离,什么叫行为上的距离?
参数上的距离很好理解,就是两个向量之间的距离,重点在于行为上的距离。
我们知道,两个Actor(即策略)分别用参数 θ \theta θ θ ′ \theta' θ,他们接收状态s,输出行为的概率分布 π θ ( s ) \pi_\theta(s) πθ(s) π θ ′ ( s ) \pi_{\theta'}(s) πθ(s)。而我们的KL散度指的就是这两个行为概率分布之间的距离,这就叫行为的距离。
参数上的距离意义不大,而行为上的距离能保证面对相同的state时,两个Actor能输出近似的行为概率分布。
上面这些就是基本的内容了,除此之外,我们还额外添加了一个约束。当 K L ( θ , θ ′ ) > K L m a x KL(\theta,\theta')>KL_{max} KL(θ,θ)>KLmax时,增加 β \beta β;当 K L ( θ , θ ′ ) < K L m i n KL(\theta,\theta')<KL_{min} KL(θ,θ)<KLmin时,减小 β \beta β K L m a x KL_{max} KLmax K L m i n KL_{min} KLmin都是自己设置的,这么做的目的是为了动态调整参数 β \beta β,防止太过追求 θ \theta θ θ ′ \theta' θ距离远近,导致 J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ)没有起到想要的效果。

PPO2

PPO算法太复杂了,有一个PPO2,实现起来简单多了,我就不解释了,想了解的可以去B站直接搜李宏毅的视频。
PPO2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值