【FreeRL】PPO的复刻和7个trick实现

文章目录

  • 前言
  • 一、计算优势函数
  • 二、比较buffer的存储
  • 三、小批量更新网络的实现中
  • 四、细节GAE的实现
  • 五、对于PPO必须收敛的关键为V_target的定义
  • 六、参数敏感
  • 七、仿照《动手学强化学习中的代码》实现
  • 八、补充tricks的效果


前言

主要是对PPO论文里的PPO复刻,和实现时遇到的障碍记录。
代码实现在:https://github.com/wild-firefox/FreeRL/tree/main/PPO_file


原论文:https://arxiv.org/pdf/1707.06347
trick参考:影响PPO算法性能的10个关键技巧(附PPO算法简洁Pytorch实现)
(其中有3个trick原论文中有提及,所以直接集成在原代码里了。)

下述环境均为环境为 Pendulum-v1

一、计算优势函数

PPO论文中提到
计算优势函数 有两种方法1.generalized advantage estimation 2.finite-horizon estimators
第2种实现方法在(github上)许多代码上的实现方法不一,有buffer中存入return和value值的方法,也有在buffer里不存,而在在更新时计算的方法。
这里我们选择第1种,在buffer中不会存在上述争议。

论文中:
在这里插入图片描述

二、比较buffer的存储

通常ppo的buffer中存储的是obs, action, reward, next_obs, done, log_pi ;
但也有见到不存储log_pi的方法。

比较1.不存储log_pi,而是在更新时计算出log_pi_old, 2.存储log_pi,将此作为log_pi_old 发现2更好 采用2。

两者代码区别,是否在learn中加入以下算法。

        '''
        ## 计算log_pi_old 比较1
        mean , std = self.agent.actor(obs)
        dist = Normal(mean, std)
        log_pi_old = dist.log_prob(action).sum(dim = 1 ,keepdim = True) 
        action_log_pi = log_pi_old.detach() 
        '''

PPO_11 为方法2 PPO_13 为方法1 两者大体一致,但方法二更稳定点。
在这里插入图片描述

三、小批量更新网络的实现中

1.使用小批量更新较快, --> for i in range(K) 小批量随机 for j in range(horizon // minibatch): 更新小批量i (直至到整个horizon结束)
2.使用整块整块更新较慢。 但效果稍好 --> for i in range(K) for j in range(horizon // minibatch): 整块更新

论文采用的是方法1。
橙色方法1 粉紫色方法2 (实现在PPO_no_minibatch.py)
在这里插入图片描述

四、细节GAE的实现

GAE的done为一个时长为T的回合的结束
而TD_error的done以是否能获得下次奖励为结束。
红色为不区分GAE的done。

不区分时,下图两者都是done.。在这里插入图片描述
效果如下
在这里插入图片描述

五、对于PPO必须收敛的关键为V_target的定义

v_target = adv + v(t) #正确  
v_target = reward + gamma * (1.0 - done) * v(t+1) #错误  一点不收敛  

紫色为上面错误的写法。
在这里插入图片描述

六、参数敏感

对horizon 即临时buffer容量参数比较敏感
蓝色:horizon=2048 绿色 horizon=256 其余参数一样 minibatch 均为64
在这里插入图片描述

七、仿照《动手学强化学习中的代码》实现

PPO_d.py 利用https://hrl.boyuai.com/chapter/2/trpo%E7%AE%97%E6%B3%95 的compute_advantage的代码
和 不存储log_pi,而是在更新时计算出log_pi_old 的方法
效果如下:(PPO_d.py 为灰色,略逊于PPO.py)
在这里插入图片描述

八、补充tricks的效果

在\MountainCarContinuous-v0的环境下
将所有的trick都试了一遍,效果如下:发现ObsNorm 这个trick对于收敛至关重要。

    parser.add_argument("--trick", type=dict, default={'adv_norm':False,
                                                       'ObsNorm':False,'Batch_ObsNorm':False,  # or 两者择1
                                                       'reward_norm':False, 'reward_scaling':False, # or 
                                                       'lr_decay':False,'orthogonal_init':False,'adam_eps':False,'tanh':False})

在这里插入图片描述
其他,可以看出adv_norm的效果也还是比较明显的。
在这里插入图片描述
至于Batch_ObsNorm与ObsNorm的区别,在于ObsNorm是每一步更新,而Batch_ObsNorm是每次buffer满后更新一次,所以效果不如ObsNorm。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/894602.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓流式布局实现记录

效果图&#xff1a; 1、导入第三方控件 implementation com.google.android:flexbox:1.1.0 2、布局中使用 <com.google.android.flexbox.FlexboxLayoutandroid:id"id/baggageFl"android:layout_width"match_parent"android:layout_height"wrap_co…

spring底层原理

本文参考黑马程序员的spring底层讲解&#xff0c;想要更详细的可以去看视频。 另外文章会每日更新&#xff0c;大概持续1个月&#xff01;&#xff01;&#xff01;每天更新一讲 这部分比较抽象&#xff0c;要经常复习&#xff01;&#xff01;&#xff01; 一、BeanFactory与A…

Olap数据处理

一、OLAP 是什么 1. OLAP的定义 OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;是一种软件技术&#xff0c;它主要专注于复杂的分析操作&#xff0c;帮助分析人员、管理人员或执行人员从多角度对信息进行快速、一致、交互地存取&#xf…

电脑桌面自己变成了英文Desktop,怎么改回中文

目录 前言找到Desktop查看位置查找目标修改文件名为桌面重启电脑 或 重启 Windows 资源管理器CtrlShiftEsc 打开任务管理器找到 Windows 资源管理器重启 Windows 资源管理器 查看修改结果 前言 许多人在使用电脑的时候发现&#xff0c;我们经常使用的桌面&#xff0c;不知道因为…

Vue向上滚动加载数据时防止内容闪动

目前的需求&#xff1a;当前组件向上滚动加载数据&#xff0c;dom加载完后&#xff0c;页面的元素位置不能发生变化 遇到的问题&#xff1a;加载完数据后&#xff0c;又把滚轮滚到之前记录的位置时&#xff0c;内容发生闪动 现在的方案&#xff1a; 加载数据之前记录整体滚动条…

004-按照指定功能模块名称分组

按照指定功能模块名称分组 一、说明1.现在有一个需求&#xff1a;2.具体做法 二、代码案例三、效果展示 一、说明 1.现在有一个需求&#xff1a; 需要把一个功能模块的几个功能点放在同一个文档目录下&#xff0c;这几个功能点分布在不同的 Controller 2.具体做法 需要把他…

登录前端笔记(二):vuex管理用户数据;跨域;axios封装;环境;请求响应拦截;权限;用户资料Vuex共享

一、Vuex登录流程之用户模块&#xff1a; 简言之&#xff1a;点击登录调用actions且得到token&#xff0c;把得到的token提交给mutations从而修改state里的数据。 原视频 &#xff08;1&#xff09;Vuex用户模块流程 组件页面里点击登录后&#xff0c;调用stores里的actions&…

智慧油田智能安全管控方案-AI助力油气田安全管控升级

在科技日新月异的今天&#xff0c;万物纵横科技凭借其前沿的智慧油田智能安全管控方案&#xff0c;正引领着油气田行业向智能化、高效化转型。该方案深度融合了AI视频智能分析与AIoT&#xff08;物联网人工智能&#xff09;技术&#xff0c;为采油场、油气场的设备运维、环境监…

查缺补漏----Cache命中率与缺失率的判断

第一类问题对比&#xff1a; 块大小16B&#xff0c;int型数据占4B&#xff0c;所以一个Cache块可以放4个数组&#xff0c;所以访问1个数组&#xff0c;后面3个数组的地址可以在同一个Cache块找到。 一个数组要访问2次&#xff0c;即读这个数组&#xff0c;然后给这个数组赋值&a…

傅里叶变换(FT)与快速傅里叶变换(FFT)的区别

傅里叶变换&#xff08;Fourier Transform, FT&#xff09;和快速傅里叶变换&#xff08;Fast Fourier Transform, FFT&#xff09;都是用于信号频域分析的工具&#xff0c;但它们在计算方式和效率上存在显著的区别。下面小编将详细说明傅里叶变换和快速傅里叶变换的定义、原理…

MATLAB图像重心计算

图像重心&#xff08;或质心&#xff09;计算是计算机视觉和图像处理领域 应用领域广泛&#xff1a;包括医疗,生物&#xff0c;动画&#xff0c;机器人等。 该文章通过灰度转换->二值化->质心计算 以下是代码中涉及的一些数学概念和公式&#xff1a; 灰度转换&#xff1a…

离岗睡岗预警系统 值班室离岗识别系统Python 结合 OpenCV 库

在众多工作场景中&#xff0c;存在着一些特殊岗位&#xff0c;这些岗位对于人员的专注度和警觉性有着极高的要求。然而&#xff0c;离岗睡岗现象却时有发生&#xff0c;给工作的正常开展和安全保障带来了严重的威胁。本文将深入探讨特殊岗位离岗睡岗的危害&#xff0c;以及如何…

音乐播放器-0.专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…

【汇编语言】寄存器(内存访问)(六)—— 栈

文章目录 前言正文结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深入理解计算机底层工作原理&#xff0c;提升代码效率&#xff0c;尤…

java集合进阶篇-《List集合》

个人主页→VON 收录专栏→java从入门到起飞 目录 ​编辑 一、前言 二、List集合简要概述 三、List集合主要函数的应用 四、List集合的遍历 五、思考 一、前言 List集合与Collection集合的相同之处还是挺多的&#xff0c;不过有些小细节又不太一样&#xff0c;其中有一个…

嵌入式学习-IO进程-Day04

嵌入式学习-IO进程-Day04 进程的函数接口 fork和Vfork 回收进程资源 wait waitpid 退出进程 获取进程号&#xff08;getpid&#xff0c;getppid&#xff09; 守护进程 守护进程的特点 创建步骤 exec函数族 线程 概念 线程和进程的区别 线程资源 线程函数接口 创建线程&#xff…

ASO优化手机游戏的秘密功能

在本文中&#xff0c;我们将尝试弄清楚手机游戏的 ASO 优化是否有任何特定功能。移动游戏在移动应用世界中占有特殊的地位&#xff0c;因为它们是最赚钱的细分市场。然而&#xff0c;今天&#xff0c;我们将关注的不是货币化&#xff0c;而是基础知识—文本和视觉优化、它们在游…

AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件

大概这世上&#xff0c;都是职场牛马对“PPT”这三个字母的头痛反应最大吧&#xff01; 是的&#xff0c;就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下&#xff0c;将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…

2024全国大数据与计算智能挑战赛火热报名中!

一年一度的 全国大数据与计算智能挑战赛震撼来袭&#xff01; 报名速通&#xff1a; https://www.datafountain.cn/special/BDSSF2024 大数据与决策&#xff08;国家级&#xff09;实验室连续三年组织发起全国大数据与计算智能挑战赛&#xff0c;旨在深入挖掘大数据应用实践中亟…

基于模型预测控制(MPC)储能控制策略-多目标哈里斯鹰(MOHHO)算法的储能容量配置方法

目录 一、主要内容&#xff1a; 二、运行效果&#xff1a; 三、模型预测控制介绍&#xff1a; 四、多目标哈里斯鹰算法&#xff1a; 五、代码数据下载&#xff1a; 一、主要内容&#xff1a; 本研究旨在提出一种双层控制模型&#xff0c;结合模型预测控制&#xff08;MPC…