强化学习4:DQN 算法

news2024/11/20 6:15:11

看这篇文章之前,建议先了解一下:Q-Learning 算法。

1. 算法介绍

DQN 算法全称为 Deep Q-Network,即深度Q网络。它将 Q-Learning 与 Deep Learning 结合在了一起。

1.1 Q-Network

Q-Learning 是使用 Q-table 才存储决策信息的,那么这就要求 state、action 必须是离散的。但是大部分情况,state 和 action 并不离散,或者不方便例举出所有的可能性。比如说用来打游戏,这时 Q-Learning 就无法使用。
为了应对 state 和 action 是连续的情况,我们可以使用 Q 函数来替代 Q-table,Q 函数依然可以记为 Q(s,a),这样对于任意的 state 和 action,只需要通过函数计算我们就可以得到其所对应的 Q-value 了。
但是强化学习可应用的情况可能非常复杂,比如打游戏,我们知道当前的所有敌人的情况 state 和我们下一步想做的操作 action,我们也是没办法设想一个合理的函数来作为 Q-value 的。
神经网络只要构建的足够大,理论上可以模拟任何函数,那么我们就可以使用神经网络来充当 Q 函数。w是神经网络的参数,那么我们的 Q 函数可以记为 Q(s,a;w)。这个网络也就被成为 Q-Network。
在这里插入图片描述

1.2 网络的输入与输出

神经网络的输入输出是什么呢?
输入肯定就是状态的每一项。输出可以有两种选择。一种是让网络输出当前 state 对应每一种 action 的 Q-value,另一种是直接让网络输出最优 action。
在这里插入图片描述

两种各有优劣。对第一种来说,由于我们是替代 Q-table 的,那么如果网络输出是 Q-value,我们就可以使用 Q-Learning 或 SARSA 所使用的 Q-value 更新策略来更新网络。但是这样我们就需要列举出所有可行的 action,这样 action 仍需要是离散的,那么之前所说的使用 Q-Network 的初衷就有一部分没能得到满足。相比之下,第二种就允许 action 是连续的,但也就不方便使用 TD 策略来更新网络。

1.3 参数更新

一般我们可以选择第一种方式,因为方便设计网络更新算法。如果我们选择第一种方式的话,如何更新网络呢?

  1. 首先需要前向传播,得到每个可行的 action 对应的 Q-value,获得一个输出 a = argmax(Q(s,a;w)),同时我们可以观察到下一个 s’,并获得奖励 r。
  2. 计算 TD Target:y = r + γ max{Q(s’,a’;w)};
  3. 计算损失函数:loss = 1/2[y - Q(s,a;w)]^2。
    这样我们就得到了损失函数,然后就可以使用梯度下降来更新网络中的参数w。
    在这里插入图片描述

2. 优化

2.1 目标网络

训练过程中将网络复制为两部分 netA 和 netB。每一次训练过程,使用 netA 去做决策,只更新 netB 的参数。等到一轮训练完毕后,将 netB 的参数复制给 netA。
称 netA 为目标网络(target network),在每一轮训练过程中,它的参数是固定死的。

2.2 探索

如果一开始,某个 action 得到了正向的奖励,那么后面就可能会一直采取这个 action。但其实可能别的 action 会比这个要好很多。为了不会陷入局部优化,算法需要具有一定的探索性。
常用的解决方法有两种:ε 贪心(epsilon greedy)和玻尔兹曼探索(Boltzmann exploration)。ε 贪心更常用。

  • ε 贪心
    其中 ε 为探索率,其值为 0-1 之间。算法会以 ε 的概率选择随机 action,以 1-ε 的概率使用 Q-Network 选择 action。
    在这里插入图片描述

  • 玻尔兹曼探索
    玻尔兹曼探索策略是基于玻尔兹曼分布(Boltzmann Distribution)的概念。在每一步中,智能体会根据每个动作的价值函数估计值和一个称为“温度”的参数 τ 来计算选择该动作的概率。
    在这里插入图片描述

    温度参数 τ 控制了探索和利用之间的平衡:当 τ 较高时,智能体更倾向于探索;当 τ 较低时,智能体更倾向于利用已知信息选择最优动作。

2.3 经验回放

经验回放(Experience Replay)是一种用于存储和回放过去经验(即状态转换)的策略。
该策略需要创建一个经验池(Experience Replay Buffer),通常是一个循环队列或固定大小的列表。每当 agent 选择一个 action 并与环境进行交互时,就会生成一个新的经验(或称为转换),该经验包含当前state、所选 action、获得的 reward 以及下一个state。这个经验会被存储到经验池中。当经验池中的经验数量达到一定的阈值时,算法每次训练会从经验池中随机抽取一批经验作为训练数据。
好处:

  • 打破数据相关性:在强化学习中,相邻状态之间通常存在高度相关性。直接使用连续的经验进行训练可能会导致模型对最近的经验产生过度拟合,从而降低其泛化能力。通过经验回放,算法可以从历史经验中随机抽取数据进行训练,从而打破数据之间的相关性,提高模型的泛化能力。
  • 提高数据利用效率:在强化学习中,数据的收集往往是非常昂贵的。通过经验回放,算法可以反复利用存储在经验池中的历史经验进行训练,从而提高数据的利用效率。
  • 提高训练稳定性:由于经验回放可以打破数据之间的相关性并提高数据利用效率,因此它可以使DQN的训练过程更加稳定。此外,通过随机抽取经验进行训练,算法可以更好地应对非平稳分布的问题,因为历史经验中可能包含不同分布的数据。

2.4 总结

在这里插入图片描述

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

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

相关文章

spring常用知识点

1、拦截器和过滤器区别 1. 原理不同: 拦截器是基于java的反射机制,而过滤器采用责任链模式是基于函数回调的。 2. 使用范围不同: 过滤器Filter的使用依赖于Tomcat等容器,导致它只能在web程序中使用 拦截器是一个Sping组件&am…

IO模型:同步阻塞、同步非阻塞、同步多路复用、异步非阻塞

目录 stream和channel对比 同步、异步、阻塞、非阻塞 线程读取数据的过程 同步阻塞IO 同步非阻塞IO 同步IO多路复用 异步IO 优缺点对比 stream和channel对比 stream不会自动缓冲数据,channel会利用系统提供的发送缓冲区、接收缓冲区。stream仅支持阻塞API&am…

【C++】哈希和unordered系列容器

目录 一、unordered系列关联式容器的引入 二、容器使用 2.1 unordered_map的文档说明 2.2 unordered_map的使用 2.3 unordered_set 三、底层结构 3.1 哈希概念 3.2 哈希表 3.3 哈希冲突 3.4 哈希函数 3.5 哈希冲突解决 3.5.1 闭散列 3.5.2 开散列 3.5.3 思考 四…

C++ RBTree

目录 概念 性质 节点的定义 树的结构 Insert 1. pparent->_left parent 1.1 uncle && uncle->_col RED 1.2 !(uncle && uncle->_col RED) 1.2.1 parent->_left cur 1.2.2 parent->_right cur 2. pparent->_right parent …

hive3从入门到精通(一)

Hive3入门至精通(基础、部署、理论、SQL、函数、运算以及性能优化)1-14章 第1章:数据仓库基础理论 1-1.数据仓库概念 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构…

第十六讲:数据在内存中的存储

第十六讲:数据在内存中的存储 1.整数在内存中的存储1.1存储方式1.2大小端字节序1.3大小端字节序排序规则1.4为什么要有大小端1.5练习1.5.1练习11.5.2练习21.5.3练习31.5.4练习41.5.5练习51.5.6练习61.5.7练习7 2.浮点数在内存中的存储2.1练习2.2浮点数的存储2.3浮点…

常见的几种数据库通过SQL对表信息进行查询

一、前言 我们查询数据库表的信息,一般都使用界面化的连接工具查看,很少使用SQL语句去查,而且不同的数据库SQL语句又各自有差异。但如果通过代码去获取数据库表的信息,这时就需要通过SQL语句去查了,这个在逆向代码生成…

【案例分享】医疗布草数字化管理系统:聚通宝赋能仟溪信息科技

内容概要 本文介绍了北京聚通宝科技有限公司与河南仟溪信息科技有限公司合作开发的医疗布草数字化管理系统。该系统利用物联网技术实现了医疗布草生产过程的实时监控和数据分析,解决了医疗布草洗涤厂面临的诸多挑战,包括人工记录、生产低效率和缺乏实时…

打造专业级网页排版:全方位解析专业字体家族font-family实践与全球知名字体库导览

CSS中的字体家族(font-family)属性用于指定文本所使用的字体系列。它允许开发者选择一种或多种字体作为备选,确保在浏览器中以最佳可用字体显示文本。本文将深度解析专业级网页排版中字体家族(font-family)设置的实践技…

掌握Python基本语法的终极指南【基本语法部分】

一、基本语法部分 1.简单数据类型 1.1字符串类型及操作 字符串访问: 1.索引访问 mystr"Hello world" #索引访问 print(mystr[0]) #H print(mystr[-1]) #d print(mystr[-7]) #o print(mystr[6]) #w 2.切片访问 [头下标:尾下标] &#x…

车灯合面合壳密封使用UV胶的优缺点是什么呢?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

车灯合面合壳密封使用UV胶的优缺点是什么呢? 车灯合壳密封使用UV胶的优缺点如下: 优点: 快速固化:UV胶通过紫外线照射可以在短时间内迅速固化,大大缩短了车灯制造的工艺流程时间,提高了生产效率。高度透明&#xff…

SVG批量转为pdf超有效的方式!

最近在整理工作,发现ppt里面画的图智能导出svg格式无法导出pdf格式,由于在线的网站会把我的图片搞乱而且不想下载visio(会把本地的word搞坏),因此琢磨出这种批量转换的方式。 1. 下载并安装Inkscape 下载链接&#xf…

基于Matlab完整版孤立词识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 孤立词识别是语音识别领域的一个重要分支,其目标是将输入的语音信号转换为计算机可…

成都爱尔眼科医院《中、欧国际近视手术大数据白皮书2.0》解读会圆满举行

2024年5月12日,爱尔眼科联合中国健康促进基金会健康传播与促进专项基金、新华社新媒体中心与中南大学爱尔眼科研究院、爱尔数字眼科研究所重磅发布《中、欧国际近视手术大数据白皮书2.0》。这是继2021、2022年在国内相继发布《国人近视手术白皮书》、《2022中、欧近…

C++笔试强训day32

目录 1.素数回文 2.活动安排 3.合唱团 1.素数回文 链接https://www.nowcoder.com/practice/d638855898fb4d22bc0ae9314fed956f?tpId290&tqId39945&ru/exam/oj 现将其转化为回文数(这里用字符串存储比较方便转化),然后判断是否为…

无线网卡有几种接口?怎么给电脑选择一款合适的无线网卡?

前言 这篇文章一共有两个问题: 无线网卡有几种接口 怎么给电脑选择一款合适的无线网卡 目测这一期的文章很长很长,但不水。想要给笔记本或台式机升级无线网卡的小伙伴看过来了! 最近有小伙伴问:华硕r555笔记本能不能升级无线…

MySql的环境配置与安装

MySQL 数据库 MySQL是一款关系型数据库 关系型数据库 ​ 基本单位是表,一个表中存储一类信息,表与表之间存在关联关系 sql语言(Structured Query Language) 数据库操作语言也属于一种编程语言,专门用作数据库操作分为三种语言 如下 sql安装使用流程 官网 href https://…

【设计模式】JAVA Design Patterns——Converter(转换器模式)

🔍目的 转换器模式的目的是提供相应类型之间双向转换的通用方法,允许进行干净的实现,而类型之间无需相互了解。此外,Converter模式引入了双向集合映射,从而将样板代码减少到最少 🔍解释 真实世界例子 在真实…

大众汽车集团CARIAD中国领导团队莅临知迪科技考察交流

5月23日,大众汽车集团旗下软件子公司CARIAD中国领导团队莅临知迪科技参观考察,知迪科技COO尹晓航先生率公司技术代表热情接待。 CARIAD中国一行来宾首先参观了知迪科技数采项目改制车。知迪科技软硬件工程师为考察团领导专家们讲解了知迪智驾数采系统&am…

【vs2022】安装copilot和reshaper

直接安装新版vs 17.10 自带集成的copilot支持安装resharper 可以跳过市场里的reshper安装好后依然可以直接使用vs。 resharper 2024.1.2 市场里还是i老版本: copilot 不兼容,这个是之前市场安装的版本 官方建议用vs intall 安装 安裝 GitHub Copilot GitHub.Co…