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.mzph.cn/news/631934.shtml

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

相关文章

RAM读写测试

真双口RAM读写测试 IP核设置如下 注意点是: 1、wea信号位宽由于选择了32bit地址,导致使能了按字节写入,因此wea每一位对应一个8bit的din,高有效; 2、rsta 信号指RAM复位置位信号,高有效,但是…

Altium Designer简介以及下载安装

阅读引言: Altium Designer的离线安装包在文章最后, 注意该软件只能用于个人的学习使用, 不能用于商业用途, 文章主题图片来自网络。 一、Altium Designer简介 Altium Designer是一款功能强大的电子设计自动化(EDA&…

【GAMES101】Lecture 07 着色(shading)

目录 着色 Blinn-Phong反射模型 漫反射 光衰减 着色 这个着色(shading)就是将不同的材质应用到不同的物体上,像一个物体,它可以是木头的、金属的、塑料的…… Blinn-Phong反射模型 我们来看一个简单的着色模型,…

导航相关知识3

接下来看下引导模块 从三个方面来写吧,绘制,回调,用户操作 绘制: 自定义绘制 各种图标,参考点的调整,主要注意点是防止未释放导致的泄露 PrepareLayerStyleInner这个类里包含了app和sdk交互的绘制接口&…

冻结Prompt微调LM: PET(b) LM-BFF

PET-TC(B) paper b: 2020.9 It’s not just size that matters: Small language models are also few-shot learners. Prompt: 多字完形填空式人工Prompt Task:Text Classification Model: Albert-xxlarge-v2 Take Away: 支持多字的完形填空Prompt&a…

基于DQN和TensorFlow的LunarLander实现(全代码)

使用深度Q网络(Deep Q-Network, DQN)来训练一个在openai-gym的LunarLander-v2环境中的强化学习agent,让小火箭成功着陆。 下面代码直接扔到jupyter notebook或CoLab上就能跑起来。 目录 安装和导入所需的库和环境Q网络搭建经验回放实现DQNAge…

【算法Hot100系列】字母异位词分组

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

环境变量配置文件

1.配置文件简介 source命令 source命令通常用于保留、更改当前shell中的环境变量。 格式: source 配置文件 . 配置文件 环境变量配置文件简介 环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSI…

(二十)Flask之上下文管理第一篇(粗糙缕一遍源码)

每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 🔥🔥本文已收录于Flask框架从入门到实战专栏:《Flask框架从入…

cmake 自定义宏

cmake 自定义宏 宏定义 add_definitions(-D宏名称 -D宏名称 ...)通过宏定义的方式,对程序中的代码进行控制

Linux 常用命令分享与示例

Linux 是一种强大的操作系统,广泛用于服务器、桌面和移动设备。它的命令行界面(CLI)提供了许多有用的命令,可以方便地进行系统管理和文件操作。 一、文件操作命令 1、 ls:列出目录中的文件和子目录 ls -l /home这将显…

Vue在组件上使用ref代码及总结

//可以通过 this.$refs将数据用子组件函数传递&#xff0c;在子组件函数接收数据&#xff0c;达到修改数据的目的 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" conten…

Ikuai中如何添加/更换虚拟机(图文)

Ikuai配置 分区/格式化硬盘(如果已经格式化&#xff0c;无需再次格式化&#xff0c;直接传送到上传镜像) 上传镜像 ⚠️&#xff1a;如果是压缩格式&#xff0c;需要解压缩后上传&#xff0c;如这里的IMG格式。 创建虚拟机 配置虚拟机&#xff08;等待虚拟机起来后执行&#…

Vulnhub-w1r3s-editable

一、信息收集 端口扫描&#xff0c;ftp允许匿名登录&#xff0c;但是没有得到什么有用的线索 PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.8 or later | ftp-syst: | STAT: | FTP server status: | Connected to ::ffff:192.168.1.6 | …

FeatInsight: 基于 OpenMLDB 的特征平台助力高效的特征管理和编排

OpenMLDB 社区新开源了特征平台产品 - FeatInsight&#xff08;https://github.com/4paradigm/FeatInsight&#xff09;&#xff0c;是一个先进的特征存储(Feature Store)服务&#xff0c;基于 OpenMLDB 数据库实现高效的特征管理和编排功能。FeatInsight 特征平台提供简便易用…

JeecgBoot集成东方通TongRDS

TongRDS介绍 TongRDS&#xff08;简称 RDS&#xff09;是分布式内存数据缓存中间件&#xff0c;用于高性能内存数据共享与应用支持。RDS为各类应用提供高效、稳定、安全的内存数据处理能力&#xff1b;同时它支持共享内存的搭建弹性伸缩管理&#xff1b;使业务应用无需考虑各种…

Active Directory监控工具

Active Directory 是 Microsoft 为 Windows 环境实现的 LDAP 目录服务&#xff0c;它允许管理员对用户访问资源和服务实施公司范围的策略。Active Directory 通常安装在 Windows 2003 或 2000 服务器中&#xff0c;它们统称为域控制器。如果 Active Directory 出现故障&#xf…

go的协程和管道运用案例

一.同时向管道读写数据 package mainimport "fmt"func main() {writeChan : make(chan int, 20) // 写入通道&#xff0c;缓冲大小为20exitChan : make(chan bool) // 退出通道go readData(writeChan, exitChan) // 启动readData协程go writeData(writeChan) …

跑通 yolov5-7.0 项目之训练自己的数据集

yolov5 一、yolov5 源码下载二、配置环境&#xff0c;跑通项目三、训练自己的数据集1、获取验证码数据2、标注图片&#xff0c;准备数据集3、开始训练自己的数据集1、train.py 训练数据集2、val.py 验证测试你的模型3、detect.py 正式用你的模型 四、遇到的报错、踩坑1、import…

电脑内存满了怎么清理内存?试试这6个方法~

内存越大&#xff0c;运行越快&#xff0c;程序之间的切换和响应也会更加流畅。但是随着时间的增加&#xff0c;还是堆积了越来越多的各种文件&#xff0c;导致内存不够用&#xff0c;下面就像大家介绍三种好用的清理内存的方法。 方法一&#xff1a;通过电脑系统自带的性能清理…