强化学习:值函数近似【Deep Q-Network,DQN,Deep Q-learning】

news2024/11/25 10:55:04

强化学习笔记

主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程,个人觉得赵老师的课件深入浅出,很适合入门.

第一章 强化学习基本概念
第二章 贝尔曼方程
第三章 贝尔曼最优方程
第四章 值迭代和策略迭代
第五章 强化学习实例分析:GridWorld
第六章 蒙特卡洛方法
第七章 Robbins-Monro算法
第八章 多臂老虎机
第九章 强化学习实例分析:CartPole
第十章 时序差分法
第十一章 值函数近似【DQN】


文章目录

  • 强化学习笔记
  • 一、状态值函数近似
  • 二、动作值函数的近似
    • 1 Deep Q-learning
  • 三、参考资料


在前面介绍的方法中,我们的 v ( s ) v(s) v(s) q ( s , a ) q(s,a) q(s,a)都是用如下表格形式来呈现的:

截屏2024-06-27 11.45.45

这对于 s , a s,a s,a离散且有限的时候是可行的,如果 s , a s,a s,a连续或者 ∣ A ∣ , ∣ S ∣ |\mathcal{A}|,|\mathcal{S}| A,S很大,前面介绍的算法,比如值迭代和策略迭代或者时序差分法就会面临两个问题:

  1. 计算过程需要的内存急剧上升;
  2. 泛化能力一般.

这时候我们引入一类新的方法——值函数估计,顾名思义, v ( s ) v(s) v(s) s s s的函数, q ( s , a ) q(s,a) q(s,a) s 、 a s、a sa的函数,所以我们要得到这两个函数,可以用一些机器学习的方法,比如常见的曲线拟合的方法,还可以结合深度学习的方法来进行对 v ( s ) , q ( s , a ) v(s),q(s,a) v(s),q(s,a)的估计。

一、状态值函数近似

首先我们介绍比较经典的线性方法,近似值函数 v ^ ( ⋅ , w ) \hat{v}(\cdot,\mathbf{w}) v^(,w)是权向量 w w w的线性函数。对应于每个状态 s s s,有一个实值向量 x ( s ) ≐ ( x 1 ( s ) , x 2 ( s ) , … , x d ( s ) ) \mathbf{x}(s)\doteq(x_1(s),x_2(s),\ldots,x_d(s)) x(s)(x1(s),x2(s),,xd(s)),与 w w w具有相同的维数。线性方法通过 w w w x ( s ) \mathbf{x}(s) x(s)的内积来近似状态值函数:
v ^ ( s , w ) ≐ w ⊤ x ( s ) ≐ ∑ i = 1 d w i x i ( s ) . ( 1 ) \hat{v}(s,\mathbf{w})\doteq\mathbf{w}^\top\mathbf{x}(s)\doteq\sum_{i=1}^dw_ix_i(s).\qquad(1) v^(s,w)wx(s)i=1dwixi(s).(1)
其中 x ( s ) x(s) x(s)是状态 s s s特征向量,这里介绍一种常见的多项式构造方法,更多的特征向量构造方法可以见参考文献2的9.5小节。假设 s s s是二维的,那么一个可能的构造为 x ( s ) = ( 1 , s 1 , s 2 , s 1 s 2 ) ∈ R 4 x(s)=(1,s_1,s_2,s_1s_2)\in\mathbb{R}^4 x(s)=(1,s1,s2,s1s2)R4,这就得到一个4维的特征向量,同理可以构造其他格式的多项式特征向量。

现在我们有了近似状态值函数的形式,那么如何估计(1)中的参数 w w w呢?这就用到机器学习里常用的方法——随机梯度下降。假设真实状态值函数为 v π ( s ) v_{\pi}(s) vπ(s),那么我们可以定义一个平方误差:
J ( w ) = E [ ( v π ( s ) − v ^ ( s , w ) ) 2 ] ( 2 ) J(w)=\mathbb{E}[(v_{\pi}(s)-\hat{v}(s,\mathbf{w}))^2]\qquad(2) J(w)=E[(vπ(s)v^(s,w))2](2)
这里的期望是对 s ∈ S s\in\mathcal{S} sS求的,一个常见的假设是所有 s s s均匀分布,那么可以得到:
J ( w ) = 1 ∣ S ∣ ∑ s ( v π ( s ) − v ^ ( s , w ) ) 2 J(w)=\frac{1}{|\mathcal{S}|}\sum_s(v_{\pi}(s)-\hat{v}(s,\mathbf{w}))^2 J(w)=S1s(vπ(s)v^(s,w))2
为了估计 w w w,我们的目标是最小化 J ( w ) J(w) J(w),由梯度下降法可得:
w k + 1 = w k − α k ∇ w J ( w k ) w_{k+1}=w_k-\alpha_k\nabla_wJ(w_k) wk+1=wkαkwJ(wk)
由(2)式推导梯度如下:
∇ w J ( w ) = ∇ w E [ ( v π ( s ) − v ^ ( s , w ) ) 2 ] = E [ ∇ w ( v π ( s ) − v ^ ( s , w ) ) 2 ] = 2 E [ ( v π ( s ) − v ^ ( s , w ) ) ( − ∇ w v ^ ( s , w ) ) ] = − 2 E [ ( v π ( s ) − v ^ ( s , w ) ) ∇ w v ^ ( s , w ) ] \begin{aligned} \nabla_wJ(w)&= \nabla_w\mathbb{E}[(v_\pi(s)-\hat{v}(s,w))^2] \\ &=\mathbb{E}[\nabla_w(v_\pi(s)-\hat{v}(s,w))^2] \\ &=2\mathbb{E}[(v_\pi(s)-\hat{v}(s,w))(-\nabla_w\hat{v}(s,w))] \\ &=-2\mathbb{E}[(v_\pi(s)-\hat{v}(s,w))\nabla_w\hat{v}(s,w)] \\ \end{aligned} wJ(w)=wE[(vπ(s)v^(s,w))2]=E[w(vπ(s)v^(s,w))2]=2E[(vπ(s)v^(s,w))(wv^(s,w))]=2E[(vπ(s)v^(s,w))wv^(s,w)]但这样计算梯度需要对所有 s s s求期望,不实用,所以采用随机梯度下降的方式,任取一个样本:
w t + 1 = w t + α t ( v π ( s t ) − v ^ ( s t , w t ) ) ∇ w v ^ ( s t , w t ) , ( 3 ) w_{t+1}=w_t+\alpha_t(v_\pi(s_t)-\hat v(s_t,w_t))\nabla_w\hat v(s_t,w_t),\qquad(3) wt+1=wt+αt(vπ(st)v^(st,wt))wv^(st,wt),(3)其中 s t ∈ S s_t\in\mathcal{S} stS,但是这个迭代格式还有一个问题,我们需要知道真实的 v π ( s ) v_{\pi}(s) vπ(s),显然我们是不知道的,并且我们要估计的就是这个 v π ( s ) v_{\pi}(s) vπ(s),那么我们用一个近似值来替代迭代格式中的 v π ( s ) v_{\pi}(s) vπ(s),有如下两种方法:

  1. 基于蒙特卡洛学习的状态值函数逼近
    假设 g t g_t gt为某个episode里的从 s t s_t st开始的累积折扣回报。那么我们可以用 g t g_t gt来近似 v π ( s t ) v_\pi(s_t) vπ(st). 迭代格式(3)算法变为
    w t + 1 = w t + α t ( g t − v ^ ( s t , w t ) ) ∇ w v ^ ( s t , w t ) . w_{t+1}=w_t+\alpha_t(g_t-\hat{v}(s_t,w_t))\nabla_w\hat{v}(s_t,w_t). wt+1=wt+αt(gtv^(st,wt))wv^(st,wt).
  2. 基于TD学习的状态值函数逼近
    结合TD学习方法,将 r t + 1 + γ v ^ ( s t + 1 , w t ) r_{t+1}+\gamma\hat{v}(s_{t+1},w_t) rt+1+γv^(st+1,wt)视为对 v π ( s t ) v_\pi(s_{t}) vπ(st). 的一种近似。因此,迭代格式(3)可表示为
    w t + 1 = w t + α t [ r t + 1 + γ v ^ ( s t + 1 , w t ) − v ^ ( s t , w t ) ] ∇ w v ^ ( s t , w t ) . ( 4 ) w_{t+1}=w_ t + \alpha _ t [ r_ { t + 1 } + \gamma \hat { v } ( s_ { t + 1 }, w_ t ) - \hat { v } ( s_ t, w_ t ) ] \nabla _ w \hat { v } ( s_ t, w_ t ).\qquad(4) wt+1=wt+αt[rt+1+γv^(st+1,wt)v^(st,wt)]wv^(st,wt).(4)

二、动作值函数的近似

上面(4)给出了结合TD learning来求 v ^ ( s , w ) \hat{v}(s,w) v^(s,w)的迭代格式,显然我们可以把 ( 4 ) (4) (4)改成SARSA或者Q-learning就能得到基于TD学习的动作值函数逼近的迭代格式,此处不再赘述,详情参考强化学习:时序差分法.下面来介绍深度强化学习里面的一个经典的模型——Deep Q-learning,也叫Deep Q-Network(DQN).

1 Deep Q-learning

DQN方法旨在最小化如下的目标函数:
J ( w ) = E [ ( R + γ max ⁡ a ∈ A ( S ′ ) q ^ ( S ′ , a , w ) − q ^ ( S , A , w ) ) 2 ] , J(w)=\mathbb{E}\left[\left(R+\gamma\max_{a\in\mathcal{A}(S')}\hat{q}(S',a,w)-\hat{q}(S,A,w)\right)^2\right], J(w)=E[(R+γaA(S)maxq^(S,a,w)q^(S,A,w))2],
参数 w w w出现在两个地方,求导不好求,所以DQN的一个核心思想是:采用两个网络来分别近似 q ^ ( S ′ , a , w ) \hat{q}(S',a,w) q^(S,a,w) q ^ ( S , A , w ) \hat{q}(S,A,w) q^(S,A,w),在更新参数时,先把 q ^ ( S ′ , a , w ) \hat{q}(S',a,w) q^(S,a,w)看做固定值,那么 J ( w ) J(w) J(w)就只有一个地方有 w w w求导就相对容易,可以利用梯度下降对近似 q ^ ( S , A , w ) \hat{q}(S,A,w) q^(S,A,w)网络的参数进行更新。那么如何对近似 q ^ ( S ′ , a , w ) \hat{q}(S',a,w) q^(S,a,w)目标网络的参数进行更新呢?DQN提出可以设置一个参数 C C C,每迭代 C C C次,我们将 q ^ ( S , A , w ) \hat{q}(S,A,w) q^(S,A,w)网络的参数复制给target network,这样进行交替更新,最终可以得到一个近似动作值函数。

同时,提出DQN模型的论文还开创性的提出经验回放的技巧,简单来说就是将采样得到的数据 ( S , A , R , S ′ ) (S,A,R,S') (S,A,R,S)放入一个经验缓冲区 D D D,训练神经网络时就用 D D D里面的数据进行训练,这样做的好处是可以去除观测序列中的相关性并对数据分布的变化进行平滑。

下面是DQN算法的伪代码:

截屏2024-06-27 13.19.24

自从DQN的提出,研究人员对其进行了多种改进,如Double DQN、Dueling DQN和Prioritized Experience Replay等,这些改进进一步提升了DQN的性能和稳定性。DQN的提出是深度强化学习领域的重要里程碑,它展示了深度学习在强化学习中的巨大潜力,并为后续研究奠定了基础。

学习了DQN的理论知识后,具体如何实现参考我的这篇文章:基于强化学习DQN的股票预测【DQN的Python实践】.通过具体的代码,我们可以更加深入的理解DQN模型的构造以及实现细节.

三、参考资料

  1. Zhao, S… Mathematical Foundations of Reinforcement Learning. Springer Nature Press and Tsinghua University Press.
  2. Sutton, Richard S., and Andrew G. Barto. Reinforcement learning: An introduction. MIT press, 2018.
  3. Mnih, V., Kavukcuoglu, K.(2015). Human-level control through deep reinforcement learning. Nature, 518(7540), 529-533.

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

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

相关文章

开发自动回复信息的插件:代码的力量与智慧!

在信息爆炸的时代,自动回复信息的插件成为了许多用户和管理者的得力助手,这些插件能够根据预设的规则或算法,自动、快速、准确地回复用户的信息,极大地提高了沟通效率和用户体验。 而开发这样一款插件,离不开一系列精…

数字水产养殖中的鱼类追踪、计数和行为分析技术

随着全球人口增长和生态环境退化,传统捕捞已无法满足人类对水产品的需求,水产养殖成为主要的鱼类来源。数字水产养殖利用先进技术和数据驱动方法,对提高生产效率、改善鱼类福利和资源管理具有显著优势。 1 数字水产养殖的重要性 1.1 提高生…

汇聚荣做拼多多运营第一步是什么?

汇聚荣做拼多多运营第一步是什么?在众多电商平台中,拼多多凭借其独特的社交电商模式迅速崛起,吸引了大量消费者和商家的目光。对于希望在拼多多上开店的商家而言,了解如何进行有效运营是成功的关键。那么,汇聚荣做拼多多运营的第…

CSS的媒体查询:响应式布局的利器

关于CSS的媒体查询 CSS媒体查询是CSS层叠样式表(Cascading Style Sheets)中的一个核心功能,它使得开发者能够根据不同的设备特性和环境条件来应用不同的样式规则。这是实现响应式网页设计的关键技术,确保网站或应用能够在多种设备上,包括桌面…

flask 接收vuejs element el-upload传来的多个文件

el-upload通过action指定后端接口,并通过name指定传输的文件包裹在什么变量名中 <el-uploadclass="upload-demo"dragaction="https://ai.zscampus.com/toy/upload"multiplename="fileList":limit="10"accept=

World of Warcraft [CLASSIC] plugin lua

World of Warcraft [CLASSIC] plugin lua 魔兽世界lua脚本插件 World of Warcraft API - Wowpedia - Your wiki guide to the World of Warcraft D:\World of Warcraft\_classic_\Interface\AddOns zwf.lua function CountdownFunc()CountdownFrame CreateFrame("Fram…

【RedHat】使用VMware Workstation创建配置RedHat操作系统

目录 &#x1f31e;1.前言 &#x1f31e;2. 使用 VMware Workstation 创建配置RedHat &#x1f33c;2.1 VMware Workstation 创建虚拟机 &#x1f33c;2.2 安装RedHat 7.6 &#x1f30a;2.2.1 添加光盘 &#x1f30a;2.2.2 开始安装操作系统 &#x1f30a;2.2.3 系统初始…

大数据开发需要哪些职场知识

职场是个人情世故的江湖&#xff0c;除了专业技能&#xff0c;成功的大数据开发人员还需要掌握多种职场知识。以下是一些重要的职场知识和技能&#xff0c;结合实际例子详细说明。 目录 理论知识与工程实践理论知识工程实践例子 项目经验总结项目管理总结和反思例子 做事方式方…

指针并不是用来存储数据的,而是用来存储数据在内存中地址(内存操作/函数指针/指针函数)

推荐&#xff1a;1、4、5号书籍 1. 基本概念 首先&#xff0c;让小明了解指针的基本概念&#xff1a; 指针的定义&#xff1a;指针是一个变量&#xff0c;它存储的是另一个变量的地址。指针的声明&#xff1a;例如&#xff0c;int *p表示一个指向整数的指针变量p。 2. 形象…

RocketMQ:日常开发中有哪些使用MQ的场景

什么是消息队列&#xff1f; 消息队列是一种通信方法&#xff0c;允许应用程序通过发送和接收消息来互相通信。这些消息/任务/指令存储在一个中间介质中&#xff08;即队列&#xff09;&#xff0c;并由生产者发送&#xff0c;消费者接收。 使用场景 场景一&#xff1a;任务…

2024黑盾杯复现赛题MISC部分

一、一个logo 一张png图片&#xff0c;查看颜色通道即可发现flag 二、 学会Office 最好用联想自带的excel工具查看&#xff0c;我用WPS打开未解出题目 这里会发现有隐藏信息 隐藏信息为宏加密 。去百度了解宏加密后&#xff0c;发现有俩个宏&#xff0c;一个加密一个解密 执…

华为---配置基本的访问控制列表(ACL)

11、访问控制列表&#xff08;ACL&#xff09; 11.1 配置基本的访问控制列表 11.1.1 原理概述 访问控制列表ACL(Access Control List)是由permit或deny语句组成的一系列有顺序的规则集合&#xff0c;这些规则根据数据包的源地址、目的地址、源端口、目的端口等信息来描述。A…

uview中的utabs组件item字数不一致导致滑块偏移

给item单独设置宽度&#xff0c;使滑块计算准确 ::v-deep .u-scroll-box .u-tab-item {width: 80px !important;&:nth-child(3),&:nth-child(4),&:nth-child(5) {width: 60px !important;}flex: 1 1 0% !important; }效果如下&#xff1a;

让DroidVNC-NG支持中文输入

DroidVNC-NG支持控制端输入内容&#xff0c;但是仅支持英文字符&#xff0c;如果需要控制输入法软键盘输入中文的话就没办法了&#xff0c;经过摸索找到了解决办法。 这个解决办法有个条件就是让DroidVNC-NG成为系统级应用&#xff08;这个条件比较苛刻&#xff09;&#xff…

STL中的迭代器模式:将算法与数据结构分离

目录 1.概述 2.容器类 2.1.序列容器 2.2.关联容器 2.3.容器适配器 2.4.数组 3.迭代器 4.重用标准迭代器 5.总结 1.概述 在之前&#xff0c;我们讲了迭代器设计模式&#xff0c;分析了它的结构、角色以及优缺点&#xff1a; 设计模式之迭代器模式-CSDN博客 在 STL 中&a…

俯视LLM的灵魂:一文搞懂稀疏自动编码器

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

【python】OpenCV—Color Map

文章目录 cv2.applyColorMapcv2.putText小试牛刀自定义颜色 参考学习来自 OpenCV基础&#xff08;21&#xff09;使用 OpenCV 中的applyColorMap实现伪着色 cv2.applyColorMap cv2.applyColorMap() 是 OpenCV 中的一个函数&#xff0c;用于将灰度图像或单通道图像应用一个颜色…

【秋招刷题打卡】Day03-二分系列之-二分答案

Day03-二分系列之-二分答案 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#xff0c;…

HexPlane代码复现(十几分钟就复现成功的一篇论文代码!!!!!)

https://caoang327.github.io/HexPlane/ 一、 python setup.py develop命令用不了了 running develop /home/uriky/anaconda3/envs/hexplane/lib/python3.8/site-packages/setuptools/command/easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is d…

仓库管理系统14--仓库设置

1、添加窗体 <UserControl x:Class"West.StoreMgr.View.StoreView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.openxmlformats.…