(202401)深度强化学习基础与实践1:马尔科夫过程、DNQ算法回顾

文章目录

  • 序言
  • 马尔科夫决策过程
    • 含义
    • 性质
    • 回报
    • 状态转移矩阵
  • DQN算法
    • 深度网络
    • 经验回放
    • 目标网络
    • 实战DQN算法
  • DQN 算法进阶
    • Double DQN
    • Dueling DQN
    • Noisy DQN
    • PER DQN
    • C51 算法

序言

本文章记录Datawhale开源学习组织2024年第一期学习,《深度强化学习基础与实践》第二期的任务一。这项课程是有第一期的,但是由于那段时间本人学校课程比较多,同时又有一摊子的事情需要去完成,因此没有参与,本月直接参与第二次,任务一实际上也就是对于第一期任务的复习和缓冲。
课程开源地址如下:(https://github.com/datawhalechina/joyrl-book)
任务一的内容是:第二章、第七章、第八章,也就是第一期任务中的核心部分。
对于我这种第一期没有参加的来说任务还挺重的哈,其余几章不在要求中,但是还是过一遍比较合适。

马尔科夫决策过程

含义

马尔科夫决策过程是强化学习中基本的表达方式,将机器决策的过程用数学的方式表达出来,从而使得可能对其参数进行优化。
也就是针对状态作出动作,动作改变状态,依据状态的改变给出reward。

性质

而马尔科夫决策过程的前提是满足马尔科夫决策性质:环境下一步的状态只与当前的采取的动作有关而与历史动作无关。这在大多数实际情况中都是不成立的。因此在必要的情况下可以使用其他的方法来辅助马尔科夫决策过程。

回报

经过上面的描述之后自然而然的,前面提到的给出reward就是判断任务完成好坏的指标。暂且不提如何根据任务的完成情况来给出reward,我们的最终目标显然是将回报总值最大化。
但是在实际情况中,除了一些能够在有限步骤中完成的任务外,还有很多无法完成的任务,这时如果考虑总的奖励量就是有问题。给出了一个折扣因子 γ \gamma γ来应对这种情况。
G t = r t + 1 + γ r t + 2 + γ 2 r t + 3 + . . . = r t + 1 + γ G t + 1 G_t = r_{t+1}+\gamma r_{t+2}+\gamma^2 r_{t+3}+...=r_{t+1}+\gamma G_{t+1} Gt=rt+1+γrt+2+γ2rt+3+...=rt+1+γGt+1
γ \gamma γ为0时,只关注当前奖励;当 γ \gamma γ为1时,同等关注未来全部奖励;当 γ \gamma γ为0到1之间时,体现了在未来奖励和当前奖励之间权衡。

状态转移矩阵

状态或者说环境会发生变换,并且这些变化不是由于智能体的行为导致的,描述这个的特点的矩阵就是状态转移矩阵,状态转移矩阵是环境的一部分。矩阵的每个元素表示当前状态在下一“步”转变成另一状态的概率,因此很显然,状态转移矩阵的行和列之和都是1.

DQN算法

啊哈哈哈,我还是跳了,中间跳过的章节有:动态规划、免模型预测、免模型控制、深度学习基础。

DQN算法的主要贡献就是在Q-learning算法的基础上引入了深度神经网络来近似动作价值函数Q(s,a),从而能够处理高维的状态空间。

深度网络

该节主要阐述DQN对于Q表来近似动作价值函数的优势。神经网络只是用了两个维度的输入就表示了原来Q表中的无穷多个状态。参数的求解也使用深度学习中常用的梯度下降的方式来求解。

经验回放

由于强化学习的每次迭代的样本都是从环境中实时交互获得的,因此样本是关联的,并不满足独立同分布的要求;并且是但个传入的,这样迭代网络参数容易导致训练的不稳定。

采用小批量梯度下降类似的方式可以有效解决这种问题。如果将之前获得的样本都存起来,然后每次得到新数据时从之前的样本中随机抽取一部分与当前样本一起传入就可以近似独立同分布。

不过经验回放的容量应当是有限的,不是由于成本导致的,而是因为在训练初期的样本数据质量相对于后面是不好的,所以应当从更新的样本中抽取样本进行训练。

目标网络

目标网络就是每个一定步骤再更新其参数(从当前网络中复制),这样做的好处是保证训练的稳定,避免Q值的估计发散。

实战DQN算法

作者在这里提醒读者应该养成先写伪代码再变成的习惯,有助于提高对算法的理解。
先去实战一下再继续学习第八章(但是可能要先装环境)
作者专门提醒不能使用镜像源安装joyrl哦,所以安装时间挺久的,继续往下学了先。

诶呀,连接超时了,依赖包还是就镜像源装吧,指定个版本。

DQN 算法进阶

介绍基于DQN改进的一些算法。改进角度各有不同,但是本质上都是通过提高预测精度和控制过程中的探索独来改善DQN算法的性能,这些算法用到的技巧也都是比较通用的,说要是学得好可以根据需求灵活组合。

Double DQN

前面提到过,跟上面所说的目标网络有相似的地方。但这个算法的是将动作选择和动作评估分开。一个网络给出使得Q最大的动作,然后将这个动作带入到目标网络计算Q值。

不过在实际中效果和复制网络参数到目标网络的方式(Nature DQN)效果差不多,所以一般就用后者。

Dueling DQN

与Double DQN不同,这个算法是通过优化神经网络的结构而不是改进目标Q值的计算来优化算法的。dueling这个词语的意思就是分流。原本的网络结构是输入层、隐藏层、输出层;现在的结构是从隐藏层分流出了价值层(用于估计每个状态的价值)和优势层(用于估计每个动作带来的优势)。

看不明白,说与这个Actor-Critic算法是类似的,在后面具体展开。

这个算法分开评估每个状态的价值以及采取某个动作的Q值。

有助于降低方差并提高学习鲁棒性。

Noisy DQN

也是优化网络结构来提升算法的性能的。但是并不是为了提高Q值的估计,而是为了增强网络的探索能力。

这是通过添加噪声层来实现的。可以认为强化学习炼丹比深度学习炼丹更加容易过拟合或者说陷入局部最优解的困境中。将随机性应用到神经网络中的擦桉树或者说权重,增强了Q网络对于状态和动作空间的探索能力,从而提高收敛速度和稳定性。

PER DQN

这是一种进一步优化了梯度下降方式的算法,也可以翻译为“优先经验回放DQN”算法。

采样时对于经验回放中的样本赋予不同优先级,使用TD误差来判断,因为TD误差越大,损失函数的值也就越大,那么对于法相传播的作用也就越大。

但是这种方式会导致原本和被选中的样本TD误差相差不大的样本不能够被选择上:选择那个TD误差更大的样本之后,该样本的误差就会随之减小,但是并不能够确定这个样本没有重要信息。所以引入了“随即优先级采样”和“重要性采样”(重要性采样是以后总用于估计某一分布性质的方法,它的基本思想是,我们可以通过与带古迹分布不同的另一个分布中采样,然后通过采样样本的权重来估计待估计分布的性质)的技巧。

C51 算法

分布式DQN算法,Distributed DQN。和PER一样也是可以将这种改进算法的方法用到其他强化学习算法中的方法。

该算法的核心思想是将Q值换成了Q值的分布,从而能够更好地处理值函数估计不准确以及离散动作空间的问题。

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

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

相关文章

pyechart基础

pyecharts - A Python Echarts Plotting Library built with love. 全局配置项 初识全局配置组件 Note: 配置项章节应该配合图表类型章节中的 example 阅读。 全局配置项可通过 set_global_opts 方法设置 InitOpts:初始化配置项 class pyecharts.options.InitO…

Java顺序表(2)

🐵本篇文章将对ArrayList类进行讲解 一、ArrayList类介绍 上篇文章我们对顺序表的增删查改等方法进行了模拟实现,实际上Java提供了ArrayList类,而在这个类中就包含了顺序表的一系列方法,这样在用顺序表解决问题时就不用每次都去实…

【C++干货铺】红黑树 (Red Black Tree)

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 前言 红黑树的概念 红黑树的性质 红黑树结点的定义 红黑树的插入操作 插入新的结点 检查规则进行改色 情况一 情况二 情况三 插入完整代码 红黑树的验…

SpringMVC参数接收见解4

# 4.参数接收Springmvc中,接收页面提交的数据是通过方法形参来接收: 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换…

【数据结构】归并排序的两种实现方式与计数排序

前言:在前面我们讲了各种常见的排序,今天我们就来对排序部分收个尾,再来对归并排序通过递归和非递归的方法进行实现,与对计数排序进行简单的学习。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏…

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin 在 Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图的圆切图,Kotlin(4)-CSDN博客 的…

2001-2022年上市公司企业财务绩效、公司价值、并购绩效数据(ROA、ROE、TOBINQ变化)

2001-2022年上市公司企业财务绩效、公司价值、并购绩效数据(ROA、ROE、TOBINQ变化) 1、时间:2001-2022年 2、指标:证券代码、统计截止日期、证券简称、行业代码、行业名称、年份、、总资产净利润率B、净资产收益率(ROE)B、托宾Q…

【方法】如何压缩zip格式文件?

zip是一种常见的压缩文件格式,能够高效打包文件便于存储和传输,那zip格式的压缩文件要如何压缩呢? 压缩zip文件需要用到解压缩软件,比如常见的WinRAR、7-Zip软件都可以压缩zip格式。下面一起来看看具体如何操作。 一、使用WinRAR…

日期处理第一篇--优雅好用的Java日期工具类Joda-Time

日常开发中,处理时间和日期是很常见的需求。基础的java内置工具类只有Date和Calendar,但是这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。 简介 Joda-Time提供了Java日期处理的优雅的替代品&…

IntelliJ IDEA 拉取gitlab项目

一、准备好Gitlab服务器及项目 http://192.168.31.104/root/com.saas.swaggerdemogit 二、打开 IntelliJ IDEA安装插件 打开GitLab上的项目,输入项目地址 http://192.168.31.104/root/com.saas.swaggerdemogit 弹出输入登录用户名密码,完成。 操作Comm…

【昕宝爸爸小模块】图文源码详解什么是线程池、线程池的底层到底是如何实现的

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…

发送HTTP POST请求并处理响应

发送HTTP POST请求并处理响应是Web开发中的常见任务。在Go语言中,可以使用net/http包来发送HTTP POST请求并处理响应。 以下是一个示例代码,演示了如何发送HTTP POST请求并处理响应: go复制代码 package main import ( "b…

代码随想录算法训练营day10|232.用栈实现队列、225.用队列实现栈

理论基础 232.用栈实现队列 225. 用队列实现栈 理论基础 了解一下 栈与队列的内部实现机智,文中是以C为例讲解的。 文章讲解:代码随想录 232.用栈实现队列 大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。 题目链…

Maven 依赖传递和冲突、继承和聚合

一、依赖传递和冲突 1.1 Maven 依赖传递特性 1.1.1 概念 假如有三个 Maven 项目 A、B 和 C,其中项目 A 依赖 B,项目 B 依赖 C。那么我们可以说 A 依赖 C。也就是说,依赖的关系为:A—>B—>C, 那么我们执行项目 …

性能优化-一文宏观理解OpenCL

本文主要对OpenCL做一个整体的介绍、包括环境搭建、第一个OpenCL程序、架构、优化策略,希望对读者有所收获。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础…

利用 ChatGPT 高效搜索:举一反三的思考方式,高效查找解决方案

文章目录 基础思路举一反三Go 语言 Web 框架延伸思考思考结论 本文只是我的一些尝试,基于 ChatGPT 实现系统化快速搜索某编程语言的特定领域相关包或者基于其他语言类推荐落地方案的尝试。 这篇文章中描述的方式不一定是好方式,但应该会有一定的启示作用…

Autosar --- CRC8 SAE J1850 CRC计算

前言 CRC计算一般用于通信中,用来保证一组数据的完整性。 发送方发送一组数据dataACRC检验码CRCa(CRC校验码由数据算出); 接收方接收到数据dataACRC校验码CRCa,接收方通过与发送方约定好的计算公式,计算出一…

*p++和(*p)++一样吗

大家好,今天给大家介绍*p和(*p)的区别,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 *p 和 (*p) 在 C/C 语言中具有不同的含义。 *p:这个表…

Java研学-Maven基础

一 概述 Maven是一个跨平台的项目管理工具,主要用于基于 Java 平台的项目(Maven 底层为Java)构建、依赖包管理和项目信息管理,只需要运行一条简单的命令,就能高效的完成构建动作   Maven 能提供一种项目的依赖配置&a…

精细微调技术在大型预训练模型优化中的应用

目录 前言1 Delta微调简介2 参数微调的有效性2.1 通用知识的激发2.2 高效的优化手段3 Delta微调的类别3.1 增量式微调3.2 指定式微调3.3 重参数化方法 4 统一不同微调方法4.1 整合多种微调方法4.2 动态调整微调策略4.3 超参数搜索和优化 结语 前言 随着大型预训练模型在自然语…