强化学习9——免模型预测算法介绍(蒙特卡洛方法和时步差分方法)

对于大部分情况来说,环境是未知的,也就是说状态转移概率未知,对于这种情况的算法称为免模型预测算法。免模型算法与环境不断交互学习,但是需要大量的运算。

蒙特卡洛方法

蒙特卡罗方法通过重复随机抽选,之后运用统计概率此方法来从抽样结果中归纳我们想要得到的数值估计。如下图所示,圆面积与正方形面积的比等于落入圆内的点与落入正方形的内的点的比

image.png

一个状态的价值是它的期望回报,可以采样多条序列,计算从这个状态出发的回报,再求期望,如下式所示:
V π ( s ) = E π [ G t ∣ S t = s ] ≈ 1 N ∑ i = 1 N G t ( i ) V^\pi(s)=\mathbb{E}_\pi[G_t|S_t=s]\approx\frac{1}{N}\sum_{i=1}^NG_t^{(i)} Vπ(s)=Eπ[GtSt=s]N1i=1NGt(i)
在采样得到的某一序列中,可能没有我们想要计算的状态,也可能出现一次这个状态,当然也可能出现多次这个状态。我们介绍的蒙特卡洛价值估计方法在该状态每一次出现时计算他的回报,如以下流程所示:

  • 先通过策略采用若干条序列
  • 在对每一条序列中的每一个状态s进行以下操作
    • 更新状态s的计数器 N ( s ) ← N ( s ) + 1 N(s)\gets N(s)+1 N(s)N(s)+1
    • 更新状态s的总回报 M ( s ) ← M ( a ) + G t M(s)\gets M(a)+G_t M(s)M(a)+Gt
  • 每一个状态的价值被估计为回报的平均值 V ( s ) = M ( s ) / N ( s ) V(s)=M(s)/N(s) V(s)=M(s)/N(s)

根据大数定律,当 N ( s ) → ∞ N(s)\to \infty N(s) ,有 V ( s ) → ∞ V(s)\to \infty V(s),计算回报的期望时,可以采用增量更新的方式:

  • N ( s ) ← N ( s ) + 1 N(s)\gets N(s)+1 N(s)N(s)+1
  • V ( s ) ← V ( s ) + 1 N ( s ) ( G − V ( s ) ) V(s)\gets V(s)+\frac{1}{N(s)}(G-V(s)) V(s)V(s)+N(s)1(GV(s))

这种方式的原理在多臂老虎机中推导过:
Q k = 1 k ∑ i = 1 k r i = 1 k ( r k + ∑ i = 1 k − 1 r i ) = 1 k ( r k + ( k − 1 ) Q k − 1 ) = 1 k ( r k + k Q k − 1 − Q k − 1 ) = Q k − 1 + 1 k [ r k − Q k − 1 ] \begin{aligned} Q_{k}& =\frac1k\sum_{i=1}^kr_i \\ &=\frac{1}{k}\left(r_k+\sum_{i=1}^{k-1}r_i\right) \\ &=\frac1k(r_k+(k-1)Q_{k-1}) \\ &=\frac1k(r_k+kQ_{k-1}-Q_{k-1}) \\ &=Q_{k-1}+\frac1k[r_k-Q_{k-1}] \end{aligned} Qk=k1i=1kri=k1(rk+i=1k1ri)=k1(rk+(k1)Qk1)=k1(rk+kQk1Qk1)=Qk1+k1[rkQk1]

在使用时,一般不严格按照期望的方法计算,而是将 1 N ( s ) → α \frac{1}{N(s)} \to \alpha N(s)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)]
即:
新的估计值 ← 旧的估计值 + 步长  ∗ ( 目标值 − 旧的估计值 ) \text{新的估计值} \gets 旧的估计值+步长 \ *(目标值-旧的估计值) 新的估计值旧的估计值+步长 (目标值旧的估计值)
通过添加学习率的方式,可以避免因为个别不好的样本而导致更新的急剧变化,从而导致学习得不稳定。

时序差分方法

在时序差分算法时,使用当前获得的奖励和下一个状态的价值估计来作为当前状态会获得回报:
V ( s t ) ← V ( s t ) + α [ r t + γ V ( s t + 1 ) − V ( s t ) ] V(s_t)\leftarrow V(s_t)+\alpha[r_t+\gamma V(s_{t+1})-V(s_t)] V(st)V(st)+α[rt+γV(st+1)V(st)]
时序差分算法将时序差分误差 r t + γ V ( s t + 1 ) − V ( s t ) r_t+\gamma V(s_{t+1})-V(s_t) rt+γV(st+1)V(st) 与步长的乘积作为状态价值的更新量。
V π ( s ) = E π [ G t ∣ S t = s ] = E π [ ∑ k = 0 ∞ γ k R t + k ∣ S t = s ] = E π [ R t + γ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] = E π [ R t + γ V π ( S t + 1 ) ∣ S t = s ] \begin{aligned} V_{\pi}(s)& =\mathbb{E}_\pi[G_t|S_t=s] \\ &=\mathbb{E}_\pi[\sum_{k=0}^\infty\gamma^kR_{t+k}|S_t=s] \\ &=\mathbb{E}_\pi[R_t+\gamma\sum_{k=0}^\infty\gamma^kR_{t+k+1}|S_t=s] \\ &=\mathbb{E}_\pi[R_t+\gamma V_\pi(S_{t+1})|S_t=s] \end{aligned} Vπ(s)=Eπ[GtSt=s]=Eπ[k=0γkRt+kSt=s]=Eπ[Rt+γk=0γkRt+k+1St=s]=Eπ[Rt+γVπ(St+1)St=s]
蒙特卡洛以第一步为更新目标,计算所有状态后得到回报,时序差分算法以上式最后一行作为更新目标,在用策略和环境交互时,每采样一步,我们就可以用时序差分算法来更新状态价值估计。

n步时序差分

可以将一步调整为两步,利用两步得到回报来更新状态的价值,调整n步就是n步时序差分。
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(\mathrm{TD})\quad G_t^{(1)}=r_{t+1}+\gamma V\left(s_{t+1}\right) \\ &n=2\quad G_t^{(2)}=r_{t+1}+\gamma r_{t+2}+\gamma^2V\left(s_{t+2}\right) \\ &n=\infty(\mathrm{MC})\quad G_t^\infty=r_{t+1}+\gamma r_{t+2}+\cdots+\gamma^{T-t-1}r_T \end{aligned} n=1(TD)Gt(1)=rt+1+γV(st+1)n=2Gt(2)=rt+1+γrt+2+γ2V(st+2)n=(MC)Gt=rt+1+γrt+2++γTt1rT
当n趋近于无穷大时,我们会发现所用到的就是蒙特卡洛方法了。

我们一般用 λ \lambda λ 表示n,有一些方法可以筛选出合适的 λ \lambda λ

  • 网格搜索(Grid Search):给定一组值,依次遍历取最佳
  • 随即搜索:随机选择值,在验证集上评估每个值对应的算法性能

时序差分和蒙特卡洛的比较

蒙特卡洛是取N个序列进行运算,得到价值;时序差分通过每一步的更新使用下一个状态的估计值 V ( s t + 1 ) V(s_{t+1}) V(st+1)得到价值的预估值。

image.png

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

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

相关文章

Phaser详解

Phaser是一个相对较新且功能强大的同步原语,它于Java 7中引入,用于协调并行任务的执行。与CyclicBarrier和CountDownLatch等传统的同步工具相比,Phaser提供了更灵活和更高级的功能,特别是在处理动态和可变的并行任务集合时。 1.P…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字,我们不能把它们用…

MATLAB全局最优搜索函数:GlobalSearch函数

摘要:本文介绍了 GlobalSearch 函数的使用句式(一)、三个运行案例(二)、 GlobalSearch 函数的参数设置(三)、GlobalSearch 注意事项及必要说明(五)等内容。详细介绍如下&…

超维空间S2无人机使用说明书——11、使用3维激光雷达实现ROS无人机的精准定位

引言:在工程应用中,往往需要在没有GPS信号的情况下实现无人机的资助或者稳定的飞行。实现这个的基础就是定位,有了准确的定位信息,无人机才能稳定的飞行。性比较于视觉定位效果,目前3D雷达相对更加稳定,视觉…

FineBI实战项目一(18):每小时上架商品个数分析开发

点击新建组件,创建每小时上架商品个数组件。 选择线图,拖拽cnt(总数)到纵轴,拖拽hourStr到横轴。 修改横轴和纵轴的文字。 调节连线样式。 添加组件到仪表板。

【LeetCode】59. 螺旋矩阵II(中等)——代码随想录算法训练营Day02

题目链接:59. 螺旋矩阵II 题目描述 给你一个正整数 n ,生成一个包含 1 到 n 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 示例 …

攒机到底能省多少钱?

昨天弄好了攒机配置,今天要求配置一些更为实用的配置,只是作为一般办公,单位买进来的计算机都是联想,价格普遍在7000元以上,出于省钱和实用目的,今天搭配了一个组机方案。 上面的配置对付一般办公足够&…

基于JAVA的婚恋交友网站 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

Docker 有什么优势?

Docker作为一种流行的容器化技术,其优势所在可以从多个维度进行详细阐述。 ![&nbsp][nbsp] 统一环境 在容器化技术成熟之前,软件开发过程中环境部署是一个常见的问题, 开发到生产的整个软件交付流程往往受到多个因素的影响。 场景描述…

Magento1.9 浏览器提示该网页无法正常运作,将您重定向的次数过多

不久前部署了一个Magento网站,访问时却直接打不开: 该网页无法正常运作 xxx.com将您重定向的次数过多 若要解决此问题,请尝试清除 Cookie. ERR_TOO_MANY_REDIRECTS 我的网络架构是这样的: 网站部署在Nginx服务器上, 做了加密…

2 快速前端开发

CSS快速入门 1.CSS案例1.1 内容回顾1.2 案例:二级菜单1.2.1 划分区域1.2.2 搭建骨架1.2.3 Logo区域1.2.4 菜单部分 1.3 案例:顶部菜单 二级菜单小结 1.4 案例:推荐区域1.4.1 划分区域1.4.2 搭建骨架1.4.3 案例的实现小结 2. CSS知识点2.1 ho…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 : 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

2024.1.11 Kafka 消息队列,shell命令,核心原理

目录 一 . 消息队列 二. Kafka 三 . 启动命令 四 . Kafka的Shell 命令 五 . Kafka的核心原理 1. Topic的分区和副本机制 2 . 消息存储机制 和 查询机制 3. Kafka中生产者数据分发策略 六 . Kafka 之所以具有高速的读写性能,主要有以下几个原因 七. 笔记…

如何让 QTableView控件五颜六色?

要让 QTableView 控件五颜六色,您可以使用 QStandardItemModel 的 setData() 方法为每个单元格设置不同的背景色。以下是一个示例: // 创建数据模型和设置表头略...// 设置单元格背景色 model->setData(model->index(0, 0), QColor(Qt::red), Qt:…

布隆过滤器 应用场景 优势 不足

布隆过滤器是一种空间效率很高的概率型数据结构,主要用于快速判断一个元素是否存在于一个集合中。它的主要应用场景、优势和不足如下: 应用场景 缓存:在缓存系统中,可以利用布隆过滤器快速判断某个数据是否存在于缓存中&#xf…

212. 单词搜索 II(字典树的另一种类型)

大致思路是: 根据words列表建立字典树,其中注意在单词末尾,将原来的isEnd变量换成存储这个单词的变量,方便存储到ans中,另外,字典树的字节点由原来的Trie数组变为hashmap,方便检索字母。 建立…

【AIGC】一组精美动物AI智能画法秘诀

如何使用AI绘画,从以下角度,依据表格内容梳理,表格如下: 外貌特征物种姿势特征描述场景风格技术描述小巧可爱幼小浣熊倚在桌子上具有人形特征中世纪酒馆电影风格照明8k分辨率细节精致毛茸茸手持咖啡杯Jean-Baptiste Monge的风格蓝…

一日难再晨及时当勉励 date

文章目录 Linux shell 获取更改系统时间默认输入显示时区世界协调时格式化日期更多信息 Linux shell 获取更改系统时间 … note:: 时光只解催人老,不信多情,长恨离亭,泪滴春衫酒易醒。 - 晏殊《采桑子时光只解催人老》date命令可以用来打印…

RT-Thread入门笔记4-跑马灯线程实例

RT-Thread操作系统是基于线程调度的多任务系统。 线程状态切换 调度过程是一种完全抢占式的基于优先级的调度算法。 支持8/32/256优先级,其中0表示最高,7/31/255表示最低。最低优先级7/31/255优先级用于空闲线程。 支持以相同优先级运行的线程。 共享时…

232.【2023年华为OD机试真题(C卷)】计算三叉搜索树的高度(JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-计算三叉搜索树的高度二.解题思路三.题解代码P…