蒙特卡罗方法给我的感觉是和Reinforcement Learning: An Introduction的第二章中Bandit问题的解法比较相似,两者皆是通过大量的实验然后估计每个状态动作的平均收益。不过两者的区别也是显而易见,Bandit问题比较简单,状态1->动作1->状态1,这个状态转移过程始终是自我更新的过程,而且是一一对应的关系。蒙特卡罗方法所解决的问题就要复杂一些,通常来说,其状态转移过程可能为,状态1->动作1->状态2->动作1->状态3。Sutten书中是这样描述两者的区别:

The main difference is that now there are multiple states, each acting like a different bandit problem (like an associative-search or contextual bandit) and that the different bandit problems are interrelated.

这里说的很好,应用蒙特卡罗方法的问题中的每一个状态下的其中一个动作之后的状态转移过程都像是许多个不同的Bandit问题。还有一个很明显的区别是,蒙特卡罗问题大都有一个或几个明确的目标状态,达到目标状态后,才能计算当前收益,中间过程通常来说并没有自己的状态或动作收益,但对于Bandit问题来说是没有这个中间过程的。

什么是中间过程?简单来说就是从起始状态到达目标状态中间所经历的状态动作集合。在蒙特卡罗方法中,中间过程不获得任何奖励,但是中间过程的状态动作价值可以由目标状态奖励进行估计。这个估计的原则也很简单,可以描述为:某状态动作价值可以估计为经过该状态到达目标所获得的奖励之和除以经过该状态的次数。对于某个中间过程的状态动作价值估计实际上就是许多个不同的Bandit问题中的一个。在上一篇文章中提到了在解决Soap Bubble问题中,蒙特卡罗方法的优势,即可以快速收敛某一个状态或某几个状态的价值估计。上一篇文章中的算法只关注起始状态的价值收敛而完全忽略中间过程,但当使用蒙特卡罗方法估计所有状态价值时,对中间过程不进行任何处理的方法就太低效了。所以下面我们尝试将中间状态价值估计应用到之前的算法中,看一看完整的蒙特卡罗方法进行价值估计的算法流程,还是以Soap Bubble为例(什么是Soap Bubble问题,可以参考上一篇博文【RL系列】蒙特卡罗方法——Soap Bubble):

  1. 投影闭合曲线到x-y平面
  2. 开始迭代,随机选择起始点(x, y)
  3. 随机选择动作开始游走
  4. 判断是否碰到边界,如碰到边界,记录边界高度值$ H_b $,并记录中间经过的每一个状态,写成状态集合$S$。未碰到则继续游走。
  5. 设状态state属于状态集合$ S $,用公式更新状态state的价值总和$ V(\mathrm{state}) $与经过状态state的次数$ C(\mathrm{state}) $:$$ V(\mathrm{state}) =  V(\mathrm{state}) + H_b \\ C(\mathrm{state}) =  C(\mathrm{state}) + 1$$
  6. 回到第三步重新开始迭代。经过大量次数的实验后,停止循环过程。
  7. 任何一点(任何一个状态)的高度值的估计可以计算估计为((x, y) = state):$$ H(state) = \frac{V(state)}{C(state)} $$

这个加入中间过程估计的逻辑还是很简单的,因为蒙特卡罗方法有一条非常重要的性质,“每一个状态的估计都是独立的,不依赖于其它状态的! ”,所以你可以把中间过程某个状态的估计看成是该状态作为起始状态的估计。迭代开始之初对起始状态的随机选择也十分重要,随机选择是为了保证每个装填都有作为起始状态的机会,也是为了增加每一个状态被访问的机会,这种策略叫做Exploring Starts,当其同时运用到动作选择时,才是完整的Monte Carlo ES算法(这个算法也是Monte Carlo经典问题BlackJack的求解基础!)。

直接给出该算法的计算结果:

经过10000次迭代,效果还是不错的,但相比于大约250次迭代就可以计算出更加精确值的Iteration Method来说还是效率较低的。Iteration Method的本质就是Dynamic Programming,在强化学习中相对应就是马尔可夫决策——一种建立在模型,状态与状态之间关系的算法。Monte Carlo最大的优势在于,不需要模型,只靠探索+总结就可以寻找到最优策略,这比马尔可夫决策更加的趋近于人类的决策行为,真正的人工智能之强化学习是从这里开始的。

【RL系列】从蒙特卡罗方法步入真正的强化学习的更多相关文章

  1. 【RL系列】蒙特卡罗方法——Soap Bubble

    “肥皂泡”问题来源于Reinforcement Learning: An Introduction(2017). Exercise 5.2,大致的描述如下: 用一个铁丝首尾相连组成闭合曲线,浸入肥皂泡 ...

  2. 强化学习系列之:Deep Q Network (DQN)

    文章目录 [隐藏] 1. 强化学习和深度学习结合 2. Deep Q Network (DQN) 算法 3. 后续发展 3.1 Double DQN 3.2 Prioritized Replay 3. ...

  3. 强化学习读书笔记 - 09 - on-policy预测的近似方法

    强化学习读书笔记 - 09 - on-policy预测的近似方法 参照 Reinforcement Learning: An Introduction, Richard S. Sutton and A ...

  4. 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)

    强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...

  5. 强化学习读书笔记 - 11 - off-policy的近似方法

    强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...

  6. 强化学习读书笔记 - 10 - on-policy控制的近似方法

    强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton an ...

  7. 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价

    请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(G ...

  8. 【RL系列】马尔可夫决策过程中状态价值函数的一般形式

    请先阅读上一篇文章:[RL系列]马尔可夫决策过程与动态编程 在上一篇文章里,主要讨论了马尔可夫决策过程模型的来源和基本思想,并以MAB问题为例简单的介绍了动态编程的基本方法.虽然上一篇文章中的马尔可夫 ...

  9. 【RL系列】Multi-Armed Bandit笔记——UCB策略与Gradient策略

    本篇主要是为了记录UCB策略与Gradient策略在解决Multi-Armed Bandit问题时的实现方法,涉及理论部分较少,所以请先阅读Reinforcement Learning: An Int ...

随机推荐

  1. git提交代码到码云

    日常代码一般提交到github比较多,但我还是钟爱马爸爸,没错就是码云. 码云是中文版的代码托管的网站,不存在打开网速问题,使用也蛮方便的,日常自己保存托管代码已经足够,平时使用git提交代码到码云是 ...

  2. 什么是cookie,作用是什么? 以及session的理解

    cookie: 1.定义:什么是cookie?  cookie就是存储在客户端的一小段文本 2.cookie是一门客户端的技术,因为cookie是存储在客户端浏览器中的 3.cookie的作用:是为了 ...

  3. django查询集-17

    当查询结果是多个的时候,django-ORM会返回一个 查询集(QuerySet) ,表示从数据库中获取对象的 集合 . 查询集可以使用过滤器进行再次处理. 例如查询阅读量大于20且评论数大于30的书 ...

  4. Rails中重写Active Record字段属性

    系统重构或升级时偶尔会碰到需要重写某个字段的情况,例如: 1. 读取user的name字段时,实际返回name_new字段 class User < ActiveRecord::Base def ...

  5. 编译Libuv

    Libuv https://github.com/libuv/libuv LibSourcey是基于libuv,集合了第三方用于视频流的开源库,使用C++11. 下载最新 https://dist.l ...

  6. MongoDB分片介绍

    本文简单介绍MongoDB的分片功能,对分片进行了概述,具体的功能详解,后续文章会陆续推出 分片是把数据分配到多个服务器上的一种方式,MongoDB使用分片实现大数据部署以及高吞吐操作. 大数据以及高 ...

  7. 坚果云WebDav示例

    坚果云WebDav示例 最近看到坚果云有一个WebDAV应用,一时不解这是什么功能,了解后做了一个示例: WebDAV是一种基于HTTP1.1协议的通信协议.它扩展了HTTP1.1,在GET.POST ...

  8. Verilog的一些系统任务(一)

    $display.$write;$fopen.$fdisplay.$fclose;$strobe $display和$write任务 格式: $display(p1,p2,...pn);     $w ...

  9. 20155235 《Java程序设计》 实验四 Android开发基础

    20155235 <Java程序设计> 实验四 Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理 ...

  10. linux下order by 报出ORDER BY clause is not in SELECT list

    一.问题: 在程序执行查询的时候,order by 不能找到要排序的列 二.解决: 在linux环境下,程序之前连接其他库可以正常运行,但是换了一个库后数据就不能正常的显示了,查看后台报出排序列找不到 ...