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

强化学习笔记

主要基于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.

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

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

相关文章

【升压电子烟方案】DC-DC电源升压恒压芯片FP6277+全极低功耗霍尔MH251在电子烟中的应用

电子烟是一种新型烟草制品,由于其健康、环保和口感多样化的特点,逐渐受到了消费者的青睐。 升压芯片作为电子烟的核心组件之一,主要作用是将输入的电压升高至合适的工作电压,霍尔传感器控制电子烟的使用状态,以确保电子…

springboot系列七: Lombok注解,Spring Initializr,yaml语法

老韩学生 LombokLombok介绍Lombok常用注解Lombok应用实例代码实现idea安装lombok插件 Spring InitializrSpring Initializr介绍Spring Initializr使用演示需求说明方式1: IDEA创建方式2: start.spring.io创建 注意事项和说明 yaml语法yaml介绍使用文档yaml基本语法数据类型字面…

鸿蒙开发HarmonyOS NEXT (二) 熟悉ArkUI

一、构造函数 构造一个商品类Item,然后利用foreach函数循环渲染 class Item {name: stringimage: ResourceStrprice: numberdiscount: numberconstructor(name: string, image: ResourceStr, price: number, discount: number 0) {this.name name;this.image ima…

自动化测试小技巧之Airtest-Selenium和Excel的无缝协作

一、前言 之前在问卷以及Q群上有同学有提出过能否将网页上的一些数据通过Airtest去导出生成一份Excel,那么我们今天一起讨论一下,我们应该如何去实现,以及当我们获取的数据类型不同的时候,获取的方式该怎么随之调整? …

MySQL InnoDB支持几种行格式

数据库表的行格式决定了一行数据是如何进行物理存储的,进而影响查询和DML操作的性能。 在InnoDB中,常见的行格式有4种: 1、COMPACT:是MySQL 5.0之前的默认格式,除了保存字段值外,还会利用空值列表保存null…

如何使用git将本地文件夹提交至云效代码库

目录 引言 一、准备工作 二、配置Git用户信息 三、克隆代码库到本地 四、添加文件至Git仓库 五、推送更改至云效代码库 六、如何删除云效文件 七、注意事项 八、总结 引言 随着团队协作开发的日益普及,代码版本控制系统(VCS)如Git已…

java+mysql图书管理系统

完整代码地址 1.运行效果图 2.主要代码 2.1.连接数据库 package com.my.homework.utils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCUtils {public static Connection getConnection() throws Exception {…

力压GPT-4o!新王Claude 3.5 Sonnet来了,直接免费可用

如今,大模型领域更卷了! 前脚 OpenAI 发布 GPT4o,硬控全场,后脚就被最大的竞争对手 Anthropic 超越了。 刚刚,Anthropic 发布了全新大模型 Claude 3.5 Sonnet,号称是迄今为止最智能的模型。 据介绍&#x…

CSS|05 继承性与优先级

继承性 一、继承性的特点: 1.外层元素身上的样式会被内层元素所继承 2.如果内层元素与外层元素身上的演示相同时,外层元素的样式会被内层元素所覆盖 二、关于继承性的问题 是不是所有样式都能被继承? 答:并不是所有样式能被继承…

图像处理Python库--图片裁剪、缩放、灰度图、圆角等

图像处理Python库 py-img-processor1. 安装2. 使用(Usage)2.1 运行配置2.2 图像处理处理函数图像处理参数为字符串图像处理参数为JSON 命令行提取图像主色调 py-img-processor Image editor using Python and Pillow. 依赖Pillow开发的Python库,用于图像编辑处理。…

Excel数据恢复,4个技巧挽救重要数据

在数字化时代,Excel表格已经成为我们工作、学习乃至生活中不可或缺的一部分。它们承载着我们的数据、计划、分析和决策,如同一张张承载着智慧与汗水的地图,指引我们前行。然而,当这些宝贵的数据意外丢失或被误删时,我们…

【Linux操作系统】进程地址空间与动态库加载

当系统执行一个依赖动态库的可执行程序时,系统不仅要将该可执行程序加载到内存中还要由加载器将动态库加载到内存中(静态库没有),因此必须要让加载器知道该动态库的名称,系统会默认在/lib64路径下查找,解决…

I/O系统

1. I/O接口 接口可以看做两个系统或两个部件之间的交接部分,它既可以是两种硬设备之间的连接电路,也可以是两个软件之间的共同逻辑边界。 I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的软件控制。 2. 程序查询方式 程序查询方式是一…

深圳比创达|EMC与EMI一站式解决方案:从源头解决,满足您的需求

随着科技的飞速发展,电子产品日益普及,电磁兼容性(EMC)与电磁干扰(EMI)问题也逐渐凸显。 一、EMC与EMI的概述 EMC(电磁兼容性)是指电子设备在共同的电磁环境中能执行各自功能的互不…

TTS x Hallo: 免费数字人头在线生成

是一个利用了百度 Hallo 和 Parler/WhisperSpeech TTS 项目实现的可说话、嘴型匹配的数字人头在线 Space

向日葵API集成服务:三大优势助力企业搭建专属远控方案

为了方便企业用户更加灵活的搭建满足各自需求的软件解决方案,降低开发和部署门槛,很多软件方案供应商提供了多样化的合作模式。 以贝锐向日葵远程控制为例,他们就向客户提供了基础的SaaS服务模式、私有化部署模式、SDK嵌入模式,以…

VUE模板语法(超详细讲解)

大家好,我是DX3906,坚持从工作和生活中不断学习,提炼,沉淀,最终建立自己的强势领域! Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue…

设计模式原则——接口隔离原则

设计模式原则 设计模式示例代码库地址: https://gitee.com/Jasonpupil/designPatterns 接口隔离原则 要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口,让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度&…

文华财经7macd预警指标公式源码

文华财经7macd预警指标公式源码: DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA),COLORSTICK; JC:CROSS(DIFF,DEA); SC:CROSSDOWN(DIFF,DEA); N1:BARSLAST(JC)1; N2:BARSLAST(SC)1; X:(HHV(H,N16)-LLV(L,N16))/LLV(L,N16)*100; …

D13005-ASEMI低频开关三极管D13005

编辑:ll D13005-ASEMI低频开关三极管D13005 型号:D13005 品牌:ASEMI 封装:TO-220 批号:2024 沟道:NPN 电流:4A 电压:400V 安装方式:直插式封装 特性&#xff1…