热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

RL(五)蒙特卡罗算法求解强化学习

目录1、蒙特卡罗算法2、为什么要使用蒙特卡罗算法3、蒙特卡罗法求解强化学习预测问题4、蒙特卡罗法求解强化学习控制问题4.1、固定策略法4.2、非固定策略法5、总结前面一章用动态规划



目录

    • 1、蒙特卡罗算法
    • 2、为什么要使用蒙特卡罗算法
    • 3、蒙特卡罗法求解强化学习预测问题
    • 4、蒙特卡罗法求解强化学习控制问题
      • 4.1、固定策略法
      • 4.2、非固定策略法
    • 5、总结


前面一章用动态规划解决了强化学习问题,但是这个方法只是用基于模型的方法来求解的,即我们事先是知道状态转移方程P的,但是在很多的问题中,我们是不知道这个状态转移方程的,所以我们就必须用其他方程来解决强化学习问题。这篇文章就是用不基于模型的蒙特卡罗算法来求解强化学习问题。


1、蒙特卡罗算法

在用蒙特卡罗算法解决问题之前,我们首先要知道蒙特卡罗算法的大概内容是什么。其基本思想是:

当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。它是一种通过采样近似求解问题的方法


2、为什么要使用蒙特卡罗算法

前面讲的主要内容是整个问题可以转换成一个马尔科夫决策过程(MDP),MDP是通过5元组:来做决策的。对于这种已知模型的情况,也就是知道了这个5元组,我们可以容易获得奖赏最大化。但是,在现实世界中,我们无法同时知道这个5元组。比如P,状态转移概率就很难知道,P不知道,我们就无法使用bellman方程来求解V和Q值。但是我们依然要去解决这个问题,所以怎么办呢?怎样转化为一个MDP的形式呢?

一个想法是,虽然我不知道状态转移概率P,但是这个概率是真实存在的。我们可以直接去尝试,不断采样,然后会得到奖赏,通过奖赏来评估值函数。这个想法与蒙特卡罗方法的思想是一致的。我们可以尝试很多次,最后估计的V值就会很接近真实的V值了。

蒙特卡罗法通过采样若干经历完整的状态序列(episode)来估计状态的真实价值。所谓的经历完整,就是这个序列必须是达到终点的。比如是否成功种出西瓜,驾车问题成功到达终点或者失败。有了很多组这样经历完整的状态序列,我们就可以来近似的估计状态价值,从而求出预测问题和控制问题。可以用如下的图来理解状态序列(episode):

在这里插入图片描述

episode就是经历,每条episode就是一条从起始状态到结束状态的经历。例如在走迷宫,一条episode就是从你开始进入迷宫,到最后走出迷宫的路径。

从特卡罗法法的特点来说,一是和动态规划比,它不需要依赖于模型状态转化概率。二是它从经历过的完整序列学习,完整的经历越多,学习效果越好。


3、蒙特卡罗法求解强化学习预测问题

首先假定有一个定策略π的完整有T个状态的状态序列如下:

在这里插入图片描述

回顾之前的价值函数vπsv_π(s)vπ​(s):

在这里插入图片描述

可以看出每个状态的价值函数等于所有该状态收获的期望,同时这个收获是通过后续的奖励与对应的衰减乘积求和得到。那么对于蒙特卡罗法来说,如果要求某一个状态的状态价值,只需要求出所有的完整序列中该状态出现时候的收获再取平均值即可近似求解,也就是:

在这里插入图片描述

其实通俗理解就是求平均值。

但是这样算也会出现一些问题,比如,如果一个完整的序列中某个状态出现多次,我们怎么去算它的平均值呢?这里有两种解决办法:

(1):首次访问(first visit)。即我们只把一个完整状态中第一次出现的状态值对应的收获值纳入到平均值的计算中。如下图所示:

在这里插入图片描述

(2):每次访问(every visit)。另一种是针对一个状态序列中每次出现的该状态,都计算对应的收获值并纳入到收获平均值的计算中。如下图所示:

在这里插入图片描述

两种方法相比较可以发现:二种方法比第一种的计算量要大一些,但是在完整的经历样本序列少的场景下会比第一种方法适用。

还有一个问题就是计算平均值的时候,我们是否必须保存所有该状态的收获值之和最后取平均。这样算原理上是可以的,但是就是比较占空间。一个较好的方法是在迭代计算收获均值,即每次保存上一轮迭代得到的收获均值与次数,当计算得到当前轮的收获时,即可计算当前轮收获均值和次数。通过下面的公式就很容易理解这个过程:

在这里插入图片描述

这样上面的状态价值公式就可以改写成:

在这里插入图片描述

这样我们无论数据量是多还是少,算法需要的内存基本是固定的 。


4、蒙特卡罗法求解强化学习控制问题

在控制问题中,最重要的就是去改进当前策略,即该怎样去选择哪些动作。在蒙特卡罗求解控制问题中需要解决的也是找到一个方法来选择不同的策略去改进当前策略。目前主要有两种不同的动作选择方式,即固定策略(On-policy)和离线策略(Off-policy)方法。

(1)固定策略法:固定策略的 思想是个体已经有一个策略,并且基于该策略进行采样,以得到的状态序列(episode)来更新函数。之后采用策略评估和策略改进对给定策略进行迭代,以获得最优策略。因为需要优化的策略基于当前给定的策略,因此也叫做固定性策略。固定算法又可以分为起点探索算法和非起点探索算法。

(2)非固定性策略:非固定性有两个策略,一个策略负责向另一个策略学习,从它那里进行采样。这里所说的另一个策略可以使实现学习到的策略,或者人为提前制定的一些较为成熟的策略方法。理解就是,在自身策略形成的价值函数基础上观察别的策略所产生的行为,以此达到学习的目的。因为优化的策略不完全基于当前的策略,所以也叫非固定策略。


4.1、固定策略法

在讲解算法之前,我们首先要明白蒙特卡罗算法在策略迭代过程中设置里两个前置条件:

(1)个体获得的episode基于起始点探索方式

(2)策略评估过程可以利用无限的episode数据。

针对第一个条件:

起始点探索只有一个探索起点的环境。对蒙特卡罗算法来说,episode的完整性很重要,完备的训练样本才可以估计出准确的价值函数。但是在很多情况下,无法保证多次采样之后,还可以获得较完备的分布,导致一部分状态没有被访问到。所以可以设置一个随机概率分布,使得所有可能的状态都有一定不为0的概率作为起始状态,这样能保证遍历尽可能多的状态。

起始点会对所有的<状态-动作>对的奖励进行加权平均,而不管所观察到的策略是否最优。但是这个方法也很容易收敛不到全局最优或局部最优。甚至在最坏的情况下,动作价值函数只能代表该策略的值函数,等同于只进行了策略评估过程,而没有对策略进行改进。

起始点探索给状态空间中的每个装填都赋予了一定的概率值,尽可能保证每一种状态都有可能被访问到,进而保证了训练样本的完备性。

针对上面的第二个条件表明唯有采样的数据足够做才能保证每一状态都被访问到,但是在实际任务中这是很难实现的,所以在非起始点探索中,我们使用ϵ− 贪婪法:

在这里插入图片描述

设置一个较小的ϵ值,使用1−ϵ的概率贪婪地选择目前认为是最大行为价值的行为,而用ϵ 的概率随机的从所有m 个可选行为中选择行为。

其实两种算法都是为了增加episode空间的完备性。


4.2、非固定策略法

根据是否经历完整的episode,可以将非固定策略学习分为蒙特卡罗法和时序差分法,基于蒙特卡罗法的非固定策略学习仅有在理论上研究的价值,在实际任务中的效果并不明显,很难获得优化策略和最有价值函数。这里只是简单介绍一下,不做详细说明。

我们将在下一章详细讲解时序差分法。


5、总结

和动态规划比,蒙特卡罗法不同之处体现在三点:

(1)是预测问题策略评估的方法不同。

(2)是蒙特卡罗法一般是优化最优动作价值函数q∗,而不是状态价值函数v∗。因为我们的episode都是确定的动作,所哟这里使用的是动作价值函数。

(3)是动态规划一般基于贪婪法更新策略。而蒙特卡罗法一般采用ϵ−贪婪法更新

下一章:时序差分法

参考文章:https://blog.csdn.net/liweibin1994/article/details/79111536,

https://www.cnblogs.com/pinard/p/9492980.html



推荐阅读
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文详细介绍了 BERT 模型中 Transformer 的 Attention 机制,包括其原理、实现代码以及在自然语言处理中的应用。通过结合多个权威资源,帮助读者全面理解这一关键技术。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何使用Maven高效管理多模块项目,涵盖项目结构设计、依赖管理和构建优化等方面。通过具体的实例和配置说明,帮助开发者更好地理解和应用Maven在复杂项目中的优势。 ... [详细]
author-avatar
enjoy楠神
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有