对Dueling DQN理论的深度分析。

2023-05-16

强化学习中Agent与环境的交互过程是由马尔可夫决策过程(Markov Decision Process, MDP)描述的。MDP对环境做了一个假设,称作马尔可夫性质,即下一时刻的状态只由上一时刻的状态和动作决定。
马尔可夫性质决定了值函数(状态值与动作值函数)可以写成递归的形式,即贝尔曼等式:
在这里插入图片描述
事实上,在很多任务中,或者使用深度神经网络对动作值函数和状态值函数进行参数化拟合时,我们是默认agent执行一个动作后得到的状态的是唯一的。此时,我们可以认为状态转移概率 P r Pr Pr是1。
这样的话,我们就可以更方便的理解上面的公式了。

贝尔曼等式清晰地展示了值函数之间的迭代规律,或者说是相邻两个时刻的值函数间的关系: 以状态值函数为例,当前时刻的状态值等于下一时刻的奖励 r t r_t rt与下一时刻的状态值的和的期望。
乍一看,这俩货的递归方法是一样的。除了多了一个动作 a t a_t at之外,其他地方没有任何区别。
事实上,这两者的区别在于求解最优状态值函数和最优动作值函数时才能变现出来。而人们设计深度强化学习是根据最优值函数的递推关系来设计网络结构的。
例如DQN,他们通过参数化的神经网络 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w)来表示最优动作值函数 Q ∗ ( s , a ) Q^{*}(s,a) Q(s,a)。state s t s_t st作为DQN的输入,其输出是对每个action a t a_t at的价值 Q ( s , a i ) Q(s,a_i) Q(s,ai)预测,比如left, right和up的价值分别预测2000,1000和3000。这里的 a i a_i ai的下标 i i i表示在状态s是agent可以执行的每个动作。

跟进一步的讲,Dueling DQN中,他们把这种思想体现的淋漓尽致。
然我们来梳理一下Dueling DQN的推导过程。主要是优势函数的推导和使用。
首先,强化学习定义了agent在一个轨迹上的累积折扣收益
G t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + . . . G_t=R_t+γ R_{t+1}+γ^2 R_{t+2}+γ^3 R_{t+3}+... Gt=Rt+γRt+1+γ2Rt+2+γ3Rt+3+...

G t G_{t} Gt 表示从 t t t时刻开始,未来所有奖励的加权求和。在 t t t时刻, G t G_{t} Gt是未知的,它依赖于未来所有状态和动作。

相应的,状态-动作价值函数((Action-value function))可以初步定义为:

Q π ( ( s t , a t ) = E [ G t ∣ S t = s t , A t = a t ] Q_{\pi}((s_{t},a_{t})=E[G_t|S_t=s_t,A_t=a_t] Qπ((st,at)=E[GtSt=st,At=at]

Q π ( s t , a t ) Q_{\pi }(s_{t},a_{t}) Qπ(st,at)是回报 G t G_{t} Gt的条件期望,将 t + 1 t+1 t+1时刻以后的状态和动作全部消掉。 Q π ( s t , a t ) Q_{\pi }(s_{t},a_{t}) Qπ(st,at)依赖于状态 s t s_{t} st、动作 a t a_{t} at以及策略 π \pi π

同样,状态值函数(State-value function)可以定义为:

V π ( s t ) = E [ Q π ( s t , A ) ] V_{\pi }(s_{t})=E\left [ Q_{\pi }(s_{t},A) \right ] Vπ(st)=E[Qπ(st,A)] (1)

这个公式说明,当前状态 s t s_t st的状态值函数等于该状态所有动作的状态动作值函数的期望注意这个公式(1)里的大写的动作 A A A。这个很有用啊,兄弟。它是后面推导Dueling DQN的关键呐。纯纯的都是科技与狠活…

为了满足一些把期望都忘记的同学的需求,我举个小小的例子解释一下什么是期望,以离散型为例:
假设张三在玩射击游戏,打气球,共可以射击4次。射中4次的概率是0.1,射中3次的概率是0.4,射中2次的概率是0.3,射中1次的概率是0.1,射中0次的概率是0.2。分别可以得到5元,4元,3元,2元,1元。

那么,这次游戏的期望就是0.15+0.44+0.33+0.22+0.1+1=2.06

这个时候,我们把射中个数的概率当成策略函数 π ( a ∣ s ) \pi(a|s) π(as),把得到的钱当做动作值函数。

结合下面这个图,这个公式(1)看这是不是很舒心了?就更明了了。

在这里插入图片描述
V π ( s t ) V_{\pi }(s_{t}) Vπ(st) Q π ( s t , a t ) Q_{\pi }(s_{t},a_{t}) Qπ(st,at)的期望,将 Q π ( s t , a t ) Q_{\pi }(s_{t},a_{t}) Qπ(st,at)中的动作 a t a_{t} at消掉。 V π ( s t ) V_{\pi }(s_{t}) Vπ(st)依赖于状态 s t s_{t} st 和策略 π ( a ∣ s ) \pi(a|s) π(as)

下面开始了,其实上面说的那些公式都是浮云,深度强化学习的目标是直接拟合最优状态值函数或动作值函数。

所以我们需要对最优动作值函数和最优状态值函数之间的关系进行推导:

直观的,最优动作价值函数(Optimal action-value function):

Q ∗ ( s , a ) = m a x π Q π ( s , a ) Q^{\ast }(s,a)=max_{\pi }Q_{\pi }(s,a) Q(s,a)=maxπQπ(s,a)

我们再回顾一下,DQN的输出是在状态 s s s下每个动作的值函数。比方说我们有三个动作,这里的 m a x ( ) max() max()函数求的就是 Q Q Q值最大的那个动作的动作值函数的值,即 Q ∗ ( s , a ) Q^{\ast }(s,a) Q(s,a)

动作价值函数 Q π ( s t , a t ) Q_{\pi }(s_{t},a_{t}) Qπ(st,at)依赖于策略 π \pi π,对 Q π ( s t , a t ) Q_{\pi }(s_{t},a_{t}) Qπ(st,at)关于 π \pi π求最大值,消除掉 π \pi π,得到 Q ∗ ( s , a ) Q^{\ast }(s,a) Q(s,a) Q ∗ ( s , a ) Q^{\ast }(s,a) Q(s,a)只依赖于状态 s s s和动作 a a a,不依赖于策略 π \pi π Q ∗ ( s , a ) Q^{\ast }(s,a) Q(s,a)用于评价在状态 s s s下做动作 a a a的好坏。

进一步的,我们写一下最优状态值函数
最优状态价值函数(Optimal state_value function):

V ∗ ( s t ) = m a x π V π ( s t ) V^{\ast }(s_{t})=max_{\pi }V_{\pi }(s_{t}) V(st)=maxπVπ(st) (2)

这个也很好解释,

V π ( s ) V_{\pi }(s) Vπ(s)关于 π \pi π求最大值,消除掉 π \pi π,得到 V ∗ ( s ) , V ∗ ( s ) V^{\ast }(s),V^{\ast }(s) V(s)V(s)只依赖于状态 s s s, 不依赖于策略 π \pi π V ∗ ( s ) V^{\ast }(s) V(s)用于评价状态 s s s的好坏。

回到公式(1),我直接给复制到这边:
V π ( s t ) = E [ Q π ( s t , A ) ] V_{\pi }(s_{t})=E\left [ Q_{\pi }(s_{t},A) \right ] Vπ(st)=E[Qπ(st,A)] (1)
当前状态 s t s_t st的状态值函数等于该状态所有动作的状态动作值函数的期望。
然后,我们就可以定义优势函数了:
首先说一下优势函数的作用:

优势函数 A ( s , a ) A(s,a) A(s,a)用于度量在状态 s s s下执行动作a的合理性,它直接给出动作 a a a的性能与所有可能的动作的性能的均值的差值。如果该差值(优势)大于0,说明动作 a a a优于平均,是个合理的选择;如果差值(优势)小于0,说明动作 a a a次于平均,不是好的选择。度量状态 s s s下的动作 a a a的性能最合适的形式就是动作值函数(即Q函数) Q π ( s , a ) Q^π(s,a) Qπ(s,a);而度量状态s所有可能动作的性能的均值的最合适形式是状态值函数(即V函数) V π ( s , a ) V^π(s,a) Vπ(s,a)

先理解他的作用,然后再看它的公式,就一目了然了:
最优优势函数(Optimal advantage function):

A ∗ ( s , a ) = Q ∗ ( s , a ) − V ∗ ( s ) A^{\ast }(s,a)=Q^{\ast }(s,a)-V^{\ast }(s) A(s,a)=Q(s,a)V(s)

你看是不是很巧妙, Q ∗ ( s , a ) Q^{\ast }(s,a) Q(s,a)是当前DQN选择的最优动作的Q值,而 V ∗ ( s ) V^{\ast }(s) V(s)是对当前所有动作的评价, Q ∗ ( s , a ) Q^{\ast }(s,a) Q(s,a)是对当前DQN选择的动作的评价。如果Q大于零,说明选择对了。如果小于零说明选择错了。

当然,这个 A ∗ ( s , a ) A^{\ast }(s,a) A(s,a)是理论推导的,在Dueling DQN中是使用神经网络拟合的,即 A ∗ ( s , a ; w ) A^{\ast }(s,a;w) A(s,a;w)
然后,我们就有了对 Q ∗ ( s , a ) Q^{\ast }(s,a) Q(s,a)的弥补方法:

Q ∗ ( s , a ; w ) = V ∗ ( s ; α ) + A ∗ ( s , a ; β ) Q^{\ast }(s,a;w)=V^{\ast }(s;\alpha)+A^{\ast }(s,a;\beta) Q(s,a;w)=V(s;α)+A(s,a;β)

在这个公式中, w , α , β w,\alpha,\beta w,α,β表示拟合这三者的神经网络的参数。
这个公式的想法就是:

针对DQN当前计算的动作的值函数 Q ∗ ( s , a ; w ) Q^{\ast }(s,a;w) Q(s,a;w),如果DQN计算错了,那么 A ∗ ( s , a ; β ) A^{\ast }(s,a;\beta) A(s,a;β)是小于零的,此时就让他减去一点。如果DQN计算对了,那 A ∗ ( s , a ; β ) A^{\ast }(s,a;\beta) A(s,a;β)是大于零的,那么就让它更大,从而增加在该状态时选择该动作的优势。

其实,理论推导是很合理的。在表格形强化学习中,这种方法很强,优势很明显。但是,当我们使用神经网络拟合时,其实已经很玄学了。

强化学习1-基础概念(state,action,reward,policy)

强化学习2-动作价值函数&DQN

强化学习笔记3

强化学习中值函数与优势函数的估计方法

深度强化学习-Dueling DQN算法原理与代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对Dueling DQN理论的深度分析。 的相关文章

  • CANanlystII 基于linux的二次开发实践

    1 USBCAN分析仪国内现状 这是目前国内市场上的USBCAN分析仪现状 2 创芯科技产品 创芯科技的这个红色盒子是我比较下来综合性价比最高的 同时支持windows和linux的设备只要320元左右 你既可以用可视化界面发送 接收报文
  • AXI DMA总结、内核axidmatest.c测试程序分析、SG mode

    AXI DMA 概述 xff1a XILINX提供的AXI DMA支持Scatter Gather mode和Direct Register mode 数据位宽支持32 64 128 256 512 1024bits xff0c strea
  • ZYNQ 平台 AD9361实现网络通信的一种方案+网卡驱动分析及实现

    声明 xff1a 文中若有不合理的地方 xff0c 欢迎讨论学习及指正 xff0c 本文仅仅涉及软件部分的代码 xff0c 不阐述逻辑代码的实现 功能 xff1a 通过AD9361芯片实现无线组网 xff0c 能实现视频 文件 音频等传输
  • MTD分析

    概述 xff1a 本文对mtd的整个结构进行了分析 xff0c 分析得并非很深入 xff0c 但可以了解大体框架和目录结构 xff0c 另外本文会对源码文件进行分析 xff0c 大致描述其作用 xff0c 针对本文的内容中 xff0c 如有
  • CAN总线详解(转)

    1 简介 CAN是控制器局域网络 Controller Area Network CAN 的简称 xff0c 是一种能够实现分布式实时控制的串行通信网络 优点 xff1a 传输速度最高到1Mbps xff0c 通信距离最远到10km xff
  • Linux Socket CAN——驱动开发(转)

    Linux Socket CAN驱动开发 一 CAN总线协议 CAN是Controller Area Network 控制器局域网 的缩写 CAN通信协议在1986年由德国电气商博世公司所开发 xff0c 主要面向汽车的通信系统 现已是IS
  • Joint state with name: “base_l_wheel_joint” was received but not found in URDF

    ROS melodic下运行出现 WARN xff1a Joint state with name base l wheel joint was received but not found in URDF 原因是在robot描述文件URD
  • 已解决 vmware 虚拟机安装后没有虚拟网卡问题

    我用的方法是重装vmware xff0c 使用的是win10的系统 之前安装网ubuntu以后 xff0c 发现主机并没有虚拟网卡 xff0c 也百度了各种方法 xff0c 然而并没有什么用 xff0c 也问了很多人 xff0c 他们也提供
  • rk3399下pwm驱动

    现在记录一下rk3399下pwm的驱动编写 xff0c 下面是内核pwm的API xff0c 从开源论坛复制 xff08 firefly的开源论坛里面的Wiki教程 xff09 1 在要使用 PWM 控制的设备驱动文件中包含以下头文件 xf
  • rk3399下spi驱动

    SPI 使用 Note xff1a 本文从firefly wiki截取 SPI是一种高速的 xff0c 全双工 xff0c 同步串行通信接口 xff0c 用于连接微控制器 传感器 存储设备等 Firefly RK3399 开发板提供了 SP
  • rk3399 u-boot修改开机logo以及开机动画和开机视频

    首先分析了一下uboot启动流程中的一部分代码 xff0c 如下 第一部分 xff1a 开机logo xff08 下面代码分析排版有点乱 xff0c 可以忽略 xff09 1 board late init rk33xx c board r
  • VMware 虚拟网卡防火墙问题

    看了很多人遇到过一段时间会自己删除虚拟网卡的问题 xff0c 这里做一个补充 xff0c 关于防火墙问题 xff0c 如下 这里点进去 点击更改设置 xff08 先找到下图这一项 xff09 最后记得保存更改 xff0c 关于VMware的
  • postman汉化包下载

    postman汉化包 https github com hlmd Postman cn releases postman官网下载地址 Download Postman Get Started for Free
  • 一帧数据接收方法

    最近在做485数据通讯 xff0c 遇到一些通讯问题 xff0c 特意去查找资料 xff0c 一帧数据接收有三种方法 xff0c 现分享如下 xff1a 第一种方法 xff1a 根据帧头和帧尾进行校验 xff0c 串口发送2字节例如 xff
  • 如何使用RTKLIB进行RTK定位(一)

    今天从这个demo xff0c 教给大家如何使用RTKLIB进行RTK定位 xff0c 包括配置文件 数据等 xff1b RTKLIB源码和exe下载地址 xff1a RTKLIB An Open Source Program Packag
  • C++ “::” 作用域符 双冒号

    一 是作用域符 xff0c 是运算符中等级最高的 xff0c 它分为三种 1 global scope 全局作用域符 xff09 xff0c 用法 xff08 name 2 class scope 类作用域符 xff09 xff0c 用法
  • OpenMv测距(Apriltag)

    利用OpenMv测离Apriltag的距离 xff08 其他色块啥的算法都差不多 xff0c 主要是Apriltag精确一些 xff09 span class token comment 本次利用OpenMv单目测距Apriltag离摄像头
  • CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Qt5Core/Qt5CoreConfig.cmake:27 (message)

    CMake Error at usr lib x86 64 linux gnu cmake Qt5Core Qt5CoreConfig cmake 27 message 在catkin make的时候 xff0c 如果提示 so文件报错 x
  • Deep-Sort多目标追踪算法代码解析

    Deep SORT是多目标跟踪 Multi Object Tracking 中常用到的一种算法 xff0c 是一个Detection Based Tracking的方法 这个算法工业界关注度非常高 xff0c 在知乎上有很多文章都是使用了D
  • 红黑树的查找时间复杂度O(logn)

    红黑树查找时间复杂度 如果二叉排序树是平衡的 xff0c 则n个节点的二叉排序树的高度为Log2n 43 1 其查找效率为O Log2n xff0c 近似于折半查找 如果二叉排序树完全不平衡 xff0c 则其深度可达到n xff0c 查找效

随机推荐

  • Ubuntu16.04环境下STM32和ROS间的串口通信

    目录 前言介绍 lt 1 gt 最终协议的样子 lt 2 gt 本方案提供的API实现的功能 原理 lt 1 gt 简要叙述 lt 2 gt 这里是如何使用共用体的 xff1f 前期准备 lt 1 gt 确保硬件连接 lt 2 gt 查看串
  • C++版本OpenCv教程(三十五 )Laplacian算子

    上述的边缘检测算子都具有方向性 xff0c 因此需要分别求取X方向的边缘和Y方向的边缘 xff0c 之后将两个方向的边缘综合得到图像的整体边缘 Laplacian算子具有各方向同性的特点 xff0c 能够对任意方向的边缘进行提取 xff0c
  • 【从零开始学深度学习编译器】五,TVM Relay以及Pass简介

    TVM Relay以及Pass简介 0x0 介绍0x2 Relay介绍0x2 1 使用Relay建立一个计算图0x2 2 Module xff1a 支持多个函数 xff08 Graphs xff09 0x2 3 Let Binding an
  • 模型量化的原理与实践 —基于YOLOv5实践目标检测的PTQ与QAT量化

    这里写自定义目录标题 一 量化基础知识 1 1 Tops是什么意思 1 2 什么是定点数 1 3 定点数转换 1 4 什么是量化 1 5 定点计算 1 5 1 定点计算 误差计算 1 5 2 定点计算 内存对比 1 5 3 定点计算 速度对
  • TensorRT INT8量化说明文档

    TensorRT developer guide intro quantization 7 Working with INT8 7 1 Introduction to Quantization 7 1 1 Quantization Work
  • YOLO-NAS讲解

    Meet YOLO NAS New YOLO Object Detection Model Beats YOLOv6 amp YOLOv8 代码链接 What is YOLO NAS What does the NAS in YOLO NA
  • Windows下jupyter notebook的安装和使用

    1 安装 xff1a xff08 1 xff09 首先打开Windows命令终端 xff1a 输入命令 xff1a pip install jupyter notebook 慢慢等待安装完成就可以了 我的是已经是安装完成了 在命令行窗口中输
  • 无人驾驶模型预测控制carSIM和MATLAB联合仿真

    本例参照龚建伟的 无人驾驶车辆模型预测控制 书中第四章节 1 carSIM软件介绍 carSIM是由美国MSC公司开发的车辆动力学仿真软件 xff0c 它可以方便灵活地定义实验环境和试验过程 xff0c 准确预测和仿真汽车的操纵稳定性 动力
  • Ubuntu之间通过有线网sftp传输文件

    两台Ubuntu设备之间有线网直连 xff0c 通过sftp传输文件 xff1a 打开有线连接 xff0c 配置ipv4 xff0c 可参考下图 xff1a 两台Ubuntu设备使用同一个网关 xff0c 但是地址ip必须不同 xff0c
  • 虚拟机VMware15中安装Ubuntu18.04步骤

    先安装虚拟机VMware15 xff1a 下载地址 xff1a Windows 10 64位下载链接 xff1a pan baidu com s 1Q9MVsEzVVoeOb99lQ1tsVQ 提取码 xff1a dggh Windows
  • 机械手基础知识(2)之机械手的正运动学和逆运动学问题

    开篇总结 xff1a 机械手运动学是机器人控制中的重要研究内容 xff0c 得知机械手各关节变量的大小 xff0c 可以计算出机械手末端的位姿 xff0c 这个过程叫做机械手的正向运动学 xff1b 获得机械手末端在笛卡尔空间中的位姿 xf
  • 一看就懂的LSTM+Attention,此处用softmax求概率

    1 序言 首先 xff0c 我是看这两篇文章的 但是 xff0c 他们一个写的很笼统 xff0c 一个是根据Encoder Decoder和Query key value 第二个讲的太深奥了 xff0c 绕来绕去 xff0c 看了两天才知道
  • pytorch 保存模型+加载模型+修改部分层+冻结部分层+删除部分层

    pytorch的一些细节操作 本文以普通的CNN为例 1 实验用的模型 参考博客 2 模型代码 原始代码分成两个部分 xff1a 第一个是写CNN模型框架的py文件 xff0c cnn py 第二个是主文件 xff0c 用于下载数据和模型超
  • Windows下,Pytorch使用Imagenet-1K训练ResNet的经验(有代码)

    感谢中科院 xff0c 感谢东南大学 xff0c 感谢南京医科大 xff0c 感谢江苏省人民医院以的赞助 题记 只有被ImageNet真正殴打过一次才算是真的到了深度学习的坑边 xff0c 下一步才是入坑 引用装备所兰海大佬的一句话 xff
  • 实际的机械臂控制(8)使用find_object3D和Kinect2实现目标跟踪(基于python)

    单纯的炫耀我的新机械臂和留下联系方式 话不多说了 由于很多向入门机械臂的人不知道如何把视觉算法检测到目标坐标从图像坐标系转换到机器人坐标系 就这一关 xff0c 让好多人包括我 xff0c 在这块卡了很久 以前我用的是小强机械臂 xff0c
  • python生成pkl文件(pkl文件的读取和写入)

    我在训练UCF101数据集的时候 xff0c 遇到一个大高玩使用pkl文件 xff0c 一开始使用它们的数据炮的好好的 后来开始跑自己的数据时 xff0c 就出问题了 不知道这个pkl到底是个什么东西 原始的那个大高玩的ucf101的标签数
  • Pytorch(Python)中的itertools.count()函数

    在看深度强化学习DQN代码时 xff0c 遇到这段代码 xff0c 搞了好久都没看明白 完整代码参考这个博客 span class token keyword for span t span class token keyword in s
  • 深度强化学习算法调参

    深度强化学习调参技巧 xff1a 以D3QN TD3 PPO SAC算法为例 这个参考链接 如何选择深度强化学习算法 xff1f 参考链接 影响PPO算法性能的10个关键技巧 xff08 附PPO算法简洁Pytorch实现 xff09 主要
  • c语言连接多个字符串(strcat函数实现)

    span style font family KaiTi GB2312 font size 18px background color rgb 255 255 255 想要用c语言实现字符串的连接 xff0c 尤其是多个字符串的连接 xff
  • 对Dueling DQN理论的深度分析。

    强化学习中Agent与环境的交互过程是由马尔可夫决策过程 Markov Decision Process MDP 描述的 MDP对环境做了一个假设 xff0c 称作马尔可夫性质 xff0c 即下一时刻的状态只由上一时刻的状态和动作决定 马尔