【详解+推导!!】PPO 近端策略优化

近端策略优化(PPO, Proximal Policy Optimization)是强化学习中十分重要的一种算法,被 OpenAI 作为默认强化学习算法,在多种强化学习应用中表现十分优异。

文章目录

  • 1. From On-policy to Off-policy
  • 2. Importance Sampling
  • 3. 推导off-policy下的梯度公式
  • 4. TRPO和PPO
  • 5. PPO2

1. From On-policy to Off-policy

  • 如果被训练的agent和与环境做互动的agent(生成训练样本)是同一个的话,那么叫做on-policy(同策略)
  • 如果被训练的agent和与环境做互动的agent(生成训练样本)不是同一个的话,那么叫做off-policy(异策略)

换一种拟人的方式来讲:

  • on-policy:我们来学习下象棋,先和大家下若干把棋,然后总结经验提升自己,成为2.0的自己。2.0的自己再和大家下棋,再总结2.0期间下过棋局的经验,成为3.0的自己,以此类推。其中关键点在于,2.0升级到3.0的过程中不能利用1.0时的下棋经验。
  • off-policy:与on-policy不同的是我们,我们可以反复利用1.0期间的下棋经验,从2.0升级到3.0再升级到4.0,等等。甚至我们还可以用其他人的下棋经验提升自己。

为什么要考虑使用Off-policy?
我们可以回顾Policy Gradient的过程,Policy Gradient是一种on-policy的方法,他首先要利用现有策略和环境互动,产生学习资料(决策数据 τ \tau τ),然后利用产生的资料,按照Policy Gradient的方法更新策略参数。然后再用新的策略去交互、更新、交互、更新,如此重复。这其中有很多的时间都浪费在了产生资料的过程中,Off-Policy的目的就是更加充分的利用actor产生的交互资料,增加学习效率。

2. Importance Sampling

为什么要使用Importance Sampling呢?
我们可以看一下Policy Gradient的梯度公式:
∇ R ˉ ( τ ) = E τ ~ p θ ( τ ) [ A θ ( s t , a t ) ∇ l o g p θ ( a t n ∣ s t n ) ] \nabla\bar{R}(\tau) = E_{\tau~p_\theta(\tau)}[A^\theta(s_t, a_t)\nabla log p_\theta(a_t^n|s_t^n) ] Rˉ(τ)=Eτpθ(τ)[Aθ(st,at)logpθ(atnstn)]
问题在于上面的式子是基于 τ ~ p θ ( τ ) \tau~p_\theta(\tau) τpθ(τ)采样的,一旦更新了参数,从 θ \theta θ θ ′ \theta' θ,这个概率 P θ P_{\theta} Pθ就不对了。而Importance Sampling解决的正是从 τ ~ p θ ( τ ) \tau~p_\theta(\tau) τpθ(τ)采样,计算 θ ′ \theta' θ ∇ R ˉ ( τ ) \nabla\bar{R}(\tau) Rˉ(τ)的问题。

重要性采样(Importance Sampling)的推导可以点击链接查看,这里直接给出公式:
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 ) ] E_{x~p}[f(x)] = \int f(x)p(x)dx = \int f(x) \frac{p(x)}{q(x)}q(x)dx = E_{x~q}[f(x) \frac{p(x)}{q(x)}] Exp[f(x)]=f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq[f(x)q(x)p(x)]
上面的式子表示,已知 x x x服从分布 p p p,我们要计算 f ( x ) f(x) f(x),但是 p p p不方便采样,我们就可以通过 q q q去采样,计算期望。
E x ~ q [ f ( x ) p ( x ) q ( x ) ] E_{x~q}[f(x) \frac{p(x)}{q(x)}] Exq[f(x)q(x)p(x)]
这里我们用 q q q做采样, p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)叫做重要性权重,用来修正 q q q p p p两个分布的差异。理论上利用重要性采样的方法我们可以用任何 q q q来完成采样,但是由于采样数量的限制, q q q p p p的差异不能太大。如果差异过大, E x ~ q [ f ( x ) p ( x ) q ( x ) ] E_{x~q}[f(x) \frac{p(x)}{q(x)}] Exq[f(x)q(x)p(x)] E x ~ p [ f ( x ) ] E_{x~p}[f(x)] Exp[f(x)]的差异也会很大。

3. 推导off-policy下的梯度公式

在on-policy情况下,Policy Gradient公式为:
∇ R ˉ ( τ ) = E ( s t , a t ) ~ π θ [ A θ ( s t , a t ) ∇ l o g p θ ( a t n ∣ s t n ) ] \nabla\bar{R}(\tau) = E_{(s_t,a_t)~\pi_\theta}[A^\theta(s_t, a_t)\nabla log p_\theta(a_t^n|s_t^n) ] Rˉ(τ)=E(st,at)πθ[Aθ(st,at)logpθ(atnstn)]
由上面的推导可得,我们利用 θ ′ \theta' θ采样,优化 θ \theta θ时的公式为:
∇ R ˉ ( τ ) = 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 ) ] \nabla\bar{R}(\tau) = E_{(s_t,a_t)~\pi_{\theta'}}[\frac{p_{\theta(s_t,a_t)}}{p_{\theta'(s_t,a_t)}}A^{\theta}(s_t, a_t)\nabla log p_\theta(a_t^n|s_t^n) ] Rˉ(τ)=E(st,at)πθ[pθ(st,at)pθ(st,at)Aθ(st,at)logpθ(atnstn)]
其中 A θ ( s t , a t ) A^{\theta}(s_t, a_t) Aθ(st,at)为比较优势,从该项的推导过程可以知道,它是由采样样本决定的,所以应该用 A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st,at)表示,所以式子变为:
∇ R ˉ ( τ ) = 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 ) ] \nabla\bar{R}(\tau) = E_{(s_t,a_t)~\pi_{\theta'}}[\frac{p_{\theta(s_t,a_t)}}{p_{\theta'(s_t,a_t)}}A^{\theta'}(s_t, a_t)\nabla log p_\theta(a_t^n|s_t^n) ] Rˉ(τ)=E(st,at)πθ[pθ(st,at)pθ(st,at)Aθ(st,at)logpθ(atnstn)]
p θ ( s t , a t ) p_{\theta(s_t,a_t)} pθ(st,at)展开可得:
∇ R ˉ ( τ ) = 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 ) ] \nabla\bar{R}(\tau) = E_{(s_t,a_t)~\pi_{\theta'}}[ \frac{p_{\theta(a_t|s_t)}}{p_{\theta'(a_t|s_t)}} \frac{p_{\theta(s_t)}}{p_{\theta'(s_t)}} A^{\theta'}(s_t, a_t)\nabla log p_\theta(a_t^n|s_t^n) ] Rˉ(τ)=E(st,at)πθ[pθ(atst)pθ(atst)pθ(st)pθ(st)Aθ(st,at)logpθ(atnstn)]
我们认为某一个状态 s t s_t st出现的概率与策略函数无关,只与环境有关,所以可以认为 p θ ( s t ) ≈ p θ ′ ( s t ) p_{\theta(s_t)} \approx p_{\theta'(s_t)} pθ(st)pθ(st),由此得出如下公式:
∇ R ˉ ( τ ) = E ( s t , a t ) ~ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ∇ l o g p θ ( a t n ∣ s t n ) ] \nabla\bar{R}(\tau) = E_{(s_t,a_t)~\pi_{\theta'}}[ \frac{p_{\theta(a_t|s_t)}}{p_{\theta'(a_t|s_t)}} A^{\theta'}(s_t, a_t)\nabla log p_\theta(a_t^n|s_t^n) ] Rˉ(τ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)logpθ(atnstn)]
根据上面的式子,我们就可以完成off-policy的工作,反推出目标函数为:
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)~\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)]
J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ)中括号里的 θ \theta θ表示我们要优化的参数, θ ′ \theta' θ表示实际和环境互动产生样本的Actor的参数,在计算过程中 p θ ′ ( a t ∣ s t ) p_{\theta'(a_t|s_t)} pθ(atst) A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st,at)都是根据样本计算出的常数,所以也很好理解,我们优化的目标就是 p θ ( a t ∣ s t ) p_{\theta(a_t|s_t)} pθ(atst)

4. TRPO和PPO

TRPO

TRPO是PPO的前身,叫做信任区域策略优化(Trust Region Policy Optimization)。其思路如下:优化目标就是我们上面推出的 J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ),但是我们使用了重要性采样,而重要性采样的要求就是原采样和目标采样不能相差太大,这里就是指 π θ \pi_{\theta} πθ π θ ′ \pi_{\theta'} πθ输出的动作不能相差太大。TRPO采用KL散度(KL divergence)的方法来评价二者的差异,记作 K L ( θ , θ ′ ) KL(\theta, \theta') KL(θ,θ)。算法规定,当进行优化时, K L ( θ , θ ′ ) KL(\theta, \theta') KL(θ,θ)要小于一个阈值 σ \sigma σ,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_{TRPO}^{\theta'}(\theta) = E_{(s_t,a_t)~\pi_{\theta'}}[ \frac{p_{\theta(a_t|s_t)}}{p_{\theta'(a_t|s_t)}} A^{\theta'}(s_t, a_t)],KL(\theta, \theta')<\sigma JTRPOθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]KL(θ,θ)<σ

PPO
TRPO相当于给目标函数增加了一项额外的约束(constrain),而且这个约束并没有体现在目标函数里,在计算过程中这样的约束是很难处理的。PPO的做法就是将这样约束融进了目标函数,其目标函数如下:
J P 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_{PPO}^{\theta'}(\theta) = E_{(s_t,a_t)~\pi_{\theta'}}[ \frac{p_{\theta(a_t|s_t)}}{p_{\theta'(a_t|s_t)}} A^{\theta'}(s_t, a_t)] - \beta KL(\theta, \theta') JPPOθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]βKL(θ,θ)
上面的式子我们可以理解为:训练一个累计回报期望更高但是又和 θ ′ {\theta'} θ很像的 θ {\theta} θ

PPO算法流程:

  • 初始化一组参数 θ 0 {\theta^0} θ0
  • 进行多轮迭代,每轮迭代中做以下工作:
    • 使用当前参数 θ k {\theta^k} θk与环境做互动,产生 { s t , a t } \{ s_t,a_t \} { st,at},并且计算出 p θ ′ ( a t ∣ s t ) p_{\theta'(a_t|s_t)} pθ(atst) A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st,at)
    • 利用 J P P O θ k ( θ k + 1 ) J_{PPO}^{\theta^{k}}(\theta^{k+1}) JPPOθk(θk+1),求得基于当前数据 { s t , a t } \{ s_t,a_t \} { st,at}的最优参数 θ k + 1 \theta^{k+1} θk+1(这个优化过程是多次反向传播的)

上面从 θ k \theta^{k} θk θ k + 1 \theta^{k+1} θk+1的优化过程中,可以更新很多次也没有关系,因为我们使用了重要性采样,也对 θ \theta θ的动作空间进行了约束,这一步的目的就是尽可能的最大化目标函数。

针对上面的算法还有一个自使用KL约束的方法,叫做adaptive KL divergence,其实就是动态调整 β \beta β,如下:
【详解+推导!!】PPO 近端策略优化_第1张图片
这个方法里面要设置一个我们可以接受的KL散度的上限和下限:

  • 当 KL 散度的项太大,超过上限时,我们认为是我们的KL约束太弱了,才导致 θ k \theta^{k} θk θ k + 1 \theta^{k+1} θk+1的差异那么大,所以就把 β \beta β调大。
  • 当 KL 散度的项太小,超过下限时,我们认为是我们的KL约束太强了,导致我们的训练目标变成了让 θ k + 1 \theta^{k+1} θk+1 θ k \theta^{k} θk一样,而没有充分学习 { s t , a t } \{ s_t,a_t \} { st,at}中的知识,所以要把 β \beta β调小。

5. PPO2

PPO2也叫做PPO-Clip,该方法不采用KL散度作为约束,而是采用逻辑上合理的思路设计目标函数,其目标函数如下:
J P P O 2 θ ′ ( θ ) ≈ ∑ ( s t , a t ) min ⁡ ( p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) , c l i p ( p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) A θ ′ ( s t , a t ) ) \begin{aligned} J_{PPO2}^{\theta'}(\theta) \approx \sum_{(s_t, a_t)} \min(&\frac{p_{\theta(a_t|s_t)}}{p_{\theta'(a_t|s_t)}}A^{\theta'}(s_t, a_t), \\ &clip(\frac{p_{\theta(a_t|s_t)}}{p_{\theta'(a_t|s_t)}}, 1-\epsilon, 1+\epsilon) A^{\theta'}(s_t, a_t)) \end{aligned} JPPO2θ(θ)(st,at)min(pθ(atst)pθ(atst)Aθ(st,at),clip(pθ(atst)pθ(atst),1ϵ,1+ϵ)Aθ(st,at))

clip 函数的意思是,在括号里面有三项,分别是(变量,下限,上限),如果变量小于下限,那么就输出下限,大于上限就输出上限,如果在二者之间,就输出变量的值, c l i p ( p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) clip(\frac{p_{\theta(a_t|s_t)}}{p_{\theta'(a_t|s_t)}}, 1-\epsilon, 1+\epsilon) clip(pθ(atst)pθ(atst),1ϵ,1+ϵ)的函数图像如下。
【详解+推导!!】PPO 近端策略优化_第2张图片
直接分析目标函数,我们可以知道这个函数的取值逻辑如下:
【详解+推导!!】PPO 近端策略优化_第3张图片

  • p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) \frac{p_{\theta(a_t|s_t)}}{p_{\theta^k(a_t|s_t)}} pθk(atst)pθ(atst)是绿色的线;
  • c l i p ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) clip(\frac{p_{\theta(a_t|s_t)}}{p_{\theta^k(a_t|s_t)}}, 1-\epsilon, 1+\epsilon) clip(pθk(atst)pθ(atst),1ϵ,1+ϵ)是蓝色的线;
  • 在绿色的线跟蓝色的线中间,我们要取一个最小的。假设前面乘上的这个项 A,它是大于 0 的话,取最小的结果,就是左侧图片中红色的这一条线。
  • 同理,如果 A 小于 0 的话,取最小的以后,就得到右侧侧图片中红色的这一条线。

知道 J P P O 2 θ k ( θ ) J_{PPO2}^{\theta^k}(\theta) JPPO2θk(θ)的取值逻辑之后,我们就可以来分析将目标函数设计成这样的目的和想法。

目标函数想做的事情就是希望在提升累计期望回报的同时,保证 p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst) p θ k ( a t ∣ s t ) {p_{\theta^k(a_t|s_t)}} pθk(atst)不要差距太大,那他是如何做到的呢?

  • A是比较优势,A>0表示比较优势大,我们要提升 p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst),A<0表示这个决策不好,所以我们要减少 p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst)。这里说的是不考虑重要性采样的情况。
  • 当A>0时,我们要提升 p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst),可是受到重要性采样的约束,他不能和 p θ k ( a t ∣ s t ) {p_{\theta^k(a_t|s_t)}} pθk(atst)相差太大,所以当 p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst)大到, p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) > 1 + ϵ \frac{p_{\theta(a_t|s_t)}}{p_{\theta^k(a_t|s_t)}}>1+\epsilon pθk(atst)pθ(atst)>1+ϵ时,就不再让目标函数有benifit了,他的做法就是让 c l i p ( p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) clip(\frac{p_{\theta(a_t|s_t)}}{p_{\theta^k(a_t|s_t)}}, 1-\epsilon, 1+\epsilon) clip(pθk(atst)pθ(atst),1ϵ,1+ϵ)这一项恒定为 1 + ϵ 1+\epsilon 1+ϵ。因为固定后,无论 p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst)变到多大,目标函数都不会有收益,自然也就不会训练到更大。
  • 当A<0时,我们要减小 p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst),同样 p θ ( a t ∣ s t ) p θ k ( a t ∣ s t ) < 1 − ϵ \frac{p_{\theta(a_t|s_t)}}{p_{\theta^k(a_t|s_t)}}<1-\epsilon pθk(atst)pθ(atst)<1ϵ时,就会停止,没有benifit, p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst)自然也就不会过小了。

有一点可以可能不清晰的是,为什么A>0时,下限不做约束,A<0时上限不做约束。原因是,如果A>0, p θ ( a t ∣ s t ) {p_{\theta(a_t|s_t)}} pθ(atst)一定朝着变大的方向优化,不可能变小,所以不需要约束下限;A<0时也是同理。

你可能感兴趣的:(强化学习,PPO,TRPO,近端策略优化,强化学习,clip)