强化学习系列之 Proximal Policy Optimization(PPO)

1、前言

个人感觉这里讲的非常好:https://spinningup.openai.com/en/latest/algorithms/ppo.html

Proximal Policy Optimization(PPO)是 Policy Gradient 的一种变形,关于 Policy Gradient 有兴趣的同学可以去看我另一篇博:强化学习系列之Policy Gradient

首先我们需要了解两个概率:On-policy 和 Off-policy。我们知道在强化学习里面,我们要学习的就是一个 Agent 。如果我们要学习的 Agent 和与环境互动的 Agent 是同一个的话,那么这样叫做 On-policy,反之就是 Off-policy。更形象地来说,就是要学习的那个 Agent 一边与环境互动一边学习,这样就是 On-policy;如果他在旁边看别人玩,来学习的话,叫做 off-policy。

在 Policy Gradient 中,我们知道,每一次更新,我们都需要 sample 很多 data,更新后,这些 data 就没有用了,Proximal Policy Optimization就是解决的这个问题。

2、重要性采样

重要性采样是一个通用的方法,因为后面需要用到,所以在这写一下,这个我也有单独写一个博客,有兴趣的可以去看一下。

重要性采样是用一个新的采样分布来代替原有的采样分布,使得采样更加容易或高效
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} 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)}] \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 ) p(x) p(x) 里面采样,而是从 q ( x ) q(x) q(x) 里面采样,但是由于两个分布之间有差异,所以我们乘以一个 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x) 以消除这两个分布间的差异。

3、公式推导

在 Policy Gradient 中,我们对 Reward 的期望求梯度:
∇ R θ ‾ = E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log ⁡ p θ ( τ ) ] \begin{aligned} \nabla \overline{R_\theta} &= E_{{\tau} \sim {p_{\theta}(\tau)}} [R(\tau) \nabla \log p_\theta (\tau)] \\\\ \end{aligned} Rθ=Eτpθ(τ)[R(τ)logpθ(τ)]
根据重要性采样变换后:
∇ R θ ‾ = E τ ∼ p θ ′ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R ( τ ) ∇ log ⁡ p θ ( τ ) ] \begin{aligned} \nabla \overline{R_\theta} &= E_{{\tau} \sim {p_{{\theta}'}(\tau)}} [\frac{p_{\theta}(\tau)}{p_{{\theta}'}(\tau)} R(\tau) \nabla \log p_\theta (\tau)] \\\\ \end{aligned} Rθ=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)]
这样做的好处就是, p θ ′ p_{\theta \prime} pθ 中采样的数据可以多次使用

根据之前的 Policy Gradient 我们需要更新的梯度:
∇ R ‾ θ = E ( s t , a t ) ∼ π θ [ A θ ( s t , a t ) ∇ log ⁡ 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 ) ∇ log ⁡ p θ ( a t n ∣ s t n ) ] ≈ E ( s t , a t ) ∼ π θ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ∇ log ⁡ p θ ( a t n ∣ s t n ) ] \begin{aligned} \nabla \overline R_\theta &= E_{({s_t, a_t}) \sim \pi_\theta}[A^{\theta}(s_t, a_t) \nabla \log p_{ \theta }(a_t^n|s_t^n)] \\\\ &\approx E_{({s_t, a_t}) \sim \pi_\theta}[\frac{p_\theta (s_t, a_t)}{p_{\theta ^ \prime}(s_t, a_t)} A^{\theta \prime}(s_t, a_t) \nabla \log p_{\theta}(a_t ^n| s_t ^n)] \\\\ &\approx E_{({s_t, a_t}) \sim \pi_\theta}[\frac{p_\theta (a_t| s_t)}{p_{\theta ^ \prime}(a_t| s_t)}A^{\theta \prime}(s_t, a_t) \nabla \log p_{\theta}(a_t ^n| s_t ^n)] \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)Aθ(st,at)logpθ(atnstn)]
第一行到第二行的约等于是因为这时用的是与环境互动的 Agent 的奖励 A θ ′ ( s t , a t ) A^{\theta \prime} (s_t, a_t) Aθ(st,at),第二行与第三行的约等于是因为去掉了一项 p θ ( s t ) p θ ′ ( s t ) \frac{p_\theta(s_t)}{p_{\theta \prime}(s_t)} pθ(st)pθ(st)。又因为 ∇ f ( x ) = f ( x ) ∇ log ⁡ f ( x ) \nabla f(x) = f(x)\nabla \log f(x) f(x)=f(x)logf(x),所以呢,我们的目标函数可以变成了:
J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] \begin{aligned} J^{\theta ^ \prime}(\theta) = E_{(s_t, a_t) \sim \pi_{\theta ^ \prime}}[\frac{p_{\theta}(a_t | s_t)}{p_{\theta ^ \prime}(a_t| s_t)} A ^ {\theta ^ \prime}(s_t, a_t)] \end{aligned} Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]

4、Proximal Policy Optimization

在重要性采样中我们提到,两个分布不能相差太多,所以 PPO 提出了下面的公式,其中KL就是KL散度:
J P P O θ ′ = J θ ′ ( θ ) − β K L ( θ , θ ′ ) \begin{aligned} J_{PPO}^{\theta ^ \prime} = J^{\theta ^ \prime}(\theta) - \beta KL(\theta, \theta ^ \prime) \end{aligned} JPPOθ=Jθ(θ)βKL(θ,θ)
我们的目标函数相当于加了一个限制。

这里我们再提一下PPO的前身TRPO(Trust Region Policy Optimization):
J T R P O θ ′ = J θ ′ ( θ ) K L ( θ , θ ′ ) < δ J_{TRPO}^{\theta \prime} = J^{\theta ^ \prime}(\theta) \\ KL(\theta, \theta ^\prime) < \delta JTRPOθ=Jθ(θ)KL(θ,θ)<δ
这里我们可以看出来,TRPO与PPO相差不多,只是TRPO将限制条件单独写出来了(实际上这个限制很难算,而且PPO和TRPO的效果差不多,所以现在一般都用PPO)。

5、PPO升级版

直接写公式:
J P P O 2 θ k ≈ ∑ s t , a t min ⁡ ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , c l i p ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) A θ k ( s t , a t ) ) J_{PPO2}^{\theta ^k} \approx \sum_{s_t, a_t} \min(\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)}, 1-\epsilon, 1+ \epsilon)A^{\theta ^ k}(s_t, a_t)) JPPO2θkst,atmin(pθk(atst)pθ(atst),clip(pθk(atst)pθ(atst),1ϵ,1+ϵ)Aθk(st,at))
这个式子看着复杂,其实捋一捋并不会很复杂。

你可能感兴趣的:(强化学习)