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

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

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θ(atn<

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
FusionCharts是一个强大的数据可视化库,可以帮助开发人员创建漂亮而交互式的图表和图形。下面是一个关于如何使用FusionCharts的详细说明,包括实例、图解和Demo。 1. 安装FusionCharts:首先,你需要从FusionCharts官方网站下载和安装FusionCharts库。你可以选择下载免费版本或购买商业许可证。 2. 引入FusionCharts库:将FusionCharts的JavaScript文件引入你的HTML文件中。你可以通过将以下代码添加到`<head>`标签中来实现: ```html <script src="fusioncharts.js"></script> ``` 3. 创建一个容器:在HTML文件中创建一个用于显示图表的容器。你可以使用一个`<div>`标签,并为其指定一个唯一的ID。例如: ```html <div id="chartContainer"></div> ``` 4. 准备数据:准备用于绘制图表的数据。你可以使用JavaScript对象或从服务器获取的JSON数据。 5. 创建图表对象:使用FusionCharts提供的API创建一个图表对象。你需要指定图表类型、数据和容器ID。例如,下面的代码创建了一个柱状图: ```javascript var chart = new FusionCharts({ type: 'column2d', renderAt: 'chartContainer', dataSource: { data: [ { label: 'January', value: '100' }, { label: 'February', value: '200' }, { label: 'March', value: '150' } ] } }); ``` 6. 渲染图表:调用图表对象的`render()`方法,将图表渲染到指定的容器中。例如: ```javascript chart.render(); ``` 7. 自定义图表:你可以使用FusionCharts提供的各种配置选项来自定义图表的外观和行为。例如,你可以更改图表的颜色、字体、标题等。你可以参考FusionCharts的文档以获取更多自定义选项。 8. 实例和图解:根据你的具体需求,可以参考FusionCharts的官方文档和示例来学习更多关于使用FusionCharts的实例和图解。 9. Demo:你可以在FusionCharts的官方网站上找到各种示例和演示,以帮助你更好地理解和使用FusionCharts。你可以尝试运行这些Demo,并从中获取灵感和指导。 希望这个详细说明对你有所帮助!如果你还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值