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

news2024/11/28 23:11:39

文章目录

      • 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 do
    initialize state s
    for t = 1, T do
        select action a with ε-greedy policy based on Q
        execute action a, observe reward r and new state s'
        store transition (s, a, r, s') in D
        sample random minibatch from D
        calculate target for each minibatch sample
        update Q using gradient descent
    end 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 = r
    else:
        a' = argmax_a Q(s', a; θ)  # action selection by Q-network
        y = r + γ * Q(s', a'; θ')  # target calculation by target network
    update 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 function
    A = A(s, a; θA)  # Advantage function
    Q = V + (A - mean(A))  # Q value calculation
    update 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 noise
    execute action a, observe r, s'
    store transition, sample minibatch
    update Q using gradient descent
应用范围
  • 适用于探索性任务和非稳态环境。
  • 动态调整探索策略,适合于需要适应性探索的复杂场景。

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

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

相关文章

Queue详解(Java)

Queue详解 Java 中的队列(Queue)是一种数据结构,它遵循先进先出(FIFO)的原则。队列可以用于在一个集合中保存一组元素,并支持在队列的尾部添加元素,以及在队列的头部移除元素。 Java 标准库提…

CleanMyMac X .4.14.7如何清理 Mac 系统?

细心的用户发现苹果Mac电脑越用越慢,其实这种情况是正常的,mac电脑用久了会产生很多的缓存文件,如果不及时清理会影响运行速度。Mac系统在使用过程中都会产生大量系统垃圾,如不需要的系统语言安装包,视频网站缓存文件&…

Spring全家桶

官网 Spring | Home 一、市面上主流的Spring框架以及简介 Spring Framework:Spring Framework是最基础、最核心的Spring框架,提供了IoC(控制反转)和AOP(面向切面编程)等功能。它是其他Spring项目的基础&am…

统计学-R语言-5.2

文章目录 前言大数定理中心极限定理和抽样分布抽样分布样本均值的分布样本比例的分布练习 前言 本篇文章将继续上篇的进行介绍。 大数定理 大数定理大数定理”的另一种表达方式是“均值定理”,其含义是,随机变量X多个观察值的均值会随着观察值的增加越…

探索 Python:发现有趣的库——第 1 章:数据可视化之旅

在一个充满活力的科技世界中,数据分析专家“算法仙”和编程爱好者“代码侠”相遇了,决定一起踏上数据可视化的探险之旅。他们将运用 Matplotlib 和 Seaborn 这两个强大的 Python 库,将枯燥的数据转化为生动的图形。 算法仙:你好&…

【部署LLaMa到自己的Linux服务器】

部署LLaMa到自己的Linux服务器 1、Llama2 项目获取方法1:有git可以直接克隆到本地方法2:直接下载 2、LLama2 项目部署3、申请Llama2许可4、下载模型权重5、运行 1、Llama2 项目获取 方法1:有git可以直接克隆到本地 创建一个空文件夹然后鼠标…

vscode无法自动补全

前提:安装c/c插件 c/c插件功能非常强大,几乎能满足日常编码过程中常用的功能;因此也包含自动补全的功能,开启方法如下: 文件->首选项->设置: 扩展->c/c->Intellisense,找到Intell…

docker-compose和docker compose的区别

在docker实际使用中,经常会搭配Compose,用来定义和运行多个 Docker 容器。使用时会发现,有时候的指令是docker-compose,有时候是docker compose,下面给出解释。 docker官方文档:https://docs.docker.com/c…

go语言(四)----指针

1、指针的示意图 package mainimport "fmt"func swap(pa *int,pb *int) {var temp inttemp *pa*pa *pb*pb temp}func main() {var a int 10var b int 20swap(&a,&b)fmt.Println("a ",a,"b ",b)}

Lazada不懂英文能做吗?Lazada国内店铺好做吗?-站斧浏览器

Lazada不懂英文可以做吗? Lazada作为一个国际化的电商平台,为了方便用户来自不同国家和地区的购物需求,提供了多语言支持。对于不懂英文的用户来说,他们同样可以在Lazada上进行购物。 首先,Lazada平台上的界面和商品…

TRB 2024论文分享:融合Transformer和自监督学习的长时交通流预测模型

TRB(Transportation Research Board,美国交通研究委员会,简称TRB)会议是交通研究领域知名度最高学术会议之一,近年来的参会人数已经超过了2万名,是参与人数和国家最多的学术盛会。TRB会议几乎涵盖了交通领域…

【管理篇 / 升级】❀ 13. FortiOS 7.4固件升级新规则 ❀ FortiGate 防火墙

【简介】飞塔防火墙的固件升级一直是所有厂家中最好的。只要有注册官方帐号,有注册设备,并且只要有一台设备在服务期内,即可下载所有型号的所有版本的固件。即使其它设备服务期已过,也可以通过固件文件手动升级,避免防…

three.js 点按钮,相机飞行靠近观察设备

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right&quo…

unable to create new native thread 问题处理

目录 unable to create new native thread 问题处理一、背景二、该问题产生可能原因三、处理过程3.1 确认内存是否不足3.2 确认机器线程数达到限制 四、总结 unable to create new native thread 问题处理 一、背景 生产实时集群部分节点的部分任务失败触发自动重启&#xff…

Unity之铰链关节和弹簧组件

《今天闪电侠他回来了&#xff0c;这一次他要拿回属于他的一切》 目录 &#x1f4d5;一、铰链关节组件HingeJoint 1. 实例 2. 铰链关节的坐标属性 ​3.铰链关节的马达属性Motor &#x1f4d5;二、弹簧组件 &#x1f4d5;三、杂谈 一、铰链关节组件HingeJoint 1. 实例 说…

基于Mapbox的Mvt矢量瓦片集成实践

目录 前言 一、数据说明 1、基本数据 2、属性数据 二、Mapbox集成Mvt矢量瓦片 1、关于访问令牌 2、定义html 3、初始地图 4、加载矢量瓦片 5、效果展示 总结 前言 熟悉矢量瓦片的朋友一定知道&#xff0c;在Webgis当中&#xff0c;矢量瓦片的格式除了pbf的格式&#x…

SuperPoint和SuperGlue 的算法介绍及学习应用经验分享

这里写目录标题 I.SuperPoint和SuperGIue的背景介绍特征点提取和匹配特征点的构成基于神经网络的方法优化方向一&#xff1a;增强特征点检测和描述子生成优化方向二&#xff1a;增强匹配和外点去除策略 背景和效果神经网络真的优于传统方案吗&#xff1f;DEMO演示为什么研究 2.…

Servlet系列:两种创建方式(xml,注解)

一、使用web.xml的方式配置&#xff08;Servlet2.5之前使用&#xff09; 在早期版本的Java EE中&#xff0c;可以使用XML配置文件来定义Servlet。在web.xml文件中&#xff0c;可以定义Servlet的名称、类名、初始化参数等。然后&#xff0c;在Java代码中实现Servlet接口&#x…

LeetCode、2336. 无限集中的最小数字(中等,小顶堆)

文章目录 前言LeetCode、2336. 无限集中的最小数字题目链接及类型思路代码题解 前言 博主所有博客文件目录索引&#xff1a;博客目录索引(持续更新) LeetCode、2336. 无限集中的最小数字 题目链接及类型 题目链接&#xff1a;2336. 无限集中的最小数字 类型&#xff1a;数据…

解析HTTP响应的状态码和头部信息

HTTP响应是客户端与服务器之间通信的重要部分。它包含了服务器对客户端请求的回应&#xff0c;以及与该响应相关的各种信息。在HTTP响应中&#xff0c;有两个关键部分&#xff1a;状态码和头部信息。 状态码 状态码是HTTP响应的第一部分&#xff0c;它是一个三位数字的代码&a…