浅谈马尔科夫链蒙特卡罗方法(MCMC)算法的理解

1.解决的问题

计算机怎么在任意给定的概率分布P上采样?首先可以想到把它拆成两步:

(1)首先等概率的从采样区间里取一个待定样本x,并得到它的概率为p(x)

(2)然后在均匀分布U[0,1]上取一个值,如果这个值高于了样本出现的概率p(x),那么就舍弃掉这个待定样本,如果低于或等于这个值就保留。

不断重复这个步骤,我们就能得到满足概率分布P的样本X。

这个方法看似有效,但存在一个致命的问题,那就是慢,因为概率p的均值,随着采样的区域增大而减小【如果P是多维概率分布,那么随着维度不断增大,那么这个值将趋近于0,也就是维度灾难】,那么就意味着这个样本被保留下来的概率非常小。

那么怎么改进?

我们把上述的第(2)步改一下,不再用均匀U[0,1]进行采样,而是用U[0,max(p)],而选取的规则变为,如果从均匀分布U[0,max(p)]里取得的值u高于p(x),那么就保留该样本。

这样能够保证,至少有一个可能出现的样本在概率区间接受率为1。

这种改进比第一种的命中率要高上不少,如果p是均匀分布,那么采样命中率将是100%,当然如果采样是均匀分布,那么我直接取就好了,没必要多这么一步。

那么在此之上还有什么改进呢?

你自然能想到,我们不再用均匀分布U来计算样本是否可以保留,我们找一个好实现的概率分布Q,这个Q要和分布P相似,我们放缩该概率密度函数,使得min(q)>max(p)。

这样一来,命中率就又提高了,而且可以预想到,如果概率分布q=p那么采样命中率就会是100%,但这自然不可能。

那么有没有一种方法可以让采样的命中率是100%呢?

有,就是MCMC,在MCMC中,所有样本都是有效采样。而原理则是用频率取代概率。

2.MCMC

假设我们手里有个小球,每隔一秒就会变一种颜色(包括当前颜色),一段时间后,我们统计每种颜色的时间,就可以得到,各颜色出现的概率。

而这就是MCMC的原理,我们要做的是借助马尔可夫链,实现这样一个小球。

我们给小球输入一个指令,给定它每种颜色出现的概率,也就是P。

这时候小球内部有个状态机会来实现这个概率,首先会按照颜色的数量建立状态,同时每种状态之间会有线路连接,且每种状态之间都是相互可达的,即连通。

这时候有钢珠在每种状态里游走,钢珠到了哪种状态,哪种状态代表的灯就会亮起。

好了,如何让小球的灯能够以某种稳定的频率让灯亮起。

研究发现,只要让两两状态之间转换的概率与对方状态的概率乘积相等。

即P(A)Q(A->B)=P(B)Q(B->A),这就是马尔科夫链细致平衡条件,A和B代表任意两个状态。Q(A-B)是状态A到状态B的转移概率。

这时候,我们只要跟随钢珠在各状态之间的游走,记录下状态值即样本值,就能完成采样。

具体步骤如下,

(1)记录钢珠初始值状态X1。

(2)随机选择一个目标状态。

(3)查看抵达目标状态的转移概率。

(4)从U[0,1]中采一个值,如果值大于转移概率,那么状态不变,如果小于或等于转移概率,那么状态转化为目标状态。

重复如上步骤,就能得到一个服从P分布的样本了。

但这个算法虽然没有无效采样,但状态A转移到状态\bar{A}的转移概率过低,那么就会长时间卡在这一种状态。那么有没有方法改进呢。

当然有,那就是等比例缩放平衡方程两边的转移概率,P(A)Q(A->B)=P(B)Q(B->A)。

这里有个限制,那就是不能破坏转移概率小于或等于1概率特性,同时也不能破坏平衡方程本身。

那么我们能找到的一个缩放系数就是MAX[P(B->A),P(A->B)],两边同时除以该系数。

则有P(A)MIN[1,Q(A->B)/Q(B->A)] = P(B)MIN[1,Q(A->B)/Q(B->A)]

这样就能保证至少有一边可以必定转化为另一边。

到这里MCMC就算比较完整了。

问题就是Q怎么选。

这里有两种方案,一个就是Q任取,只要满足转移矩阵的要求,然后补一个系数配平方程

即: P(A)Q(A->B)*[P(B)Q(B->A)]=P(B)Q(B->A)*[P(A)Q(A->B)],

缩放后有:

P(A)Q(B->A)*MIN[1,P(B)Q(B->A)/P(B)Q(B->A)] = P(B)Q(B->A)*MIN[1,P(A)Q(A->B)/P(B)Q(B->A)]

另一种那就是选Q(A->B) = P(B),Q(B->A)=P(A)。

前者是HM的思想,配平的系数的使用方法类比前一节的转移接受率。

后者是Gibbs的思想。

具体实现有很多细节,可以看下面推荐的教学视频,这里推荐先看P6

 机器学习-白板推导系列-蒙特卡洛方法5(Monte Carlo Method)- 再回首_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/269807.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车级瞬态抑制TVS二极管优势特性及型号大全

汽车级瞬态抑制TVS二极管是一种高性能的防浪涌过电压电路保护元器件,能够在瞬态电压过高的情况下提供可靠的保护。它能够迅速响应并吸收过电压,将其导向地线,从而保护车辆的电子设备免受损坏。东沃汽车级TVS二极管具有以下几个关键优势&#…

Java包装类

包装类 每种基本数据类型都有一个对应的包装类。这些包装类主要用于包装基本数据类型的值,使其可以作为对象处理。 包装类主要有两个用途: 当需要一个对象而不是一个原始类型时。例如,许多集合类如 ArrayList 只能存储对象,不能存…

网络信息安全:11个常见漏洞类型汇总

一、SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。 在设计程序,忽略了对输入字符串中夹带的SQL指令的检查&…

Java项目:38 springboot005学生心理咨询评估系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 学生心理咨询评估系统有管理员和用户 【主要功能】 用户管理、试题管理、试卷管理、考试管理 【技术组成】 SpringBoot MyBatis Vue Bootstrap j…

CSS字体样式的使用,前端开发手册

零基础学web前端开发要怎么去学? 首先要学习的就是基础知识:html、css和JavaScript。HTML是内容,CSS是表现,JavaScript是行为。前端开发的门槛其实非常低,与服务器端语言先慢后快的学习曲线相比,前端开发的学习曲线是…

程序员如何选择职业赛道?

程序员如何选择职业赛道,参与话题 程序员的职业赛道就像是一座迷宫,有前端的美丽花园,后端的黑暗洞穴,还有数据科学的神秘密室。你准备好探索这个充满挑战和机遇的迷宫了吗?快来了解如何选择职业赛道吧! 方…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记02_大数据

1. 大数据分析 1.1. 随着“大数据军备竞赛”与定价算法的广泛应用,线上购物平台与实体商铺的界限也变得越来越模糊 1.2. 在沃尔玛疯狂扩张的时代,它给地区性商业带来的伤害不亚于一场地震 1.2.1. 当地的小型商铺往往…

Yolov8有效涨点,添加多种注意力机制,修改损失函数提高目标检测准确率

目录 简介 CBAM注意力机制原理及代码实现 原理 代码实现 GAM注意力机制 原理 代码实现 修改损失函数 YAML文件 完整代码 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 http://t.csdnimg.c…

微信小程序开发系列(十七)·事件传参·mark-自定义数据

目录 步骤一:按钮的创建 步骤二:按钮属性配置 步骤三:添加点击事件 步骤四:参数传递 步骤五:打印数据 步骤六:获取数据 步骤七:父进程验证 总结:data-*自定义数据和mark-自定…

什么是物联网?物联网如何工作?

物联网到底是什么? 物联网(Internet of Things,IoT)的概念最早于1999年被提出,官方解释为“万物相连的互联网”,是在互联网基础上延伸和扩展,将各种信息传感设备与网络结合起来而形成的一个巨大网络,可以实…

抖音视频评论批量采集软件|视频下载工具

《轻松搞定!视频评论批量采集软件,助您高效工作》 在短视频这个充满活力和创意的平台上,了解用户评论是了解市场和观众心声的重要途径之一。为了帮助您快速获取大量视频评论数据,我们推出了一款操作便捷、功能强大的软件&#xff…

gitlab的安装

1、下载rpm 安装包 (1)直接命令下载 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.6.10-ce.0.el7.x86_64.rpm(2)直接去服务器上下载包 Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source…

【组合递归】【StringBuilder】Leetcode 17. 电话号码的字母组合

【组合递归】【StringBuilde】Leetcode 17. 电话号码的字母组合 StringBulider常用方法!!!!!!!!!!!!!!17. 电…

[计算机网络]--五种IO模型和select

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、五种IO…

如何使用 ArcGIS Pro 制作三维地形图

伴随硬件性能的提高和软件算法的优化,三维地图的应用场景会越来越多,这里为大家介绍一下在ArcGIS Pro怎么制作三维地形图,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM和影像数据,除了DEM和影像数据…

华为Web举例:私网用户通过三元组NAT访问Internet

Web举例:私网用户通过三元组NAT访问Internet 介绍私网用户通过三元组NAT访问Internet的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网中10.1.1.0/24网段的用户可以正常访问Internet,需要在FW上配置源NAT策略。除了公网接口…

Go 与 Rust:导航编程语言景观

在当今构建软件时,开发者在编程语言上有着丰富的选择。两种脱颖而出的语言是 Go 和 Rust - 都很强大但却截然不同。本文将从各种因素比较这两种语言,以帮助您确定哪种更适合您的需求。 我们将权衡它们在并发、安全性、速度、互操作性等方面的方法。我们将…

深度学习预测分析API:金融领域的Game Changer

🚀 引言 在这个AI遍地开花的时代,谁能成为金融领域的真正Game Changer?那必然是是深度学习预测分析API。如大脑般高效运转的系统不仅颠覆了传统操作,更是以无与伦比的速度和精度赋予了金融数据以全新的生命。 💼 广泛…

ARM系统控制和管理接口System Control and Management Interface

本文档描述了一个可扩展的独立于操作系统的软件接口,用于执行各种系统控制和管理任务,包括电源和性能管理。 本文档描述了系统控制和管理接口(SCMI),它是一组操作系统无关的软件接口,用于系统管理。SCMI 是…

Docker之自定义镜像上传阿里云

目录 一、制作jdk镜像 1. alpine Linux简介 2. 通过alpine进行制作镜像 1. 制作jdk2.0 2. 制作jdk3.0 二、镜像上传阿里云及下载 1. 前期准备 2. push (推) 镜像 一、制作jdk镜像 1. alpine Linux简介 Alpine Linux是一个轻量级的Linux发行版,专注于安全、…