【FreeRL】Rainbow_DQN的实现和测试

文章目录

  • 前言
    • 环境
    • 1 PER note
    • 2 C51 note
    • 3 Noisy note
    • 4 Rainbow note
    • 其他


前言

具体代码实现见:https://github.com/wild-firefox/FreeRL/blob/main/DQN_file/DQN_with_tricks.py
将其中所有的trick都用上即为Rainbow_DQN。

效果如下:(学习曲线)
在这里插入图片描述
具体实现细节,代码中有较为详细的阐述。


环境

使用离散环境MountainCar-v0为基准来调整参数,以此能收敛为目标了,后发现此参数可以适用大多数其他环境,但不是全部。
使用MountainCar-v0的理由:环境的目标是到达最高的山峰,但环境中还有个次高的山峰,个人认为可以很好拟合出梯度中的次优解。

1 PER note

在 MountainCar-v0 环境下测试了一下 无PER 和有PER
DQN_2 ,DQN_3 为seed10 seed100
DQN_PER_10 ,DQN_PER_100 为seed10 seed100
效果如图所示:结论:不仅时间耗时长,效果也不如无PER,网上也大都如此。(单加PER的情况)
在这里插入图片描述

2 C51 note

一开始参考的代码
dqn_zoo/blob/master/Categorical%20DQN/categorical_dqn.py 有点问题
在代码的L120处的projection_distribution函数 有两处要修改
1.127-129行 在对next_dist 进行*support后 在对next_dist应该变为q值,在后续的133行则混淆了两者,此处问题导致模型不能收敛!
应该改为如下:

next_dist = target_model.forward(next_observation).detach()#.mul(support)  1.modify
q = next_dist.mul(support) # 2.modify
# next_dist: [batch_size, action_dim, atoms_num]
next_action = q.sum(2).max(1)[1] # 3.modify
# next_action: [batch_size]
next_action = next_action.unsqueeze(1).unsqueeze(1).expand(batch_size, 1, atoms_num)
# next_action: [batch_size, 1, atoms_num]
next_dist = next_dist.gather(1, next_action).squeeze(1)
# next_dist: [batch_size, atoms_num]

2.143-144行没有考虑b = 1.时 l=u的情况,会导致模型收敛不稳定
应该改为如下: 149-150行

proj_dist.view(-1).index_add_(0, (offset + l).view(-1), (next_dist * (u.float() +(l=u)- b)).view(-1)) # modify
proj_dist.view(-1).index_add_(0, (offset + u).view(-1), (next_dist * (b - l.float())).view(-1))

效果如下:蓝色为原始参考代码 绿色改1 黑色改1,2
在这里插入图片描述

后面参考的这个代码是对的
https://github.com/XinJingHao/DRL-Pytorch/

3 Noisy note

原始论文 std_init = 0.5
但是对于有些环境不是很有效 比如 MountainCar-v0 好像设置0.1,0.2左右会比较好 在MountainCar-v0环境中 设置的为0.05,才能收敛。

4 Rainbow note

问题1 :出现了增加了一个算法,时间却反而减少的现象,这里c51算法叠加PER算法后,时间反而比单PER减少了,猜测:可能c51算法拟合的q分布天生和error分布契合,导致优势值的更新时间减少。
在这里插入图片描述

结论:
1.在有些环境下单纯累加trick 并不奏效 如MountainCar-v0,需要根据环境特点来选择。
2.或者说,有些算法的鲁棒性不是很好。

测试发现:
1.Double,Dueling,具有鲁棒性:加入后并不会造成算法不收敛。
2.N-step,Categorical,不具有鲁棒性:加入后容易造成算法不收敛。
3.Noisy,对超参数敏感或者说是环境敏感,调整到好的超参数会有很好的效果,反之亦然。
4.PER 单独加入会使训练速度变慢,但是效果并没有增加多少,同时有较多参数需要调整。
4.Categorical ,PER有良好的叠加性:猜测:原因是两者都适用于奖励稀疏型环境。而单独加入PER算法,

补充:rainbow在其他环境,如:LunarLander-v2 效果还是挺好的。(简单环境CartPole-v1下的环境也很好)
在这里插入图片描述

其他

其他环境并未做过多测试,本文并不能断定哪些算法一定是好的,一定是坏的。
且有些情况下,有的trick可能会出现只在学习曲线上的效果好,而在评估时,表现差劲。
比如之前有看过在buffer中随机抽样时,将 replace=False 改为replace=True的小技巧。
replace=True意为允许重复采样

np.random.choice(total_size, batch_size, replace=False) #np.random.choice默认是随机均匀采样

我测试了一下,改为True,确实绘制的学习曲线变好了,但是在其他随机种子的评估环境中,效果却明显不如,可能这种情况是出现过拟合了。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vue 案例使用

el-switch 按键的使用 <el-switchclass"switchStyle" v-model"boolValue" :active-value"1" :inactive-value"0" active-text"ON" inactive-text"OFF" active-color"#13ce66" inactive-color&qu…

明星御用剪辑师亲授:PR剪辑技巧大全

在这个视频内容大爆炸的时代&#xff0c;一个好的剪辑工具就如同一位得力的助手&#xff0c;能让你在视频制作的道路上事半功倍。今天&#xff0c;就让我来为大家揭秘几款PR剪辑工具&#xff0c;它们各具特色&#xff0c;能够帮助你轻松应对各种剪辑需求。让我们开始吧&#xf…

kali——tshark的使用

目录 前言 使用方法 tshark提取流量为文档 前言 tshark 是一个命令行的网络分析工具&#xff0c;它用于捕获和分析网络流量。它支持多种网络协议&#xff0c;包括 TCP、UDP、ICMP 等。Tshark 可以用于调试网络问题、进行安全审计、分析应用程序性能等。 在 Kali Linux 中&…

绿咖啡豆缺陷检测系统源码分享

绿咖啡豆缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

ubuntu虚拟机装载共享文件夹导致的诡异错误

最近使用vmware station 15 安装了 ubuntu22.04 的虚拟机。在装载共享文件夹不久后便会出现诡异的错误。目前在网络上好像没有人把这归结到装载共享文件夹的问题上&#xff0c;故以供参考。 第一次&#xff1a; 在装载之后大概第二次开机&#xff0c;出现报错界面。 提示蓝牙…

驱动器磁盘未格式化恢复实战

驱动器磁盘未格式化的深度剖析 在日常的数字生活中&#xff0c;驱动器作为数据存储的重要载体&#xff0c;承载着用户无数的珍贵资料。然而&#xff0c;当遇到“驱动器中的磁盘未被格式化”的提示时&#xff0c;这份平静往往会被瞬间打破。这一状况不仅让用户感到困惑和焦虑&a…

精选评测!分享5款AI写论文最好用的软件排名

写作是一项既费时又费力的任务&#xff0c;尤其是对于科研人员来说&#xff0c;撰写论文更是一项必不可少的挑战。幸运的是&#xff0c;现在有多款免费的AI写作工具可以大大简化这一过程。小编精心挑选了5款免费的AI写作工具&#xff0c;旨在帮助大家提高写作效率&#xff0c;让…

word文档的读入(8)

如何读取答题卡中的选择题答案&#xff0c;并把所有的信息导入到Excel表格中&#xff5e; 在初始化了字典中的字段并获取了标准答案和学生答案后&#xff0c;现在只需使用if语句将学生答案studentAnswerOne和标准答案value进行比较。选择题一道题2分&#xff0c;答案正确时&…

pgsql的威胁操作--危险行为

pgsql的威胁操作--危险行为 要在PostgreSQL中列出所有数据库并删除指定的数据库 进入容器Pgsql docker exec -it 04d438beab57 /bin/bash 登录pgsql 使用以下命令登录到PostgreSQL psql -U postgres -h localhost -p 5432 列出数据库详细信息 postgres# \l 这将显示所有…

C语言代码练习(第二十六天)

今日练习&#xff1a; 数据的交换输出输入 n 个数&#xff0c;找出其中最小的数&#xff0c;将它与最前面的数交换后输出这些数 输入一个英文句子&#xff0c;将每个单词的第一个字母改成大写字母 输入一个十进制数 N &#xff0c;将它转换成 R 进制数输出 数据的交换输出输入 …

34.贪心算法1

0.贪心算法 1.柠檬水找零&#xff08;easy&#xff09; . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {public boolean lemonadeChange(int[] bills) {int five 0, ten 0;for (int x : bills) {if (x 5) // 5 元&#xff1a;直接收下…

【Git】将本地项目上传到git | 在IDEA的提交记录中更改 提交的用户名

一:将本地项目上传到git 1:在​gitee​上创建以自己项目名称命名的空项目【注意项目名称与本地项目的文件夹名称一致】 2:进入想上传的项目的文件夹,然后右键点击 3:查看用户名及邮箱 $ git config user.name $ git config user.email4: 配置你的用户名及邮箱【如果有…

李宏毅2023机器学习HW15-Few-shot Classification

文章目录 LinkTask: Few-shot ClassificationBaselineSimple—transfer learningMedium — FO-MAMLStrong — MAML Link Kaggle Task: Few-shot Classification The Omniglot dataset background set: 30 alphabetsevaluation set: 20 alphabetsProblem setup: 5-way 1-sho…

【代码随想录训练营第42期 Day59打卡 - 图论Part9 - Bellman-Ford算法

目录 一、Bellman-Ford算法 定义 特性 伪代码实现 二、经典题目 题目&#xff1a;卡码网 94. 城市间货物运输 I 题目链接 题解&#xff1a; Bellman-Ford算法 三、小结 一、Bellman-Ford算法 定义 Bellman-Ford算法是一个迭代算法&#xff0c;它可以处理包含负权边的…

Zabbix的安装与基本使用(主机群组、应用集、监控项、触发器、动作、媒介)

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、环境准备 &#xff08;1&#xff09;实验基本设置&#xff1a; 主机名IP地址角色Mater192.168.1.10监控端node1192.168.1.11被监控端 # 网络自…

『功能项目』制作提示主角升级面板【56】

我们打开上一篇55事件中心处理怪物死亡的项目&#xff0c; 本章做的事情是制作提示主角升级的界面&#xff0c;当主角升级时就会被显示出来点击确认即可消失 首先在unity编辑场景制作 在确认按钮对象上添加事件 点击Button将Panel添加至事件框选 在事件函数中选择gameobject.S…

Linux操作系统入门(五)

————————————————————————————————————————— 至此&#xff0c;大部分Linux操作系统的文件操作指令已经总结完成&#xff0c;最后还需进行vim编辑器的使用 使用方法&#xff1a;在FinalShell终端中输入"vim [文件]",以下图…

微信支付开发-前端api实现

一、操作流程图 二、代码实现 <?php /*** 数字人答题业务流* User: 龙哥三年风水* Date: 2024/9/11* Time: 14:59*/ namespace app\controller\shuziren; use app\controller\Base; use app\model\param\QuestionParam as PQPModel; use app\model\answer\QuestionBank; u…

这个公司可以做点什么呢?

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

C++ Primer Plus(速记版)-容器和算法

第九章 顺序容器 容器是存储特定类型对象的集合&#xff0c;标准库提供了多种容器类型以支持不同的使用场景。其中&#xff0c;顺序容器&#xff08;如vector、list、deque&#xff09;根据元素添加到容器中的顺序来存储和访问元素&#xff0c;与元素值无关。 这些顺序容器各有…