强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)

  • 一、马尔可夫决策过程
  • 二、Q表格
  • 三、免模型预测
    • 1. 蒙特卡洛策略评估
      • 1) 动态规划方法和蒙特卡洛方法的差异
    • 2. 时序差分
      • 2.1 时序差分误差
      • 2.2 时序差分方法的推广
    • 3. 自举与采样

一、马尔可夫决策过程

状态转移概率:用 p [ s t + 1 , r t ∣ s t , a t ] p[s_{t+1}, r_t \vert s_t, a_t ] p[st+1,rtst,at]表示在状态 s t s_t st选择动作 a t a_t at时,转移到状态 s t + 1 s_{t+1} st+1,得到奖励 r t r_t rt概率
状态转移概率是具有马尔可夫性质的,系统下一时刻的状态仅有当前时刻的状态决定,不依赖于以往任何状态。

马尔可夫决策过程的四元组: ( S , A , P , R ) (S,A,P,R) (S,A,P,R)。加上折扣因子 γ \gamma γ组成五元组。

概率函数: P [ s t + 1 , r t ∣ s t , a t ] P[s_{t+1}, r_t \vert s_t, a_t] P[st+1,rtst,at]
奖励函数: R [ s t , a t ] R[s_t, a_t] R[st,at]
若知道概率函数和奖励函数,则马尔可夫决策过程就是已知的,可以通过策略迭代和价值迭代找到最佳策略。换句话说,如果知道环境的状态转移概率和奖励函数,则环境就是已知的,可以用这两个函数来描述环境。这种情况下的算法为有模型算法。

如果环境未知,则是免模型算法。

免模型强化学习方法没有获取环境的状态转移和奖励函数,而是让智能体与环境进行交互,采集大量的轨迹,从轨迹中获取信息改进策略。

二、Q表格

如下图所示,Q表格的行为所有状态,列为所有动作。最开始Q表格全部初始化为0。当交互足够多时,可以估算出每一个状态下,每个动作的平均总奖励,更新Q表格。

Q表格

强化:指可以用下一个状态的价值更新当前状态的价值,即自举

每走一步更新一次Q表格,用下一个状态的Q值更新当前状态的Q值,这种单步更新的方法称为时序差分方法(TD,Temporal Difference)。

三、免模型预测

在免模型状态下,可以通过蒙特卡洛方法时序差分方法估计某个给定策略的价值。

1. 蒙特卡洛策略评估

是基于采样的方法,给定策略 π \pi π,让智能体与环境交互,得到很多轨迹。每个轨迹都有回报:
G t = r t + 1 + γ r t + 2 + γ 2 r t + 3 + ⋯ G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots Gt=rt+1+γrt+2+γ2rt+3+则某一个策略对应状态的价值,可以用所有轨迹的回报的平均值表示:
V π ( s ) = E τ ∼ π [ G t ∣ s t = s ] V_{\pi} (s ) = \mathbb{E}_{\tau \sim \pi} [G_t \vert s_t = s ] Vπ(s)=Eτπ[Gtst=s]蒙特卡洛仿真指:可以采样大量的轨迹,计算所有轨迹的真实回报,计算平均值。
其使用经验平均回报的方法进行估计,因此不需要状态转移函数和奖励函数,也不需要自举。
蒙特卡洛只能用在有终止的马尔可夫决策过程中。

写成增量式蒙特卡洛
N ( s t ) ← N ( s t ) + 1 V ( s t ) ← V ( s t ) + 1 N ( s t ) ( G t − V ( s t ) ) N(s_t) \leftarrow N(s_t) + 1 \\ V(s_t) \leftarrow V(s_t) + \frac{1}{N (s_t) } \left( G_t - V (s_t) \right) N(st)N(st)+1V(st)V(st)+N(st)1(GtV(st)) 1 N ( s t ) \frac{1}{N (s_t) } N(st)1看成学习率 α \alpha α,则
V ( s t ) ← V ( s t ) + α ( G t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_t - V (s_t) \right) V(st)V(st)+α(GtV(st))

1) 动态规划方法和蒙特卡洛方法的差异

动态规划中使用了自举的思想,即基于之前估计的量来估计一个量。同时使用了贝尔曼期望备份,通过上一时刻的 V i − 1 ( s ′ ) V_{i-1} (s') Vi1(s)来更新当前时刻的 V i ( s ) V_i (s) Vi(s),即
V i ( s ) ← ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V i − 1 ( s ′ ) ) V_i (s) \leftarrow \sum_{a \in A} \pi (a \vert s) \left( R(s,a) + \gamma \sum_{s' \in S} P \left( s' \vert s,a \right) V_{i-1} (s') \right) Vi(s)aAπ(as)(R(s,a)+γsSP(ss,a)Vi1(s)) 不停迭代后可以收敛。
贝尔曼期望备份有2层加和,内部和与外部和,计算两次期望,得到一个更新。

蒙特卡洛通过一个回合的经验平均回报来进行更新
V ( s t ) ← V ( s t ) + α ( G i , t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_{i,t} - V (s_t) \right) V(st)V(st)+α(Gi,tV(st))蒙特卡洛方法得到的轨迹是已经决定的,采取的动作也是决定的,只更新该轨迹上的所有状态,与该轨迹无关的状态都不进行更新。

蒙特卡洛适用于环境未知的情况,动态规划是有模型的方法;
蒙特卡洛只需要更新一条轨迹的状态,动态规划需要更新所有状态。

2. 时序差分

是介于蒙特卡洛和动态规划之间的方法,免模型,可以从不完整的回合中学习,并结合了自举的思想。

目的:对某个给定的策略 π \pi π,在线计算出七价值函数 V π V_\pi Vπ,即一步一步的算。最简单的算法是一步时序差分,即TD(0)。每往前走一步,就做一步自举,用得到的估计回报 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V( s_{t+1}) rt+1+γV(st+1)来更新上一时刻的 V ( s t ) V(s_t) V(st)
V ( s t ) ← V ( s t ) + α ( r t + 1 + γ V ( s t + 1 ) − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( r_{t+1} + \gamma V (s_{t+1}) - V (s_t) \right) V(st)V(st)+α(rt+1+γV(st+1)V(st))其中估计回报 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V (s_{t+1}) rt+1+γV(st+1)称为时序差分目标,是带衰减的未来奖励的总和

时序差分目标由2部分组成:

  1. 走了某一步之后得到的实际奖励 r t + 1 r_{t+1} rt+1
  2. 利用自举方法,通过之前的估计来估计 V ( s t + 1 ) V(s_{t+1}) V(st+1),且加了折扣因子 γ \gamma γ

时序差分目标之所以是估计,有2个原因:

  1. 时序差分方法对期望值进行采样;
  2. 时序差分方法使用当前的估计的V,而不是真实的 V π V_\pi Vπ

2.1 时序差分误差

δ = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta = r_{t+1} + \gamma V (s_{t+1} ) - V (s_t) δ=rt+1+γV(st+1)V(st)类比增量式蒙特卡洛:
V ( s t ) ← V ( s t ) + α ( G i , t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_{i,t} - V (s_t) \right) V(st)V(st)+α(Gi,tV(st))这里的 G i , t G_{i,t} Gi,t即为 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V (s_{t+1} ) rt+1+γV(st+1) G i , t − V ( s t ) G_{i,t} - V (s_t) Gi,tV(st)即为 δ = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta = r_{t+1} + \gamma V (s_{t+1} ) - V (s_t) δ=rt+1+γV(st+1)V(st)。在蒙特卡洛里, G i , t G_{i,t} Gi,t是实际得到的值,因为它已经把一条轨迹跑完了。而时序差分不等轨迹结束,往前走一步,就可以更新价值函数。时序差分只执行一步,状态的值就更新。蒙特卡洛方法全部执行完之后,到了终止状态之后,再更新它的值。

蒙特卡洛和时序差分
对比:

  1. 时序差分可以在线学习,每走一步就更新,效率高。蒙特卡洛要等游戏结束才能学习。
  2. 时序差分可以从不完整序列上进行学习,蒙特卡洛只能从完整序列上学习。
  3. 时序差分可以再连续的环境下(没有终止)进行学习,蒙特卡洛只能在有终止的情况下学习。
  4. 时序差分李永乐马尔科夫性质,在马尔可夫环境下有更好的学习效率。蒙特卡洛没有假设具有该性质。

2.2 时序差分方法的推广

往前走一步为TD(0),可以调整步数,变成n步时序差分。如TD(2)即为往前走2步,利用2步得到的回报,使用自举来更新状态的价值。因此可以通过调整步数,来调整算法所需要的实际奖励和自举。
n = 1 ( T D ) G t ( 1 ) = r t + 1 + γ V ( s t + 1 ) n = 2 G t ( 2 ) = r t + 1 + γ r t + 2 + γ 2 V ( s t + 2 ) ⋮ n = ∞ ( M C ) G t ∞ = r t + 1 + γ r t + 2 + ⋯ + γ T − t − 1 r T \begin{aligned} n=1(TD) \qquad \qquad G_t^{(1)} &= r_{t+1} + \gamma V(s_{t+1}) \\ n = 2 \qquad \qquad \qquad G_t^{(2)} &= r_{t+1} + \gamma r_{t+2} + \gamma^2 V(s_{t+2}) \\ \vdots \\ n = \infty (MC) \qquad \qquad G_t^\infty &= r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^{T-t-1} r_T \end{aligned} n=1(TD)Gt(1)n=2Gt(2)n=(MC)Gt=rt+1+γV(st+1)=rt+1+γrt+2+γ2V(st+2)=rt+1+γrt+2++γTt1rT n = ∞ n=\infty n=时,则整个游戏结束后再进行更新,时序差分就变成了蒙特卡洛。

以上为时序差分目标。得到时序差分目标之后,用增量式学习的方法更新状态的价值:
V ( s t ) ← V ( s t ) + α ( G t n − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_t^n - V (s_t) \right) V(st)V(st)+α(GtnV(st))

3. 自举与采样

自举是指更新时使用了估计
蒙特卡洛没有使用自举,它根据实际的回报进行更新,没有估计。动态规划和时序差分使用了自举。

采样是指更新时通过采样得到一个期望
蒙特卡洛是纯采样的方法。动态规划没有采样,根据贝尔曼期望方程进行更新状态价值。时序差分使用了采样,时序差分目标 G G G由2部分组成,采样与自举。

  • 动态规划:直接计算期望,把所有相关状态都加和
    V ( s t ) ← E π [ r t + 1 + γ V ( s t + 1 ) ] V(s_t) \leftarrow \mathbb{E}_\pi [ r_{t+1} + \gamma V(s_{t+1}) ] V(st)Eπ[rt+1+γV(st+1)]
    动态规划

  • 蒙特卡洛:在当前状态下,采取一条支路,在该路径上更新,即更新该路径上的所有状态
    V ( s t ) ← V ( s t ) + α ( G t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha ( G_t - V (s_t) ) V(st)V(st)+α(GtV(st))
    蒙特卡洛

  • 时序差分:从当前状态开始,往前走1步,关注局部的步骤
    T D ( 0 ) : V ( s t ) ← V ( s t ) α ( r t + 1 + γ V ( s t + 1 ) − V ( s t ) ) TD(0): \quad V(s_t) \leftarrow V(s_t) _ \alpha \left( r_{t+1} + \gamma V (s_{t+1}) - V(s_t) \right) TD(0):V(st)V(st)α(rt+1+γV(st+1)V(st))
    时序差分
    如果时序差分进行广度的更新,就变成了动态规划;
    如果时序差分需要深度的更新,就变成了蒙特卡洛。

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

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

相关文章

c++_csp-j算法 (4)

迪克斯特拉() 介绍 迪克斯特拉算法(Dijkstra算法)是一种用于解决单源最短路径问题的经典算法,由荷兰计算机科学家艾兹赫尔迪克斯特拉(Edsger W. Dijkstra)于1956年提出。迪克斯特拉算法的基本思想是通过逐步扩展已经找到的最短路径集合,逐步更新节点到源节点的最短路…

(13)VTK C++开发示例 --- 透视变换

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 在VTK(Visualization Toolkit)中,vtkPerspectiveTransform 和 vtkTransform 都是…

深入探索Qt异步编程--从信号槽到Future

概述 在现代软件开发中,应用程序的响应速度和用户体验是至关重要的。尤其是在图形用户界面(GUI)应用中,长时间运行的任务如果直接在主线程执行会导致界面冻结,严重影响用户体验。 Qt提供了一系列工具和技术来帮助开发者实现异步编程,从而避免这些问题。本文将深入探讨Qt…

基于Python的图片/签名转CAD小工具开发方案

基于Python的图片/签名转CAD工具开发方案 一、项目背景 传统设计流程中,设计师常常需要将手写签名或扫描图纸转换为CAD格式。本文介绍如何利用Python快速开发图像矢量化工具,实现: 📷 图像自动预处理✏️ 轮廓精确提取⚙️ 参数…

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor

CangjieMagic框架:使用华为仓颉编程语言编写,专门用于开发AI Agent,支持鸿蒙、Windows、macOS、Linux等系统。 这篇文章剖析一下 CangjieMagic 框架中的 PlanReactExecutor。 1 PlanReactExecutor的工作原理 #mermaid-svg-OqJUCSoxZkzylbDY…

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板,以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络,而宽带通信系统正在努力满…

Java中 关于编译(Compilation)、类加载(Class Loading) 和 运行(Execution)的详细区别解析

以下是Java中 编译(Compilation)、类加载(Class Loading) 和 运行(Execution) 的详细区别解析: 1. 编译(Compilation) 定义 将Java源代码(.java文件&#x…

【KWDB 创作者计划】_深度学习篇---松科AI加速棒

文章目录 前言一、简介二、安装与配置硬件连接驱动安装软件环境配置三、使用步骤初始化设备调用SDK接口检测设备状态:集成到AI项目四、注意事项兼容性散热固件更新安全移除五、硬件架构与技术规格核心芯片专用AI处理器内存配置接口类型物理接口虚拟接口能效比散热设计六、软件…

如何清理Windows系统中已失效或已删除应用的默认打开方式设置

在使用Windows系统的过程中,我们可能会遇到一些问题:某些已卸载或失效的应用程序仍然出现在默认打开方式的列表中,这不仅显得杂乱,还可能影响我们快速找到正确的程序来打开文件。 如图,显示应用已经被geek强制删除&am…

NFC碰一碰发视频推广工具开发注意事项丨支持OEM搭建

随着线下门店短视频推广需求的爆发,基于NFC技术的“碰一碰发视频”推广工具成为商业热点。集星引擎在开发同类系统时,总结出六大核心开发注意事项,帮助技术团队与品牌方少走弯路,打造真正贴合商户需求的实用型工具: 一…

pgsql中使用jsonb的mybatis-plus和Spring Data JPA的配置

在pgsql中使用jsonb类型的数据时,实体对象要对其进行一些相关的配置,而mybatis和jpa中使用各不相同。 在项目中经常会结合 MyBatis-Plus 和 JPA 进行开发,MyBatis_plus对于操作数据更灵活,jpa可以自动建表,两者各取其…

kotlin + spirngboot3 + spring security6 配置登录与JWT

1. 导包 implementation("com.auth0:java-jwt:3.14.0") implementation("org.springframework.boot:spring-boot-starter-security")配置用户实体类 Entity Table(name "users") data class User(IdGeneratedValue(strategy GenerationType.I…

【JavaWeb后端开发03】MySQL入门

文章目录 1. 前言1.1 引言1.2 相关概念 2. MySQL概述2.1 安装2.2 连接2.2.1 介绍2.2.2 企业使用方式(了解) 2.3 数据模型2.3.1 **关系型数据库(RDBMS)**2.3.2 数据模型 3. SQL语句3.1 DDL语句3.1.1 数据库操作3.1.1.1 查询数据库3.1.1.2 创建数据库3.1.1…

人工智能在智能家居中的应用与发展

随着人工智能(AI)技术的飞速发展,智能家居逐渐成为现代生活的重要组成部分。从智能语音助手到智能家电,AI正在改变我们与家居环境的互动方式,让生活更加便捷、舒适和高效。本文将探讨人工智能在智能家居中的应用现状、…

【EasyPan】项目常见问题解答(自用持续更新中…)

EasyPan 网盘项目介绍 一、项目概述 EasyPan 是一个基于 Vue3 SpringBoot 的网盘系统,支持文件存储、在线预览、分享协作及后台管理,技术栈涵盖主流前后端框架及中间件(MySQL、Redis、FFmpeg)。 二、核心功能模块 用户认证 注册…

4.1腾讯校招简历优化与自我介绍攻略:公式化表达+结构化呈现

腾讯校招简历优化与自我介绍攻略:公式化表达结构化呈现 在腾讯校招中,简历是敲开面试大门的第一块砖,自我介绍则是展现个人魅力的黄金30秒。本文结合腾讯面试官偏好,拆解简历撰写公式、自我介绍黄金结构及分岗位避坑指南&#xf…

【Easylive】consumes = MediaType.MULTIPART_FORM_DATA_VALUE 与 @RequestPart

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 consumes MediaType.MULTIPART_FORM_DATA_VALUE 的作用 1. 定义请求的数据格式 • 作用:告诉 Feign 和 HTTP 客户端,这个接口 接收的是 multipart/form-data 格式的…

OpenSSL1.1.1d windows安装包资源使用

环境: QT版本:5.14.2 用途: openssl1.1.1d版本 问题描述: 今天尝试用百度云人脸识别api搭载QT的人脸识别程序,需要用到 QNetworkManager 访问 https 开头的网址。 但是遇到了QT缺乏 openssl 的相关问题,找了大半天…

代码实战保险花销预测

文章目录 摘要项目地址实战代码(初级版)实战代码(进阶版) 摘要 本文介绍了一个完整的机器学习流程项目,重点涵盖了多元线性回归的建模与评估方法。项目详细讲解了特征工程中的多项实用技巧,包括&#xff1…

RS232 串行通信:C++ 实现指南

文章目录 一、RS232 简介1. 电气特性2. 传输速率3. 传输距离 二、在 C 中实现 RS232 通信1. Windows 平台(1)打开串行端口(2)配置串行通信参数(3)发送数据(4)接收数据(5&…