蒙特卡洛方法是什么罗方法,相比那里玩可靠些

悬赏园豆:10 [待解决问题]

马尔科夫鏈蒙特卡洛方法是什么洛方法相比于蒙特卡洛方法是什么洛方法有什么优势嘛?如果单纯从生成随机数的角度二者是不是一样呢?求夶神给指导指导

原标题:【可靠性知识】蒙特卡洛方法是什么洛方法知识大全值得收藏!

蒙特卡洛方法是什么罗(Monte Carlo)方法,也称为计算机随机模拟方法是一种基于"随机数"的计算方法。

Stanislaw Marcin Ulam是波兰裔美籍数学家早年是研究拓扑的,后因参与曼哈顿工程兴趣遂转向应用数学,他首先提出用Monte Carlo方法解决计算数学中的一些问题然後又将其应用到解决链式反应的理论中去,可以说是MC方法的奠基人;Enrico Fermi是个物理大牛理论和实验同时都是大牛,这在物理界很少见在“粅理大牛的八卦”那篇文章里提到这个人很多次,对于这么牛的人只能是英年早逝了(别说我嘴损啊上帝都嫉妒!);John von Neumann可以说是计算机堺的牛顿吧,太牛了结果和Fermi一样,被上帝嫉妒了;Nicholas Metropolis希腊裔美籍数学家,物理学家计算机科学家,这个人对Monte Carlo方法做的贡献相当大正式由于他提出的一种什么算法(名字忘了),才使得Monte Carlo方法能够得到如此广泛的应用这人现在还活着,与前几位牛人不同Metropolis很专一,他一苼主要的贡献就是Monte Carlo方法

蒙特卡洛方法是什么罗方法的名字来源于摩纳哥的一个城市蒙地卡罗,该城市以赌博业闻名而蒙特·罗方法正是以概率为基础的方法。与它对应的是确定性算法。

二 解决问题的基本思路

Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪囚们就知道用事件发生的"频率"来决定事件的"概率"。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现特别是近姩来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能

为了说明Monte Carlo方法的基本思想,让我们先来看一个简单的例子从此例中你可以感受如何用Monte Carlo方法考虑问题。

例1:比如y=x^2(对x)从0积到1结果就是下图红色部分的面积:

注意到函数在(1,1)点的取值為1,所以整个红色区域在一个面积为1的正方形里面所以所求区域的面积即为 在正方形区域内任取点,点落在所求区域的概率这个限制條件是y<x^2。用matlab模拟做一百万次(即共取1000000个点),结果为0.3328

1)总结Monte Carlo方法的基本思想:所求解问题是某随机事件A出现的概率(或者是某随机变量B的期望值)。通过某种“实验”的方法得出A事件出现的频率,以此估计出A事件出现的概率(或者得到随机变量B的某些数字特征得出B的期朢值)。

在解决实际问题的时候应用蒙特卡洛方法是什么罗方法主要有两部分工作:

用蒙特卡洛方法是什么罗方法模拟某一过程时需要產生各种概率分布的随机变量。

用统计方法把模型的数字特征估计出来从而得到实际问题的数值解。

3)蒙特卡洛方法是什么罗解题三个主要步骤:

(1)构造或描述概率过程: 对于本身就具有随机性质的问题如粒子输运问题,主要是正确描述和模拟这个概率过程对于本來不是随机性质的确定性问题,比如计算定积分就必须事先构造一个人为的概率过程,它的某些参量正好是所要求问题的解即要将不具有随机性质的问题转化为随机性质的问题。

(2)实现从已知概率分布抽样: 构造了概率模型以后由于各种概率模型都可以看作是由各種各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量)就成为实现蒙特卡洛方法是什么罗方法模拟实验的基本手段,这也是蒙特卡洛方法是什么罗方法被称为随机抽样的原因最简单、最基本、最重要的一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的随机变量随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独竝的随机变数序列产生随机数的问题,就是从这个分布的抽样问题在计算机上,可以用物理方法产生随机数但价格昂贵,不能重复使用不便。另一种方法是用数学递推公式产生这样产生的序列,与真正的随机数序列不同所以称为伪随机数,或伪随机数序列不過,经过多种统计检验表明它与真正的随机数,或随机数序列具有相近的性质因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法与从(0,1)上均匀分布抽样不同,这些方法都是借助于随机序列来实现的也就是说,都是以产生随机数为前提的由此可见,随机数是我们实现蒙特卡洛方法是什么罗模拟的基本工具 建立各种估计量: 一般说来,构造了概率模型并能从中抽样后即实现模拟實验后,我们就要确定一个随机变量作为所要求的问题的解,我们称它为无偏估计

(3)建立各种估计量,相当于对模拟实验的结果进荇考察和登记从中得到问题的解。 例如:检验产品的正品率问题我们可以用1表示正品,0表示次品于是对每个产品检验可以定义如下嘚随机变数Ti,作为正品率的估计量: 于是在N次实验后,正品个数为: 显然正品率p为: 不难看出,Ti为无偏估计当然,还可以引入其它類型的估计如最大似然估计,渐进有偏估计等但是,在蒙特卡洛方法是什么罗计算中使用最多的是无偏估计。 用比较抽象的概率语訁描述蒙特卡洛方法是什么罗方法解题的手续如下:构造一个概率空间(W ,A,P)其中,W 是一个事件集合A是集合W 的子集的s 体,P是在A上建立的某个概率测度;在这个概率空间中选取一个随机变量q (w ),w ? W ,使得这个随机变量的期望值 正好是所要求的解Q ,然后用q (w )的简单子样的算术平均值作为Q 嘚近似值

直接追踪粒子,物理思路清晰易于理解。

· 采用随机抽样的方法较真切的模拟粒子输运的过程,反映了统计涨落的规律

· 不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法

· MC程序结构清晰简单。

· 研究人员采用MC方法编写程序來解决粒子输运问题比较容易得到自己想得到的任意中间结果,应用灵活性强

· MC方法主要弱点是收敛速度较慢和误差的概率性质,其概率误差正比于如果单纯以增大抽样粒子个数N来减小误差,就要增加很大的计算量

另一类形式与Monte Carlo方法相似,但理论基础不同的方法-"拟蒙特卡洛方法是什么罗方法"(Quasi-Monte Carlo方法)-近年来也获得迅速发展我国数学家华罗庚、王元提出的"华-王"方法即是其中的一例。这种方法的基本思想昰"用确定性的超均匀分布序列(数学上称为Low Discrepancy Sequences)代替Monte Carlo方法中的随机数序列对某些问题该方法的实际速度一般可比Monte Carlo方法提出高数百倍,并可计算精确度

蒙特卡洛方法是什么罗方法在金融工程学,宏观经济学计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域應用广泛。

第一个例子是如何用蒙特卡洛方法是什么罗方法计算圆周率π。

正方形内部有一个相切的圆,它们的面积之比是π/4

现在,茬这个正方形内部随机产生10000个点(即10000个坐标对 (x, y)),计算它们与中心点的距离从而判断是否落在圆的内部。

如果这些点均匀分布那么圓内的点应该占到所有点的 π/4,因此将这个比值乘以4就是π的值。通过R语言脚本随机模拟30000个点,π的估算值与真实值相差0.07%

上面的方法加以推广,就可以计算任意一个积分的值

比如,计算函数 y = x2 在 [0, 1] 区间的积分就是求出下图红色部分的面积。

蒙特卡洛方法是什么罗方法不僅可以用于计算还可以用于模拟系统内部的随机运动。下面的例子模拟单车道的交通堵塞

  • 如果前面没车,它在下一秒的速度会提高到 v + 1 直到达到规定的最高限速。

  • 如果前面有车距离为d,且 d < v那么它在下一秒的速度会降低到 d – 1 。

  • 此外司机还会以概率 p 随机减速, 将下一秒的速度降低到 v – 1

在一条直线上,随机产生100个点代表道路上的100辆车,另取概率 p 为 0.3

上图中,横轴代表距离(从左到右)纵轴代表时間(从上到下),因此每一行就表示下一秒的道路情况

可以看到,该模型会随机产生交通拥堵(图形上黑色聚集的部分)这就证明了,单车道即使没有任何原因也会产生交通堵塞。

某产品由八个零件堆叠组成也就是说,这八个零件的厚度总和等于该产品的厚度。

巳知该产品的厚度必须控制在27mm以内,但是每个零件有一定的概率厚度会超出误差。请问有多大的概率产品的厚度会超出27mm?

取100000个随机樣本每个样本有8个值,对应8个零件各自的厚度计算发现,产品的合格率为99.9979%即百万分之21的概率,厚度会超出27mm

证券市场有时交易活跃,有时交易冷清下面是你对市场的预测。

  • 如果交易冷清你会以平均价11元,卖出5万股

  • 如果交易活跃,你会以平均价8元卖出10万股。

  • 如果交易温和你会以平均价10元,卖出7.5万股

已知你的成本在每股5.5元到7.5元之间,平均是6.5元请问接下来的交易,你的净利润会是多少

取1000个隨机样本,每个样本有两个数值:一个是证券的成本(5.5元到7.5元之间的均匀分布)另一个是当前市场状态(冷清、活跃、温和,各有三分の一可能)

模拟计算得到,平均净利润为92, 427美元

根据网络资料编辑整理,仅供学习交流侵删。

好吧喜欢文科的理科生

序贯蒙特卡洛方法是什么洛吧,顺序这个翻译应该不对

介绍系列的新文章中我們将介绍蒙特卡洛方法是什么洛方法,这是本系列第一部分中介绍的另一种经典强化学习方法以及动态编程还将介绍时间差异学习在以丅帖子中。 在这篇文章中我们还将介绍如何估算最佳政策和勘探开发困境。

在本系列的第1部分中我们介绍了由Richard Bellman率先提出的MDP解决方案,稱为动态编程 请记住,贝尔曼方程式允许我们递归定义值函数并且可以使用值迭代算法求解。 总而言之动态编程为强化学习提供了基础,但是我们需要在每次迭代中遍历所有状态(它们的大小可以成倍增长并且状态空间可以非常大或无限)。 动态编程还需要一个环境模型特别是要知道状态转换概率p(s',r | sa)

相反蒙特卡洛方法是什么洛方法都是关于从经验中学习的方法。 任何期望值都可以通过样本均值來近似估算-换句话说我们要做的就是播放一集情节,收集收益并将其平均 蒙特卡洛方法是什么洛方法实际上是基本算法的一组替代方法。 这些仅用于情景任务在此任务中,当Agent遇到终端状态时交互将停止。 也就是说我们假设经验被分为几集,并且无论选择什么动作所有集最终都会终止。

需要特别注意的是蒙特卡洛方法是什么洛方法仅为我们提供了所遇到的状态和动作的值,如果我们从未遇到过狀态则其值是未知的。

这篇文章将提供一种在强化学习中使用蒙特卡洛方法是什么洛的实用方法 有关方法的更正式说明,我请读者阅讀Richard S. Sutton和Andrew G. Barto编写的《 》教科书的第5章

回想一下,对于每个环境状态s 最优策略 π*都指定了代理商应如何选择行动a以实现其最大化奖励G的目标。 峩们还了解到Agent可以通过首先估计最佳行动值函数 q ?来构造其对最佳策略的搜索; 然后,一旦知道q ?便很快获得π ?。

代理开始采用基本筞略例如等概率随机策略,随机策略其中代理从每种状态中从可用操作集中随机选择,并且以相等的概率选择每个操作 代理使用它來收集一些情节,然后合并结果以制定更好的策略

做到这一点的方法是通过用一个表估计动作值函数,我们将其称为Q-table 蒙特卡洛方法是什么洛方法中的此核心表的每个状态都有一行,每个动作都有一个列 对应于状态s和动作a的条目表示为Q ( sa )

我们将其称为预测问题: 给定┅个策略,代理如何估算该策略的价值函数 。 我们将预测问题的蒙特卡洛方法是什么罗(MC)方法称为MC预测方法

我们将把解释集中在作用值函数上,但是“预测问题”也指可用于估计状态值函数的方法

在MC预测算法中,我们首先从该策略收集许多事件开始 然后,我们注意到Q表中的每个条目都对应于特定的状态和动作 要填充Q表的条目,我们使用Agent处于该状态并选择操作时的返回值

我们将情节中每次出现的状態定义为对该状态动作对的访问 。 在一个情节中一次状态-动作对可能会被多次访问。 这使我们拥有两种MC预测算法版本:

  • 每次访问MC预测 :茬所有情节中对每个状态动作对的所有访问之后的平均回报。

  • 首次访问MC预测 :对于每个情节我们仅考虑首次访问国家行动对。

首次访問方法和每次访问都被认为可以确保收敛到真实的动作值函数

在本文中,我们将在OpenAI Gym: 实现我们的工作示例的首次访问 但是实际上,在此示例中首次访问和每次访问MC会返回相同的结果。 请注意同一状态永远不会在一个情节内重复出现,因此首次访问和每次访问MC方法之間没有区别 首次访问MC预测的伪代码可以在下面找到:

在此伪代码中,变量num _ episodes指示代理收集的事件数并且存在三个相关表:

  • Q :Q表,每个状態有一行每个动作有一个列。

  • N :一个表该表跟踪我们对每个状态操作对进行的首次访问的次数。

  • 返回 _ sum:一个表跟踪第一次访问烸个状态动作对之后获得的奖励总和。

在每个情节之后更新N返回 _ 表以存储该情节中包含的信息。 Q的最终估计值( 收集完所有情节后洅进行Q表)。

首先让我们定义游戏的规则和条件:

    participating. 我们考虑一种简化版本,其中每个玩家都可以独立与经销商竞争 这意味着我们将只与莊家对抗,没有其他玩家参与 纸牌J,K和Q的值为10根据玩家的选择,ace的值可以为1或11 玩家看到自己的牌和庄家的第一张牌后,玩家可以选擇击中或站立直到对自己的总和满意为止,之后他将站立 然后,发牌人展示他们的第二张牌-如果总和少于17张他们将继续抽牌,直到達到17张之后它们将站立。

每个状态是一个三元组:

代理有两种可能的行动:

  • 摇杆 (动作0 ):不再拿卡(也称为“站立”或“停留”)

  • 击中 (操作1 ):从发牌人那里拿另外一张卡。

二十一点的每个游戏都是一个情节 + 1,-1和0的奖励分别用于赢输和抽奖。 游戏中的所有奖励均为0我们不折扣(伽马= 1); 因此,这些最终奖励也是回报

我们首先导入必要的软件包:

 

我们可以看到环境中有704个不同的状态,分别对应32次11次2次和两个可能的动作分别对应于选择粘贴还是击中:

要查看代理与环境互动的每个情节的每个步骤的示例游戏,我们可以运行以下代码(多次):
 

示例遊戏的一个示例是:

特工在那场比赛中输了 我建议读者多次运行此代码以查看不同的玩法。

考虑玩家仅根据其当前得分决定动作的策略 例如,如果我们拥有的纸牌总数为18张或更少我们认为如果我们要新车,那就没关系 我们以75%的概率做到这一点。 如果卡的总和大于18我们认为接受新卡太危险了,我们不以75%的概率这样做

总而言之,如果总和大于18我们选择动作杆的概率为75%。 并且如果总和为18或鉯下,我们选择的动作击中了75%的概率

请注意,在第一种策略方法中有些信息处于我们正在忽略的状态,例如发牌人的面朝上的卡爿或我们是否有可用的ace。 这是为了简化示例重点说明代码 以下函数generate_episode使用此策略对情节进行采样:
 

episode[i][2]对应于时间步?的状态,时间步i的动莋以及时间步?+ 1的奖励, 分别

为了玩(10个游戏),我们可以执行以下功能:

输出将是(在我的运行中):
 

回报是只在比赛结束接收并且1.0 ,如果我们赢了-1.0 如果我们输了。 我们看到有时我们赢了有时我们输了。

让我们开始基于先前的伪代码编写代码 首先,我们需要初始化字典N return_sumQ
 

接下来,该算法循环遍历使用提供的使用策略的函数generate_episode情节 每个情节都将是状态,动作和奖励元组的列表 然后,我们使用zip命令將状态操作和奖励分成单独的数量:

让我们回到伪代码,看看我们在时间步长上循环以查看每个时间步长对应的状态动作对。 如果这昰我们第一次访问该对则将表N的对应位置加1,然后在此步骤将返回值添加到表return_sum的对应条目中

请记住,在此二十一点示例中首次访问囷每次访问MC预测是等效的,因此我们将在每个时间步进行此更新 然后,一旦我们有了return_sumN的相应更新值就可以使用它们来更新我们估计嘚Q表。 该部分的代码如下:
 

我们的MC预测方法的完整代码如下:
 

该算法将OpenAI Gym Environment的实例生成的情节数和折扣率(默认值1 )作为参数。 该算法将Q表(动作徝函数的估计值)字典(一维数组)作为输出返回。

绘制相应的状态值函数以查看哪些状态具有更大的价值将很有趣 我们可以使用以下简单玳码在Q表中完成此操作:根据我们对问题的定义方式,对每个操作的值进行加权从而获得状态值:
 

我们可以使用来绘制此图。 有两个图對应于我们是否具有可用的ace或没有可用的ace 但是无论哪种情况,我们都可以看到最高的状态值对应于玩家总和为20或21时的状态这似乎很明顯,因为在这种情况下我们最有可能赢得比赛。
 

到目前为止我们已经了解了代理如何采取类似均等的随机策略之类的策略,利用该策畧与环境进行交互然后利用该经验来填充相应的Q表,从而成为该策略操作的估计值-值函数 因此,现在的问题是我们如何才能在寻找朂佳政策时使用它?
 

好吧要获得更好的策略(不一定是最佳策略),我们只需要为每个状态选择最大化Q表的操作即可 我们将此新策略称为π' 。 当我们使用Q表并使用使每一行最大化的操作来提出策略时 我们说我们正在构建对Q表贪心的策略。

通常将选定的动作称为贪婪动作 茬有限MDP的情况下,作用值函数估计值表示在Q表中 然后,为了获得贪婪的动作对于表中的每一行,我们只需要选择与最大化行的列对应嘚动作即可
 

但是,不是总是构造一个贪婪策略(总是选择贪婪的动作)我们要做的是构造一个所谓的Epsilon-Greedy策略 ,该策略最有可能选择贪婪的动莋但是概率很小但非零,所以选择了其中之一其他动作代替 在这种情况下,使用一些小的正数ε,其必须在零和一之间 这是有动机嘚,正如我们将在后面更详细地解释的那样由于代理必须找到一种方法来平衡基于他们当前的知识和获取知识以实现更好的未来行为的需求,以使其表现最佳
 

我们已经了解了Agent如何采取策略π ,如何将其与环境交互使用许多情节然后使用结果通过Q表估计动作值函数。 一旦Q表紧密接近行动值函数Agent就可以构造相对于Q表为?-贪婪的策略π ',这将产生比原始策略π更好的策略 然后,我们可以通过改变它是ε-greedy關于Q-表完善政策

因此,如果Agent反复在这两个步骤之间交替进行直到最终得到越来越好的策略以希望收敛到最优策略,我们最终将获得最優策略π ?*:
  • 步骤1 :使用策略π构造Q表并且

  • 步骤2:通过改变它提高政策是ε-greedy相对于所述Q-表(由ε-贪婪(Q)说明)。

 

只要我们运行足够长的时间該算法就很接近为我们提供最佳策略。

我们将此算法称为蒙特卡洛方法是什么洛控制方法 以估计最佳策略。 通常将步骤1称为策略评估洇为它用于确定策略的操作功能。 同样由于使用了步骤2改进策略,因此我们也将其称为策略改进步骤 我们可以将其表示为:
 

因此,使用这种新术语我们可以总结出,我们的蒙特卡洛方法是什么洛控制方法策略评估策略改进步骤之间交替查找最优策略π*:
 

其中箭头“ E”表示完整的策略评估“ I”表示完整的策略改进。 在下一篇文章中我们将介绍蒙特卡洛方法是什么洛控制算法的实现。

然而┅些问题出现,构建ε-greedy政策时如何设置ε值? 在下一节中我们将看到如何。

回想一下我们的代理最初并不了解环境的动态,并且由於目标是最大化回报因此代理必须通过交互来了解环境。 然后在每个时间步,当代理选择一个动作时它的决定都是基于对环境的过詓经验。 并且本能可能是选择基于 根据过去的经验 将最大化回报。 正如我们在上一节中讨论的那样这种针对行动价值函数估计的贪婪筞略很容易导致收敛为次优策略。
 

之所以会发生这种情况是因为在早期情节中,Agent的知识非常有限因此不考虑考虑非贪婪的行为,因为這些行为对未来的回报要比已知的行为更好 这意味着成功的特工不能在每个时间步调都很贪婪。 相反为了发现最佳策略,它必须继续優化所有状态操作对的估计收益 但是同时要保持一定程度的贪婪行为,以保持尽快获得最大回报的目标 这激发了我们以前提出过的?-貪婪政策的想法。

我们将平衡这两个相互竞争的需求的需求称为“ 探索-利用困境” 在这种困境中 ,座席必须找到一种方法以平衡基于怹们当前的知识( 利用 )和表现出最佳表现的动力,以及获取知识以做出更好判断的需求( 探索 )
 

摆脱这种困境的一种可能的解决方案是通过构慥ε-greedy政策时逐渐改变ε的值来实现。 对于代理而言通过选择探索而不是尝试开发来开始与环境的交互是有意义的 各种最大化回报的策略。 考虑到这一点最好的启动策略是等概率随机策略,因为它同样有可能探索每个州的所有可能动作 设置? = 1会产生?-贪心策略,该策略等效于等概率随机策略

在以后的步骤中,在勘探中促进开发是有道理的因为对于操作值函数估计,该策略逐渐变得更加贪婪 设置? = 0會产生贪婪策略。 已经表明最初倾向于通过开采进行勘探,然后逐渐倾向于开采而不是勘探是一种最佳策略

为了确保MC控制收敛到最优筞略π ?,我们需要确保满足两个条件:每个状态-动作对被无限次访问并且该策略收敛到一个相对于贪婪的策略动作值函数估计问:我們把这些条件贪婪与无限探索的限制 ,以确保代理继续探索所有的时间步骤逐步代理利用越来越少探讨。

为满足这些条件的一种方法是修改ε的值使得它逐渐衰减,指定ε-greedy策略时 但是,在设置the的衰减率时必须非常小心 确定最佳衰减并不是一件容易的事,这需要一些煉金术即经验。 在下一篇文章中我们将看到一个实现示例。

到目前为止在当前用于蒙特卡洛方法是什么洛控制的算法中,我们收集叻大量情节以构建Q表 然后,在Q表中的值收敛之后我们使用该表提出一种改进的策略。 但是蒙特卡洛方法是什么洛预测方法可以在逐集的基础上逐步实现 。 我们将根据该思想介绍如何构建更好的MC控制算法。 下篇再见!

参考资料

 

随机推荐