【强化学习】PPO:从On-policy到Off-policy(PPO/TRPO/PPO-Penalty/PPO-Clip)

article/2025/9/21 8:09:02

目录

一、为什么要从On- Policy到Off-Policy?

举例经典的policy gradient,当我们的agent和环境交互之后要进行policy model的更新,也就是采样之后需要更新策略参数。策略不同,那么对于相同状态产生的trajectory就会不同。因此,策略更新后就要重新采集采样,然后再更新参数。所以on-policy采样成本较高。

因此我们想要off-policy,用另外一个policy,另外一个actor θ ′ \theta' θ与环境交互,用 θ ′ \theta' θ收集的数据训练 θ \theta θ

On-Policy:要训练的agent和与环境交互的agent是同一个,此时的policy.
Off-Policy:要训练的agent和与环境交互的agent不是是同一个的policy.

二、如何从On- Policy到Off-Policy?

重要性采样(Importance Sampling):从另一个分布中采样从而逼近所求分布。

从q分布中采样,求p的期望可以通过如下方法:
∫ 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 ) ] \int f(x)p(x)dx=\int f(x)\frac{p(x)}{q(x)}q(x)dx=E_{x \sim q}[f(x)\underset {}{\frac{p(x)}{q(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)是重要性权重,相当于做了一个分布差异的修正。理论上 q ( x ) q(x) q(x)可以是任意分布,但在实际上p和q不能差太多。因为两个随机变量的期望相同不代表它们的方差也相同。
V a r x ∼ p [ f ( x ) ] = E x ∼ p [ f ( x ) 2 ] − ( E x ∼ ! [ 请添加图片描述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 09997 d 816 f 1 f 49398 c 55 a a 105 c 83 f 4 e e . p n g ) p [ f ( x ) ] ) 2 V a r x ∼ q [ f ( x ) p ( x ) q ( x ) ] = E x ∼ q [ f ( x ) 2 p ( x ) q ( x ) ] − ( E x ∼ q [ f ( x ) ] ) 2 Var_{x\sim p}[f(x)]=E_{x\sim p}[f(x)^2]-(E_{x\sim ![请添加图片描述](https://img-blog.csdnimg.cn/09997d816f1f49398c55aa105c83f4ee.png) p}[f(x)])^2 \\Var_{x\sim q}[f(x)\frac{p(x)}{q(x)}]=E_{x\sim q}[f(x)^2 \frac{p(x)}{q(x)}]-(E_{x\sim q}[f(x)])^2 Varxp[f(x)]=Exp[f(x)2](Ex![请添加图片描述](https://imgblog.csdnimg.cn/09997d816f1f49398c55aa105c83f4ee.png)p[f(x)])2Varxq[f(x)q(x)p(x)]=Exq[f(x)2q(x)p(x)](Exq[f(x)])2
如果 p ( x ) , q ( x ) p(x),q(x) p(x),q(x)差异过大,方差就会差很多。请添加图片描述
请添加图片描述
从第一个等式到第二个等式利用了重要性采样原理,第二等式到第三个等式利用了条件概率。第三个等式中 p θ ( s t ) p_\theta(s_t) pθ(st) p θ ′ ( s t ) p_{\theta '}(s_t) pθ(st)可以假设是差不多的,因为 p θ ( s t ) p_\theta(s_t) pθ(st)很难算,用 θ \theta θ去跟环境做互动,算 s t s_t st出现的概率,尤其是图片,同样的 s t s_t st不会出现第二次,无法估算这一项因此无视这个问题。
p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst)很好算, θ \theta θ是一个网络,把 s t s_t st代进去,就会告诉某个状态的 a t a_t at概率是多少。
利用右上角蓝色方框内的公式,就能够反推原函数
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'}}[\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)]

三、如何使 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)不相差太多?

3.1 PPO

我们已经通过重要性采样把on-policy转换成off-policy,但重要性采样有一个问题:若 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)相差太多,重要性采样的结果就会不怎么好。这就是PPO在做的事情。

在训练的时候增加一个约束,这个约束是限制 θ \theta θ θ ′ \theta' θ输出的动作KL散度。这里并不是指参数上的距离,而是衡量它们动作上的距离。

PPO的前身是TRPO信任区域策略优化,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^{\theta'}_{TRPO}=E_{(s_t,a_t)\sim \pi _{\theta'}}[\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)] \\ KL(\theta,\theta')<\delta JTRPOθ=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]KL(θ,θ)<δ
PPO的式子是:
J P P O θ ′ = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta'}_{PPO}=J^{\theta'}(\theta)-\beta KL(\theta,\theta') \\ J^{\theta'}(\theta)=E_{(s_t,a_t)\sim \pi _{\theta'}}[\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)] JPPOθ=Jθ(θ)βKL(θ,θ)Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]
所以两者的区别是,TRPO在求解时KL作为约束,PPO将约束放在式子里。在基于梯度的优化时,有约束很难处理,因此两者的效率差不多,但PPO更容易求解。
PPO算法有两个主要的变种:PPO-Penalty和PPO-Clip。

3.1.1 PPO-Penalty (PPO1)

J P P O θ ′ = J θ ′ ( θ ) − β K L ( θ , θ ′ ) i f K L ( θ , θ ′ ) > K L m a x , i n c r e a s e β i f K L ( θ , θ ′ ) < K L m a x , d e c r e a s e β J^{\theta'}_{PPO}=J^{\theta'}(\theta)-\beta KL(\theta,\theta')\\ if KL(\theta,\theta')>KL_{max},increase \beta\\ if KL(\theta,\theta')<KL_{max},decrease \beta JPPOθ=Jθ(θ)βKL(θ,θ)ifKL(θ,θ)>KLmax,increaseβifKL(θ,θ)<KLmax,decreaseβ
β \beta β是一个自适应调整的权重。当KL过大,增加惩罚;当KL小于能够接受的最大值,减小惩罚项。

3.1.2 PPO-Clip (PPO2)

PPO2没有较复杂的KL散度。PPO2要最大化的目标函数如下所示:
J P P O 2 θ k ( θ ) = ∑ ( a t , s 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^{\theta^k}_{PPO2}(\theta)=\sum_{(a_t,s_t)}min(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)}A^{\theta^k}(s_t,a_t),clip(\frac{p_\theta(a_t|s_t)}{p_{\theta^k}(a_t|s_t)},1-\epsilon,1+\epsilon)) JPPO2θk(θ)=(at,st)min(pθk(atst)pθ(atst)Aθk(st,at),clip(pθk(atst)pθ(atst),1ϵ,1+ϵ))

  • clip这里是,如果第一项小于第二项,就输出第二项;如果大于第三项,就输出第三项。
  • ϵ \epsilon ϵ是一个超参数,需要tune,可以取0.1/0.2。

接下来看一下clip函数算出来究竟是神马形状。
在这里插入图片描述
那么,PPO2是如何实现减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)的差异的呢?
在这里插入图片描述
A>0时,取蓝线和绿线中最小的,就是红色线。A>0说明 ( s t , a t ) (s_t,a_t) (st,at)是相对较好的,因此我们希望尽可能提升 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst),但为了减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)的差异,训练到 p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)} pθ(atst)pθ(atst)大到 1 + ϵ 1+\epsilon 1+ϵ就停止了。
在这里插入图片描述
A<0时,为了min,我们需要取蓝线和绿线中最大的,即红色线。A<0说明 ( s t , a t ) (s_t,a_t) (st,at)是相对较差的,因此我们希望尽可能减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst),但为了减小 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst) p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t|s_t) pθ(atst)的差异,训练到 p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)} pθ(atst)pθ(atst)小到 1 − ϵ 1-\epsilon 1ϵ就停止了。

争议:PPO是on-policy还是off-policy?

这个问题在内外网都是一个极具争议的。我个人认为它是on-policy,但严格上来说是off-policy的。因为ppo其实在探索利用阶段的策略只是说是相近不能说相同,从这个意义上来说是off-policy。但ppo利用了constraints来尽可能减小两个policy之间的差距,从思想上来讲其实是on-policy。


http://chatgpt.dhexx.cn/article/iM74Kmrr.shtml

相关文章

如何理解PPO算法的核心操作clip

回顾 传统的策略梯度算法以下式作为策略网络的损失&#xff1a; g ^ E ^ t [ ∇ θ log ⁡ π θ ( a t ∣ s t ) A ^ t ] \hat{g}\hat{\mathbb{E}}_{t}\left[\nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right) \hat{A}_{t}\right] g^​E^t​[∇θ​logπθ​…

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

在线或离线学习 上一节我们了解了什么是策略梯度&#xff0c;本节开始讲PPO理论之前&#xff0c;我们先提出一个概念&#xff0c;什么在线学习&#xff0c;什么离线学习。 On-policy: Then agent learned and the agent interacting with Environment is the same Off-policy…

强化学习PPO代码讲解

阅读本文前对PPO的基本原理要有概念性的了解&#xff0c;本文基于我的上一篇文章&#xff1a;强化学习之PPO 当然&#xff0c;查看代码对于算法的理解直观重要&#xff0c;这使得你的知识不止停留在概念的层面&#xff0c;而是深入到应用层面。 代码采用了简单易懂的强化学习…

PPO算法(附pytorch代码)

这里写目录标题 一、PPO算法&#xff08;1&#xff09;简介&#xff08;2&#xff09;On-policy&#xff1f;&#xff08;3&#xff09;GAE &#xff08;Generalized Advantage Estimation) 三、代码代码解析&#xff1a; 一、PPO算法 &#xff08;1&#xff09;简介 PPO算法…

论文笔记之PPO

15年OpenAI发表了TRPO算法&#xff0c;一直策略单调提升的算法&#xff1b;17年DeepMind基于TRPO发表了一篇Distributed-PPO&#xff0c;紧接着OpenAI发表了这篇PPO。可以说TRPO是PPO的前身&#xff0c;PPO在TRPO的基础上进行改进&#xff0c;使得算法可读性更高&#xff0c;实…

PPO实战学习总结

PPO used in go-bigger 前段时间一直在学习ppo算法&#xff0c;写了 一点总结&#xff0c;记录一下自己对ppo算法的一些理解与RL实战时候容易遇到的一些问题。代码地址如下&#xff0c;需要的可以自取&#xff1a; https://github.com/FLBa9762/PPO_used_in_Gobigger.git一般…

PPO算法

在线学习和离线学习 在线学习:和环境互动的Agent以及和要学习的Agent是同一个&#xff0c; 同一个Agent&#xff0c;一边和环境做互动&#xff0c;一边在学习。离线学习: 和环境互动及的Agent以和要学习的Agent不是同一个&#xff0c;学习的Agent通过看别人完来学习。 利用新的…

PPO2代码 pytorch框架

PPO2代码玩gym库的Pendulum环境 2022-8-02更新 我发现这篇文章浏览量惨淡啊。 咋滴&#xff0c;是不相信的我代码能用是吗&#xff1f; 所以&#xff0c;我给出reward的收敛曲线图&#xff1a; 开玩笑&#xff0c;出来混&#xff0c;我能卖你生瓜码子吗&#xff1f; ———…

PPO实战

哈哈初学&#xff0c;复现龙龙老师的实例&#xff01; state&#xff1a;是平衡小车上的杆子&#xff0c;观测状态由 4 个连续的参数组成&#xff1a;推车位置 [-2.4&#xff0c;2.4]&#xff0c;车速 [-∞&#xff0c;∞]&#xff0c;杆子角度 [&#xff5e;-41.8&#xff0c…

PyTorch实现PPO代码

原理&#xff1a;Proximal Policy Optimization近端策略优化&#xff08;PPO&#xff09; 视频&#xff1a;Proximal Policy Optimization (PPO) is Easy With PyTorch | Full PPO Tutorial 代码来自github&#xff1a; Youtube-Code-Repository EasyRL 网站&#xff1a;Neural…

优化PPO

优化PPO 介绍core implementation details1.Vectorized architecture 量化结构Orthogonal Initialization of Weights and Constant Initialization of biases 算法权重的初始化以及恒定偏差的初始化The Adam Optimizer’s Epsilon Parameter Adam优化器的ε参数Adam Learning …

PPO Algorithm

‘‘目录 PPO ALGORITHM 进行看别人文章&#xff1a; 如何直观理解PPO算法?[理论篇] - 知乎 (zhihu.com) 【强化学习8】PPO - 知乎 (zhihu.com) PPO(OpenAI) Proximal Policy Optimization(PPO)算法原理及实现&#xff01; - 简书 (jianshu.com) 1-Critic的作用与效果.m…

PPO算法实战

原理简介 PPO是一种on-policy算法&#xff0c;具有较好的性能&#xff0c;其前身是TRPO算法&#xff0c;也是policy gradient算法的一种&#xff0c;它是现在 OpenAI 默认的强化学习算法&#xff0c;具体原理可参考PPO算法讲解。PPO算法主要有两个变种&#xff0c;一个是结合K…

Proximal Policy Optimization(近端策略优化)(PPO)原理详解

本节开始笔者针对自己的研究领域进行RL方面的介绍和笔记总结&#xff0c;欢迎同行学者一起学习和讨论。本文笔者来介绍RL中比较出名的算法PPO算法&#xff0c;读者需要预先了解Reinforcement-Learning中几个基础定义才可以阅读&#xff0c;否则不容易理解其中的内容。不过笔者尽…

【强化学习PPO算法】

强化学习PPO算法 一、PPO算法二、伪代码三、相关的简单理论1.ratio2.裁断3.Advantage的计算4.loss的计算 四、算法实现五、效果六、感悟 最近再改一个代码&#xff0c;需要改成PPO方式的&#xff0c;由于之前没有接触过此类算法&#xff0c;因此进行了简单学习&#xff0c;论文…

【深度强化学习】(6) PPO 模型解析,附Pytorch完整代码

大家好&#xff0c;今天和各位分享一下深度强化学习中的近端策略优化算法&#xff08;proximal policy optimization&#xff0c;PPO&#xff09;&#xff0c;并借助 OpenAI 的 gym 环境完成一个小案例&#xff0c;完整代码可以从我的 GitHub 中获得&#xff1a; https://gith…

autoit连接mysql数据库

原链接点我 一,准备工作 1, 下载mysql.au3(这个点击就下载了) 把mysql.au3放入到autoit的include目录下 2, 下载mysql驱动(根据自己系统选,下载完之后,双击运行会自动安装,一路next就行) 二,使用 #include "mysql.au3" #include <Array.au3> ;弹窗 Func aler…

AutoIt-v3的安装,和robotframework-autoitlibrary的导入

AutoIt 最新是v3版本&#xff0c;这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI&#xff08;图形用户界面)中进行自动化操作。它利用模拟键盘按键&#xff0c;鼠标移动和窗口/控件的组合来实现自动化任务。而这是其它语言不可能做到或无可靠方法实现的。 Au…

selenium 上传下载调用windows窗口--AutoIT

AutoIT解决自动化上传下载文件调用Windows窗口 AutoIT下载安装使用AotuIt 操作windows上传窗口1. 打开AutoIt定位窗口组件2. 定位上传窗口属性 &#xff08;鼠标选中Finder Tool 拖拽至属性窗口&#xff09;3. 打开autoIt编辑器&#xff0c;编写代码4. 将脚本文件转成exe文件5.…

软件质量保证与测试 实验十一:AutoIt的使用

目录 实验概述实验内容1. 下载安装AutoIT。2. 测试win系统自带计算器程序&#xff0c; 246&#xff0c;是否正确&#xff1f; 写出Script。&#xff08;小提示&#xff1a;使用WinGetText获得输出&#xff09;3.测试win系统自带计算器程序&#xff0c; 写出3个以上的测试用例的…