DQN、Double DQN、Dueling DQN、Per DQN、NoisyDQN 学习笔记

文章目录

      • DQN (Deep Q-Network)
        • 说明
        • 伪代码
        • 应用范围
      • Double DQN
        • 说明
        • 伪代码
        • 应用范围
      • Dueling DQN
        • 实现原理
        • 应用范围
        • 伪代码
      • Per DQN (Prioritized Experience Replay DQN)
        • 应用范围
        • 伪代码
      • NoisyDQN
        • 伪代码
        • 应用范围

部分内容与图片摘自:JoyRL 、 EasyRL

DQN (Deep Q-Network)

说明

DQN通过深度学习技术处理高维状态空间,它的核心是使用深度神经网络来近似Q值函数。传统Q-learning依赖于一个查找表(Q表)来存储每个状态-动作对的Q值,但这在高维空间中变得不可行。DQN通过训练一个神经网络来学习这个映射关系。

在这里插入图片描述
除了用深度网络代替 Q表之外,DQN算法还引入了一些技巧,如经验回放和目标网络。

经验回放:通过存储代理的经验(状态,动作,奖励,新状态)在回放缓存中,并在训练时从中随机抽样,这样做可以打破数据间的时间相关性,提高学习的稳定性和效率。

目标网络:DQN使用了两个网络:一个用于估计当前的Q值(在线网络),另一个用于生成目标Q值(目标网络)。这种分离有助于稳定训练过程,因为它减少了目标值随学习过程快速变化的问题。

伪代码
initialize replay memory D
initialize action-value function Q with random weights
for episode = 1, M doinitialize state sfor t = 1, T doselect action a with ε-greedy policy based on Qexecute action a, observe reward r and new state s'store transition (s, a, r, s') in Dsample random minibatch from Dcalculate target for each minibatch sampleupdate Q using gradient descentend for
end for
应用范围
  • 适用于具有高维状态空间和离散动作空间的问题。
  • 常用于游戏和模拟环境。

Double DQN

说明

主要解决了DQN在估计Q值时的过高估计(overestimation)问题。在传统的DQN中,选择和评估动作的Q值使用相同的网络,这可能导致在某些状态下对某些动作的Q值被高估,从而影响学习的稳定性和最终策略的质量。

Double DQN 通过使用两个不同的网络 QA 和 QB 来分别进行动作的选择和价值的估计,进而减少了传统DQN可能导致的Q值过高估计问题。

具体来说,动作选择是基于 QA 网络进行的,而价值估计则是基于 QB网络。在更新 QA 的过程中,使用 QB 来估计下一状态的价值,但是每隔固定的时间步, QB 会被 QA 的权值更新,从而实现两个网络的同步。这种方法提高了Q值估计的准确性,从而可以在复杂的决策环境中提供更稳定和可靠的学习性能。

伪代码
# Same as DQN until the target calculation
for each minibatch sample (s, a, r, s'):if s' is terminal:y = relse:a' = argmax_a Q(s', a; θ)  # action selection by Q-networky = r + γ * Q(s', a'; θ')  # target calculation by target networkupdate Q using gradient descent
应用范围
  • 减少估计偏差,提高策略稳定性。

  • 适用于需要精确动作价值估计的场景。

Dueling DQN

实现原理

Dueling DQN修改的是网络结构,算法中在输出层之前分流( dueling )出了两个层,如图所示,一个是优势层,用于估计每个动作带来的优势,输出维度为动作数一个是价值层,用于估计每个状态的价值,输出维度为 1。

在这里插入图片描述

这种结构设计使得Dueling DQN在评估每个状态的价值时更加准确,尤其是在那些动作选择不会极大影响环境的情况下。换句话说,即使在状态的价值变化不大时,Dueling DQN也能有效地学习到动作间的差异,这对于在复杂策略空间中找到最优策略特别有用。

应用范围

Dueling DQN特别适合于那些状态值比动作选择本身更重要的场景,例如,在一些策略游戏或者决策问题中,环境可能对特定动作不敏感(比如不需要开火?),此时,能够精确评估状态价值的Dueling DQN将非常有用。此外,Dueling DQN也适用于需要从大量相似动作中做出选择的任务,因为它能够更好地区分各个动作的微小差异。

伪代码
# Network architecture change
for each minibatch sample (s, a, r, s'):V = V(s; θV)  # State value functionA = A(s, a; θA)  # Advantage functionQ = V + (A - mean(A))  # Q value calculationupdate Q using gradient descent

Per DQN (Prioritized Experience Replay DQN)

Per DQN增强了基本DQN的经验回放机制,通过优先级回放来指导学习过程。在传统的经验回放中,训练样本是随机抽取的,每个样本被重新使用的概率相同。然而,并非所有的经验都同等重要。Per DQN通过计算时间差分误差(Temporal Difference Error,TD error),为每个经验样本分配一个优先级,优先级高的样本更有可能被抽取来进行学习。

  • 时序差分误差:TD error是实际奖励与当前Q值函数预测奖励之间的差异。较大的TD error意味着对应的经验可能会给我们的学习带来更多信息。
  • 优先级的设定:在经验优先回放(Prioritized Experience Replay)中,每个经验的优先级是根据其时序差分误差(TD error)的大小来设定的。TD error是实际奖励与估计奖励之间的差异,它反映了当前策略预测的准确性。一个高TD error的经验表示当前策略有更大的学习潜力,因此被赋予更高的优先级,以便更频繁地从经验回放中被抽样学习。
应用范围

Per DQN适用于那些代理可以从特定经验中快速学习的场景。在复杂的环境中,一些关键的决策点可能只出现几次,传统的随机抽样可能会忽略这些经验。Per DQN确保这些有价值的经验能够被更频繁地回顾和学习,从而加速学习过程,有助于更快地收敛到一个好的策略。

伪代码
initialize priority replay memory D
for each minibatch sample (s, a, r, s'):calculate TD error: δ = |r + γ * max_a' Q(s', a') - Q(s, a)|update priority of (s, a, r, s') in D based on δupdate Q using gradient descent

缺陷:直接使用TD误差作为优先级存在一些问题。首先,考虑到算法效率问题,我们在每次更新时不会把经验回放中的所有样本都计算TD误差并更新对应的优先级,而是只更新当前取到的一定批量的样本。这样一来,每次计算的TD误差是对应之前的网络,而不是当前待更新的网络。

所以引入了额外的技巧:随机采样和重要性采样。

NoisyDQN

增加噪声层(炼丹的通用操作),提高模型泛化性,避免陷入局部最优解。

伪代码
initialize Q network with noisy layers
for each minibatch sample (s, a, r, s'):select action a using Q with noiseexecute action a, observe r, s'store transition, sample minibatchupdate Q using gradient descent
应用范围
  • 适用于探索性任务和非稳态环境。
  • 动态调整探索策略,适合于需要适应性探索的复杂场景。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka-消费者-KafkaConsumer分析-ConsumerCoordinator

在前面介绍了Kafka中Rebalance操作的相关方案和原理。 在KafkaConsumer中通过ConsumerCoordinator组件实现与服务端的GroupCoordinator的交互,ConsumerCoordinator继承了AbstractCoordinator抽象类。 下面我们先来介绍AbstractCoordinator的核心字段,如…

UML-活动图

提示:大家可以参考我的状态图博客 UML-活动图 一、活动图的基本概念1.开始状态和结束状态2.动作状态和活动状态(活动)3.分支与合并4.分叉与合并5.活动转换(1)转移(2)判定 6.泳道 二、活动图的例…

数据结构:顺序栈

栈是一种先进后出的数据结构,只允许在一端(栈顶)操作,代码中top表示栈顶。 stack.h /* * 文件名称:stack.h * 创 建 者:cxy * 创建日期:2024年01月17日 * 描 述: …

数据分片概述、环境准备、部署MyCAT服务、全局表、分片表、ER表

1 案例1:部署mycat服务 1.1 问题 把主机mysql60 配置为 MySQL59 的从服务器把主机mysql62 配置为 MySQL61 的从服务器把主机mycat63 配置为mycat服务器客户端192.168.88.50访问mycat服务 1.2 方案 准备6台虚拟机,具体配置如表-1 1.3 步骤 实现此案例…

Docker中创建并配置MySQL、nginx、redis等容器

Docker中安装并配置MySQL、nginx、redis等 文章目录 Docker中安装并配置MySQL、nginx、redis等一、创建nginx容器①:拉取镜像②:运行nginx镜像③:从nginx容器中映射nginx配置文件到本地④:重启nginx并重新配置nginx的挂载 二、创建…

React全局状态管理

redux是一个状态管理框架,它可以帮助我们清晰定义state和处理函数,提高可读性,并且redux中的状态是全局共享,规避组件间通过props传递状态等操作。 快速使用 在React应用的根节点,需要借助React的Context机制存放整个…

新定义51单片机(RD8G37)实现测距测速仪

本文描述用新定义51单片机(RD8G37)超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块: 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…

jeecgboot 前端bug or 后端 看图

无法显示文本 只能显示value 很恶心 如果用 varchar 就可以 不知道有没有别的方式 用int 解决 ,可能是我没有发现好的方法

Peter算法小课堂—并查集

我们先来看太戈编程467题 攀亲戚 题目描述: 最近你发现自己和古代一个皇帝长得很像:都有两个鼻子一个眼睛,你想知道这皇帝是不是你的远方亲戚,你是不是皇亲国戚。目前你能掌握的信息有m条,关于n个人:第i条…

手机崩溃日志的查找与分析

手机崩溃日志的查找与分析 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具,该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和崩溃日志。同时还提供了崩溃日志的分析查看模块,可以对苹果崩溃日志进行符号化、格式化和分析&#x…

yolov5训练自己的数据

目录 1. 环境搭建2. 数据准备3. 数据标注4. 数据整理4.1 数据集切分4.2 修改数据文件4.3 修改模型文件 5. 训练模型5.1 训练5.2 验证5.3 测试 6. 训练结果分析 1. 环境搭建 安装anaconda、python、 cuda、 cudnn、 pytoch、 torchvision、 torchaudio等等。这里不详述 2. 数据…

软件测试大作业||测试计划+测试用例+性能用例+自动化用例+测试报告

xxx学院 2023—2024 学年度第二学期期末考试 《软件测试》(A)试题(开卷) 题目:以某一 web 系统为测试对象,完成以下文档的编写: (满分 100 分) (1&am…

量化研究员!你应该如何写一手好代码

即使是Quant Researcher, 写一手高质量的代码也是非常重要的。再好的思路,如果不能正确地实现,都是没有意义的。 写一手高质量的代码的意义,对Quant developer来讲就更是自不待言了。这篇笔记就介绍一些python best practice。 始…

QT第二周周三

题目&#xff1a;使用图片绘制出仪表盘 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *paren…

申请开启|成为亚马逊云科技 Community Builder,共建云端社区!

在探索由技术打造的云端世界时&#xff0c;和同行者一起学习&#xff0c;与技术专家共同探讨是开发者成长的最佳助力&#xff01; 亚马逊云科技开发者社区 Community Builders 为技术爱好者和新兴思想领袖提供技术资源、学习和交流机会&#xff0c;帮助开发者探索、分享技术相关…

【车载HMI开发工具--EB GUIDE 与 Unity 合作提供一体化的沉浸式 HMI 设计开发工具链】【转载】

随着车载高性能计算平台的日益普及以及显示器尺寸和数量的不断增加&#xff0c;沉浸式车载人机交互界面&#xff08;HMI&#xff09;的需求也在持续增长。为了将实时 3D 技术带入车载 HMI 领域&#xff0c;Unity 与 Elektrobit (EB)展开了合作&#xff0c;EB 是推进 HMI 功能安…

CC工具箱使用指南:【添加字段(批量)】

一、简介 Arcgis中添加字段是常用的一个操作&#xff0c;软件中也自带有添加字段工具。 如果要给一个要素或表批量添加字段&#xff0c;可以用迭代器或批处理。 但如果理复杂一点&#xff0c;有多个GDB要素、表格&#xff0c;或者是SHP文件&#xff0c;需要给这个要素或表添…

Git将某个文件合并到指定分支

企业开发中&#xff0c;经常会单独拉分支去做自己的需求开发&#xff0c;但是某些时候一些公共的配置我们需要从主线pull&#xff0c;这时候整个分支merge显然不合适 1.切换至待合并文件的分支 git checkout <branch>2.将目标分支的单个文件合并到当前分支 git checkou…

.NET国产化改造探索(三)、银河麒麟安装.NET 8环境

随着时代的发展以及近年来信创工作和…废话就不多说了&#xff0c;这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来&#xff0c;看操作。 上一篇介绍了如何在银河麒麟操作系统上安装人大金仓数据库&#xff0c;这篇文章详细介绍下在银河麒麟操作系统上安装.NET8环境。…

最新 生成pdf文字和表格

生成pdf文字和表格 先看效果 介绍 java项目&#xff0c;使用apache的pdfbox工具&#xff0c;可分页&#xff0c;自定义列 依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.22<…