DQN算法

DQN算法

教程链接

DataWhale强化学习课程JoyRL

https://johnjim0816.com/joyrl-book/#/ch7/main

DQN算法

DQN(Deep Q-Network) 主要创新点在于将Q-learning算法中的Q表记录动作价值函数转为引入深度神经网络来近似动作价值函数 Q ( s , a ) Q(s,a) Q(s,a),从而能够处理连续状态情况,即较高维度的状态空间。

因此,在Q表中我们描述状态空间的时候一般用的是状态个数,而在神经网络中我们用的是状态维度

当然,神经网络也存在缺点,即虽然它的输入可以是连续的,但是输出只能是离散的,即只能适用于离散的动作空间。如果要处理连续的动作空间,需要考虑策略梯度方法。

本质上来说强化学习和深度学习解决的问题是完全不同的,前者用于解决序列决策问题,后者用于解决静态问题例如回归、分类、识别等等。

  • 经验回放

状态转移元组 ( s t , a t , s t + 1 , r t + 1 ) (s_t, a_t, s_{t+1}, r_{t + 1}) (st,at,st+1,rt+1)强化学习是与环境实时交互得到样本然后进行训练的,这个样本一般包括当前的状态 s t s_t st、当前动作 a t a_t at、下一时刻的状态 s t + 1 s_{t+1} st+1 、奖励 r t + 1 r_{t+1} rt+1 以及终止状态的标志 d o n e done done.

这样做存在的问题?

  1. 在 Q-learning 算法中,每次交互得到一个样本之后,就立马拿去更新模型了。首先每次用单个样本去迭代网络参数很容易导致训练的不稳定,从而影响模型的收敛。
  2. 每次迭代的样本都是从环境中实时交互得到的,这样的样本是有关联的,而梯度下降法是基于一个假设的,即训练集中的样本是独立同分布的。
  3. 直接将 Q-learning 算法训练的方式来更新 DQN 的模型相当于是最原始的梯度下降方式,距离目前最成熟的小批量梯度下降方式还有一定的差距。

因此DQN的训练过程中,会把每次通过环境交互的样本存储在一个经验回放中,然后每次从经验吃中随机抽取一批样本来训练网络。

首先每次迭代的样本都是从经验池中随机抽取的,因此每次迭代的样本都是独立同分布的,这样就满足了梯度下降法的假设。其次,经验池中的样本是从环境中实时交互得到的,因此每次迭代的样本都是相互关联的,这样的方式相当于是把每次迭代的样本都进行了一个打乱的操作,这样也能够有效地避免训练的不稳定性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 目标网络

其次为了保障训练的稳定,避免Q值的估计发散。考虑使用一个每隔若干步才更新的目标网络。目标网络和当前网络结构都是相同的,都用于近似 Q值,在实践中每隔若干步才把每步更新的当前网络参数复制给目标网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习题

  1. 相比于 Q − l e a r n i n g Q-learning Qlearning算法, D Q N DQN DQN算法做了哪些改进?

DQN使用了深度神经网络来近似动作价值函数,解决了Q-learning使用表格存储Q值使得状态空间过大或者状态连续的问题。

  1. 为什么要在 D Q N DQN DQN算法中引入 ε − greedy \varepsilon-\text{greedy} εgreedy策略?

引入策略是为了平衡探索与利用的过程,如果智能体只进行利用,那么它可能会陷入局部最优,而忽略了更好的动作或状态;如果智能体只进行探索,那么它可能会浪费时间和资源,而无法收敛到最优的策略。因此,智能体需要在探索和利用之间进行权衡,以达到最佳的学习效果。

  1. D Q N DQN DQN算法为什么要多加一个目标网络?

目标网络的引入是为了增加DQN算法的稳定性和收敛性。DQN算法的核心是用深度神经网络来近似Q函数,即状态-动作值函数。如果我们只用一个神经网络来计算估计值和目标值,那么每次更新参数后,目标值也会随之改变,这样就会导致目标值不稳定,甚至发生震荡,从而影响神经网络的收敛。考虑使用一个每隔若干步才更新的目标网络。目标网络和当前网络结构都是相同的,都用于近似 Q值。

  1. 经验回放的作用?

深度神经网络训练要求数据符合独立同分布,经验回放的作用是消除智能体收集经验时相邻的两个四元组之间的相关性,使得每次从数组里面随机抽取的四元组都是独立的,从而提高DQN的训练效果。

DQN算法进阶

介绍一些基于DQN算法的进阶算法,例如 D o u b l e D Q N 、 D u e l i n g D Q N Double DQN、Dueling DQN DoubleDQNDuelingDQN这些从网络模型层面改进以及 P E R D Q N PER DQN PERDQN从经验回放的角度改进。

  • Double DQN算法。

主要贡献在于通过引入两个网络用于解决Q值过估计问题.

KaTeX parse error: \tag works only in display equations

其中 y t = r t + γ max ⁡ a Q θ ^ ( s t + 1 , a t + 1 ) y_t = r_t+\gamma\max _{a}Q_{\hat{\theta}}(s_{t+1},a_{t+1}) yt=rt+γamaxQθ^(st+1,at+1)是估计值,这个意思就是直接拿目标网络中各个动作对应的最大的 Q值来当作估计值,这样一来就会存在过估计的问题。

因此, D o u b l e D Q N Double DQN DoubleDQN的思路就是现在当前网络中找出最大Q值对应的动作,然后再将这个动作代入到目标网络中计算Q值。

KaTeX parse error: \tag works only in display equations

然后将这个找出来的动作代入到目标网络里面去计算目标的 Q 值,进而计算估计值,

KaTeX parse error: \tag works only in display equations

这样做相当于是把动作选择和动作评估这两个过程分离开来,从而减轻了过估计问题。即Double DQN 算法中大臣会根据自己的判断将自己认为最优的情报汇报给皇帝,做到了情报的精简与较高质量。

  • Dueling DQN算法

Dueling DQN算法是通过优化神经网络的结构来优化算法的。DQN算法使用的网络架构是一个全连接网络,包含一个输入层、隐藏层以及输出层。DuelingDQN则是在输出层之前分流出价值层(估计每个状态的价值)与优势层(用于估计每个动作带来的优势)。

[外链图片转存中…(img-COZ6YXfc-1700835492466)]

去掉这里的价值层即优势层就是普通的 Q 网络了,另外会对优势层做一个中心化处理,即减掉均值。

  • PER DQN算法

PER DQN算法进一步优化经验回放的设计从而提高模型的收敛能力与鲁棒性。会在采样过程中赋予经验回放中样本的优先级。优先级的依据来自于TD误差。广义的定义是值函数(包括状态价值函数和动作价值函数)的估计值与实际值之差,在 DQN 算法中就是目标网络计算的 Q值和策略网络(当前网络)计算的 Q值之差,也就是 DQN 网络中损失函数的主要构成部分。

TD误差越大,损失函数的值也越大,对于反向传播的作用也就越大。 这样一来如果 TD 误差较大的样本更容易被采到的话,那么算法也会更加容易收敛。

练习题

  1. DQN算法为什么会产生Q值的过估计问题?

DQN是直接拿目标网络中各个动作对应的最大的 Q值来当作估计值。但目标值仍然依赖于神经网络的输出,而神经网络的输出可能存在偏差和误差。特别是,当我们用**maxa′Q(s′,a′)**来选择下一个状态的最优动作时,我们可能会选择一个Q值被高估的动作,而不是真正的最优动作。这样,我们就会用一个高估的Q值来更新当前状态的Q值,从而导致Q值的过估计

  1. 同样是提高探索,Noisy DQN与 ε − greedy \varepsilon-\text{greedy} εgreedy策略有什么区别

Noisy DQN是在神经网络的权重上添加参数化的噪音,从而使Q函数的输出具有随机性,而ε-greedy策略是在选择动作时以一定的概率随机选择一个动作,而不是最优的动作。同时Noisy DQN的探索是基于权重的,可以影响所有的动作的选择,而ε-greedy策略的探索是基于动作的,只影响单个的动作的选择。因此,Noisy DQN的探索更具有全局性和多样性,而ε-greedy策略的探索更具有局部性和随机性。
sy DQN的探索是基于权重的,可以影响所有的动作的选择,而ε-greedy策略的探索是基于动作的,只影响单个的动作的选择。因此,Noisy DQN的探索更具有全局性和多样性,而ε-greedy策略的探索更具有局部性和随机性。

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

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

相关文章

设计模式——行为型模式(一)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行…

医院预约管理系统开发 代码展示 九价疫苗接种预约功能(含小程序源代码)

基于微信小程序的疫苗预约系统让疫苗信息,疫苗预约信息等相关信息集中在后台让管理员管理,让用户在小程序端预约疫苗,查看疫苗预约信息,该系统让信息管理变得高效,也让用户预约疫苗,查看疫苗预约等信息变得…

额温枪方案,MS8551,MS8601;MS1112,MS1100

鉴于测温的传感器信号非常微弱,需要用高精度、低噪声的运算放大器和高精度、低功耗的ADC。 运算放大器可供选择:MS8551 or MS8601,具有低失调(1uV)、低噪(22nV√Hz )、封装小等优点&#xff0c…

Redis并发问题解决方案

目录 前言 1.分布式锁 1.基于单个节点 2.基于多个节点 3.watch(乐观锁) 2.原子操作 1.单命令操作 2.Lua 脚本(多命令操作) 3.事务 1.执行步骤 2.错误处理 3.崩溃处理 总结 前言 在多个客户端并发访问Redis的时候,虽然Redis是单线程执行指令&#xff…

【间歇振荡器2片555时基仿真】2022-9-24

缘由multisim出现这个应该怎么解决吖,急需解决-嵌入式-CSDN问答 输出一定要有电阻分压才能前后连接控制否则一定报错。

Python自动化生成漂亮的测试报告

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

五种多目标优化算法(MOJS、NSGA3、MOGWO、NSWOA、MOPSO)求解微电网多目标优化调度(MATLAB代码)

一、多目标优化算法简介 (1)多目标水母搜索算法MOJS 多目标优化算法:多目标水母搜索算法MOJS(提供MATLAB代码)_水母算法-CSDN博客 (2)NSGA3 NSGA-III求解微电网多目标优化调度(M…

acwing算法基础之数学知识--求卡特兰数

目录 1 基础知识2 模板3 工程化 1 基础知识 题目:给定n个0和n个1,它们将按照某种顺序排成长度为2n的序列,求它们能排成的所有序列中,能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少个? 输出的答案对 1 0 …

【云原生 Prometheus篇】Prometheus的动态服务发现机制与认证配置

目录 一、Prometheus服务发现的方式1.1 基于文件的服务发现1.2 基于consul的服务发现1.3 基于 Kubernetes API 的服务发现1.3.1 简介1.3.2 基于Kurbernetes发现机制的部分配置参数 二、实例一:部署基于文件的服务发现2.1 创建用于服务发现的文件2.2 修改Prometheus的…

yo!这里是c++11重点新增特性介绍

目录 前言 列表初始化 { }初始化 initializer_list类 类型推导 auto decltype 范围for 右值引用与移动语义 左值引用和右值引用 移动语义 1.移动构造 2.移动赋值 3.stl容器相关更新 右值引用和万能引用 完美转发 关键字 default delete final和override …

西米支付:简单介绍一下支付公司的分账功能体系

随着互联网的普及和电子商务的快速发展,支付已经成为人们日常生活的重要组成部分。支付公司作为第三方支付平台,为消费者和商家提供了便捷、安全的支付方式。而在支付领域中,分账功能是一个非常重要的功能,它可以帮助企业实现资金…

C语言——从终端(键盘)将 5 个整数输入到数组 a 中,然后将 a 逆序复制到数组 b 中,并输出 b 中 各元素的值。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int a[5];int b[5];printf("输入5个整数&#xff1a;\n");for(i0;i<5;i){scanf("%d",&a[i]);}printf("数组b的元素值为&#xff1a;\n");for(i4;i>0;i--…

Javascript每天一道算法题(十五)——轮转数组_中等(一行解决轮转数组)

文章目录 1、问题2、示例3、解决方法&#xff08;1&#xff09;方法1——while遍历&#xff08;较为复杂&#xff0c;不推荐&#xff09;&#xff08;2&#xff09;方法2&#xff08;直接截取后插入&#xff0c;推荐&#xff09;&#xff08;3&#xff09;方法3——优化方法2&a…

jQuery_03 dom对象和jQuery对象的互相转换

dom对象和jQuery对象 dom对象 jQuery对象 在一个文件中同时存在两种对象 dom对象: 通过js中的document对象获取的对象 或者创建的对象 jQuery对象: 通过jQuery中的函数获取的对象。 为什么使用dom或jQuery对象呢&#xff1f; 目的是 要使用dom对象的函数或者属性 以及呢 要…

python -opencv 轮廓检测(多边形,外接矩形,外接圆)

python -opencv 轮廓检测(多边形&#xff0c;外接矩形&#xff0c;外接圆) 边缘检测步骤: 第一步&#xff1a;读取图像为灰度图 第二步&#xff1a;进行二值化处理 第三步&#xff1a;使用cv2.findContours对二值化图像提取轮廓 第三步&#xff1a;将轮廓绘制到图中 代码如下…

Hibernate的三种状态

1.瞬时状态(Transient) 通过new创建对象后&#xff0c;对象并没有立刻持久化&#xff0c;他并未对数据库中的数据有任何的关联&#xff0c;此时java对象的状态为瞬时状态&#xff0c;Session对于瞬时状态的java对象是一无所知的&#xff0c;当对象不再被其他对象引用时&#xf…

【TL431+场效应管组成过压保护电路】2022-3-22

缘由这个稳压三极管是构成的电路是起到保护的作用吗&#xff1f;-硬件开发-CSDN问答

HTML5+ API 爬坑记录

背景: 有个比较早些使用5开发的项目, 最近两天反馈了一些问题, 解决过程在此记录; 坑1: plus.gallery.pick 选择图片没有进入回调 HTML5 API Reference 在 联想小新 平板电脑上选择相册图片进行上传时, 打开相册瞬间 应用会自动重启, 相册倒是有打开, 不过应用重启了, 导…

[原创](免改BIOS)使用Clover升级旧电脑-(高阶玩法)让固态硬盘内置Win11 PE启动系统

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

【算法专题】滑动窗口—无重复字符的最长子串

力扣题目链接&#xff1a;无重复字符的最长子串 一、题目解析 二、算法原理 解法一&#xff1a;暴力解法&#xff08;时间复杂度最坏&#xff1a;O(N)&#xff09; 从每一个位置开始往后枚举&#xff0c;在往后寻找无重复最长子串时&#xff0c;可以利用哈希表来统计字符出现…