转自:https://www.cnblogs.com/xiachongkun/p/7767976.html,感谢分享html
大名鼎鼎的蒙特卡洛方法(MC),源自于一个赌城的名字,做为一种计算方法,应用领域众多,主要用于求值。蒙特卡洛方法的核心思想就是:模拟---抽样---估值。算法
蒙特卡洛的使用条件:1.环境是可模拟的;2.只适合情节性任务(episode tasks)。bootstrap
蒙特卡洛在强化学习中的应用:app
1.完美信息博弈:围棋、象棋、国际象棋等。函数
2.非彻底信息博弈:21点、麻将、梭哈等。学习
前面的动态规划方法,要求环境模型已知,而后根据已知的转移几率,求出全部的状态值和动做,选出其中值函数最高的一些列动做构成最优策略。但MC方法面对的是model-free,依靠经验就能够求解最优策略。优化
那么,什么是经验呢?经验其实就是训练样本,无论怎么样,对一个任务从头至尾执行一遍,就获得了一个训练样本,若是有大量的样本,那么就能够估计在状态s下,遵循某个策略的指望回报,也就是状态值函数。atom
这样应该就明白了,MC方法是依靠大量样本的平均回报来解决强化学习问题的。spa
在正式开始MC以前,先放上一张人神共知的图,看看DP和MC还有后面的TD到底有什么关系。xml
1.MC的基本概念
当咱们要评估智能体的当前策略时,能够利用策略产生不少次试验,每次试验都是从任意的初始状态开始直到终止状态,好比一次试验为S1,A1,R2,S2,A2,R3.........,计算一次试验找那个状态s的折扣回报返回值为:
用图表示以下:
MC方法就是反复屡次试验,求取每个实验中每个状态s的值函数,而后再根据GPI,进行策略改进、策略评估、策略改进....直到最优。
这中间就须要考虑一个状况,在一次试验中,对于某个状态s,可能只经历一次,也可能经历屡次,也可能不经历,对于没有经历状态s的实验,在求取s的值函数时直接忽略该次实验就好。那么,对于其余两种状况时,怎么处理呢?
这里就有了两种方法:first-visit MC和every visit MC.
对于first-visit MC, 某一个状态s的值函数能够这样计算:
对于every-visit MC,某一个状态s的值函数能够这么计算:
下面给出一次访问MC的伪代码以下所示:
2.起始点方法(Exploring Starts MC)
对于MC来讲,经验也就是训练样本的完备性相当重要,由于完备的训练样本才能估计出准确的值函数。可是,正如前面所说的,不少状况下,咱们没法保证在屡次试验后,能够得到一个较为完备的分布,极可能大部分都是极为类似的试验,致使一部分状态根本没法遍历到,遇到这种状况咱们该怎么办呢?很明显,咱们须要再MC方法中保证每一个状态都能被访问到才行啊。这时候,就有人提出了,咱们不是有起始状态嘛,能够设置一个随机几率,使得全部可能的状态都有必定不为0的几率做为初始状态,这样不就能遍历到每个状态了吗。这就是起始点方法的思想。
伪代码以下所示:
下面问题又来了,起始点方法中,彷佛有个问题,初始状态是随机分配的,这样能够保证迭代过程当中每个状态行为对都能被选中,但这里面蕴含了一个假设:也就是假设全部动做都能被无限频繁地被选中。这个个人理解就是:在状态不少的状况下,若是要每个状态做为起始状态被选中的话,按照随机不为0的几率,可能须要无限次之多,至少理论上是这样。但现实中,有时候很难成立,或者没法彻底保证。那么,有没有其余方法,能够保证初始状态不变的同时,又能保证每一个状态能够遍历到呢?
咱们突然想到了之前EE问题探索的时候,彷佛ε-greedy就能够知足啊。对了,就是这个方法,伪代码以下:
3. On-policy MC和Off-policy MC
下面得说一下同策略MC和离策略MC方法了。为何会有这两种分类呢?能够想一下,MC算法不须要模型,只须要经验样本,只要足够多就能够近似估计出最优策略了,但这些训练样本怎么产生呢,若是训练样本根据另外一套不是最优的策略生产的,那么在进行评估与改进的时候,就不太同样了。因此,这两种方法针对的就是数据产生的策略与评估改进的策略是否为统一策略进行分类的。
a.On-policy MC:同策略MC是指产生数据的策略与评估改进的策略是同一个策略。
b.Off-policy MC:离策略是指产生数据策略与评估改进的策略不是同一种策略。固然了,离策略MC也不是随便选择的,而是必须知足必定的条件。这个条件简单说就是:数据生成策略产生的状态要覆盖评估和改进策略的全部可能性。其实想一想,这个仍是比较苛刻的。
4.重要性采样(Importance Sampling)
同策略MC虽然更为简单方便,但实际应用中,离策略更为广泛。所以实际状况下,咱们每每能够根据一些人为经验的策略给出一系列试验。
重要性采样是离策略方法使用时出现的问题。这一块内容读sutton原著的时候,其实我并无理解的特别清楚,感受写的比较拗口。因而参考了天津包子馅的知乎专栏,算是有点明白了。
重要性采样来源于求指望,好比说:求取下面的指望
若是其中的随机变量z的分布很是复杂时,咱们没法根据解析的方法产生用于逼近指望的样本,这时候怎么办呢?咱们能够选用一个几率分布很是简单,产生样本很容易的几率q(z),好比正态分布,这样,本来的指望以下:
若是咱们定义重要性权重:
,那么,普通的重要性采样求积分就以下图所示:
由上式可知,基于重要性采样的积分估计为无偏估计,即估计的指望值等于真实的指望。可是,基于重要性采样的积分估计的方差无穷大。这是由于,原来的被积分函数乘上一个重要性权重,这就改变了被积函数的形状和分布。尽管均值没有发生什么变化,但方差明显发生了改变。
固然了,在重要性采样中,使用的采样几率分布与原几率分布越接近,方差就越小。然而,被积分函数的几率每每很那求得,或者,没有简单的采样几率分布与之类似,这时候若是执迷不悟还使用分布差异很大的采样几率对原几率分布进行采样,方差就会趋近于无穷大。
其中一种减少重要性采样积分方差的方法就是采用加权重要性采样:
好了,前面说完了重要性采样的基本概念,下面就说说这些与离策略方法有什么关系呢。这里是这么理解的,数据生成策略π所产生的轨迹几率分布至关于重要性采样中的q(z),用来评估和改进的策略μ对应的是那个复杂的p(z),所以利用数据生成策略所产生的累积函数返回值评估策略时,须要累积函数返回值前面乘以重要性权重。
那么,在评估改进的策略时,一次试验的几率是:
在数据生成策略下,相对应的实验几率为:
所以,重要性权重为:
对于普通的重要性采样,值函数估计为:
下面用个简单的小例子来讲明一下上面的式子:
加权的重要性采样值函数估计为:
最后,给出离策略MC方法的一个伪代码:
最后,总结一下蒙特卡洛与动态规划的区别。
1.DP方法是基于模型的,而MC是无模型的。
2.DP是计算是自举的或引导性的(bootstrapping),而MC的计算是取样性的(sampling)。
MC的优缺点说明:
优势:a.蒙特卡洛方法能够从交互中直接学习优化的策略,而不须要一个环境的动态模型。这个样本极可能是大量的但容易得到的。
b.MC能够用于只知道样本的模型。
c.MC方法的每个状态值计算都是独立计算的,不会影响其余的状态值。
缺点:a.须要大量重复的训练样本。
b.基于几率的,也就是不肯定的。
参考文献
[1]. Reinforcement learning: an introduction.2017 Draft.
[2].https://zhuanlan.zhihu.com/p/25743759
[3].http://www.cnblogs.com/steven-yang/p/6507015.html
[4].http://www.cnblogs.com/jinxulin/p/3560737.html