【强化学习】循序渐进讲解Deep Q-Networks(DQN)

文章目录

    • 1 Q-learning与Deep Q-learning
    • 2 DQN的结构组成
    • 3 DQN创新技术(重点)
      • 3.1 Experience Replay(经验回放)
      • 3.2 Fixed Q-Target(固定Q目标)
      • 3.3 Double Deep Q-Learning(双重深度Q学习方法)
    • 4 DQN运行过程
    • 5 参考资料

1 Q-learning与Deep Q-learning

Q-learning是一种用来训练Q函数的算法,Q 函数是一个动作-价值函数,用于确定处于特定状态和在s该状态下采取特定行动的价值。其中的Q函数被以表格的形式展现出来,横轴表示状态,纵轴表示动作,表格中的每一个数据都对应了某一状态下采取某一动作所对应的价值。但是当状态多到无法以表格或数组的形式表现时,最好的办法就是用一个参数化的Q函数去得到近似Q值。由于神经网络在复杂函数建模方面表现出色,我们可以使用神经网络(Deep Q-Networks)来估算 Q 函数。
在这里插入图片描述

DQN的基本原理与Q-learning算法非常相似。它从任意 Q 值估计开始,使用ε-greedy策略探索环境。其核心是在迭代更新中使用双行动概念,即具有当前 Q 值的当前行动 Q ( S t , A t ) Q(S_t, A_t) Q(St,At)和具有目标 Q 值的目标行动 Q ( S t + 1 , a ) Q(S_{t+1}, a) Q(St+1,a),以改进其 Q 值估计。

2 DQN的结构组成

DQN主要由三部分组成:Q network、Target network和经验回放(Experience Replay )组件。
在这里插入图片描述

其中,Q神经网络用于训练产生最佳状态-动作价值,Target神经网络用于计算下一状态下采取的动作所对应的Q值,Experience Replay用于与环境进行交互并产生数据用于训练神经网络。

3 DQN创新技术(重点)

DQN中主要有三个颠覆性创新技术:

  • Experience Replay:更有效地利用过往经验数据;
  • Fixed Q-Target:用于稳定训练,加速收敛;
  • Double Deep Q-Learning:用于解决Q值过高估计的问题。

3.1 Experience Replay(经验回放)

在这里插入图片描述

如图所示,Experience Replay组件采用ε-greedy策略与环境进行交互(当前状态下采取可能得到最高收益的动作),并得到环境反馈的奖励和下一状态,并将这一观察结果保存为训练数据样本(Current State, Action, Reward, Next State)。训练神经网络时,将随机从训练数据样本中抽取数据进行训练。那这时就产生了一个问题,为什么不让智能体与环境不断交互产生新数据并将其用于神经网络的训练呢?

回想一下,当我们训练神经网络时,通常是在随机打乱训练数据后选择一批样本。这样可以确保训练数据有足够的多样性,从而让网络学习到有意义的权重,使其具有良好的泛化能力,并能处理一系列数据值。

以机器人学习在工厂车间内导航为例,假设在某个时间点,它正试图绕过工厂的某个角落,在接下来的几次移动中,它所采取的所有行动都局限于工厂的这一区域。如果神经网络试图从这批操作数据中学习,它就会更新权重以专门处理工厂中的这一局部位置。而它不会学习到任何有关工厂其他地方的信息。一段时间后,把机器人搬到了另一个地方,网络在这一段新的时间内的学习都将集中在那个新的地方,它又可能把在原来地点学到的知识全部忘掉。

3.2 Fixed Q-Target(固定Q目标)

在这里插入图片描述

在DQN中有两个神经网络,但却只有Q神经网络不断学习更新,而Target神经网络只是在每隔一段时间后复制一次Q神经网络参数,用于计算Q-Target。那么为什么不仅使用一个网络来构建DQN呢?

首先,我们可以用一个 Q 网络而不使用目标网络来构建 DQN。在这种情况下,我们通过 Q 网络进行两次传递,首先输出Q Predict值[ Q ( S t , A t ) Q(S_t, A_t) Q(St,At) ],然后输出Q Target值[ R T + 1 + γ m a x Q ( S t + 1 , a ) R_{T+1}+\gamma max Q(S_{t+1}, a) RT+1+γmaxQ(St+1,a) ]。但这可能会带来一个潜在的问题:Q 神经网络的权重在每个时间步都会更新,从而改进对Q Target值的预测。但是由于网络及其权重是相同的,这也会改变我们预测的Q Target值。每次更新后,它们都不会保持稳定,这就像是在追逐一个移动的目标。

通过使用第二个不经过训练的网络,我们可以确保Q Target值在短时间内保持稳定。但这些Q Target值也是预测值,也需要有所迭代,因此在预设的时间步之后,Q 网络的权重会被复制到Target网络。

3.3 Double Deep Q-Learning(双重深度Q学习方法)

在计算 Q Target时会遇到一个简单的问题:我们如何确定下一个状态的最佳行动就是 Q 值最高的行动?

Q 值的准确性取决于我们尝试了哪些动作以及探索了哪些状态。但是在训练开始时,我们没有足够的信息来确定最佳行动,因此将最大 Q 值(噪音较大)作为最佳行动可能会导致误报。如果非最佳操作的 Q 值经常高于最佳操作的 Q 值,学习就会变得复杂。

解决方法是:在计算 Q 目标值时,我们使用两个网络将动作选择与目标 Q 值生成分离开来。

  • 使用 DQN 网络计算当前状态下采取当前动作的Q值[ Q ( S t , A t ) Q(S_t, A_t) Q(St,At) ]。
  • 使用目标网络计算在下一状态下能得到的最大目标 Q 值以及奖励[ R T + 1 + γ m a x Q ( S t + 1 , a ) R_{T+1}+\gamma max Q(S_{t+1}, a) RT+1+γmaxQ(St+1,a) ]。

因此,Double DQN 可以帮助我们减少对 Q 值的高估,从而帮助我们更快地进行训练,并获得更稳定的学习效果。

4 DQN运行过程

在这里插入图片描述

如上图所示,DQN运行分为以下几步:

  1. 初始化Experience Replay组件。其通过与环境进行交互积累部分训练样本(Current State, Action, Reward, Next State),并将之保存为训练数据。

  2. 初始化Q网络网络参数,并将之拷贝给目标网络。

  3. 使用初始化后的Q网络配合Experience Replay组件进行训练数据生成(这一步并不训练网络)。由Experience Replay返回当前状态作为Q网络输入,Q网络使用随机初始化后的参数得到当前状态下可以采用的所有动作所对应的Q值,并按照ε-greedy策略选择要执行的动作输出给Experience Replay,其得到动作后与环境进行交互并得到下一状态以及奖励,并将这一系列数据作为训练数据与第一步产生的部分数据进行存储。

  4. 在已存储数据中随机选择一批训练数据(S1,a4, R1, S2),将当前状态S1输入Q网络得到当前状态下所有动作对应的Q值,并选择a4对应的Q值 q 4 ^ \hat {q_4} q4^存储备用,后续将使用其计算损失值(loss)。

  5. 将训练数据(S1,a4, R1, S2)中的下一状态S2输入目标网络计算下一状态下所有可执行动作对应的Q值,并按照ε-greedy策略选择最大Q值 q 9 q_9 q9,计算 T a r g e t   Q   V a l u e   =   R T + 1 + γ m a x Q ( S t + 1 , a ) Target\ Q\ Value\ =\ R_{T+1}+\gamma max Q(S_{t+1}, a) Target Q Value = RT+1+γmaxQ(St+1,a),即 R 1 + γ   q 9 R_1+\gamma\ q_9 R1+γ q9

  6. 使用之前Q网络输出的 q 4 ^ \hat{q_4} q4^(Predicted Q-Value)和目标网络得到的 q 9 q_9 q9(Target Q-Value)计算均方差损失(MSE Loss)。

  7. 使用梯度下降法反向传播损失并更新 Q 网络的权重。目标网络没有经过训练,保持固定,因此不会计算损失,也不会进行反向传播。

  8. 不断重复步骤3到步骤8,训练更新Q网络参数,保持目标网络参数不变,否则我们就像是在追逐一个不断移动的目标。

  9. T 个时间步后,将 Q 网络权重复制到目标网络。目标网络就能获得改进后的权重,从而也能预测出更准确的 Q 值。处理过程继续进行。

5 参考资料

  1. The Deep Q-learning Algorithm-Hugging Face Deep RL Course
  2. Reinforcement Learning Explained Visually (Part 5): Deep Q Networks, step-by-step

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

momentum2靶机

文章妙语 遇事不决,可问春风; 春风不语,遵循己心。 文章目录 文章妙语前言一、信息收集1.IP地址扫描2.端口扫描3.目录扫描 二,漏洞发现分析代码bp爆破1.生成字典2.生成恶意shell.php2.抓包 三,漏洞利用1.反弹shell 四…

pytorch张量的创建

张量的创建 张量(Tensors)类似于NumPy的ndarrays ,但张量可以在GPU上进行计算。从本质上来说,PyTorch是一个处理张量的库。一个张量是一个数字、向量、矩阵或任何n维数组。 import torch import numpy torch.manual_seed(7) # 固…

深圳鼎信|输电线路防山火视频监控预警装置:森林火灾来袭,安全不留白!

受线路走廊制约和环保要求影响,输电线路大多建立在高山上,不仅可以减少地面障碍物和人类活动的干扰,还能提高线路的抗灾能力和可靠性。但同时也会面临其它的难题,例如森林火灾预防。今天,深圳鼎信智慧将从不同角度分析…

随机森林 2(决策树)

通过 随机森林 1 的介绍,相信大家对随机森林都有了一个初步的认知,知道了随机和森林分别指的是什么,以及决策树根据什么选择内部节点。本文将会从森林深入到树,去看一下决策树是如何构建的。网上很多文章都讲了决策树如何构建&…

幺模矩阵-线性规划的整数解特性

百度百科:幺模矩阵 在线性规划问题中,如果A为幺模矩阵,那么该问题具有最优整数解特性。也就是说使用单纯形法进行求解,得到的解即为整数解。无需再特定使用整数规划方法。 m i n c T x s . t . { A x ≥ b x ≥ 0 \begin{align*} min \quad…

Java动态代理Proxy(通俗易懂,一学就会)

为什么需要代理?代理长什么样? 代理实现案例代码 1.中介接口(约束代理方法) 2.BigStar(被代理) 实现接口方法 3.代理工具类 invoke方法中的proxy表示代理对象,method表示代理获取到调用的方法对…

Go 代码检查工具 golangci-lint

一、介绍 golangci-lint 是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如 golint、go vet 等。 优点: 运行速度快可以集成到 vscode、goland 等开发工具中包含了非常多种代码检查器可以集成到 CI 中这是包含的代码检查器列表&…

Linux配置环境变量的几种方式

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

青少年CTF-qsnctf-Web-include01include02(多种方法-知识点较多-建议收藏!)

PHP常见伪协议 php://filter是PHP中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处…

【MybatisPlus快速入门】(2)SpringBoot整合MybatisPlus 之 标准数据层开发 代码示例

目录 1 标准CRUD使用2 新增3 删除4 修改5 根据ID查询6 查询所有7 MyBatis-Plus CRUD总结 之前我们已学习MyBatisPlus在代码示例与MyBatisPlus的简介,在这一节中我们重点学习的是数据层标准的CRUD(增删改查)的实现与分页功能。代码比较多,我们一个个来学习…

AtomHub 开源容器镜像中心开放公测,国内服务稳定下载

由开放原子开源基金会主导,华为、浪潮、DaoCloud、谐云、青云、飓风引擎以及 OpenSDV 开源联盟、openEuler 社区、OpenCloudOS 社区等成员单位共同发起建设的 AtomHub 可信镜像中心正式开放公测。AtomHub 秉承共建、共治、共享的理念,旨在为开源组织和开…

OpenCV-Python(19):Canny边缘检测

目录 学习目标 Canny 边缘检测原理 1.噪声抑制(噪声去除) 2.梯度计算 3.非极大值抑制 4.双阈值检测(滞后阈值) 5.边缘连接 Canny 边缘检测步骤 Canny 边缘检测的OpenCV实现 不同阈值的边缘检测效果 学习目标 了解Canny边缘检测的概念学习掌握函数cv2.Canny()的用法 …

C++加法运算符的重载(operator)

1.重载加法运算符 为什么要重载加法运算符? 因为C提供的加法运算符只能满足基本数据类型间的加法,如果我想让俩个相同的类的对象进行加法的话会报错 所以为了能让俩个相同类的对象进行加法,我们要把这个过程封装到一个函数里面,只…

使用低代码工具构建电商平台:简化开发流程,加速应用搭建

在数字化时代,电商平台成为了各类企业的重要组成部分。然而,传统的软件开发过程往往漫长而复杂,需要大量的编码和调试工作。随着低代码工具的出现,开发者可以通过简化的方式来搭建电商平台应用,从而更快速地满足业务需…

Netty Review - 优化Netty通信:如何应对粘包和拆包挑战_自定义长度分包编解码码器

文章目录 概述Pre概述Code自定义协议自定义解码器服务端的消息处理客户端启动类自定义编码器客户端业务处理Handler 测试 概述 Pre Netty Review - 借助SimpleTalkRoom初体验异步网络编程的魅力 Netty Review - 优化Netty通信:如何应对粘包和拆包挑战 中我们遗留了…

【Linux】多线程

目录​​​​​​​ Linux线程概念 1. 什么是线程 2. 重新定义线程和进程 3. 重讲地址空间 4. 线程的优点 5. 线程的缺点 6. 线程异常 7. 线程用途 Linux进程VS线程 1. 进程和线程 2. 进程的多个线程共享 3. 线程为什么进程要更加轻量化? Linux线程…

盲盒小程序搭建:开启互联网盲盒时代

盲盒目前是一个非常火爆的商业模式。随着科技的发展,盲盒市场也开始采用线上盲盒进行拓客,吸引盲盒爱好者。当下在互联网电商影响下,盲盒小程序逐渐受到了商家的青睐。 线上盲盒市场 盲盒消费主要是根据自身的未知性吸引消费者,消…

SpringBoot Elasticsearch全文搜索

文章目录 概念全文搜索相关技术Elasticsearch概念近实时索引类型文档分片(Shard)和副本(Replica) 下载启用SpringBoot整合引入依赖创建文档类创建资源库测试文件初始化数据创建控制器 问题参考 概念 全文搜索(检索),工作原理:计算…

最优化理论与方法(2)---单纯形方法

文章目录 1. 线性规划1.1 基本介绍1.2 最优基本可行解 2. 表格形式单纯形方法2.1 基本知识引入2.2 求解步骤2.3 例题12.4 例题2 3. 单纯形法的进一步讨论3.1 无界解3.2 多个解 1. 线性规划 1.1 基本介绍 把握住两点:最小化和等号。  如果问题是最大化max&#xff…

新版iApp应用商店软件库源码 /纯UI源码 /开源高品质UI源码 /无需后台支持

源码介绍: 新版iApp应用商店软件库源码,它是纯UI源码、开源高品质UI源码 ,而且它无需后台支持。UI界面简约。 这是应用商店软件库UI源码,原作者为他人开发的作品,经过同意后进行了开源。 这是一份完全原创的作品&…