近端策略优化算法PPO

article/2025/9/21 7:47:42

本文介绍近端策略优化算法(Proximal Policy Optimization)也就是PPO。

文章目录

  • 前言
  • 一、on-policy和off-policy
    • 1.1 on-policy和off-policy的概念
    • 1.2 Importance Sampling的概念
  • 二、TRPO、PPO算法
    • 2.1 Trust Region Algorithms
    • 2.2 Stochastic Gradient Ascent
    • 2.3 TRPO算法
    • 2.4 PPO(Proximal Policy Optimization)算法
  • 总结


前言

在介绍PPO算法之前,首先需要介绍一下off-policy、on-policy概念。


一、on-policy和off-policy

1.1 on-policy和off-policy的概念

on-policy的概念就是和环境(enviorment)互动的智能体(agent)与要学习的智能体是同一个;off-policy的概念就是和环境(enviorment)互动的智能体(agent)与要学习的智能体不是同一个;
通俗来说on-policy就是我自己下棋去学习怎么提高自己的棋技,off-policy就是看别人下棋去学习怎么提高自己的棋技。
on-policy有一定的局限性,如果使用策略π(theta)去采集数据进行训练的话,当使用采集的数据更新参数theta,theta改变的时候就要重新去采集数据了,这样效率会比较低;off-policy的想法是用策略π(theta’)去采集数据,策略π(theta’)是固定的,采集出来的数据可以多次使用;

1.2 Importance Sampling的概念

Importance Sampling的概念就是说我们想要求服从概率分布为p(x)的函数f(x)的期望,我们想要从p(x)中采样一些点出来,用他们的平均值来近似f(x)的期望;但是现在我们并不知道概率分布p(x),那我们就无法从p(x)中采样一些点出来;但是我们知道一个概率分布q(x),我们可以从这个概率分布中采样一些点出来,那我们怎么从知道的q(x)的采样点来求出函数f(x)的期望呢?
在这里插入图片描述
可以看到在求期望的积分上除以q(x),再乘以q(x),此时我们就可以看到在q(x)采样的值前面乘以一个权重,再去求这些采样点的平均值就可以得到f(x)的期望了;此时,还有一个新的问题,那就是从q(x)采样一些点之后,求得的f(x)*p(x)/(q(x))的期望与原先相同,但是方差和原先f(x)的相等吗?差别大吗?
在这里插入图片描述
可以看到方差明显是不同的,第一项差了一个权重p(x)/q(x),这也就告诉我们不是随便找一个分布q(x)采样一些点就可以去求f(x)的期望的,分布q(x)不能和p(x)差太多,否则方差会差别很大,估计也就十分不准确了。

在这里插入图片描述
上图展示了on-policy如何转换为off-policy的过程;接下来看一看怎么更新off-policy的梯度;
在这里插入图片描述
从上面我们可以看到梯度更新的时候把p(theta)/p(theta’)给省略了,这里要解释一下为什么,其实最终的理由是我们不知道概率分布p(theta),所以就认为p(theta)/p(theta’)不重要吧,把这一项给省略掉了。

二、TRPO、PPO算法

2.1 Trust Region Algorithms

信赖域算法(Trust Region Algorithms)策略优化
假设有一个问题:给一个损失函数J,让你通过最大化J来得到最佳的参数θ;
在这里插入图片描述
信赖域(Trust Region Algorithms)的概念就是一个θold的领域,半径为r;在该邻域内我们用L去近似J,L可以是J的一阶、二阶或者更高阶的泰勒展开式;信赖域算法反复执行两个步骤:
1.给定了参数θold,构建L函数在θold的邻域内近似J函数; 2.在θold的邻域内最大化L得到新的参数θnew;
在这里插入图片描述
下图是近似原理的图解:可以看到紫色的线和绿色的线只是在一个区间内比较相近,这个区间就是邻域,然后我们通过梯度上升的方法去最大化L,得到新的参数θnew;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 Stochastic Gradient Ascent

在这里插入图片描述
随机梯度上升方法就是求解上述类似的给一个损失函数J,让你通过最大化J来得到最佳的参数θ的问题时;
首先J是对状态S求的期望,因此对状态S随机抽样得到观测值s;
第二步是对价值函数关于θ求导得到随机梯度(随机梯度是对梯度的蒙特卡洛近似);
第三步是梯度上升得到新的参数θnew;

2.3 TRPO算法

1)TRPO是一种基于策略梯度的强化学习方法,因此首先来说一说策略梯度的一些概念和公式;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先来说一说TRPO算法相对于基于策略梯度的强化学习算法的优点:一是比比策略梯度算法更鲁棒,二是比策略梯度算法采样效率更高;
2)首先来看TRPO算法的第一步,构造L近似J,状态S是从环境中的状态转移函数,动作A是从策略函数中采样得到的;

在这里插入图片描述
我们采样出一条轨迹,用采样得到的轨迹里的值来做蒙特卡洛近似,近似关于状态S和动作A的期望也就是函数J;

在这里插入图片描述
接下来近似Qπ(si,ai),我们用轨迹数据的折扣回报来近似Qπ(si,ai);

在这里插入图片描述
在这里插入图片描述
3)进行TRPO算法的第二步Maximization;在最大化的过程中可以用范数作为约束条件,也可以用关于参数θ的策略和参数θold的策略的KL散度来作为约束条件;

在这里插入图片描述

4)最后是TRPO算法的总结:

在这里插入图片描述

2.4 PPO(Proximal Policy Optimization)算法

首先来看看TRPO与PPO的区别之处:TRPO算法把两个策略网络的KL散度小于一个值作为了约束条件,而PPO算法把两个策略网络的KL散度加入了损失函数J中;

在这里插入图片描述
明白了TRPO算法,PPO算法就看起来简单了,因为PPO是对TRPO的改进;下面是PPO算法的步骤

在这里插入图片描述

PPO算法还有另一种改进形式:剪枝PPO算法;
在这里插入图片描述

最后解释一下TRPO、PPO算法为什么是on-policy的;
在这里插入图片描述

总结

本文对TRPO、PPO算法进行了简单讲解,欢迎大家一起讨论学习,如有不当请指出纠正。


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

相关文章

【强化学习】PPO算法求解倒立摆问题 + Pytorch代码实战

文章目录 一、倒立摆问题介绍二、PPO算法简介三、详细资料四、Python代码实战4.1 运行前配置4.2 主要代码4.3 运行结果展示4.4 关于可视化的设置 一、倒立摆问题介绍 Agent 必须在两个动作之间做出决定 - 向左或向右移动推车 - 以使连接到它的杆保持直立。 二、PPO算法简介 …

强化学习之PPO

阅读本文前先了解TRPO算法有助于理解,我对此也写过博客:https://blog.csdn.net/tianjuewudi/article/details/120191097 参考李宏毅老师的视频:https://www.bilibili.com/video/BV1Wv411h7kN?p80 PPO,全名Proximal Policy Opti…

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

目录 一、为什么要从On- Policy到Off-Policy?二、如何从On- Policy到Off-Policy?三、如何使 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ​(at​∣st​)和 p θ ′ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ′​(at​∣st​)不相差太多?3.1 PP…

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

回顾 传统的策略梯度算法以下式作为策略网络的损失: 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

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

强化学习PPO代码讲解

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

PPO算法(附pytorch代码)

这里写目录标题 一、PPO算法(1)简介(2)On-policy?(3)GAE (Generalized Advantage Estimation) 三、代码代码解析: 一、PPO算法 (1)简介 PPO算法…

论文笔记之PPO

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

PPO实战学习总结

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

PPO算法

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

PPO2代码 pytorch框架

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

PPO实战

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

PyTorch实现PPO代码

原理:Proximal Policy Optimization近端策略优化(PPO) 视频:Proximal Policy Optimization (PPO) is Easy With PyTorch | Full PPO Tutorial 代码来自github: Youtube-Code-Repository EasyRL 网站: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 进行看别人文章: 如何直观理解PPO算法?[理论篇] - 知乎 (zhihu.com) 【强化学习8】PPO - 知乎 (zhihu.com) PPO(OpenAI) Proximal Policy Optimization(PPO)算法原理及实现! - 简书 (jianshu.com) 1-Critic的作用与效果.m…

PPO算法实战

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

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

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

【强化学习PPO算法】

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

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

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

autoit连接mysql数据库

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