转自:https://www.cnblogs.com/xiachongkun/p/7767976.html,感谢分享

大名鼎鼎的蒙特卡洛方法(MC),源自于一个赌城的名字,作为一种计算方法,应用领域众多,主要用于求值。蒙特卡洛方法的核心思想就是:模拟---抽样---估值。

蒙特卡洛的使用条件:1.环境是可模拟的;2.只适合情节性任务(episode tasks)。

蒙特卡洛在强化学习中的应用:

1.完美信息博弈:围棋、象棋、国际象棋等。

2.非完全信息博弈:21点、麻将、梭哈等。

前面的动态规划方法,要求环境模型已知,然后根据已知的转移概率,求出所有的状态值和动作,选出其中值函数最高的一些列动作构成最优策略。但MC方法面对的是model-free,依靠经验就可以求解最优策略。

那么,什么是经验呢?经验其实就是训练样本,不管怎么样,对一个任务从头到尾执行一遍,就得到了一个训练样本,如果有大量的样本,那么就可以估计在状态s下,遵循某个策略的期望回报,也就是状态值函数。

这样应该就明白了,MC方法是依靠大量样本的平均回报来解决强化学习问题的。

在正式开始MC之前,先放上一张人神共知的图,看看DP和MC还有后面的TD到底有什么关系。

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的值函数可以这样计算:

v(s)=G11(s)+G21(s)+G31(s)+⋯N(s)v(s)=G11(s)+G21(s)+G31(s)+⋯N(s)

对于every-visit MC,某一个状态s的值函数可以这么计算:

v(s)=G11(s)+G12(s)+⋯+G21(s)+G22(s)+⋯+G31(s)+G32(s)+⋯N(s)v(s)=G11(s)+G12(s)+⋯+G21(s)+G22(s)+⋯+G31(s)+G32(s)+⋯N(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),比如正态分布,这样,原本的期望如下:

如果我们定义重要性权重:

ωn=p(zn)q(zn)ωn=p(zn)q(zn)

,那么,普通的重要性采样求积分就如下图所示:

E[f]=1N∑nωnf(zn)E[f]=1N∑nωnf(zn)

由上式可知,基于重要性采样的积分估计为无偏估计,即估计的期望值等于真实的期望。但是,基于重要性采样的积分估计的方差无穷大。这是因为,原来的被积分函数乘上一个重要性权重,这就改变了被积函数的形状和分布。尽管均值没有发生什么变化,但方差明显发生了改变。

当然了,在重要性采样中,使用的采样概率分布与原概率分布越接近,方差就越小。然而,被积分函数的概率往往很那求得,或者,没有简单的采样概率分布与之相似,这时候如果执迷不悟还使用分布差别很大的采样概率对原概率分布进行采样,方差就会趋近于无穷大。

其中一种减小重要性采样积分方差的方法就是采用加权重要性采样:

E[f]≈∑n=1Nωn∑Nm=1ωmf(zn)E[f]≈∑n=1Nωn∑m=1Nωmf(zn)

好了,前面说完了重要性采样的基本概念,下面就说说这些与离策略方法有什么关系呢。这里是这么理解的,数据生成策略π所产生的轨迹概率分布相当于重要性采样中的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

理解 on-policy 和 off-policy的更多相关文章

  1. Policy Improvement and Policy Iteration

    From the last post, we know how to evaluate a policy. But that's not enough, because the purpose of ...

  2. Provider Policy与Consumer Policy在bnd中的区别

    首先需要了解的是bnd的相关知识: 1. API(也就是接口), 2. API Provider(接口的实现) 3. API Consumer( 接口的使用者) OSGi中的一个版本有4个部分:    ...

  3. .Net Core权限认证基于Cookie的认证&授权.Scheme、Policy扩展

    在身份认证中,如果某个Action需要权限才能访问,最开始的想法就是,哪个Action需要权限才能访问,我们写个特性标注到上面即可,[TypeFilter(typeof(CustomAuthorize ...

  4. 使用 SecurityManager 和 Policy File 管理 Java 程序的权限

    参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...

  5. Utility2:Appropriate Evaluation Policy

    UCP收集所有Managed Instance的数据的机制,是通过启用各个Managed Instances上的Collection Set:Utility information(位于Managem ...

  6. trait与policy模板应用简单示例

    trait与policy模板应用简单示例 accumtraits.hpp // 累加算法模板的trait // 累加算法模板的trait #ifndef ACCUMTRAITS_HPP #define ...

  7. trait与policy模板技术

    trait与policy模板技术 我们知道,类有属性(即数据)和操作两个方面.同样模板也有自己的属性(特别是模板参数类型的一些具体特征,即trait)和算法策略(policy,即模板内部的操作逻辑). ...

  8. Network Policy - 每天5分钟玩转 Docker 容器技术(171)

    Network Policy 是 Kubernetes 的一种资源.Network Policy 通过 Label 选择 Pod,并指定其他 Pod 或外界如何与这些 Pod 通信. 默认情况下,所有 ...

  9. SharePoint API测试系列——Manage SharePoint Site Policy & Expiration Email with CSOM API

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对CSOM(Not SSOM) Site Policy & Expiration Emai ...

  10. Create a Group Policy Central Store

    一.How to create a Group Policy Central Store You have downloaded or created your own Group Policy Ad ...

随机推荐

  1. np.array()和np.mat()区别

    1. 生成数组所需格式不同 mat可以从字符串或列表中生成:array只能从列表中生成 2. 生成的数组计算方式不同 array生成数组,用np.dot()表示矩阵乘积,(*)号或np.multipl ...

  2. (四)Audio子系统之AudioRecord.read

      在上一篇文章<(三)Audio子系统之AudioRecord.startRecording>中已经介绍了AudioRecord如何开始录制音频,接下来,继续分析AudioRecord方 ...

  3. TortoiseGit学习系列之TortoiseGit基本操作拉取项目(图文详解)

    前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseG ...

  4. JavaScript设计模式-12.门面模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. java几个经典的算法题目----------二维矩阵算法

    public class testClockwiseOutput { public static void main(String[] args) { //1.构建矩阵数据 int[][] arr = ...

  6. [中英对照]The Art Of Reporting Bugs | 报bug的艺术

    前言:因为最近要给兄弟Team分享一下如何有效地报告bug, 故多做一做功课.下面给出一篇博客的中英文对照翻译. The Art Of Reporting Bugs | 报bug的艺术 My init ...

  7. leetcode4:Permutation

    #include <utility> #include <iostream> #include <vector> #include <algorithm> ...

  8. Tomcat开发Comet要点

    Comet技术的悄然流行,Jetty在比较早地支持了Comet,提供了Comet 的Servlet,同样从Tomcat6开始,Comet已经在Tomcat的标准Servlet中开始支持了,这是个好事情 ...

  9. 分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境(服务器端及客户端)(转)

    近期想改公司内部的源码管控从TFS为git,发现yubinfeng大侠有关git的超详细大作,现将其转载并记录下,以防忘记,其原博客中有更加详细的git及.net开发相关内容.原文地址:http:// ...

  10. spring cloud连载第二篇之Spring Cloud Config

    Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...