强化学习,第 3 部分:蒙特卡罗方法

在这里插入图片描述

文章目录

  • 一、介绍
  • 二、关于此文章
  • 三、无模型方法与基于模型的方法
  • 四、V函数估计
    • 4.1 基本概念
    • 4.2 V-功能
  • 五、Q 函数估计
    • 5.1 V函数概念
    • 5.2 优势
    • 5.3 Q函数
  • 六、勘探与勘探的权衡
  • 七、结论

一、介绍

   从赌场到人工智能:揭示蒙特卡罗方法在复杂环境中的强大功能
   强化学习是机器学习中的一个领域,它引入了必须在复杂环境中学习最优策略的智能体的概念。智能体从其行为中学习,这些行为在给定环境状态的情况下产生奖励。强化学习是一个困难的话题,与机器学习的其他领域有很大不同。这就是为什么只有当给定的问题无法解决时才应该使用它。

   在本文中,我们将发现蒙特卡罗算法。与标准方法相比,它们的优雅之处在于它们不需要任何有关环境动态的知识。这方面有很大的不同,因为在现实生活中,我们通常不知道状态之间所有可能的转换概率。

   注意。为了充分理解本文中包含的概念,强烈建议熟悉强化学习的主要概念以及本系列前两篇文章中介绍的策略改进方法。

二、关于此文章

   在第 1 部分中,我们介绍了强化学习的主要概念:框架、策略、值函数和贝尔曼方程。
   在第 2 部分中,我们了解了 GPI 方法,该方法旨在通过政策评估和政策改进之间的交替来找到最佳政策。
   尽管我们在第 2 部分中学到了重要的原则,但它们仅适用于动态完全已知的完美环境。当没有给出转移概率 p(s’, r | s, a) 时(大多数现实生活中的问题都是这种情况),搜索最优策略变得更加困难。

   幸运的是,强化学习中存在一些技术,可以在不使用环境动态知识的情况下优化策略。蒙特卡罗方法就是这种算法的例子。

   本文基于 Richard S. Sutton 和 Andrew G. Barto 撰写的《强化学习》一书的 Chapter 5。我非常感谢为本书的出版做出贡献的作者的努力。

   注意。本文的源代码可在 GitHub 上找到。顺便说一句,该代码生成未在 GitHub 笔记本中呈现的 Plotly 图表。如果要查看关系图,可以在本地运行笔记本或导航到存储库的结果文件夹。

   ML-medium/monte_carlo/blackjack.ipynb 在 master ·slavafive/ML-培养基
这是一个存储库,其中的机器学习算法的代码和笔记本可从我的 Medium 博客中获得。…
github.com

三、无模型方法与基于模型的方法

   在强化学习中,术语模型是指智能体用来预测环境对其行为的反应的任何内容。

   强化学习算法可分为两类:

  •    基于模型:使用模型在采取行动之前计划行动的方法。
    无模型:没有模型的方法。该算法试图学习将操作与各自的回报相关联。
    我们在上一篇文章中研究的算法是基于模型的方法的一个例子,因为智能体使用给定转移概率 p(s’, r | s, a) 的估计值。

  •    蒙特卡洛 (MC) 方法既不估计也不使用 p(s’, r | s, a),因此它们与模型无关。相反,他们从经验中学习——状态、行动和奖励的序列。通过使用给定的智能体轨迹,他们平均近似期望值并使用 GPI 来获得最佳策略。

   在本文中,我们将只关注情节任务。在MC方法的背景下,它们更容易学习,因为经验是独立于每个情节获得的。可用的剧集越多,可用于更好地近似值函数的信息就越多。

四、V函数估计

4.1 基本概念

   根据定义,状态的 v 值对应于代理从该状态开始接收的预期回报。根据代理的经验信息,我们可以平均访问该州后的所有退货。这样,计算出的平均值将表示状态的 v 值。

   获得更多关于经验的信息是非常有益的,因为我们可以计算出更多状态回报的平均值,从而提高整体近似值。

基于智能体在一集中可以多次处于同一状态的事实,存在两个版本的 MC 算法用于 V 函数估计:

   首次访问MC方法:仅考虑首次访问一个州的返回;
   每次访问 MC 方法:考虑所有访问一个州期间的返回。
在这里插入图片描述

   首次访问 MC 方法伪代码。资料来源:强化学习。引言。第二版 |理查德·萨顿(Richard S. Sutton)和安德鲁·巴托(Andrew G. Barto)
首次就诊MC算法在该领域得到了更多的研究。

   当访问次数趋于无穷大时,根据大数定律,两种方法都收敛到实数 V 函数。

   例:我们将看一个流行的赌场游戏的例子——二十一点。

   规则

   游戏的目标是在不超过 21 分的情况下获得比庄家更多的分数。规则很简单:给玩家发两张牌,庄家亮出他的一张牌。然后玩家必须做出以下两个决定之一:

   命中:玩家拿一张额外的牌,这张牌的价值被添加到玩家的分数中。如果玩家的分数大于 21,那么他们就输掉了比赛。玩家可以随心所欲地继续击球。
棍子:玩家不再拿牌,把回合传给庄家。庄家继续拿牌,直到他们获得 17 分或更多分。如果庄家的分数大于 21,则玩家赢得比赛。如果庄家的分数在 17 到 21 之间,则得分较高的人赢得比赛,而另一个人输掉比赛。如果积分相同,则有平局。
这些卡具有下表中所示的以下值:
在这里插入图片描述

二十一点卡值。最上面的一行是扑克牌,最下面一行是扑克牌的值。
A是一张特殊的游戏卡:如果总分不超过21,则算作11(在这种情况下,A称为可用);否则,A 计为 1。

状态定义

玩家在二十一点中的决定仅取决于三个因素:

玩家当前得分(12 到 21 之间);
玩家是否有可用的王牌(二进制值);
庄家对显示牌的分数(介于 2 到 11 之间)。
这就是为什么将状态集 S 声明为包含这三个变量的所有可能元组的组合是合乎逻辑的。为简单起见,我们不会担心玩家分数低于 12 的琐碎状态,因为在这种情况下,玩家击球始终是最佳状态。结果,我们只有 10 ⋅ 2 ⋅ 10 = 200。与大多数强化学习问题相比,这种状态的数量很低。对于蒙特卡罗算法,计算值函数应该相对容易。

首次访问的 MC 与二十一点中的每次访问 MC 相同,因为每个游戏状态在每一集中只能访问一次。

4.2 V-功能

下图显示了蒙特卡洛算法在策略下 5 ⋅ 10⁶ 迭代时估计的 V 函数,根据该策略,玩家只有在达到 20 分时才会坚持。
在这里插入图片描述

政策的 V 函数,根据该函数,如果玩家达到 20 分,则坚持下去。横轴表示玩家的牌数,纵轴表示庄家的第一张牌。庄家的 A 用 1 表示。
以下是我们可以做出的一些有趣的观察:

只有在达到 20 岁后才坚持的总体政策表现不佳。只有当玩家的分数为 20 或 21 时,玩家才有优势的仅有两种情况发生。例如,如果玩家有 18 张牌,并拿了另一张牌,他们很可能会超过 21(通过获得任何价值为 4 或更大的牌)并输掉游戏。
两张热图的颜色结构非常相似。然而,如果玩家的分数超过 21,可用 A 的存在会给玩家带来“第二次机会”。因此,具有可用 ace 的案例的相应 v 值高于没有可用 ace 的案例。
对于具有可用 A 的游戏,获得的 v 值不太精确。这可以通过以下事实来解释:这些情况在二十一点中发生的频率较低。一个可能的解决方案是生成更多的剧集。
从理论上讲,我们可以使用动态规划算法来估计二十一点状态,但这要困难得多。例如,假设玩家有 13 分。为了计算该状态的 v 值,我们需要从 14 到 21 点的所有转移概率,这很难使用概率公式估计,因为有太多可能的博弈组合。

五、Q 函数估计

5.1 V函数概念

在基于模型的方法中,估计的 V 函数足以找到最优策略:通过处于任何状态,我们总是可以选择一个动作,使得动作的奖励(由 p(s’, r | s, a)给出)和下一个状态的回报之和将是最大的。

在无模型方法(即 MC 情况)中,仅具有 V 函数是不够的。我们在这里错过的组件是在每个状态下选择任何操作的奖励。因此,我们不能通过采取某种行动来估计整体回报。同时,我们不能使用贝尔曼方程来建立 v 值和 q 值之间的关系:在这种情况下,我们仍然需要 p(s’, r | s, a)。

克服这个问题的一个优雅技巧是以稍微不同的角度看待问题。我们可以将所有可能的状态和动作对 (s, a) ∈ S x A 视为状态。为了找到这些状态的值,我们可以利用 MC 方法进行 V 函数估计!该 V 函数的计算将等价于原始问题中的 Q 函数估计。
在这里插入图片描述

用于估计 Q 函数的 MC 方法的思想包括计算对给定(状态、操作)对的所有访问期间的平均回报。
特别是,为了应用首次访问 MC 方法,我们可以推导出访问标准:如果访问状态 s 并在其中选择了操作 a,则访问状态-操作对 (s, a)。

5.2 优势

与我们在上一篇文章中介绍的动态规划方法相比,用于估计价值函数的蒙特卡罗方法具有显着的优势:

每个状态都是独立估计的,不依赖于其他状态的值;
更新单个状态的算法复杂性取决于剧集数,而不是状态总数。由于由我们来定义平均最终结果的集数,因此即使状态总数很高,我们也有更大的灵活性;
在这里插入图片描述

与动态规划相比,使用 MC 方法的优势之一是计算值函数的算法复杂性仅取决于集数,而不取决于状态数。
从理论上讲,在许多环境设置中,几乎不可能估计每种状态和动作的转移概率来获得环境的动态。同时,MC方法不需要这些信息,并且可以从易于生成的观察结果中优雅地学习。

让我们继续前面的二十一点示例,但这次是 Q 函数估计。

5.3 Q函数

正如我们已经知道的,二十一点中有两种可能的动作:击打和坚持。如果我们将它们添加到可能的状态中,我们将得到 200 ⋅ 2 = 400(状态、操作)对。这使得蒙特卡罗算法可以很容易地估计给定策略下的任何 Q 函数。

下图显示了随机策略的 Q 函数,其中 p(hit) = p(stick) = 0.5。
在这里插入图片描述

随机策略的 Q 函数。横轴表示玩家的牌数,纵轴表示庄家的第一张牌。庄家的 A 用 1 表示。
与前面的场景一样,有和没有可用 A 的图表彼此相似,只是可用 A 为玩家提供了更高的获胜机会。
总体 q 值最低的图表适用于在没有可用 ace 的情况下击中的动作。造成这种情况的两个因素是,首先,通过击球,玩家已经面临被破坏的风险,其次,玩家有 50% 的机会(根据我们的政策)再次击球,这大大增加了输掉比赛的机会。因此,21 个玩家点数的最后一列由所有 -1 组成,因为在所有这些情况下,玩家都会通过击球来保证输掉比赛。

六、勘探与勘探的权衡

注意。在了解了如何评估 Q 函数之后,讨论如何找到最优策略是合乎逻辑的。然而,在这样做之前,我们需要继续几个重要的概念,这些概念将帮助我们构建一个有效的算法。

目前,我们在当前的 Q 函数估计方法中面临一个主要问题:大量的总对(状态、动作)可能永远不会被访问。如果策略是确定性的,那么对于给定状态,它可能总是在以下学习迭代中贪婪地只选择一个操作。因此,我们将永远无法探索其他可能带来更高回报的(状态、行动)货币对。

如果代理只能从状态执行相同的单个操作,则策略称为确定性策略。此类策略将概率 1 分配给此操作,将 0 分配给该状态的所有其他操作。如果不满足此条件,则该策略称为随机策略。

所描述的问题是勘探和开采权衡的经典公式。一方面,我们希望利用最佳行动来获得尽可能高的回报。另一方面,我们需要探索所有可能的行动,以确定哪些行动会带来更大的回报。

这就是为什么有必要在开发和勘探之间争取适当的平衡。说到蒙特卡罗方法,有几种方法,下面将介绍其中一种。


想象一下,一个智能体在下面的迷宫中学习最佳策略。代理人的目标包括收集最大可能的回报。
在这里插入图片描述

迷宫示例。如果策略被贪婪地更新,那么代理很可能不会在 D2 暴露奖励。
代理从 A1 开始,可以在每次迭代中朝任何方向移动。终端状态位于 A3 并给出奖励 R = 1。除此之外,在 D2 处还有一个很大的奖励 R = 10,我们显然希望代理收集。同时,在C1处有一个孔。如果代理在那里,则剧集结束,奖励 R = -3 将提供给代理。踏入其他单元格会带来奖励 R = 0。

最佳策略包括在 D2 处收集奖励,然后在 A3 处导航到最终状态。不幸的是,如果勘探和开采之间的平衡没有得到适当调整,情况并非总是如此。

也就是说,如果智能体总是贪婪地选择具有最大回报的动作,那么在前几次迭代之一之后,它可能会发现路径 A1-A2-A3 是唯一的最优路径,而无需探索任何其他选项。

在另一种情况下,代理最初可以向右移动,但如果它位于 C1,则策略评估会将负状态或状态操作值分配给 C1 周围的单元格。如果策略是贪婪的或探索率非常小,那么代理将永远不会探索 D2 的奖励。

探索开始
探索更多(状态、动作)对的最简单方法之一是在每种可能的组合(状态、动作)中多次显式开始剧集,以便在极少数情况下仍能获得平均值。另一种方法包括对每个剧集的起始状态进行随机抽样,所有状态的概率均为非零。这种方法称为探索开始。

探索开始技术使(状态、动作)对的分布更加一致,并增加了在罕见环境情况下观察回报的机会。
尽管探索开始很简单,但它有一个相当大的缺点:代理与环境交互的实际数据分布可能与用于探索开始的数据分布有很大不同。因此,代理可能会根据虚幻数据分布学习最佳策略。因此,学习到的策略在实际环境中不会是最优的。

七、结论

在本文中,我们介绍了蒙特卡罗方法,这些方法在强化学习中非常有用。与上一部分讨论的策略改进算法相比,它们在不了解其动态的情况下在环境中优化策略的能力使它们适用于许多问题。

然而,我们只讨论了估计 V 函数和 Q 函数的方法,并没有详细介绍用于搜索最优策略的完整蒙特卡罗算法,因为我们必须首先解决勘探和开发之间的平衡问题。为此,我们将在下一部分中介绍ε贪婪策略,将它们与探索开始方法相结合,并对当前版本的算法进行一些改进。

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

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

相关文章

zstd库数据压缩与解压缩

在 Visual Studio 2019 中使用 C 的 zstd 库进行数据压缩与解压缩 在今天的博客中,我们将探讨如何在 Visual Studio 2019 中使用 zstd 库进行高效的数据压缩和解压缩。zstd(也称为 Zstandard 或 zstd)是由 Facebook 开发的开源压缩库&#x…

动手学深度学习22 池化层

动手学深度学习22 池化层 1. 池化层2. 实现3. QA 课本: https://zh-v2.d2l.ai/chapter_convolutional-neural-networks/pooling.html 视频: https://www.bilibili.com/video/BV1EV411j7nX/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f0…

关于单元测试

关于单元测试的一些总结:

【408真题】2009-17

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…

618值得买的东西有哪些?买什么最划算?超全品类大清单总结

平日里让许多人心动不已的收藏加购好物,是否常常因为价格昂贵而让人望而却步?然而,618活动期间的到来,恰恰为我们提供了一个难得的购物盛宴!相信在第一波活动中,许多消费者已经跃跃欲试,开始享受…

SuperSocket 自定义AppServer、AppSession、CommandBase

1、预期效果如下图。 2、自定义AppServer,代码如下。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SuperSocket.SocketBase; using SuperSocket.SocketBase.Config;namespace Co…

做抖音电商,可以没有货源和经验,但不能没有耐心

我是王路飞。 在抖音做电商这件事,不需要怀疑其可行性。 经过四五年的发展,平台和商家已经证明了抖音电商的前景,它就是我们普通人做抖音最适合的一个渠道。 想在抖音做电商的,再给你们一个经验之谈,你可以没有货源…

基于 Spring Boot 博客系统开发(十一)

基于 Spring Boot 博客系统开发(十一) 本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(十)&#x…

云上聚智——移动云云服务器进行后端的搭建及部署

什么是移动云 移动云是指将移动设备和云计算技术相结合,为移动应用提供强大的计算和存储能力的服务模式。传统的移动应用通常在本地设备上进行计算和存储,而移动云将这些任务转移到云端进行处理。通过移动云,移动设备可以利用云端的高性能计算…

基于Python+flask+echarts的气象数据采集与分析系统,可实现lstm算法进行预测

背景 基于PythonFlaskEcharts的气象数据采集与分析系统结合了强大的数据处理能力和可视化展示技术,旨在实现对气象数据的实时采集、存储和分析。通过Python编程语言实现数据采集模块,利用Flask框架搭建后端系统,实现数据处理、存储和分析功能…

ORB-SLAM2从理论到代码实现(六):Tracking程序详解(上)

1. Tracking框架 Tracking线程流程框图: 各流程对应的主要函数 2. Tracking整体流程图 上面这张图把Tracking.cc讲的特别明白。 tracking线程在获取图像数据后,会传给函数GrabImageStereo、GrabImageRGBD或GrabImageMonocular进行预处理,这…

【php开发系统性学习】——thinkphp框架的控制器和视图的精简详细的使用

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

[Android]联系人-删除修改

界面显示 添加按钮点击,holder.imgDelete.setlog();具体代码 public MyViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {//映射布局文件,生成相应的组件View v LayoutInflater.from(parent.getContext()).inflate(R.layout.d…

胶原蛋白三肽能否深入皮肤?一场关于美丽的科学之旅

在追求美丽的道路上,我们总是对各种护肤成分充满好奇。今天,就让我们一起探讨一个热门话题——胶原蛋白三肽,它究竟能否深入我们的皮肤,为我们带来期待中的美丽改变呢? 首先,我们需要了解胶原蛋白肽是什么…

开发心电疾病分类的深度学习模型并部署运行于ARM虚拟硬件平台(AVH)

目录 一、ARM虚拟硬件平台介绍 二、心电疾病分类模型介绍 三、部署流程 3.1 基于百度云平台订阅虚拟硬件镜像 3.2 安装编译相关组件 3.1 数据加载 3.2 模型转换 方式一: tensorflow模型转换为onnx模型,onnx模型转换为TVM模型 方式二&#xff1…

注册表Windows兼容性设置(AppCompatFlags)

属性 - 兼容性 EXE文件属性中有兼容性标签,当有些老版本软件不能正常运行时经常会调整这里的设置。 image.png 上面的所有选项都写在注册表中,其中“更改所有用户的设置”保存在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppC…

html5各行各业官网模板源码下载(2)

文章目录 1.来源2.源码模板2.1 HTML5好看的旅行网站模板源码2.2 HTML5自适应医院叫号大屏模板源码2.3 HTML5好看的高科技登录页面模板源码2.4 HTML5宠物美容服务公司网站模板源码2.5 HTML5创意品牌广告设计公司网站模板源码2.6 HTML5实现室内设计模板源码2.7 HTML5黄金首饰网站…

Activiti7_使用

Activiti7_使用 一、Activiti7二、绘制工作流三、通过代码部署流程,再对流程进行实例化,完整运行一遍流程即可四、在springbooot中使用 一、Activiti7 为了实现后端的咨询流转功能,学习Activiti7,记录下使用的过程及遇到的问题 二…

openwrt 官方版 安装配置 AdGuard Home + smartdns 告别广告烦扰 教程 软路由实测 系列五

1 安装 adguard home opkg update opkg install adguardhome #启动 /etc/init.d/adguardhome start /etc/init.d/adguardhome enable #查看 rootOpenWrt:~# ps| grep AdGuardHome5101 root 1233m S /usr/bin/AdGuardHome -c /etc/adguardhome.yaml -w /var/adguardhom…