【RL系列】从蒙特卡罗方法步入真正的强化学习
蒙特卡罗方法给我的感觉是和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):
- 投影闭合曲线到x-y平面
- 开始迭代,随机选择起始点(x, y)
- 随机选择动作开始游走
- 判断是否碰到边界,如碰到边界,记录边界高度值$ H_b $,并记录中间经过的每一个状态,写成状态集合$S$。未碰到则继续游走。
- 设状态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$$
- 回到第三步重新开始迭代。经过大量次数的实验后,停止循环过程。
- 任何一点(任何一个状态)的高度值的估计可以计算估计为((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系列】从蒙特卡罗方法步入真正的强化学习的更多相关文章
- 【RL系列】蒙特卡罗方法——Soap Bubble
“肥皂泡”问题来源于Reinforcement Learning: An Introduction(2017). Exercise 5.2,大致的描述如下: 用一个铁丝首尾相连组成闭合曲线,浸入肥皂泡 ...
- 强化学习系列之:Deep Q Network (DQN)
文章目录 [隐藏] 1. 强化学习和深度学习结合 2. Deep Q Network (DQN) 算法 3. 后续发展 3.1 Double DQN 3.2 Prioritized Replay 3. ...
- 强化学习读书笔记 - 09 - on-policy预测的近似方法
强化学习读书笔记 - 09 - on-policy预测的近似方法 参照 Reinforcement Learning: An Introduction, Richard S. Sutton and A ...
- 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)
强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...
- 强化学习读书笔记 - 11 - off-policy的近似方法
强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...
- 强化学习读书笔记 - 10 - on-policy控制的近似方法
强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton an ...
- 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价
请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(G ...
- 【RL系列】马尔可夫决策过程中状态价值函数的一般形式
请先阅读上一篇文章:[RL系列]马尔可夫决策过程与动态编程 在上一篇文章里,主要讨论了马尔可夫决策过程模型的来源和基本思想,并以MAB问题为例简单的介绍了动态编程的基本方法.虽然上一篇文章中的马尔可夫 ...
- 【RL系列】Multi-Armed Bandit笔记——UCB策略与Gradient策略
本篇主要是为了记录UCB策略与Gradient策略在解决Multi-Armed Bandit问题时的实现方法,涉及理论部分较少,所以请先阅读Reinforcement Learning: An Int ...
随机推荐
- HDFS的Write过程
hadoop中重要的组成部分HDFS,它所发挥的重要作用是进行文件的后端存储.HDFS针对的是低端的服务器,场景为读操作多.写操作少的情况.在分布式存储情况下,比较容易出现的情况是数据的损害,为了保证 ...
- 2019年,iOS开发的你不可或缺的进阶之路!
序言 我相信很多人都在说,iOS行业不好了,iOS现在行情越来越难了,失业的人比找工作的人还要多.失业即相当于转行,跳槽即相当于降低自己的身价.那么做iOS开发的你,你是否在时刻准备着跳槽或者转行了. ...
- The Bitizens Team
bitizens.bitguild.com 首个区块链3D艺术品. https://mybitizens.bitguild.com/#/igo https://www.youtube.com/watc ...
- laravel5.5源码笔记(四、路由)
今天这篇博文来探索一下laravel的路由.在第一篇讲laravel入口文件的博文里,我们就提到过laravel的路由是在application对象的初始化阶段,通过provider来加载的.这个路由 ...
- doctrine 操作实例(转)
话说这篇文章真是在没有任何实例的情况下帮了大忙 另外附上我自己的一个完整demo:https://github.com/LearnForInterest/material 结合了ci框架的doctri ...
- Linuxg环境搭建
1.使用VMWARE软件安装虚拟机,创建打开将进入桌面. 2.配置静态IP.IP环境关系到能否使用网络进行软件的下载,即apt的使用. 1).找到文件并作如下修改:sudo vim /etc/netw ...
- 大数据学习--day15(常用类:Date--DateFormat--SimpleDateFormat--File--包装类)
常用类:Date--DateFormat--SimpleDateFormat--File--包装类 这些常用类就不像字符串挖那么深了,只列列用法. 时间处理: /** * 时间处理类 * DateFo ...
- Flume的介绍和简单操作
Flume是什么 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数 ...
- A1048
给n个正整数,再给一个m,如果n个数中存在a+b=m(a<=b),则输出a,b. 如果有两组以上,则输出a最小的一组. #include<cstdio> #include<al ...
- VIM - 模式简介
1. 概述 简述 vim 模式 很简单的东西, 随便说说得了 2. 模式们 概述 vim 各个模式 后面的切换, 都是从 标准模式 切换到其他模式 1. Normal Mode 名称 标准模式 / 常 ...