Datawhale 强化学习笔记(二)马尔可夫过程,DQN 算法

news2024/11/26 4:25:21

文章目录

  • 参考
  • 马尔可夫过程
  • DQN 算法(Deep Q-Network)
    • 如何用神经网络来近似 Q 函数
    • 如何用梯度下降的方式更新网络参数
      • 强化学习 vs 深度学习
    • 提高训练稳定性的技巧
      • 经验回放
      • 目标网络
    • 代码实战
  • DQN 算法进阶
    • Double DQN
    • Dueling DQN 算法
    • 代码实战

参考

在线阅读文档
github 教程
开源框架 JoyRL datawhalechina/joyrl: An easier PyTorch deep reinforcement learning library. (github.com)

马尔可夫过程

强化学习是解决序列决策问题的有效方法,而序列决策问题的本质是在与环境交互的过程中学习到一个目标的过程。
马尔可夫决策过程是强化学习中最基本的问题模型,它能够以数学的形式来表达序列决策过程。

在这里插入图片描述
比较重要的概念

马尔科夫决策过程
马尔科夫性质
回报
状态转移矩阵

DQN 算法(Deep Q-Network)

它的主要贡献就是在 Q-learning 算法的基础上引入了深度神经网络来近似动作价值函数 ,从而能够处理高维的状态空间。除了用深度网络代替 Q 表之外, DQN 算法还引入了一些技巧,如经验回放和目标网络。

如何用神经网络来近似 Q 函数

类似于 Q表,可以就用来近似动作价值函数 Q ( s , a ) Q(s, a) Q(s,a), 即将状态向量 s s s 作为输入,并输出所有动作 a = ( a 1 , a 2 , . . . , a n ) a=(a_1, a_2,...,a_n) a=(a1,a2,...,an)对应的价值。
y = Q θ ( s , a ) y = Q_{\theta}(s, a) y=Qθ(s,a)
Q 表是一个二维表格,而神经网络是一个实实在在的函数。前者只能处理离散的状态和动作空间,而神经网络可以处理连续的状态和动作空间。在 Q 表中我们描述状态空间的时候一般用的是状态个数,而在神经网络中我们用的是状态维度。
无论是 Q 表还是 DQN 中的神经网络,它们输出的都是每个动作对应的 Q 值,即预测,而不是直接输出动作。要想输出动作,就需要额外做一些处理,例如结合贪心算法选择 Q 值最大对应的动作等,这就是我们一直强调的控制过程。

如何用梯度下降的方式更新网络参数

在这里插入图片描述

强化学习 vs 深度学习

训练方式是一样的,都是将样本喂入网络中,然后通过梯度下降的方式来更新网络参数,使得损失函数最小,即能够逼近真实的 Q 值。

不同点

  • 强化学习用于训练的样本(包括状态、动作和奖励等等)是与环境实时交互得到的,而深度学习则是事先准备好的。
  • 本质上来讲强化学习和深度学习所要解决的问题是完全不同的,前者用于解决序列决策问题,后者用于解决静态问题例如回归、分类、识别等任务

提高训练稳定性的技巧

经验回放

这个样本一般包括当前的状态 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 以及终止状态的标志 done (通常不呈现在公式中),也叫做一个状态转移(transition ),即 ( 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 )。在 Q-learning 算法中,每次交互得到一个样本之后,就立马拿去更新模型了。

这样的方式用在神经网络中会有一些问题,这跟梯度下降有关。首先每次用单个样本去迭代网络参数很容易导致训练的不稳定,从而影响模型的收敛,在深度学习基础的章节中我们也讲过小批量梯度下降是目前比较成熟的方式。其次,每次迭代的样本都是从环境中实时交互得到的,这样的样本是有关联的,而梯度下降法是基于一个假设的,即训练集中的样本是独立同分布的。
经验回放会把每次与环境交互得到的样本都存储在一个经验回放中,然后每次从经验池中随机抽取一批样本来训练网络。
在这里插入图片描述
在训练初期智能体生成的样本虽然能够帮助它朝着更好的方向收敛,但是在训练后期这些前期产生的样本相对来说质量就不是很好了。经验回放的容量需要有一定的容量限制,太小导致收集到的样本具有一定的局限性,太大失去了经验本身的意义。

目标网络

使用了一个每隔若干步才更新的目标网络。
目标网络和当前网络结构都是相同的,都用于近似 Q 值,在实践中每隔若干步才把每步更新的当前网络参数复制给目标网络,这样做的好处是保证训练的稳定,避免 Q 值的估计发散。如果当前有个小批量样本导致模型对
值进行了较差的过估计,如果接下来从经验回放中提取到的样本正好连续几个都这样的,很有可能导致 Q
值的发散。
在这里插入图片描述
对于目标网络的作用,这里举一个典型的例子,这里的目标网络好比皇帝,而当前网络相当于皇帝手下的太监,每次皇帝在做一些行政决策时往往不急着下定论,会让太监们去收集一圈情报,然后集思广益再做决策。

代码实战

github 教程 中 notebooks 中的第7章代码

和大多数强化学习算法一样,分为交互采样和模型更新两个步骤。
其中交互采样的目的就是与环境交互并产生样本,模型更新则是利用得到的样本来更新相关的网络参数,更新方式涉及每个强化学习算法的核心。
在这里插入图片描述

根据强化学习的原理我们需要优化的是对应状态下不同动作的长期价值,然后每次选择价值最大对应的动作就能完成一条最优策略,使用神经网络表示Q表时也是如此,我们将输入的状态数作为神经网络的输入层,动作数作为输出层,这样的神经网络表达的功能就跟在Q learning中的Q表是一样的,只不过具有更强的鲁棒性。

DQN 算法进阶

改进的角度不同,本质上都是通过提高预测的精度控制过程中的探索度来改善算法性能。

  • 网络层面

    • Double DQN (google DeepMind 2015年12月提出)
      • 通过引入两个网络解决 Q 值过估计的问题。改进目标 Q 值的计算来优化算法
    • Dueling DQN
      • 通过优化神经网络的结构
    • Noisy DQN
      • 优化网络结构,但不是为了提高Q值的估计,而是增强网络的探索能力
      • 引入噪声层
  • 经验回放

    • PER DQN(优先经验回放 ,prioritized experience replay)
      • 优化深度网络中梯度下降的方式,或者说网络参数更新的方式
      • 和数据结构中优先队列与普通队列一样,会在采样过程中赋予经验回放中样本的优先级。

Double DQN

动作选择和动作评估两个过程分离开来,从而减轻了过估计问题。
在 DQN 算法中,大臣是不管好的还是坏的情报都会汇报给皇帝的,而在 Double DQN 算法中大臣会根据自己的判断将自己认为最优的情报汇报给皇帝,即先在策略网络中找出最大 Q 值对应的动作。这样一来皇帝这边得到的情报就更加精简并且质量更高了,以便于皇帝做出更好的判断和决策,也就是估计得更准确了。

DQN 将下一个状态对应的最大Q值作为实际值(因为实际值通常不能直接求得,只能近似),这种做法实际上只是一种近似,可能会导致过估计等问题。 而在Double DQN中,它不直接通过最大化的方式选取目标网络计算的所有可能 Q 值,而是首先通过估计网络选取最大 Q 值对应的动作

Dueling DQN 算法

在这里插入图片描述

代码实战

github 教程 中 notebooks 中的第8章代码

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

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

相关文章

【印象深刻的实战经历】两次全国大学生数学建模经历分享

目录 🌼初次接触 初次参加培训 分享培训所得 比赛开始 🔥再次接触 参加校赛 机缘巧合 再次培训 比赛开始 📕技巧总结 从问题的实际意义分析大体上可分为 从问题的解决方法上分析 做国赛题目的步骤 赛前准备 选题 寻找思路…

蓝桥杯每日一题----货物摆放

题目 分析 上来一看,三个for循环,从1到n,寻找满足lwhn的个数,但是这样根本跑不出来答案,n太大了,1e15的级别,O(n)的时间复杂度都不行,更何况是O(…

Docker(一)简介和基本概念

一、简介 本章将带领你进入 Docker 的世界。 什么是 Docker? 用它会带来什么样的好处? 好吧,让我们带着问题开始这神奇之旅。 1.什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目&…

Jenkins的环境部署,(打包、发布、部署、自动化测试)

一、Tomcat环境安装 1.安装JDK(Java环境) JDK下载地址:Java Downloads | Oracle 安装好后在系统环境变量里配置环境变量: ①添加JAVA_HOME 变量名:JAVA_HOME变量值:C:\Program Files\Java\jdk1.8.0_18…

docker安装运行CloudBeaver并设置默认语言为中文

1、CloudBeaver CloudBeaver 是一个开源的 Web 数据库管理工具,它提供了一个基于浏览器的用户界面,允许用户管理和操作各种类型的数据库。CloudBeaver 支持多种数据库系统,包括但不限于 PostgreSQL、MySQL、SQLite、Oracle、SQL Server 以及…

ClickHouse学习笔记(六):ClickHouse物化视图使用

文章目录 1、ClickHouse 物化视图2、物化视图 vs 普通视图3、物化视图的优缺点4、物化视图的用法4.1、基本语法4.2、准备表结构4.3、准备数据4.4、查询结果 1、ClickHouse 物化视图 ClickHouse 的物化视图是一种查询结果的持久化,它的存在是为了带来查询效率的提升…

银河麒麟服务器操作系统搭建证书服务器并颁发可用于签名的证书步骤说明

银河麒麟服务器操作系统搭建证书服务器并颁发可用于签名的证书的方法与前面Centos7上(centos7 使用openssl 配置证书服务器并颁发证书(史上最详细版本)_centos phpinfo显示的openssl配置项为/etc/pki/tls/openssl.c-CSDN博客)是一…

N-140基于springboot,vue协同过滤推荐算法个性化购物商城

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatisredis 本…

Chondrex:Glycosaminoglycans Assay Kit(糖胺聚糖检测试剂盒)

糖胺聚糖(glycosaminoglycans,GAGs)是一种携带负电荷的多糖链,位于大多数结缔组织和许多不同类型细胞的细胞外基质(extracellular matrices, ECM)中以及细胞表面上。由重复双糖单位复合构成的糖胺聚糖可分为…

Kali在Vmware无法连接到网络,配置网络及解决办法

一.问题描述: 打开 Kali,无法连接到网络,虚拟机配置正常的。 尝试 ping 百度,出错: ping baidu.com 提示: ping: baidu.com: Temporary failure in name resolution二.解决办法: 1.首先在vmwa…

FaFu--练习复盘--1

1、输出图形及二维数组应用 1.1.输出图形 描述 编写程序打印n行如下图形&#xff0c;其中1≤n≤500。 输入用例 7 输出用例 具体实现 #include"stdio.h" int main(){int n,i,j;scanf("%d",&n);for(i 1; i< n;…

盘点 Top 10 最好用的开发者工具箱

He3 有 500 工具&#xff0c;支持自定义工具分类&#xff0c;可以在线使用也可以下载客户端到本地&#xff0c;但有部分工具只能下载客户端才能使用&#xff0c;AI 工具需要升级购买积分&#xff0c;页面简洁&#xff0c;没有广告&#xff0c;部分小工具开源&#xff1b;JSON和…

Python vs. Rust:打破三大障碍

在我周围的每个人都知道我是Python 的忠实粉丝。大约15年前&#xff0c;当我对 Mathworks Matlab 感到厌倦时&#xff0c;我开始使用Python。虽然Matlab的理念看起来不错&#xff0c;但在掌握了Python之后&#xff0c;我再也没有回头。我甚至成为了我所在大学的Python传道者&am…

结构体内存对齐的跨平台做法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 之前写了一篇文章&#xff1a;使用标准C库读文件时需要注意的一个问题&#xff0c;今天发现是错误的。正确的做法是使用#pragma pack预处理指令。示例程序…

idea社区版 MybatisCodeHelperPro插件使用介绍

文章目录 一、插件介绍二、idea社区版安装MybatisCodeHelperPro插件三、问题记录1. DatabaseHelper插件 加载不了部分数据库链接的列信息2. DatabaseHelper插件 数据库列显示顺序错乱3. MybatisCodeHelperPro插件 数据库字段不提示4. MybatisCodeHelperPro插件 特殊字段增加反引…

【北亚企安数据恢复】RAIDZ多块磁盘离线导致服务器崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; ORACLE SUN ZFS某型号存储&#xff0c;共40块磁盘组建存储池&#xff0c;其中的36块磁盘分为三组&#xff0c;每组12块&#xff0c;单个组使用ZFS特有的RAIDZ管理所有磁盘&#xff0c;RAIDZ级别为2&#xff1b;另外的4块磁盘作为全局热备。存储…

高效解决在本地计算机运行ubuntu服务器端的jupyter lab

文章目录 问题解决方案step1step2step3step4 问题 目前&#xff0c;网上没有什么详细的关于在本地计算机上运行服务器端jupyter lab的教程&#xff0c;由于个人计算机计算资源有限&#xff0c;我们需要利用服务器端的GPU实现高效训练 这篇文章将指导您如何使用 ssh 隧道在远…

Python学习从0到1 day4 python基础语法2 格式化输出和输入方法

其实我不是我&#xff0c;我是青山辽阔 ——24.1.14 一、百分号形式的格式化输出 1.普通输出 #1.定义一些变量 name 陈浩南 age 25 address 广州市天河区#2.变量的输出&#xff08;普通输出&#xff09; print(name) print(age) print(address)#3.Python中&#xff0c;还允…

pycharm import torch

目录 1 安装 2 conda环境配置 3 测试 开始学习Pytorch! 1 安装 我的电脑 Windows 11 Python 3.11 Anaconda3-2023.09-0-Windows-x86_64.exe cuda_11.8.0_522.06_windows.exe pytorch &#xff08;管理员命令行安装&#xff09; pycharm-community-2023.3.2.exe 2 c…

Vim命令大全

文章目录 简述&#xff1a;1. **命令模式&#xff08;Command Mode&#xff09;**2. **插入模式&#xff08;Insert Mode&#xff09;**3. **可视模式&#xff08;Visual Mode&#xff09;**4. **末行模式&#xff08;Ex Mode&#xff09;** 详细使用案例&#xff1a;1. **文件…