强化学习(四) 蒙特卡洛方法

2024-06-04 05:44

本文主要是介绍强化学习(四) 蒙特卡洛方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果算不出来,那就统计。

dp需要完备的环境模型,而蒙特卡洛方法不需要。后者只需要采样。或者说,经验。
此外,蒙特卡洛方法不是自举的,不通过其它价值估计来更新自己的价值估计(与dp不同)。不满足马尔可夫性时仍可用。

蒙特卡洛不是在线的,而是在一幕结束后才进行调整。

蒙特卡洛方法做了一件什么事?

求q派(s,a)。
求出来相当于完成了策略评估,完成之后使用广义策略迭代来改进策略,跟dp一样。因此重点是评估。

首次访问型MC

在这里插入图片描述

这次不是决策树了,因为是采样,所以是整个过程是单线的,无分叉。
G就是累积回报。
第一行的意思是,给定S0,按照策略,做出动作A0,获得回报R1,环境变为S1,依此类推。
t是从大到小的,原因是折扣gamma会更多作用于后发生的事情(个人理解)。
“除非”这行,意思是如果某状态是首次出现,则加入返回列表。
为什么是列表呢?我们当然希望充分利用采样结果,对于这次采样中出现的每一个状态,我们都产生了一个数据,放在列表里。

文字描述

完成整幕序列,从后往前更新G,更新过程中赋值s的V。
用样本回报估计期望回报。

蒙特卡洛方法的优势

  • 可以通过实际经历和模拟经历学习
  • 因为不是自举的,让感兴趣状态为初态,就可以只计算感兴趣状态的价值函数

蒙特卡洛方法解决问题的一般过程

最终需要确定策略,所以其实q*是必算的。v*可以不算。
只有在已知环境模型的时候,才能轻易在q和v之间转换。

q的确定同样依赖于采样。但对于一些策略来说,有的动作并不会被选择,如果无法采样,我们所知晓的最优动作候选人就不够多。而采样方法决定的“单线”是不可变的。
有两种解决思路。第一种是依赖初态,想采什么状态-动作就让它为初态。第二种是使用软性策略。

同轨和离轨

同轨,目标策略更新与行动策略有关;离轨,目标策略更新与行动策略无关。
同轨和离轨是解决explore-exploit的两种思想。同轨收敛快,但在最优性上有妥协。离轨由于数据来源不同方差更大收敛慢,但通用性更强。
在这里插入图片描述
在这里插入图片描述
至于离轨,其可行性的理论基础是重要度采样。
在这里插入图片描述
对于首次访问型,(5.5)的分母始终为1;对于每次访问型,(5.5)的分母为s状态出现的次数。
重要度就是两个概率密度函数在这个s上的比值,这个比值有的时候小,而有的时候可能极大,导致方差很大。显然,如果两个概率密度函数比较接近,方差才会比较小。
加权重要度采样是为了减小方差。试想如果分子中有一些比值特别大,分母也会特别大,从而缓解极端情况。

附录

软性

软性策略是指在一个情境下采取各种动作的概率都不为零,相对应的是确定性策略。

统计学的基本思想

可以分为描述和预测。
描述,比如小学学的扇形统计图、折线统计图。
预测,通过样本估计整体,再比如线性拟合。实质是归纳法。
已知分布,意味着任意挑一个被试,我能知道它有多大的可能性是什么水平。

重要度采样

https://www.jianshu.com/p/22fb279aa16b
基本想法是我们可以基于分布 B 的样本来估计分布 A 的属性。
一个场景是估计人群的平均收入,长尾问题,采样效果并不理想(因为很多群体你调查不到)。解决方法之一就是,过度采样你容易接触到的群体,减少采样不容易接触到的群体。然后通过重要度来修正。
降低过度采样的样本的重要性,提高欠采样的样本的重要性。
除了缓解rare event难采样的问题,还有减小标准差的作用。

接受-拒绝采样

有些博客喜欢摆一张正方形内切圆求圆周率的图,我感觉并不贴切。摆python代码的就更无助于理解了。
采样到底是什么?
采样就像往数轴上扔飞镖。一个区间飞镖的总个数,就会形成一个柱子。每个区间都有柱子,用曲线连起来就大致形成了乘k之后的概率密度函数。(概率密度函数乘k之后,仍然能表示飞镖落在各个区间的相对可能性。归一只是让它有更好的数学性质。)
统计就是,观察一个人扔飞镖,看了一小会,就预测他下一个飞镖会扔在哪里。
那么什么是接受-拒绝采样呢?
你手下有两个飞镖运动员,它们一个能扔出正态分布,一个能扔出均匀分布。
你听说有人能扔出下面的分布(z=1.2113),在这里插入图片描述
你想见识一下。
你让正态分布的手下扔飞镖。如果你不做任何操作,肯定扔出正态分布。
如果你拔掉一部分飞镖,最终在飞镖盘上就有可能剩下这个奇特的分布。
什么时候拔呢?引用jteng的图:
在这里插入图片描述
如果蓝线和红线在某一z下很接近,那么最好别拔掉(拔掉意味着降低蓝线在这一点的高度)。不拔的概率是红线高度/蓝线高度。
我们希望少拔,这样投手可以少投一些飞镖。因此应当尽可能降低蓝线。
拔还是不拔,这件事可以用一个均匀分布来描述,我在0-1间均匀抽一个小数,如果小于0.6就不拔。那不拔的概率就是0.6。
拔了就是拒绝,没拔就是接受,这就是拒绝-接受采样。

重要度采样跟接受-拒绝采样有些像,都借助了常见分布。
接受-拒绝采样的结果是一个样本集,一个你想看见的飞镖盘。
重要度采样的结果是样本特征,一个数字化过后的你想看见的飞镖盘。

参考链接

脉络清晰,蒙特卡洛方法-接受拒绝-重要性-MCMC
https://blog.csdn.net/qq_33302004/article/details/115338116

四种数据

  • 定类,如颜色
  • 定序,如年级,尺码(SML),军衔
  • 定距,如温度。特征是0点模糊。
  • 定比,如工资。特征是比值有含义,你的工资是我的工资的两倍。

切比雪夫不等式

作用是,对任意分布,能判断均值附近的数据有多少。
定量是1-1/k^2。这里的k可以不是整数。

如果是正态分布,那可以查Z表获得任意区间的数据有多少。

为什么百度百科说中心极限定理是首席定理

https://blog.csdn.net/qq_32572085/article/details/88934098
样本的平均值约等于总体的平均值。
不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的整体平均值周围,并且呈正态分布。
第一行其实阐释了统计的基本思想,就是我们可以用样本的平均值来估计总体的平均值。
我们还想知道总体的方差/标准差。
我们可以用样本的方差来估计总体的方差,但分母却是n-1。

原因是用样本均值代替样本期望是不完美的。
样本均值的引入,使得我们只知道样本中n-1个数据就能推导出最后一个数据。
在这里插入图片描述
综上,我们发现,用均值代替期望会导致方差偏小,分母替换成n-1可以补偿;至于为什么是n-1而不是n-2,是因为使用均值代替期望时有一个数据是不独立的。

大数定理

为当样本数据无限大时,样本均值趋于总体均值。

极大似然法

目的是估计分布的参数。
在这里插入图片描述
极大似然函数,以正态分布为例,有两个输入变量。随着输入变量的不同,样本点x1出现的概率不同。
试想,如果μ=x1,x1出现的概率肯定比较大。而μ离x1很远、σ很小的时候,x1出现的概率就比较小。
我们取n个点,合适的μ和σ会使这n个点出现概率的乘积最大。

二项分布

问题始于,做n次实验,事件发生k次的概率。
给定n和p,横轴为k,纵轴为事件发生k次的概率。

问题场景如下:
在这里插入图片描述
在p接近0.5,n较大的时候,可以用正态分布模拟二项分布。
将这个正态分布转为标准正态分布,就能查Z表。复杂度就从O(n)变成O(1)了。

这篇关于强化学习(四) 蒙特卡洛方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029220

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处