当前位置: 首页 > news >正文

深度强化学习实践 Maxim Lapan 章节9:加速强化学习的方法

这一章通过各种各样的方式来加速强化学习的方法

为什么速度很重要

不理解的可以自己跑个模型感受一下出结果的速度,我就不解释了,就是真的很重要。。。。。但是我这一样只是简单的介绍一些方法,大家可以去看原文的具体的内容,我只是总结了最核心的内容

基线

RL的研究过程需要标明FPS的帧数,以及解决问题的时间,这个显而易见的结论
常见的写入到tensorboard的指标包括

  • reward 未经折扣的奖励,x轴是片段数
  • avg_reward,平均平滑处理
  • steps,一个片段的持续的步数(结束的快慢)
  • loss,损失值
  • avg_loss,平滑损失
  • epsilon,当前的epsilon值
  • avg_fps,平均交互速度,每秒观察数

计算图

我们其实只有使用net来推理q值的时候,才是我们真的需要进行梯度计算的时候,其他的时候的可以使用no_grad来关闭,例如我们目标网络的用于计算q值,或者我们的在推理的时候使用的net来得到的action都不用计算在我们的backforward的步骤里面
目标网络返回的张量需要显示的调用detach(),减少计算图的会大大大增加我们的运算的额速度

好的模型可能会带来50%的性能提升,简单来说,你需要找到真的需要加入梯度计算的计算,其他的都相关的计算需要通过no_grad封装

多个环境

我们学习ptan库的时候就知道,是可以一次传入多个env的,他们会同时和这些发生交互,也可以同时进行多个网络的action和Q值计算,这样我们可以成倍的进行效率,但是我一直有一个问题,如果在此之前我们的CPU或者GPU的利用率已经就满了,这个时候是否还有提升,其实我是不知道的

结果

我这边使用的情况,换成笔记本电脑了,虽然GPU更强,但是感觉学习的很不稳定,不知道为什么

Episode 400: reward=18.0, steps=1941, speed=310.005 frames/s, elapsed=0:49:23.529984
Episode 401: reward=17.0, steps=1908, speed=299.500 frames/s, elapsed=0:49:27.466517
Episode 402: reward=21.0, steps=1643, speed=298.408 frames/s, elapsed=0:49:31.346737
Episode 403: reward=19.0, steps=1865, speed=286.988 frames/s, elapsed=0:49:42.699667
Episode 404: reward=17.0, steps=1910, speed=301.807 frames/s, elapsed=0:49:47.053150
Episode 405: reward=18.0, steps=1798, speed=307.727 frames/s, elapsed=0:49:49.723819
Episode 406: reward=20.0, steps=1768, speed=300.904 frames/s, elapsed=0:50:00.252537
Episode 407: reward=20.0, steps=1749, speed=297.725 frames/s, elapsed=0:50:04.474587
Episode 408: reward=20.0, steps=1767, speed=290.332 frames/s, elapsed=0:50:07.491560
Episode 409: reward=19.0, steps=1843, speed=307.103 frames/s, elapsed=0:50:18.549662
Episode 410: reward=19.0, steps=1894, speed=309.355 frames/s, elapsed=0:50:23.107999
Episode 411: reward=20.0, steps=1767, speed=301.084 frames/s, elapsed=0:50:24.751620
Game solved in 0:50:24.751620, after 411 episodes and 289372 iterations!

不同的进程中分别交互和训练

这里简单的来说就是使用了一个消费者-生产者队列,将原本的串行 交互-获取-采样-学习的拆开了两个部分,一个专门用于生成动作,一直按照net的输出进行exp的获取,另一个专门用于处理学习到的经验,两个进程分别做exp的生产者和消费者

注意原文中的ExperienceSourceFirstLast的模型中,用到了一个pop_rewards_steps的函数,这个函数会在遇到了eposide结束时候返回一个奖励和步骤的list,如果没有则返回[]

cuda的版本使用的不是python自带的mp库,而是torch的torch.multiprocessing as mp,核心理由是这里会让张量在不同的进程之间共享

结果

原文中的学习的效果是不如直接使用envs=3的情况的,我这边的测试的结果也是一样。
但是其实我在想这里可以不可以同时有多个模型,同时多个envs而且同时使用多进程模型来进行交互。

调整包装器

这个具体的操作和前面学习到的包装器的内容差不多,这里不详细介绍了

CuLE

CUDA版本的Atari的环境,性能是原本的环境的几百倍,但是很不稳定,原文的代码demo写的非常简单,我搭建的环境的使用起来非常的复杂,我没有测试,但是如果以后有机会还是要搭建这个环境,可以几百倍的提升效率,毕竟。

相关文章:

  • JavaScript数组-数组的概念
  • 用Python实现图像风格迁移的技术分析
  • Jenkins部署、使用与原理分析
  • 图像处理之CSC
  • Cursor编程助手10分钟做项目使用教程:从下载到快速上手个人经验分享
  • 构建高效智能对话前端:基于Ant Design X 的deepseek对话应用
  • compose multiplatform写一个简单的阅读器
  • JDK、Nginx、Kafka、Zookeeper安装部署
  • 机会成本(Opportunity Cost):看不见的“隐形成本”(中英双语)
  • Java每日精进·45天挑战·Day20
  • DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)
  • 快速点位排查问题的方法
  • 基于pytest+requests+allure+yaml实现接口自动化测试框架
  • git在工作流程中的使用
  • MoE架构中的专家选择门控机制:稀疏激活如何实现百倍效率突破?
  • 插槽slot
  • Node.js技术原理分析系列——如何在Node.js中新增一个内置模块
  • LabVIEW用CANopen的设备属性配置与心跳消息和PDO读取
  • DeepSeek两个开关“深度思考“与“联网搜索“有什么区别
  • 未加cont修饰的左值引用不能绑定到右值
  • 住房和城乡建设厅门户网站/靠谱的代写平台
  • 云信网站建设/世界互联网峰会
  • 西安疫情最新数据消息今天/杭州seo联盟
  • 海阔天空网站建设/如何制作网页广告
  • 网站建设公司哪家比较好/大数据精准客户
  • 网站开发技术试验总结/活动推广方式