PPO算法基本原理及流程图(KL penalty和Clip两种方法)

news/2024/5/18 23:44:18 标签: 强化学习, pytorch

PPO算法基本原理

PPO(Proximal Policy Optimization)近端策略优化算法,是一种基于策略(policy-based)的强化学习算法,是一种off-policy算法。

详细的数学推导过程、为什么是off-policy算法、advantage函数设计、重要性采样Importance Sampling这些概念的详细介绍和注释请参考学习:李宏毅老师的强化学习系列课程,我也将学习笔记分享到另一篇博客中:PPO算法基本原理(李宏毅课程学习笔记)https://blog.csdn.net/ningmengzhihe/article/details/131457536,欢迎感兴趣的小伙伴共同交流呀!!!

KL penalty 和 Clip

PPO算法的核心在于更新策略梯度,主流方法有两种,分别是KL散度做penalty,另一种是Clip剪裁,它们的主要作用都是限制策略梯度更新的幅度,从而推导出不同的神经网络参数更新方式

采用KL penalty算法,那么神经网络参数按照下面的方式更新
在这里插入图片描述
采用Clip算法,那么神经网络参数按照下面的方式更新
在这里插入图片描述
那么采用KL penalty算法的PPO算法伪代码如下
在这里插入图片描述
在这里插入图片描述

采用Clip算法的PPO算法伪代码如下
在这里插入图片描述

算法流程图

下面的算法流程图是基于莫烦python的PPO算法代码实现,同时参考了网络代码的算法流程,它没有用到memory,每次更新ppo用到的数据是连续的transition(包括当前状态、执行动作和累积折扣奖励值),它采用两个actor网络(一个actor_old一个actor )
在这里插入图片描述
PPO类包含下面四个部分,也就是四个方法
在这里插入图片描述

(1)初始化

在这里插入图片描述

(2)选择动作

在这里插入图片描述

(3)计算状态价值

在这里插入图片描述

(4)更新/训练网络的update方法

在这里插入图片描述
KL penalty和Clip算法体现在更新actor网络方式不同,也就是下面流程图中的黄色框

KL penalty算法

Clip算法

actor网络和critic网络更新实现不固定,上述算法是actor网络和critic网络分开更新,有的actor_loss和critic_loss加权后一块儿更新网络(代码请见simple_ppo.py),它们网络结构设计也不同

具体哪种方式效果更好并没有理论依据,往往需要尝试跑代码再结合具体问题选择喽

参考资料

(1)论文:Emergence of Locomotion Behaviours in Rich Environments
(2)论文:Proximal Policy Optimization Algorithms
(3)莫烦Python
(4)PPO2代码 pytorch框架 - 知乎 https://zhuanlan.zhihu.com/p/538486008,这是一份可以跑通的代码,很赞


http://www.niftyadmin.cn/n/1004592.html

相关文章

Java实现将数据转成xmind脑图(附有工具类)。

😜作 者:是江迪呀✒️本文关键词:Java、工具类、xmind、脑图、转换☀️每日 一言:昨日已成过去,未来充满可能,唯有珍惜现在。 [TOPC] 前言 当谈到Xmind时,这是一个非常流行的思维导图工具,可…

在 javascript 中循环遍历字典

JavaScript 对象非常灵活,可用于创建键值对。 这些对象的工作方式类似于 Python 字典。 字典和对象之所以被广泛使用,是因为每个存储的值都有其唯一的键(类似于 JavaScript 数组),并且可以通过那些键访问那些值。 这允…

Electron中启动node服务

记一次遇到的问题,我们知道Electron 中主进程是在node环境中,所以打算在node环境中再启动一个node服务。但是直接使用exec命令启动就会卡主。对应的代码如下 // 启动Node server const startServer async () > {try {console.log(开始启动node serv…

元宇宙装备展正式拉开帷幕,深眸科技CEO周礼出席产业论坛发表主题演讲

6月27日,一场令人期待已久的工业元宇宙盛会在昆山国际会展中心拉开帷幕,大会由昆山市人民政府主办,昆山市工业和信息化局、赛迪工业和信息化研究院集团(苏州)有限公司联合承办,并得到了十数家单位的支持&am…

Hive多行转多列,多列转多行

hive中的行列转换包含单行、多行、单列、多列,所以一共有四种组和转换结果。 一、多行转多列 原始数据表 目标结果表 分析:目标表中的a和b是用分组形成,所以groupby字段选用原始表中col1,c、d、e是原始表中的行值,…

Springboot链接Redis实现AOP防止重复提交

目录 安装redis Springboot链接Redis 1.创建springboot项目 如果spring boot启动报Error creating bean with name redisUtil/redisTemplate 2.新建application.yml配置 3.redis配置类-直接用 4.redis工具类-直接用 5.写Controller测试 6.启动、测试 整合AOP&#xff…

正则表达式回溯引发的生产惨案

文章目录 背景问题原因分析如何解决?chatgpt 3.5GP4的表现未完待续 背景 业务上的一个字段在解析时为了避免脏数据导致后续ETL的异常,决定从源头将该字段严格按照设计的规则去匹配。该字段的上传是设备端传上来的文件中的一个字段。 正向?反…

C#核心知识回顾——5.结构体和类区别、抽象类和接口、核心知识图解

1.结构体和类区别 结构体和类最大的区别是在存储空间上的,因为结构体是值,类是引用,因此他们的存储位置一个在栈上,一个在堆上。 结构体和类在使用上很类似,结构体甚至可以用面向对象的思想来形容一类对象。 结…