24/12/5 算法笔记<强化学习> doubleDQN,duelingDQN

我们前面了解了DQN网络的一些知识,然而DQN还有一些改进的方法,比如doubleDQN和duelingDQN,我们先来将一下doubleDQN和DQN.

先来对比一下

单一网络 vs. 双重网络

DQN:是一个深度神经网络来估计每个动作的Q值

DDQN:使用两个独立的深度神经网络:一个用于选择动作,一个用于评估动作的价值。这种设计有助于减少Q值的过估计问题。

过估计问题

DQN:由于网络同时负责选择动作和评估动作的价值,可能会导致Q值的过估计,即Q值被高估,这会影响学习稳定性和性能。

DDQN:通过分离选择和评估过程,降低了过低的可能性,因为目标网络不参与动作选择,从而提供一个更稳定的学习目标。

更新机制

DQN:在更新Q值时,直接使用当前网络的输出作为目标Q值。

DDQN:在更新Q值时,使用目标网络的输出作为Q值,而行为网络负责选择动作这种分离有助于提高学习过程的稳定性。

训练稳定性

DQN:由于过估计问题,训练过程中可能会遇到稳定性问题,尤其是在高维状态空间中。

DDQN:通过使用两个网络,通常能够提供更稳定的训练过程,因为它减少了Q值的波动。

应用场景

DQN:适用于状态空间不是特别高维或者问题相对简单的情况。

DDQN:更适合于复杂环境,特别是在需要更精确估计Q值的情况下,如机器人控制、游戏AI等领域。

通俗来讲DDQN就是使用了两个神经网络,一个选择动作,一个评估动作的价值。

这是DDQN的公式,它首先用行为网络选择下一个动作中最大Q值的那个动作,然后在用评估动作的网络评估出目标Q值,然后更新Q值表。

我们来看一下DDQN的代码:我们就看下区别的那部分

多了两个网络。

behavior_net = QNetwork(state_dim, action_dim)
target_net = QNetwork(state_dim, action_dim)

利用行为网络选择动作

def train(episodes):for episode in range(episodes):# 重置环境状态state = env.reset()done = Falsewhile not done:# 选择动作if random.random() < epsilon:action = env.action_space.sample()  # 随机探索else:action = behavior_net(torch.tensor(state, dtype=torch.float32)).max(0)[1].item()  # 利用行为网络选择动作# 执行动作,观察结果new_state, reward, done, _ = env.step(action)# 存储经验experience_replay_buffer.append((state, action, reward, new_state, done))# 移动到下一个状态

计算目标Q值和当前Q值。

 # 计算目标 Q 值with torch.no_grad():target_q_values = target_net(new_state).max(1)[0] * gamma * (1 - done) + reward# 计算当前 Q 值current_q_values = behavior_net(no_state).gather(1, action)

这些就是和DQN网络的区别,其实改动也不是很大。但是很好地解决了Q值过估计的问题。

然后看下duelingDQN

网络结构

DQN:使用一个深度神经网络来近似Q函数,网络的输出是每个可能动作的Q值

duelingDQN:在DQN的基础上引入了决斗机制,将状态值函数(V函数)和优势函数(A函数)分开估计。网络的输出包括状态值和每个动作的优势值。

目标Q值的计算

DQN:可能导致Q值的过估计

duelingDQN:目标Q值计算为 reward + gamma * (V(next_state) + A(next_state, action) - V(current_state)),这里 V(next_state) 是下一个状态的状态值,A(next_state, action) 是在下一个状态下采取某个动作的优势值。这种分解可以更稳定地估计Q值。

更新机制

DQN:Q值更新直接依赖于下一个状态的最大Q值,这可能导致训练过程中的不稳定性。

duelingDQN:Q值更新考虑了状态值和优势值的差,这有助于减少Q值的过估计,提高训练的稳定性。

优势函数

DQN:不显式地使用优势函数。

duelingDQN:明确地使用优势函数来表示在给定状态下某个动作相对于其他动作的相对优势。

应用场景

DQN:适用于状态和动作空间不是特别大的问题。

duelingDQN:由于其更稳定的Q值估计,Dueling DQN在处理高维状态空间和动作空间的问题时表现更好。

我们来看下duelingDQN区别的代码

创建值函数网络,和优势函数网络

self.V = nn.Linear(128, 1)  # Value stream
self.A = nn.Linear(128, n_actions)  # Advantage stream

前向传播时将优势函数减去其均值,以稳定训练。

def forward(self, x):# ...return V + (A - A.mean(dim=1, keepdim=True))  # Q = V + (A - mean(A))

总结:Dueling DQN算法的关键创新在于将状态值和优势分开估计,并通过减去优势函数的均值来计算Q值,这与传统DQN算法中直接输出每个动作的Q值是不同的。这种结构有助于提高学习效率和性能,尤其是在具有不同价值状态的情况下。

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

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

相关文章

时长输入框、用时输入框

时长输入框、用时输入框 行内组件&#xff0c;用于设定 【时 分 秒】 时长&#xff0c;转存结果为 【毫秒】 <template><div class"time-inputs"><div classtime-input-div v-ifinput><input classtime-input type"number" v-mod…

java反射的基础应用

一、堆内存中的情况 &#xff08;一&#xff09;对象创建与变化 源对象&#xff08;UserBo&#xff09;和目标对象&#xff08;User&#xff09; 在执行UserBo sourceObj new UserBo(username, password);和User targetObj new User();时&#xff0c;分别在堆内存中创建了U…

Unity3D常见的设计模式(五)

系列文章目录 unity知识点 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、桥接模式&#xff08;Bridge&#xff09;&#x1f449;二、适配器模式&#xff08;Adapter&#xff09;&#x1f449;三、 外观模式&#xff08;Facade&#xff09;&#x1f449;四、原型模…

车机端同步outlook日历

最近在开发一个车机上的日历助手&#xff0c;其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现&#xff0c;毕竟手机日历是手机厂商自己带的系统应用&#xff0c;根本不能和车机端实现数据同步的。 那么只能去其他公共的平台寻求一些机会&…

群控系统服务端开发模式-应用开发-邮件工厂结构封装

首先在系统根目录下extend文件夹下创建邮件工厂文件夹并更名叫Mail。 一、邮件发送父类 在Mail目录下创建邮件发送父类并更名为MailSenderInterface.php&#xff0c;代码如下 <?php /*** 邮件发送父类* User: 龙哥三年风水* Date: 2024/12/5* Time: 14:22*/ namespace Ma…

React性能优化

三个可以优化的地方 避免过度多次渲染 组件会在以下情况下重新渲染 注意&#xff1a;例如组件组合的形式&#xff0c;<Test><Counter></Counter></Test>,即使Test发生了重新渲染&#xff0c;Counter也不会重新渲染。另外使用React这样的库或框架时&a…

操作系统学习

问题&#xff1a; 因为想用傲梅来给系统盘扩容&#xff0c;导致无法进入操作系统&#xff0c;报错如下&#xff1a; 无法加载应用程序或操作系统&#xff0c;原因是所需文件丢失或包含错误. 文件:Windowslsystem32lwinload.efi错误代码: 0xc000007b 你需要使用恢复工具。如果…

Web应用程序文件包含-Server2233-解析

B-6 Web应用程序文件包含 任务环境说明:服务器场景名称:Server2233

计算机的错误计算(一百七十五)

摘要 就计算机的错误计算&#xff08;一百七十三&#xff09;与&#xff08;一百七十四&#xff09;中案例&#xff0c;讨论其另外一种形式&#xff1a; 的错误计算问题。 例1. 已知 计算 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB的输出中有4位错误数字&#xff0…

F-K变换法

f-k变换实质上是一种二维傅里叶变换。 在时间域上,对一道地震信号做傅里叶变换,可以得到在时间上不同频度(称为频率)的 波动组分的振幅和相位信息。同样地,在空间上,我们也可以对多道地震信号做类似傅里叶变 换的数值变换,得到在空间上不同频度(称为波数)的波动组分的振幅…

webstorm关闭了弹窗 Confirm Exit 恢复回来

webstorm关闭了 Confirm Exit WebStorm 关闭了“Confirm Exit”功能&#xff0c;意味着当用户尝试关闭IDE时&#xff0c;不会显示确认对话框&#xff0c;直接退出程序。 如果你想要恢复这个功能&#xff0c;可以按照以下步骤操作&#xff1a; 打开WebStorm。 进入设置界面&a…

集成学习之-stacking

一、引言 对于单模型来说&#xff0c;模型的抗干扰能力低&#xff0c;且难以拟合复杂的数据。 所以可以集成多个模型的优缺点&#xff0c;提高泛化能力。 集成学习一般有三种&#xff1a;boosting是利用多个弱学习器串行&#xff0c;逐个纠错&#xff0c;构造强学习器。 baggin…

Linux-使用 tslib 库

上一章我们学习了如何编写触摸屏应用程序&#xff0c;包括单点触摸和多点触摸&#xff0c;主要是对读取到的 struct input_event 类型数据进行剖析&#xff0c;得到各个触摸点的坐标。本章向大家介绍 tslib 库&#xff0c;这是 Linux 系统下&#xff0c;专门为触摸屏开发的应用…

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…

[Redis#15] 持久化 | AOF | rewrite | aof_buf | 混合持久化

目录 1 使用AOF 流程 问题一&#xff1a;父进程在fork之后继续写旧AOF文件的意义 问题二&#xff1a;执行BGREWRITEAOF时的特殊情况处理 2 命令写入 3 文件同步 4 重写机制 工作流程&#xff1a; 触发条件 混合持久化 持久化 sum AOF&#xff08;Append Only File&a…

重生之我在异世界学智力题(1)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言智力题题目&#xff1a;《奇怪的时钟…

【WRF后处理】WRF时区(UTC)需转化为北京时间(CST)!!!

目录 WRF运行时间标准注意事项-本地时区问题 输入数据&#xff1a;ERA5时间标准ERA5数据和WRF模型需要转换为北京时间&#xff01;&#xff01;&#xff01;北京时间&#xff08;CST&#xff09;与协调世界时&#xff08;UTC&#xff09;的关系转换方法 参考 WRF运行时间标准 …

css怎么使页面高度占满屏幕?

下面是一个小程序的页面&#xff0c;用uniapp写的&#xff0c;现在有一个问题&#xff0c;就是最外层的allmy的图层&#xff0c;屏幕是灰色&#xff0c;我怎么才能使这个图层占满屏幕&#xff0c;就是让灰色占满屏幕。 直接先给page设置一个height:100%;然后allmy的height:100%…

K8S离线部署Nacos集群【Oracle作外部数据源】

一、前言 由于公司的要求下要使Nacos集群以Oracle作为外部数据源&#xff0c;前期咱们已经阐述了如何在本地搭建&#xff08;Nacos集群搭建【Oracle作外部数据源】&#xff09;&#xff0c;本次将带领大家在k8s上部署Nacos集群并以Oracle作为外部数据源。 二、软件包 nacos-f…

Halcon 深度学习目标分类:原理与应用全解析

摘要&#xff1a; 本文深入探讨了 Halcon 在深度学习目标分类方面的原理及广泛的应用场景。详细阐述了从数据准备到模型训练与分类决策的目标分类工作流程&#xff0c;剖析了其背后的深度学习技术支撑。同时&#xff0c;结合多个行业领域&#xff0c;展示了 Halcon 目标分类技术…