强化学习4:DQN 算法

看这篇文章之前,建议先了解一下: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 总结

在这里插入图片描述

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

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

相关文章

【Python001】python批量下载、插入与读取Oracle中图片数据(已更新)

1.熟悉、梳理、总结数据分析实战中的python、oracle研发知识体系 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.背景说明2.环境搭建2.1 参考链接2.2 `oracle`查询测试代码3.数据请求与插入3.1 `Oracle`建表语句3.2 `Python`代码实现3.3 效果示例4.问题链…

嵌入式实时操作系统笔记3:FreeRTOS移植(STM32F407)_编写简单的FreeRTOS任务例程

上文讲到UC/OS III系统的移植,那篇文章是失败了的,网络上的资料真是层次不清,多有遗漏步骤,导致单片机连操作系统的初始化都卡在那,这次换个赛道,学FreeRTOS吧...... 今日任务如标题所示:FreeR…

2024年【熔化焊接与热切割】考试内容及熔化焊接与热切割考试报名

题库来源:安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试内容考前必练!安全生产模拟考试一点通每个月更新熔化焊接与热切割考试报名题目及答案!多做几遍,其实通过熔化焊接与热切割复审模拟考试很简单。 1、【单选题】…

Android 配置 Kapt 编译器插件

以 Android Studio 2023.3.1 最新版本为准。 步骤1:打开版本信息配置文件 找到libs.versions.toml文件。 这是打开后的样子: 步骤2:配置版本信息 你需要在[plugins]下面添加一条kapt的配置信息: 要添加的配置信息如下: jetbr…

Boxy SVG for Mac:打造精致矢量图形的得力助手

在矢量图形设计领域,Boxy SVG for Mac以其出色的性能和丰富的功能,成为了设计师们的得力助手。 Boxy SVG for Mac(矢量图编辑器) v4.32.0免激活版下载 Boxy SVG具备强大的编辑能力,支持节点编辑、路径绘制、颜色填充等多种操作,让…

小浪助手下载学浪视频的简单步骤

你是否想轻松下载学浪高清视频?快来尝试小浪助手,这是你不可错过的下载神器!简单几步操作,即可轻松下载你所需的学浪视频,节省时间,提高效率! 首先我已经打包好了小浪助手,有需要的…

毫米波雷达模块在智能家居安全系统中的关键技术分析

随着智能技术的不断发展,智能家居已经成为了现代生活的一部分。而智能家居安全系统作为智能家居的重要组成部分,其功能不仅仅是对家庭进行监控和报警,更是通过各种感知技术对家庭安全进行全方位的保障。在智能家居安全系统中,毫米…

二叉树的遍历(前序遍历,中序遍历,后序,层序遍历)和一些简单操作(由浅入深绝对能看懂)

欢迎大佬们的关顾能给个赞就更好啦QWQ 目录 二叉树的逻辑结构与物理结构 一.二叉树的遍历 (1)二叉树的前序遍历 (2)二叉树的中序遍历 (3)二叉树的后序遍历 (4)二叉树的层序遍历…

Python 渗透测试:电子邮件 || Redis || FTP || SSH || MySQL 集成爆破工具.

集成爆破工具. 集合爆破里面包含了:电子邮件爆破工具,Redis爆破工具,FTP爆破工具,SSH爆破工具,MySQL爆破工具。 目录: 集合爆破工具. 电子邮件 爆破工具: Redis 爆破工具: FTP …

sqlserver 创建表,列及表,列描述

-- 创建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 为表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N员工信息表, level0type NSchema, level0name dbo, level1type N…

数字图像处理冈塞雷斯第四版课后习题答案【英文原版】

第二章 第三章 . 第四章 傅里叶变换是一个线性过程,而计算梯度的平方根和平方根则是非线性运算。傅里叶变换可以用来计算微分的差值(如问题4.50),但必须在空间域中直接计算平方和平方根值。 (a)实际上,由于高通操作,环有一个暗中心…

基于MetaGPT构建LLM多智能体

前言 你好,我是GISer Liu,在上一篇文章中,我们用了两万多字详细拆解了单个Agent的组成,并通过Github Trending订阅智能体理解MetaGPT框架的订阅模块如何解决应用问题,但是对于复杂,并行的任务,单…

010-Linux磁盘介绍

文章目录 1、名词 2、类型 3、尺寸 4、接口/协议/总线 5、命名 6、分区方式 MBR分区 GPT分区 1、名词 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy D…

VBA技术资料MF157:创建每个标题的目录

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

【计算机毕业设计】基于SSM+Vue的校园美食交流系统【源码+lw+部署文档】

目录 前 言 第1章 概述 1.1 研究背景 1.2 研究目的 1.3 研究内容 第二章 开发技术介绍 2.1 Java技术 2.2 Mysql数据库 2.3 B/S结构 2.4 SSM框架 第三章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统性能分析 3.3 系…

(避坑)SpringSecurity关于使用.antMatchers放行接口不生效问题

问题 在使用SpringSecurity的时候发现放行指定接口一直没有生效,使用"/**"就可以生效的问题 关于securityConfig的配置代码 Beanprotected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.csrf().disable() // 关闭csrf防护…

用 vue3 + phaser 实现经典小游戏:飞机大战

本文字数:7539字 预计阅读时间:30分钟 01 前言 说起小游戏,最经典的莫过于飞机大战了,相信很多同学都玩过。今天我们也来试试开发个有趣的小游戏吧!我们将从零开始,看看怎样一步步实现一个H5版的飞机大战&a…

vue3 依赖-组件tablepage-vue3版本1.1.2~1.1.5更新内容

github求⭐ 可通过github 地址和npm 地址查看全部内容 vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例-汇总 vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例(Ⅰ&#…

【计网】广播域和冲突域

一、相关概念 1.各层次设备 2.冲突域 2.1定义 冲突域通俗来讲就是在同一个网络中,两台设备同时传输的话会产生冲突。位于OSI的第一层:物理层 例如在集线器场景下,集线器属于物理层设备,它不具备交换机的功能,当收到节…

问题解决记录1:nvidia-container-cli: initialization error: load library failed

本地docker运行 $ docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi 遇到这种报错 Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error dur…