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

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

回顾

传统的策略梯度算法以下式作为策略网络的损失:
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πθ(atst)A^t]
具体在代码实现中就是计算 log ⁡ π θ ( a t ∣ s t ) A ^ t \log \pi_{\theta}\left(a_{t} \mid s_{t}\right) \hat{A}_{t} logπθ(atst)A^t(蒙特卡洛近似)后反向传播更新策略网络。
容易出现: log ⁡ π θ ( a t ∣ s t ) A ^ t \log \pi_{\theta}\left(a_{t} \mid s_{t}\right) \hat{A}_{t} logπθ(atst)A^t是一个绝对值特别大的数,这将导致 π θ ( a t ∣ s t ) \pi _\theta ( a _ { t } | s _ { t } ) πθ(atst) π θ n e w ( a t ∣ s t ) \pi _{\theta_{new}} ( a _ { t } | s _ { t } ) πθnew(atst)差别较大,这不利于收敛:
在这里插入图片描述

PPO使用clip解决这个问题

首先PPO在clip前的策略网络损失值如下:
L C P I ( θ ) = E ^ t [ π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ t ] = E ^ t [ r t ( θ ) A ^ t ] L^{C P I}(\theta)=\hat{\mathbb{E}}_{t}\left[\frac{\pi_{\theta}\left(a_{t} \mid s_{t}\right)}{\pi_{\theta_{\mathrm{old}}}\left(a_{t} \mid s_{t}\right)} \hat{A}_{t}\right]=\hat{\mathbb{E}}_{t}\left[r_{t}(\theta) \hat{A}_{t}\right] LCPI(θ)=E^t[πθold(atst)πθ(atst)A^t]=E^t[rt(θ)A^t]
这个式子其实和传统策略梯度算法的 log ⁡ π θ ( a t ∣ s t ) A ^ t \log \pi_{\theta}\left(a_{t} \mid s_{t}\right) \hat{A}_{t} logπθ(atst)A^t大同小异,紧接着对上式做如下操作:
L C L I P ( θ ) = E ^ t [ min ⁡ ( r t ( θ ) A ^ t , clip ⁡ ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] L^{C L I P}(\theta)=\hat{\mathbb{E}}_{t}\left[\min \left(r_{t}(\theta) \hat{A}_{t}, \operatorname{clip}\left(r_{t}(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_{t}\right)\right] LCLIP(θ)=E^t[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)]
我们分析 L C L I P ( θ ) L^{C L I P}(\theta) LCLIP(θ) r t ( θ ) r_t(\theta) rt(θ)的关系,可以绘制出如下两张图:
在这里插入图片描述
首先我们需要明确优势函数(advantage function)的定义及含义:
A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) A ^ { \pi } ( s _ { t} ,a_t ) = Q ^ { \pi } ( s _ { t },a_t ) - V ^ { \pi } ( s _ { t } ) Aπ(st,at)=Qπ(st,at)Vπ(st)
又因为 V π ( s t ) V ^ { \pi } ( s _ { t } ) Vπ(st)是状态 s t s _ { t } st下对 Q π ( s t , a t ) Q ^ { \pi } ( s _ { t },a_t ) Qπ(st,at)的加权平均,因此 V π ( s t ) V ^ { \pi } ( s _ { t } ) Vπ(st)反映的是在当前策略下做出动作的平均累计折扣回报的期望,可以理解为平均水平,因此 A π ( s t , a t ) A ^ { \pi } ( s _ { t} ,a_t ) Aπ(st,at)反映的是做动作 a t a_t at带来的优势,因此 A π ( s t , a t ) > 0 A ^ { \pi } ( s _ { t} ,a_t )>0 Aπ(st,at)>0的情况下策略梯度算法将向着提高 π ( a t ∣ s t ) \pi(a_t|s_t) π(atst)的方向前进,当 A π ( s t , a t ) < 0 A ^ { \pi } ( s _ { t} ,a_t )<0 Aπ(st,at)<0时策略梯度算法将向着减小 π ( a t ∣ s t ) \pi(a_t|s_t) π(atst)的方向前进(这里也可以这么理解:最大化loss,当A>0,自然是要增大r,就是增大 π \pi π,当A<0,要最大化loss就要最小化r,因此减小 π \pi π)。

分析第一张图:只要当前策略在动作 a t a_t at下的 π \pi π相对于上次更新前 π o l d \pi_{old} πold之比过大,即超过 1 + ϵ 1+\epsilon 1+ϵ,根据图中函数关系可知loss关于r的梯度为0,这次反向传播不会对权重产生影响,如果小于 1 + ϵ 1+\epsilon 1+ϵ正常更新。
第二张图:A<0,说明这个动作不够好,r是往小的方向更新,但是如果之前更新的比例r已经小于了 1 − ϵ 1-\epsilon 1ϵ,说明更新幅度之前已经比较大了,不建议再往这个方向更新,根据图中函数关系此时loss关于r的梯度为0,不会对权重产生影响。

综上所述: PPO在该动作是好动作的情况下限制它往好的方向(概率增大)过度更新,在该动作是差动作的情况下限制它往差的方向(概率减小)过度更新,从而达到限制更新幅度的想法。


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

相关文章

强化学习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个以上的测试用例的…

selenium 用autoIT上传下载文件

一、下载安装AutoIT 下载并安装AutoIT&#xff0c;下载链接&#xff1a;https://www.autoitscript.com/site/autoit/AutoIT安装成功后&#xff0c;可以在开始菜单下看到AutoIT的所有工具&#xff0c;如下图所示&#xff1a; 其中分为几类&#xff0c;AutoIT Window Info用来识…