白话马尔科夫链蒙特卡罗方法(MCMC)

前言

你清茶园不是人待的地方!
里面的个个都是人才,说话又好听——就是我太菜了啥也听不懂,这次期中还考的贼**烂,太让人郁闷了。
最近课上讲这个马尔科夫链蒙特卡罗方法,我也学得一塌糊涂。这时我猛然想起了自己的博客园密码(雾),来更个博客吧。

[Warning] 本人数学水平差劲,下文用词不严谨、缺少部分证明,请酌情阅读。若出锅,欢迎指正。

啥是马尔科夫链?

马尔科夫链(Markov Chain),简单来说就是一个用来随机游走的有向图,每条边(u, v)的边权puv代表“当前在u,下一步走到v”的概率,显然需要

puv0,vpuv=1.

下文中我们假设这个有向图是强连通的,即任取两个点u和v,都存在从u到v的、边权都大于0的路径(当然从v到u的路径也要存在)。

马尔科夫链(也就是这个随机游走过程)的美妙性质在于它收敛。怎么个收敛法呢?

设这个图有n个点,令n维行向量p(t)表示随机游走了t步之后的概率分布(在时间t分别位于每个点的概率),p(t)i 就是第t步到点i的概率。初始状态p(0)是随便钦定的。

再定义一个量a(t),名叫“长期平均概率分布(long-term average probability distribution)”,

a(t)=1ti=0t1p(i).

顾名思义,就是把前t个时间点的概率分布取个平均。

定理(马尔科夫链基本定理)

  • 存在唯一概率分布向量π使得πP=π。(这个P就是由pxy构成的矩阵。)
  • limta(t) 存在,而且就等于π

(证明待补充……放假再敲?)

这个定理就很令人开心了——不管钦定初始状态p(0)的你是欧皇还是非酋,只要游走足够多步,a(t)肯定会收敛到唯一的答案。

诶?为啥要定义这个a(t)呢?p(t)自己它不收敛么?
还真不收敛。考虑一下w12=1,w21=1,p(0)=(1,0)。在这个图上游走就是在两个点之间反复横跳,p(t)是不会收敛的!但是a(t)就能收敛到(12,12)

啥是蒙特卡罗方法?

蒙特卡罗(Monte Carlo)是谁?不是谁,这是个赌场的名字 (=_=|||)。取这个名字大概只是因为……它是随机的,赌场也是随机的?不得不说这个洋气名字实在太劝退了。

其实蒙特卡罗方法就是……抽样估计。小学学的撒豆子求面积啊,蒲丰投针计算圆周率啊,都可以视作蒙特卡罗算法。

啥是马尔科夫链蒙特卡罗方法(MCMC)?

I have a Markov Chain, I have a Monte Carlo, ah, Markov Chain Monte Carlo!

我们已经知道,马尔科夫链是个好东西,它保证能收敛到某个概率分布。现在我们已知一个概率分布,想要构造出相应的马尔科夫链。这有什么用呢?有些时候,概率分布长得比较复杂,直接根据它生成随机变量非常困难,例如想在一个高维空间中的凸多边形中随机取一个点——这时候我们就可以先构造出这个概率分布对应的马尔科夫链,然后在上面随机游走来取点。

不同的马尔科夫链可能收敛到相同的概率分布,但是收敛的速率有快有慢。在应用中,我们肯定希望马尔科夫链收敛得快一点,少游走几步就能获得和想要的概率分布差不多的结果。下面是两个比较好用的构造方法。

Metropolis-Hasting 算法

有的时候又叫Metropolis算法,反正是个一个名字挺长的算法。以下简称MH算法。

和它不好记的名字相反,MH算法描述起来非常简单、非常符合直觉!

首先你要有一个无向连通图。先不管这个图是怎么构建的,很有可能是出题人送给你的(假如你在做相关的练习题的话)。

设概率分布是p,点i的概率是pi。假如你当前在点i

  • 先从与点i相邻的所有点中,等概率随机取一个点j;
  • 如果pjpi,则立刻走到j
  • 如果pj<pi, 随机一下,有pjpi的概率走到j,否则待在原地不动。

这样pj更大的j更有可能被走到,很符合直觉吧!

把上面的文字策略用公式表示一下,马尔科夫链中点i到点j的边权pij就是

pij=1rmin(1,pjpi),

而剩下的概率都分给了pii

pii=1jipij.

那么这个马尔科夫链到底能不能收敛到p这个概率分布呢?

引理

π为一个概率分布,P为马尔科夫链的边权矩阵,如果对任意两点x,y,均有

πxpxy=πypyx,

π就是马尔科夫链收敛到的概率分布。

证明:若πxpxy=πypyx,那么枚举y,对等式两边分别求和,就有πx=yπypyx,即π=πP。根据上面的马尔科夫链基本定理可知收敛到π

把MH算法构造的马尔科夫链代入这个引理,可知确实收敛到p

(课上讲了一个应用MH算法破译密码的有趣例子,我来不及敲完了,可以看看这篇文章的开头。)

Gibbs 采样

Gibbs 采样(Gibbs Sampling)是另一种MCMC,它使用的是一种特殊的无向图:每个点对应d维空间中的一个格点x=(x1,x2,,xd),xiZ,如果xy只有一个个坐标不同,则二者之间有连边。这样形成的就是一个类似d维网格(lattice)的结构,但每条(与坐标轴平行的)直线上的点都形成一个


(一个用来Gibbs取样的无向图,图片来自Blum, Hopcroft, Kannan, "Foundations of Data Science")

对于相邻的两点xy,不失一般性,假设它们第一维坐标不同(x1y1)而剩下的坐标都相同。那么就令

pxy=1dp(y1|x2,x3,,xd).

而剩余的概率留给pxx,

pxx=1yxpxy.

验证:

p(x1|x2,x3,,xd)pxy=p(y1|x2,x3,,xd)pyx,

故根据条件概率公式有

p(x1)pxy=p(y1)pyx,

所以概率分布确实收敛到p.

ε-混合时间(ε-mixing time)

(我没查到这个ε-mixing time怎么翻译成中文……有大佬知道的话评论区告诉我一下qaq)

尽管我们知道马尔科夫链早晚会收敛的,但它到底早收敛还是晚收敛,对我们很重要。为了衡量收敛的快慢,定义ε-混合时间(ε-mixing time)为t的最小值,满足:对任意初始状态p(0),a(t)π(t)1<ϵ(这个范数就是曼哈顿距离那种,各维度距离直接相加的和)。为了保证算法的效率,我们想知道这个ε-混合时间的一个上界。

一个上界是由导率(conductance)确定的。啥是导率呢?顾名思义,就和物理上的电导率差不多。对于节点集合S,令π(S)=xSπx。令S¯S的补集,若π(S)π(S¯),那么导率Φ(S)就是

Φ(S)=(x,y)(S,S¯)πxpxyπ(S)=xSπxπ(S)yS¯pxy,

即“已知当前在S中,下一步跳出S的概率”。

直觉上,如果Φ(S)都很大,那么我们可以在图上来去自如,收敛就比较快;反之,如果某个Φ(S)很小,一旦进入S就被困住、很难逃脱,收敛就可能很慢。
因此,定义整个马尔科夫链的导率为

Φ=minSV,SΦ(S).

定理

任何无向图随机游走的ε-混合时间有上界

O(ln(1/πmin)Φ2ϵ3).

(证明……敲不完……下次也不一定)

例子

一条n个节点顺序组成的链,π=(1n,1n,,1n)

可以构造马尔科夫链p(1,1)=p(n,n)=12,p(i,i+1)=p(i+1,i)=12,1in1

最难逃脱的S就由前半条链(后半条也行)构成的集合,π(S)=12,

Φ=Φ(S)=1n1212=1n,

ε-混合时间的上界就是

O(lnn(1n)2ϵ3)=O(n2lnnϵ3).


写作业去啦 未完待续_(:з」∠)_

posted @   胡小兔  阅读(2520)  评论(2编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示