强化学习之PPO

article/2025/9/21 7:49:57

阅读本文前先了解TRPO算法有助于理解,我对此也写过博客:https://blog.csdn.net/tianjuewudi/article/details/120191097

参考李宏毅老师的视频:https://www.bilibili.com/video/BV1Wv411h7kN?p=80

PPO,全名Proximal Policy Optimization,近端策略优化算法。

PPO算法是一种新型的Policy Gradient算法,Policy Gradient算法对步长十分敏感,但是又难以选择合适的步长,在训练过程中新旧策略的的变化差异如果过大则不利于学习。PPO提出了新的目标函数可以再多个训练步骤实现小批量的更新,解决了Policy Gradient算法中步长难以确定的问题。其实TRPO也是为了解决这个思想但是直接求解TRPO这种带约束的问题是十分复杂的,他与PPO算法的效果差不多,但是PPO将KL散度作为惩罚项,更加容易求解。

PPO

PPO也分为Actor的部分和Critic的部分。

首先定义优势函数:
A t ^ = ∑ t ′ > t γ t ′ − t r t ′ − V ϕ ( s t ) \hat{A_t} = \sum_{t'>t} \gamma^{t'-t}r_{t'} - V_{\phi}(s_t) At^=t>tγttrtVϕ(st)
更新Actor的部分我们把奖励函数设置成:
J P P O ( θ ) = ∑ t = 1 T π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ t − λ K L [ π θ o l d ∣ π θ ] J_{PPO}(\theta) = \sum_{t=1}^T \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\hat{A}_t - \lambda KL[\pi_{\theta_{old}}|\pi_{\theta}] JPPO(θ)=t=1Tπθold(atst)πθ(atst)A^tλKL[πθoldπθ]

  • 这里的A其实应该用新策略采样出来计算的Advantage函数,但由于参数改变的不多,我们可以用旧策略的A来近似新策略的A。

  • 前面一项的设置是因为我们只能充旧策略中采样而不能从新策略中采样所以做了important Sampling。同时这样做可以把我们的策略从on-policy转变为off-policy,旧策略可以收集很多数据之后,就能用这些数据训练很多次的网络,然后再重新采样。

  • 一开始新旧策略一样因此 π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) = 1 \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}=1 πθold(atst)πθ(atst)=1,经过多次公式迭代后这个值就会越来越不一样。

  • 这样当我们新策略的值远大于旧概率时,更新会快一些,但由于后面一项KL散度的存在,不会让概率分布差距过大的新旧策略更新太快,限制了新策略的更新幅度。

而对于Critic部分,我们构建一个输出状态价值的网络,训练网络接近预定值:
L B L ( ϕ ) = − ∑ t = 1 T ( ∑ t ′ > t γ t ′ − t r t ′ − V ϕ ( s t ) ) 2 L_{BL}(\phi) = -\sum_{t=1}^{T}(\sum_{t'>t} \gamma^{t'-t}r_{t'}-V_{\phi}(s_t))^2 LBL(ϕ)=t=1T(t>tγttrtVϕ(st))2
通过梯度递减来训练这个Loss为0.

在这里插入图片描述

PPO with Adaptive KL Penalty

我们还发现KL散度还要乘以一个变量,该版本PPO的核心想法就是利用自适应的beta值(adaptive beta):

在这里插入图片描述

当KL散度大于我们的设定值时,我们需要加大处罚力度,而小于一个设定值时,减小处罚力度,这样使得新旧策略的差距既不会偏大,也不会过小。

PPO with Clipped Objective

这是基于上面PPO的改进,相比于用KL散度来限制策略的更新幅度,我们不如直接限制新旧策略的比例来实现防止其差距过大。这样还减少了KL散度的运算,提升了算法性能。
L C L I P ( θ ) = E t ^ [ m i n ( r t ( θ ) A t ^ , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ^ ) ] L^{CLIP}(\theta) = \hat{E_t}[min(r_t(\theta)\hat{A_t},clip(r_t(\theta),1-\epsilon,1+\epsilon)\hat{A_t})] LCLIP(θ)=Et^[min(rt(θ)At^,clip(rt(θ),1ϵ,1+ϵ)At^)]

r t ( θ ) = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst)

这里我们把新旧策略的比例限制在1-ε和1+ε直接,说白了就是在超过这个范围时把新策略直接设定为边界值。

在这里插入图片描述

在A为正数的情况下,我们倾向于采取这种行为,因此新策略该行为的概率会慢慢增大,但是又不能大于我们的界限。在A为负数的情况下,说明这时我们的上一次更新的梯度方向相反了,我们倾向于摒弃这种行为,因此我们要加大更新力度去弥补上一次的失败,为了反转这个优势函数为负数的趋势,因此设置了一个下限而没有设置上限。


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

相关文章

【强化学习】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…

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.…