【有啥问啥】深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法

MCMC

深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法

0. 引言

Markov Chain Monte Carlo(MCMC)是一类用于从复杂分布中采样的强大算法,特别是在难以直接计算分布的情况下。它广泛应用于统计学、机器学习、物理学等领域,尤其是在贝叶斯推理和概率模型中。本文将深入解析 MCMC 的基本原理、核心算法(如 Metropolis-Hastings 和 Gibbs 采样),并讨论其在实际应用中的优势与局限,同时介绍一些先进的变种如 Hamiltonian Monte Carlo(HMC)。

1. 背景知识

在贝叶斯推断和许多概率模型中,目标是从某个复杂的后验分布 p ( θ ∣ x ) p(\theta | x) p(θx) 中获取样本。然而,在大多数情况下,这种分布很难直接采样,因为其可能涉及到难以求解的归一化常数。

MCMC 提供了一种间接方法,通过构建一个马尔可夫链,使其逐步收敛到目标分布。然后,通过在平衡态(或稳态)下从马尔可夫链中提取样本,我们可以得到接近于目标分布的样本。

2. 马尔可夫链的基础

马尔可夫性质:马尔可夫链是一种具有“无记忆”性质的随机过程,当前状态的下一个状态只依赖于当前状态,而不依赖于历史状态。数学上,设 X 1 , X 2 , … X_1, X_2, \dots X1,X2, 是马尔可夫链中的状态序列,满足:
P ( X n + 1 ∣ X 1 , X 2 , … , X n ) = P ( X n + 1 ∣ X n ) P(X_{n+1} | X_1, X_2, \dots, X_n) = P(X_{n+1} | X_n) P(Xn+1X1,X2,,Xn)=P(Xn+1Xn)

转移矩阵:马尔可夫链通过转移概率矩阵(或转移核)定义,设 P i j P_{ij} Pij 表示从状态 i i i 转移到状态 j j j 的概率,则有:
P i j = P ( X n + 1 = j ∣ X n = i ) P_{ij} = P(X_{n+1} = j | X_n = i) Pij=P(Xn+1=jXn=i)

细致平衡条件:在实际的 MCMC 应用中,重要的是确保马尔可夫链的平稳分布满足“细致平衡条件”(detailed balance)。即:
π ( i ) P i j = π ( j ) P j i \pi(i) P_{ij} = \pi(j) P_{ji} π(i)Pij=π(j)Pji
这一条件保证了链的平稳分布为目标分布。

稳态分布:经过足够多的迭代,马尔可夫链会收敛到一个稳定的分布 π \pi π,该分布满足:
π = π P \pi = \pi P π=πP
在 MCMC 中,我们构建的马尔可夫链会收敛到我们感兴趣的目标分布 p ( θ ∣ x ) p(\theta | x) p(θx)

举个栗子
想象一下,你养了一只猫。这只猫在家里随机地游荡,它可能在卧室睡觉、在客厅玩耍、在厨房找吃的,或者在卫生间喝水。这只猫的行动路径就有点像一个马尔可夫链。

  • 状态空间: 猫可能存在的各个位置就是它的“状态空间”。在这个例子中,状态空间包括:卧室、客厅、餐厅、厨房和卫生间。
  • 转移概率: 猫从一个房间转移到另一个房间的概率就是“转移概率”。比如,猫在卧室里,它可能更喜欢去客厅玩耍,所以从卧室到客厅的转移概率就比较大;而它不太可能直接从卧室跳到天花板上,所以这个转移概率就很小。
  • 马尔可夫性质: 猫决定去下一个房间的时候,只考虑它当前所在的房间,而不关心它之前都去过哪些房间。比如,如果猫现在在客厅,它决定去下一个房间的时候,只考虑从客厅能去哪些房间,以及去每个房间的概率,而不会考虑它之前是不是刚从卧室过来。

3. Monte Carlo 方法

Monte Carlo 方法通过随机采样来估计某些不可解析的期望值。设我们需要估计某个分布 p ( x ) p(x) p(x) 下某个函数 f ( x ) f(x) f(x) 的期望:
E p ( x ) [ f ( x ) ] = ∫ f ( x ) p ( x ) d x \mathbb{E}_{p(x)}[f(x)] = \int f(x) p(x) dx Ep(x)[f(x)]=f(x)p(x)dx

通过从分布 p ( x ) p(x) p(x) 中采样 x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn,我们可以用样本均值来近似这个期望:
E p ( x ) [ f ( x ) ] ≈ 1 n ∑ i = 1 n f ( x i ) \mathbb{E}_{p(x)}[f(x)] \approx \frac{1}{n} \sum_{i=1}^n f(x_i) Ep(x)[f(x)]n1i=1nf(xi)

但正如前述,对于复杂分布,直接采样 p ( x ) p(x) p(x) 往往不可行。这时 MCMC 技术登场,通过马尔可夫链来间接实现从 p ( x ) p(x) p(x) 中采样。

举个栗子
想象你有一个不规则的图形,比如一个蝙蝠侠形状的图形,你想知道它的面积。这时可以用蒙特卡洛方法,首先,在蝙蝠侠图形外面画一个大的长方形,然后向这个长方形里随机撒豆子,最后通过计算落在蝙蝠侠图形中的豆子比例来估算图形的面积。

4. MCMC 核心算法

4.1 Metropolis-Hastings 算法

Metropolis-Hastings(MH)算法是 MCMC 中常用的采样方法。它通过构造一个易于采样的提议分布 q ( θ ′ ∣ θ ) q(\theta' | \theta) q(θθ),并通过接受或拒绝的方式生成目标分布的样本。

步骤

  1. 初始化 θ 0 \theta_0 θ0
  2. 对每一轮迭代:
    • 根据提议分布 q ( θ ′ ∣ θ t ) q(\theta' | \theta_t) q(θθt) 生成候选样本 θ ′ \theta' θ
    • 计算接受概率:
      α = min ⁡ ( 1 , p ( θ ′ ∣ x ) q ( θ t ∣ θ ′ ) p ( θ t ∣ x ) q ( θ ′ ∣ θ t ) ) \alpha = \min \left(1, \frac{p(\theta' | x) q(\theta_t | \theta')}{p(\theta_t | x) q(\theta' | \theta_t)}\right) α=min(1,p(θtx)q(θθt)p(θx)q(θtθ))
    • 以概率 α \alpha α 接受 θ ′ \theta' θ,否则保持当前状态 θ t \theta_t θt

Metropolis-Hastings 的灵活性在于可以使用不同的提议分布来优化采样效率。对于实际问题,选择适当的提议分布 q ( θ ′ ∣ θ ) q(\theta' | \theta) q(θθ) 是关键,过于分散或集中的分布都可能影响采样效率。

举个栗子(以抽球为例)

  • 步骤1:初始化

首先,你闭上眼睛,随机从箱子里摸出一个球,记住这个球的颜色,然后把它放回去。这个球的颜色就是你的起始点,也就是马尔可夫链的初始状态。

  • 步骤2:提议生成

接着,你再次闭上眼睛,但这次你稍微改变了一下摸球的方式。你并不是完全随机地摸,而是基于你上次摸到的球的颜色来“提议”一个新的颜色。比如,如果你上次摸到的是红色球,那么你这次可能会倾向于摸一个和红色相近的颜色,比如橙色或紫色(当然,这只是一个比喻,实际中提议分布的选择会更复杂)。这个“提议”的颜色就是你的候选新状态。

  • 步骤3:接受-拒绝策略

现在,你需要决定是否接受这个新的颜色作为你下一次摸球的结果。你计算了一个接受概率,这个概率取决于新颜色和旧颜色在箱子中真实出现概率的相对大小,以及你提议分布的一些特性。如果接受概率很高,你就接受这个新颜色;如果很低,你就拒绝它,并保留原来的颜色。

  • 步骤4:重复迭代

你不断重复上述步骤,每次都根据当前的颜色来“提议”一个新的颜色,并根据接受概率来决定是否接受它。随着时间的推移,你会发现你摸到的球的颜色分布越来越接近箱子中真实的颜色分布。

4.2 Gibbs 采样

Gibbs 采样是一种特殊的 MCMC 方法,适用于多维随机变量的情况。与 MH 不同,Gibbs 采样通过逐步更新每一个维度的值来生成样本,每次更新都从条件分布中进行采样。

步骤

  1. 初始化 θ 0 = ( θ 1 ( 0 ) , θ 2 ( 0 ) , … , θ d ( 0 ) ) \theta_0 = (\theta_1^{(0)}, \theta_2^{(0)}, \dots, \theta_d^{(0)}) θ0=(θ1(0),θ2(0),,θd(0))
  2. 对每一轮迭代:
    • 对每个维度 i i i
      θ i ( t + 1 ) ∼ p ( θ i ∣ θ 1 ( t + 1 ) , … , θ i − 1 ( t + 1 ) , θ i + 1 ( t ) , … , θ d ( t ) ) \theta_i^{(t+1)} \sim p(\theta_i | \theta_1^{(t+1)}, \dots, \theta_{i-1}^{(t+1)}, \theta_{i+1}^{(t)}, \dots, \theta_d^{(t)}) θi(t+1)p(θiθ1(t+1),,θi1(t+1),θi+1(t),,θd(t))
  3. 重复迭代,直到样本收敛。

Gibbs 采样在模型中条件分布易于采样的情况下表现出色,常用于贝叶斯网络或隐马尔可夫模型等。

4.3 Hamiltonian Monte Carlo(HMC)

Hamiltonian Monte Carlo 是一种高级 MCMC 方法,通过引入物理学中的哈密顿动力学,将样本点视为在势能场中运动的粒子。HMC 可以高效探索高维参数空间,避免传统 MCMC 中的低效率。

核心思想

  • 在传统的 Metropolis-Hastings 算法中,采样仅依赖于当前的状态,而 HMC 则利用目标函数的梯度信息来辅助样本生成。
  • HMC 不仅能够加快高维参数的探索,还可以有效避免“随机漫步”行为,使得采样更高效。

HMC 被广泛应用于深度贝叶斯学习中,特别是在大规模复杂模型中表现优异。

5. MCMC 的应用

举个栗子
现在,我们把蒙特卡洛方法和马尔可夫链结合起来,就得到了MCMC方法。假设我们想知道一个复杂分布(比如一个蝙蝠侠形状的区域里豆子的分布)的某些性质(比如平均高度),但是直接计算太难了。我们可以用MCMC方法来做这件事。

  • 首先,我们构造一个马尔可夫链,使得这个链的平稳分布(就是链运行很长时间后每个状态出现的概率分布)恰好是我们想要研究的那个复杂分布。这通常需要我们精心设计马尔可夫链的转移概率。

  • 然后,我们从马尔可夫链的某个初始状态开始,按照转移概率随机地移动,生成一系列的状态(就像猫一样)。在刚开始的时候,这些状态可能并不符合我们想要的分布,但是随着链的运行,这些状态会越来越接近我们想要的分布。

  • 最后,当我们认为链已经运行了足够长的时间,达到了平稳分布时,我们就可以用这些状态来估算我们想要知道的性质了。比如,我们可以用这些状态来估算蝙蝠侠形状区域里豆子的平均高度。

MCMC 被广泛应用于各种复杂模型中,特别是在贝叶斯推理中。以下是几个典型的应用领域:

  • 贝叶斯推断:在贝叶斯推理中,通常需要从后验分布 p ( θ ∣ x ) p(\theta | x) p(θx) 中采样,而该分布可能非常复杂,难以直接采样。MCMC 方法使得这种采样成为可能。

  • 隐变量模型:如混合高斯模型(GMM)、隐马尔可夫模型(HMM)等模型中,往往包含不可观测的隐变量。MCMC 可以帮助我们通过采样这些隐变量来进行模型的推断。

  • 物理模拟:在物理学领域,如分子动力学模拟、气候模型、材料科学中,MCMC 是估计复杂概率分布的重要工具。

  • 深度学习中的贝叶斯模型:结合深度学习与贝叶斯推断,MCMC 在神经网络参数估计、模型选择等方面有了广泛的应用,尤其是在不确定性估计上有明显优势。

6. MCMC 的优势与挑战

优势

  • 适用于复杂的后验分布,尤其是在高维空间下。
  • Metropolis-Hastings 和 Gibbs 采样等算法都相对容易实现且适应性强。
  • Hamiltonian Monte Carlo 等高级方法可以在高维空间中提高采样效率。

挑战

  • 收敛性问题:确保链的收敛是一个核心挑战,通常需要设置足够长的 burn-in 阶段,以消除初始状态的影响。如何判断链已经收敛仍是一个开放问题。
  • 计算成本高:在高维复杂模型中,MCMC 采样的计算成本可能非常高,尤其是每次采样都需要计算大量的概率值。即使使用 HMC,梯度计算的开销也不容忽视。
  • 样本自相关性:MCMC 方法生成的样本往往具有自相关性,需要通过后处理(如细化链或降采样)来减小这种影响。

7. 总结

Markov Chain Monte Carlo(MCMC)为我们提供了一种强大的工具,用于从复杂分布中进行采样,特别是在贝叶斯推断和概率模型中具有广泛的应用。尽管 MCMC 存在一定的收敛性和效率挑战,但随着算法的优化和硬件性能的提升,其在机器学习、统计学等领域的应用前景依旧广阔。

诸如 Hamiltonian Monte Carlo(HMC)等高级变种,以及结合深度学习的方法(如变分推断与 MCMC 的混合使用),可能会进一步提升 MCMC 在大规模数据中的表现,使其在更广泛的领域中发挥作用。

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

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

相关文章

【python设计模式2】创建型模式1

目录 简单工厂模式 工厂方法模式 简单工厂模式 简单工厂模式不是23中设计模式中的,但是必须要知道。简单工厂模式不直接向客户端暴露对象创建的细节,而是通过一个工厂类来负责创建产品类的实例。简单工程模式的角色有:工厂角色、抽象产品角…

Redis——常用数据类型string

目录 常用数据结构(类型)Redis单线程模型Reids为啥效率这么高?速度这么快?(参照于其他数据库) stringsetgetMSET 和 MGETSETNX,SETEX,PSETEXincr,incrby,decr…

go多线程

1、简单使用(这个执行完成,如果进程执行比较久,这里不会等待它们结束) package mainimport "time"func main() {go func() {println("Hello, World!")}()time.Sleep(1 * time.Second) }2、wg.Add(数量)使用&…

STM32 定时器 输入捕获

定时器输入捕获 1 工作原理1.1 单个通道的工作原理 2 输入滤波2.1 输入滤波原理 3 边沿检测3.1 边沿检测3.2 信号选择 4 分频5 通道使能 1 工作原理 1.1 单个通道的工作原理 2 输入滤波 2.1 输入滤波原理 fck_INT:内部时钟频率,当PCLKx_Pre为1时&…

prometheus 集成 grafana 保姆级别安装部署

前言 本文 grafana 展示效果只需要 prometheus node_exporter grafana 其他的选择安装 环境和版本号 系统: CentOS 7.9 prometheus: 2.54.1 pushgateway: 1.9.0 node_exporter: 1.8.2 alertmanager: 0.27.0 grafana:11.2.0 官网:https://prometheus.io/ 下载地址:h…

软件测试 | APP测试 —— Appium 的环境搭建及工具安装教程

大家应该都有同一种感觉,学习appium最大的难处之一在于环境的安装,安装流程比较繁琐,安装的工具和步骤也较多,以下是基于Windows系统下的Android手机端的安装流程。就像我们在用Selenium进行web自动化测试的时候一样,我…

Gin渲染

HTML渲染 【示例1】 首先定义一个存放模板文件的 templates文件夹&#xff0c;然后在其内部按照业务分别定义一个 posts 文件夹和一个 users 文件夹。 posts/index.tmpl {{define "posts/index.tmpl"}} <!DOCTYPE html> <html lang"en">&…

计算机毕业设计 视频点播网站 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

day22JS-npm中的部分插件使用方法

1. 静态资源目录 静态资源目录就是访问服务器的某些路劲时候&#xff0c;服务器可以吐出一个写好的指定页面。 实现思路&#xff1a; 1、先判断要找的路径是否是文件&#xff0c;如果是文件&#xff0c;就加载发给对方。 2、如果是文件夹&#xff0c;找到这个文件夹所在路径中…

Spring Boot基础

项目创建 项目启动 请求响应 RestController 1.返回值处理 RestController&#xff1a;这个注解结合了Controller和ResponseBody的功能。它默认将所有处理请求的方法的返回值直接作为响应体内容返回&#xff0c;主要用于构建RESTful API。返回的数据格式通常是JSON或XML&…

Linux:软件包管理器 yum和编辑器-vim使用

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;软件包管理器 yum和编辑器-vim使用》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点…

整流电路的有源逆变工作状态

目录 1. 逆变的概念 2. 有源逆变的条件 3. 电流电路的概念 4. 产生逆变的条件 5. 三相桥式全控整流电路的有源逆变工作状态 6. 逆变角的概念 7. 逆变失败的原因 8. 最小逆变角的限制 整流电路的有源逆变状态是指通过控制整流器&#xff0c;使其将直流电源的能量反向送回…

[乱码]确保命令行窗口与主流集成开发环境(IDE)统一采用UTF-8编码,以规避乱码问题

文章目录 一、前言二、命令行窗口修改编码为UTF-8三、Visual Studio 2022修改编码为UTF-8四、Eclipse修改编码为UTF-8五、DevCPP修改编码为UTF-8六、Sublime Text修改编码为UTF-8七、PyCharm、IDEA、VS Code及Python自带解释器修改编码为UTF-8 一、前言 在学习的征途中&#x…

close_wait状态的实例:一次 MySQL 主动关闭,导致服务出现大量 CLOSE_WAIT 的全流程排查过程【个人总结】

没有实际的操作设备和条件&#xff0c;只能看文章来体验。文章主要是通过观察实例来说明close_wait状态的问题&#xff0c;一般导致close_wait状态都不是有意的&#xff0c;而是操作不注意就会导致此问题的出现。所以在代码书写上一定要确保不会出现问题。 事件&#xff1a;so…

【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、ChangeStar模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113&#xff0c;onnxruntime-gpu1.12.0 likyoo变化检测源码&#xff1a;https://github.c…

【路径规划】WDM网络中RWA问题的教育网络规划工具(基于MILP和启发式)

摘要 MatPlanWDM 是一款专用于波分复用&#xff08;WDM&#xff09;网络的规划工具&#xff0c;旨在解决波长路由与分配&#xff08;RWA&#xff09;问题。该工具结合了线性混合整数规划&#xff08;MILP&#xff09;和一系列启发式算法&#xff0c;为用户提供了多种网络规划选…

开发类似途虎养车的汽修店管理系统

在这个数字化时代&#xff0c;越来越多的传统行业开始拥抱新技术&#xff0c;以提升效率和服务质量。汽修行业也不例外&#xff0c;途虎养车凭借其强大的数字化方案&#xff0c;在行业内树立了标杆。今天&#xff0c;我们将介绍途虎养车数字化方案的优点&#xff0c;并为您呈现…

R语言xlsx,txt文件处理:以《书摘》00年-10年资源合集整理为例

偶然间读到一篇文章&#xff0c;分享06年《书摘》的内容&#xff0c;今天来看都不过时&#xff0c;所以起了找下这本老杂志合集的心思。 傅佩荣先生《哲学与人生》选段 “如果有人觉得活着很辛苦&#xff0c;面对自己又感觉无聊乏味&#xff0c;那么他应该多接触自然界。我有个…

【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题四

某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenStack搭建企业内部私有云平台&#xff0c;开源Kubernetes搭建云原生服务平台&#xff0c;选…

TCP Analysis Flags 之 TCP ZeroWindow

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…