强化学习的数学基础2---PPO算法

版权声明:所有的博客都是个人笔记,交流可以留言。未经允许,谢绝转载。。。 https://blog.csdn.net/qq_35976351/article/details/89058454

强化学习的数学基础2—PPO系列算法

这篇笔记来自于李宏毅老师的公开课

PPO算法全称是Proximal Policy Optimization算法。该类算法是为了解决Policy Gradient算法速度慢的问题。

先给出两个学习的概念:

  • On-Policy学习:学习的Agent和与环境互动的Agent是同一个。可以理解为Agent一边互动一边学习。
  • Off-Policy学习:学习的Agent和与环境互动的Agent不是同一个,可以理解为有一个Agent在学习,还有一个Agent在与环境互动产生数据。

Policy Gradient算法中,每完成一次游戏就要进行一次迭代更新,Agent大部分的时间都浪费在产生数据上了;而且很明显,这是On-Policy的策略。

回顾更新的梯度公式:
(1) R ˉ θ = E τ P θ ( τ ) [ R ( τ ) log P θ ( τ ) ] \nabla \bar{R}_{\theta}=E_{\tau\sim P_{\theta}(\tau)}\left[R(\tau)\nabla \log {P_{\theta}(\tau)} \right] \tag{1}

先引入Importance Sampling的概念:

假设两个分布 p ( x ) p(x) q ( x ) q(x) ,我们只知道 p ( x ) p(x) 满足某个分布,但是无法对 p ( x ) p(x) 进行积分;而且假设我们只能从 q ( x ) q(x) 中进行sampling data。

先给出一个转换公式:
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\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}\left[f(x)\frac{p(x)}{q(x)}\right]
这样就把满足 p p 分布的均值转换成满足 q q 分布的均值了。

但是,这么做有缺陷,因为虽然通过变换,使得两者的均值相等,但是两者的方差是不同的。根据方差公式:
V a r ( X ) = E ( X 2 ) E 2 ( X ) Var(X)=E(X^2)-E^2(X)
那么,有
V a r x p ( x ) = E x p [ f 2 ( x ) ] E x p 2 [ f ( x ) ] Var_{x\sim p}(x) = E_{x\sim p}\left[f^2(x)\right]-E_{x \sim p}^2\left[f(x)\right]

V a r x q ( x ) = E x q [ f ( x ) p ( x ) q ( x ) ] = E x q [ f 2 ( x ) ( p ( x ) q ( x ) ) 2 ] E x q 2 [ f 2 ( x ) ( p ( x ) q ( x ) ) ] = E x p [ f 2 ( x ) ( p ( x ) q ( x ) ) ] E x p 2 [ f ( x ) ] Var_{x\sim q}(x) = E_{x\sim q}\left[f(x)\frac{p(x)}{q(x)}\right]\\=E_{x\sim q}\left[f^2(x)\left(\frac{p(x)}{q(x)}\right)^2\right]-E_{x\sim q}^2\left[f^2(x)\left(\frac{p(x)}{q(x)}\right)\right]\\=E_{x\sim p}\left[f^2(x)\left(\frac{p(x)}{q(x)}\right)\right]-E_{x\sim p}^2\left[f(x)\right]
所以, p ( x ) q ( x ) \frac{p(x)}{q(x)} 很明显影响分布,即方差。注意 x q x\sim q 分布的计算中,省去了最后转换的一步,计算比较麻烦,直接给出了结论。

根据[给出的公式,有:
R ˉ θ = E τ p θ ( τ ) [ p θ ( x ) p θ ( x ) R ( τ ) log P θ ( τ ) ] \nabla \bar{R}_{\theta}=E_{\tau\sim p_{{\theta}'}(\tau)}\left[\frac{p_{\theta}(x)}{p_{{\theta}^{'}}(x)} R(\tau)\nabla\log P_{\theta}(\tau)\right]
同时令 A θ ( s t , a t ) = τ ( R ( τ ) b ) A^{\theta}(s_t,a_t)=\sum_{\tau}(R(\tau)-b) ,那么
(1) 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 ) p θ ( s t ) p θ ( s t ) A θ ( s t , a t ) log P θ ( a t s t ) ] E_{(s_t,a_t)\sim \pi_{\theta}}\left[A^{\theta}(s_t,a_t)\nabla \log {P_{\theta}(a_{t}^{(n)}|s_{t}^{(n)})}\right]\\=E_{(s_t,a_t)\sim \pi_{{\theta}^{'}}}\left[\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)})}\right]\\=E_{(s_t,a_t)\sim \pi_{{\theta}^{'}}}\left[\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}|s_{t})}\right] \tag{1}

在公式1的最后,因为状态出现的概率一般与Actor无关,所以有 p θ ( s t ) = p θ ( s t ) p_{\theta}(s_t)=p_{\theta}^{'}(s_t) ,所以最后有公式:
(2) E ( 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 ) log P θ ( a t s t ) ] E_{(s_t,a_t)\sim \pi_{\theta}}\left[A^{\theta}(s_t,a_t)\nabla \log {P_{\theta}(a_{t}^{(n)}|s_{t}^{(n)})}\right]=E_{(s_t,a_t)\sim \pi_{{\theta}^{'}}}\left[\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^{'}}(a_t|s_t)}A^{{\theta}^{'}}(s_t)\nabla \log {P_{\theta}(a_{t}|s_{t})}\right] \tag{2}
又因为有公式:
f ( x ) = f ( x ) log f ( x ) \nabla f(x) = f(x)\nabla \log{f(x)}
所以 ( 2 ) (2) 式化简为:
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}^{'}}}\left[\frac{p_{\theta}(a_t|s_t)}{p_{{\theta}^{'}}(a_t|s_t)}A^{{\theta}^{'}}(s_t,a_t)\right]

扫描二维码关注公众号,回复: 6217010 查看本文章

在使用PPO系列的算法时,为了保证 π θ \pi_{\theta} π θ \pi_{{\theta}^{'}} 分布尽可能均匀,应该使得这两个的输出尽量接近才可以。

最后给出PPO算法:

  • 初始化策略参数 θ 0 \theta^{0}
  • 在每一次迭代中:
    • 使用 θ k \theta^{k} 与环境进行交互,收集 { s t , a t } \{s_t,a_t\} 并计算 A θ k ( s t , a t ) A^{\theta^{k}}(s_t,a_t)
    • 寻找 θ \theta 优化 J P P O ( θ ) J_{PPO}(\theta)
      J P P O θ k ( θ ) = J θ k ( θ ) β K L ( θ , θ k ) J θ k ( θ ) ( s t , a t ) p θ ( a t s t ) p θ k ( a t s t ) A θ k ( s t , a t ) J_{PPO}^{\theta^{k}}(\theta)=J^{\theta^{k}}(\theta)-\beta KL(\theta,{\theta}^k) \\ 其中,J^{\theta^{k}}(\theta)\approx \sum_{(s_t,a_t)}\frac{p_{\theta}(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}A^{\theta^k}(s_t,a_t)
    • 如果 K L ( θ , θ k ) > K L m a x KL(\theta,{\theta}^k)>KL_{max} ,增加 β \beta
    • 如果 K L ( θ , θ k ) < K L m i n KL(\theta,{\theta}^k)<KL_{min} ,减小 β \beta

其中, β K L ( θ , θ k ) \beta KL(\theta,{\theta}^k) 是限制参数,为了减少两个Agent之间输出的差距。

再给出一个修正后的PPO2算法的更新公式,一般使用这个:
J P P O 2 θ k ( θ ) ( s t , a 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_{PPO2}^{\theta^{k}}(\theta)\approx \sum_{(s_t,a_t)}\mathop{min}\left(\frac{p_{\theta}(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}A^{\theta^k}(s_t,a_t),\mathop{clip}\left(\frac{p_{\theta}(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}, 1-\epsilon,1+\epsilon\right)\right)
给出 c l i p clip 函数的定义:
c l i p ( x , a , b ) = { a , x < a x , a x b b , x > b clip(x,a,b)=\begin{cases} a, & x < a \\ x, & a \leq x \leq b \\ b, & x > b \end{cases}

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/89058454