Monte Carlo方法详解
什么是Monte Carlo方法?
Monte Carlo方法是一类依赖随机采样的计算技术,广泛应用于各种难以解析求解的问题。
- 主要特点是依赖随机采样来近似解决问题,提供的是近似解而非精确解。
- 常用于解析解不存在或难以实现的场景。
- 有时也称为随机模拟(stochastic simulation)。
Monte Carlo方法的起源
- 由波兰数学家斯坦尼斯瓦夫·乌拉姆(Stanislaw Ulam)在20世纪40年代末发明。
- 灵感来源于他病中思考纸牌游戏“Canfield Solitaire”成功概率的估计,
- 通过重复实验而非纯组合计算来估计概率。
- “Monte Carlo”是项目代号,来源于摩纳哥著名赌场,寓意随机性和赌博。
Monte Carlo估计 π \pi π
利用随机点在单位正方形中落入单位圆的比例来估计 π \pi π。
- 单位圆面积为 π r 2 = π \pi r^2 = \pi πr2=π( r = 1 r=1 r=1),单位正方形面积为 4 r 2 = 4 4r^2 = 4 4r2=4。
- 随机生成 N N N个点,计算落入单位圆内的点数 R R R。
- 估计 π ≈ 4 R N \pi \approx 4 \frac{R}{N} π≈4NR。
统计学原理
将目标参数写成期望形式:
π = E [ X ] = ∫ A t f ( t ) d t ≈ 1 N ∑ i = 1 N X i \pi = \mathbb{E}[X] = \int_A t f(t) dt \approx \frac{1}{N} \sum_{i=1}^N X_i π=E[X]=∫Atf(t)dt≈N1i=1∑NXi
其中 X i X_i Xi是采样的随机变量, f ( ⋅ ) f(\cdot) f(⋅)为概率密度函数, A A A为定义域。
根据大数定律,随着样本数量增加,估计值趋近真实值。
- 这表示在区域 A A A上,所有可能值 t t t按概率 f ( t ) f(t) f(t)加权求和(积分)。
- 期望值是随机变量的“加权平均值”
这是一个通用的期望估计公式,表示从分布 f f f采样 X i X_i Xi后, X i X_i Xi的平均值近似期望。
- 但是,估计 π \pi π的Monte Carlo方法中, X i X_i Xi本身并不是直接的点坐标,而是一个指示变量:
X i = { 1 , 点落在圆内 0 , 点落在圆外 X_i = \begin{cases} 1, & \text{点落在圆内} \\ 0, & \text{点落在圆外} \end{cases} Xi={1,0,点落在圆内点落在圆外
- 于是,这时期望 E [ X ] \mathbb{E}[X] E[X]表示“点落在圆内的概率”,其实是:
E [ X ] = P ( 点落在圆内 ) = π 4 \mathbb{E}[X] = P(\text{点落在圆内}) = \frac{\pi}{4} E[X]=P(点落在圆内)=4π
因为采样是在正方形内,面积是4,而圆面积是 π \pi π。
一般期望的近似
若有函数 g ( X ) g(X) g(X),同样可估计其期望:
E [ g ( X ) ] = ∫ A g ( t ) f ( t ) d t ≈ 1 N ∑ i = 1 N g ( X i ) \mathbb{E}[g(X)] = \int_A g(t) f(t) dt \approx \frac{1}{N} \sum_{i=1}^N g(X_i) E[g(X)]=∫Ag(t)f(t)dt≈N1i=1∑Ng(Xi)
假设 X i X_i Xi从分布 f f f中独立抽样。
- 假设我们有一组样本 X i X_i Xi服从 f f f分布。
- 计算 E [ X 2 ] \mathbb{E}[X^2] E[X2],即 g ( x ) = x 2 g(x) = x^2 g(x)=x2的期望。
- 样本均值计算为
1 n ∑ i = 1 n X i 2 \frac{1}{n} \sum_{i=1}^n X_i^2 n1i=1∑nXi2
- 即用样本平方求平均,作为 E [ X 2 ] \mathbb{E}[X^2] E[X2]的估计。
关键理解点
- 期望是积分,但难计算时用随机采样替代积分。
- 蒙特卡洛方法利用大量独立样本,样本均值近似期望。
- 函数 g g g可以灵活选择,实现对不同函数期望的估计。
Monte Carlo积分示例
目标是估计积分:
∫ 0 1 e − x 2 / 2 d x ≈ 1 N ∑ i = 1 N g ( X i ) \int_0^1 e^{-x^2/2} dx \approx \frac{1}{N} \sum_{i=1}^N g(X_i) ∫01e−x2/2dx≈N1i=1∑Ng(Xi)
其中 g ( x ) = e − x 2 / 2 g(x) = e^{-x^2/2} g(x)=e−x2/2, X i X_i Xi服从 U ( 0 , 1 ) U(0,1) U(0,1)均匀分布。
R代码实现:
f <- function(x) {
exp(-x^2/2)
}
integrate(f, lower=0, upper=1)
set.seed(66)
x <- runif(1000, 0, 1)
mean(f(x))
数值结果与精确积分非常接近。
模拟随机变量
- 已知如何模拟均匀分布 U U U的随机变量,可用R语言中的
runif
函数实现。 - 但如何模拟任意概率分布的随机变量?
- 常用两种方法:
- 逆变换法(Inverse-transform method)
- 拒绝采样法(Acceptance-rejection method)
逆变换法
设随机变量 X X X的累计分布函数(CDF)为
F ( x ) = ∫ − ∞ x f ( t ) d t F(x) = \int_{-\infty}^x f(t) dt F(x)=∫−∞xf(t)dt记 U ∼ Uniform ( 0 , 1 ) U \sim \text{Uniform}(0,1) U∼Uniform(0,1)。
若 F − 1 F^{-1} F−1存在,则
X = F − 1 ( U ) X = F^{-1}(U) X=F−1(U)
即通过对均匀变量取CDF的反函数生成目标分布变量。逆变换法的核心思想
- 你知道 F ( X ) F(X) F(X) 的取值范围是 [ 0 , 1 ] [0,1] [0,1],因为累计概率最大是1,最小是0。
- 假设 U U U 是一个在 [ 0 , 1 ] [0,1] [0,1] 上均匀分布的随机变量(比如用
runif
函数生成)。 - 逆变换法告诉我们:
X = F − 1 ( U ) X = F^{-1}(U) X=F−1(U)
就是说,如果你用均匀分布 U U U 取样,再用 F F F 的反函数把 U U U 转换回来,就得到了分布为 X X X 的样本。
模拟任意分布的随机变量
在实际问题中,很多随机现象并不是均匀分布,而是其他复杂的分布,比如指数分布、正态分布、卡方分布等等。
- 逆变换法给出了一种通用的方法:
- 先在 [ 0 , 1 ] [0,1] [0,1] 区间内产生均匀分布随机数(用计算机很容易实现)。
- 再利用目标分布的累计分布函数(CDF)的反函数,把均匀随机数“转换”为目标分布的随机数。
这让计算机可以“模拟”各种复杂的随机事件。
指数分布示例
指数分布概率密度函数(PDF):
f ( x ) = { λ e − λ x x > 0 0 x ≤ 0 f(x) = \begin{cases} \lambda e^{-\lambda x} & x > 0 \\ 0 & x \leq 0 \end{cases} f(x)={λe−λx0x>0x≤0累积分布函数(CDF):
F ( x ) = { 1 − e − λ x x > 0 0 x ≤ 0 F(x) = \begin{cases} 1 - e^{-\lambda x} & x > 0 \\ 0 & x \leq 0 \end{cases} F(x)={1−e−λx0x>0x≤0反函数为:
F − 1 ( p ) = − log ( 1 − p ) λ , 0 < p < 1 F^{-1}(p) = -\frac{\log(1-p)}{\lambda}, \quad 0 < p < 1 F−1(p)=−λlog(1−p),0<p<1F(x) = U
1 − e − λ x 1-e^{-\lambda x} 1−e−λx = U
1 − U = e − λ x 1-U = e^{-\lambda x} 1−U=e−λx
l o g ( 1 − U ) = − λ X log(1-U) = - \lambda X log(1−U)=−λX
生成指数分布随机变量步骤:
- 采样 U ∼ Uniform ( 0 , 1 ) U \sim \text{Uniform}(0,1) U∼Uniform(0,1)
- 计算 X = − log ( 1 − U ) λ X = -\frac{\log(1-U)}{\lambda} X=−λlog(1−U)
拒绝采样法(Acceptance-Rejection method)
当逆变换法难以使用时,拒绝采样法更通用。
给定两个概率密度 f ( x ) f(x) f(x)和 g ( x ) g(x) g(x),且满足
f ( x ) ≤ M g ( x ) , ∀ x f(x) \leq M g(x), \quad \forall x f(x)≤Mg(x),∀xg ( x ) g(x) g(x)易于采样。
采样过程:
- 从 g ( x ) g(x) g(x)采样变量 X X X。
- 以概率 f ( X ) M g ( X ) \frac{f(X)}{M g(X)} Mg(X)f(X)接受 X X X,否则拒绝。
- 重复步骤1和2直到获得足够样本。
- 概率接受的过程
- 你采样了一个 X∼g(x)
- 生成一个均匀随机数 U∼Uniform(0,1)
- 如果 ≤ f ( X ) M g ( X ) \leq \frac{f(X)}{M g(X)} ≤Mg(X)f(X),接受 X。
- 否则,拒绝 X,重新采样。
拒绝采样示意图
- f ( x ) f(x) f(x)是目标分布,通常复杂难采样。
- M g ( x ) Mg(x) Mg(x)为包络函数,形状包住 f ( x ) f(x) f(x),常为简单分布的放缩。
- 采样效率依赖于 M M M和包络函数对目标分布的贴合程度。
拒绝采样问题
- g ( x ) g(x) g(x)需与 f ( x ) f(x) f(x)形状相似,否则采样效率低。
- 高维数据中采样效率急剧降低。
- 当维度约为10时,需要采样大量候选样本,效率很低。
总结
- Monte Carlo方法通过随机采样解决积分和概率计算问题。
- 逆变换法适合CDF可逆的分布。
- 拒绝采样法更通用,但效率依赖包络函数。
- Monte Carlo方法在科学计算、机器学习、统计模拟中广泛应用。
Monte Carlo模拟示例:Pop Mart盲盒问题
每个Pop Mart Monster盲盒售价为22美元。
完整系列共有10个独特的模型。
每个盒子随机包含一个模型。
问题:你需要购买多少盒子,预计要花多少钱,才能集齐这10个模型?
解析解(蒙特卡洛模拟前)
期望购买盒子数量计算公式为:
E [ T ] = n ( 1 1 + 1 2 + ⋯ + 1 n ) ≈ n log n + 0.5772 n + 0.5 E[T] = n \left( \frac{1}{1} + \frac{1}{2} + \cdots + \frac{1}{n} \right) \approx n \log n + 0.5772 n + 0.5 E[T]=n(11+21+⋯+n1)≈nlogn+0.5772n+0.5
- T T T表示需要购买的盒子数量,
- n n n表示总模型数量。
对于 n = 10 n=10 n=10,计算得到:
E [ T ] ≈ 30 E[T] \approx 30 E[T]≈30
即平均需要购买约30个盒子。
总预计花费为:
30 × 22 = 660 美元 30 \times 22 = 660 \text{美元} 30×22=660美元
Monte Carlo模拟代码示例(R语言)
n.shops.sim <- c()
for(i in 1:1000) {
collected <- c()
n.shops <- 0
while(length(collected) < 10) {
newitem <- sample(10, 1)
collected <- union(collected, newitem)
n.shops <- n.shops + 1
}
n.shops.sim <- c(n.shops.sim, n.shops)
}
mean.sim <- mean(n.shops.sim) # 模拟平均购买盒子数
ggplot(data.frame(x = n.shops.sim)) +
theme_minimal() +
geom_histogram(aes(x = x, y = after_stat(density)),
colour = "black", fill = "white") +
labs(x = "Number of Blind Box", y = "Density") +
geom_vline(xintercept = mean.sim, linetype = "dotted", colour = "red")
初始化一个空列表 n_shops_sim 用于存储每次模拟需要购买的盒子数量
重复进行 1000 次模拟:
初始化一个空集合 collected,用来存放已收集到的独特盒子编号
初始化计数器 n_shops = 0,记录本次模拟购买盒子的数量
当 collected 中盒子数量小于 10 时,循环执行:
随机从 1 到 10 中选择一个盒子编号 new_item
将 new_item 加入到 collected 集合(去重)
购买次数计数器 n_shops 增加 1
将本次模拟的购买次数 n_shops 添加到 n_shops_sim 列表中
计算 n_shops_sim 列表的平均值 mean_sim,作为模拟的期望购买盒子数
结论
- Monte Carlo模拟为复杂概率问题提供数值解法,适合实际随机过程的模拟与评估。
- 模拟结果验证了解析解的准确性和合理性。
- 盲盒集齐问题的模型与实际生活场景紧密相关,具有很强的应用价值。
olya Urn问题
问题背景
- 你有一个装了1个黑球和1个白球的袋子。
- 每次从袋子中抽一个球出来,抽到什么颜色的球,就往袋子里放回“两个”同色球(即原本的球 + 一个新球)。
- 问经过很多次抽取后,黑球和白球的比例会怎样?
模拟思路
- 初始袋子有 1黑 + 1白。
- 进行多次抽取:
- 计算袋子中黑球和白球的数量,求黑球比例。
- 按比例随机抽取一个球。
- 抽中球的颜色,加两个该颜色球回袋子。
- 记录每次抽取后黑球比例。
- 反复多次模拟,观察比例的变化轨迹。
意义
- 这是一个“自强化”过程,抽到某色球的概率随该色球数量增加而增加,模拟展示这种动态过程。
- 能帮助理解概率模型、随机过程的演变。
欧式期权定价
问题背景
- 欧式看涨期权:到期时,可以按固定价格买入股票。
- 股票当前价格假设100元,执行价105元,90天后看股票价格如何。
- 如果价格高于105元,期权收益 = 股票价格 - 105元,否则收益为0。
如何估价
- 假设股票价格服从随机过程(几何布朗运动),有增长率 μ \mu μ 和波动率 σ \sigma σ。
- 利用蒙特卡洛方法模拟股票未来价格的众多可能路径。
- 对每条路径,计算期权到期收益 max ( S T − K , 0 ) \max(S_T - K, 0) max(ST−K,0)。
- 取所有模拟路径收益的平均,得到期权的“合理价格”。
模拟步骤伪代码
- for i in 1 to N simulations:
- 根据随机过程模拟未来股价 S T ( i ) S_T^{(i)} ST(i)。
- 计算收益 p a y o f f ( i ) = max ( S T ( i ) − K , 0 ) payoff^{(i)} = \max(S_T^{(i)} - K, 0) payoff(i)=max(ST(i)−K,0)。
- 期权价格 = 所有收益的平均值。
作用
- 解决经典金融定价问题。
- 当解析解困难时,用蒙特卡洛数值估计价格。
股票价格随机模型
模型描述
股票价格未来变化由以下随机微分方程给出:
d S = S ( μ d T + σ d T N ) dS = S(\mu dT + \sigma \sqrt{dT} \mathcal{N}) dS=S(μdT+σdTN)
- μ \mu μ:股票预期增长率
- σ \sigma σ:股票波动率(风险度量)
- N \mathcal{N} N:标准正态随机变量
- d T dT dT:时间步长(通常为一天或其他单位)
模拟步骤
给定当前股价 S 0 S_0 S0。
逐步模拟未来股价:
S t + 1 = S t × ( 1 + μ d T + σ d T Z ) S_{t+1} = S_t \times (1 + \mu dT + \sigma \sqrt{dT} Z) St+1=St×(1+μdT+σdTZ)
其中 Z ∼ N ( 0 , 1 ) Z \sim N(0,1) Z∼N(0,1)。重复生成多条价格路径,统计终值。
意义
- 量化股票价格未来不确定性。
- 为期权等衍生品定价提供基础。
Markov Chain Monte Carlo (MCMC)
Monte Carlo Simulation回顾
- Monte Carlo模拟通过独立从已知分布生成随机样本,来估计期望或概率。
- 示例:模拟股票价格、掷骰子、估算 π \pi π等。
- 缺点:
- 当目标是稀有事件或小区域时效率低。
- 维度升高时效率急剧下降(维度灾难)。
- 采样之间无依赖,缺乏“学习”或反馈机制。
Markov Chain Monte Carlo (MCMC)简介
- MCMC是一类用于从任意复杂分布中采样的蒙特卡洛方法。
- 样本不再相互独立,而是形成一个马尔可夫链,后续状态只依赖当前状态。
- 两种常见算法:
- Metropolis-Hastings算法及其推广
- Gibbs采样器
马尔可夫链(Markov Chain)
马尔可夫链是满足马尔可夫性质的随机过程。
马尔可夫性质:未来状态只依赖当前状态,与过去状态无关。
考虑随机变量序列 { X 1 , X 2 , … , X n } \{X_1, X_2, \dots, X_n\} {X1,X2,…,Xn},满足
P ( X n ∣ X n − 1 , X n − 2 , … , X 1 ) = P ( X n ∣ X n − 1 ) P(X_n | X_{n-1}, X_{n-2}, \dots, X_1) = P(X_n | X_{n-1}) P(Xn∣Xn−1,Xn−2,…,X1)=P(Xn∣Xn−1)
马尔可夫链三个关键组成部分
- 状态空间:所有可能状态的集合。
- 转移矩阵:从一个状态转移到另一个状态的概率矩阵。
- 随机序列:状态的随机演变序列 { X 0 , X 1 , X 2 , … } \{X_0, X_1, X_2, \dots\} {X0,X1,X2,…}。
马尔可夫状态转移示意——天气模型
- 状态空间: S = { Sunny , Cloudy , Rainy } S = \{\text{Sunny}, \text{Cloudy}, \text{Rainy}\} S={Sunny,Cloudy,Rainy}
- 转移概率矩阵 P P P:
P = ( 0.6 0.1 0.3 0.4 0.5 0.1 0.2 0.5 0.3 ) P = \begin{pmatrix} 0.6 & 0.1 & 0.3 \\ 0.4 & 0.5 & 0.1 \\ 0.2 & 0.5 & 0.3 \end{pmatrix} P= 0.60.40.20.10.50.50.30.10.3
- 行表示当前状态,列表示下一状态。
- 例如,今天晴天,明天下雨的概率是0.3。
马尔可夫链长期行为
- 随着时间推移,状态序列会趋于稳定,达到不变分布(stationary distribution) π \pi π,满足:
π = π P , ∑ i π i = 1 \pi = \pi P, \quad \sum_i \pi_i = 1 π=πP,i∑πi=1
- 不变分布代表系统长期的概率分布。
不变分布存在的条件
不可约性(Irreducible):所有状态之间能相互到达。
- 对一个马尔可夫链或其转移矩阵 P P P,当且仅当以下条件满足时,称其为不可约的:
对于任意状态 i i i和 j j j,存在一种方式(路径)能从状态 i i i达到状态 j j j,且也能从状态 j j j达到状态 i i i
- 换句话说,所有状态都是互相连通的。
非周期性(Aperiodic):状态返回不受固定周期限制。
考虑以下转移矩阵:
P = ( 0 1 0 0 0 1 1 0 0 ) P = \begin{pmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{pmatrix} P= 001100010 马尔可夫链状态循环经过:
1 → 2 → 3 → 1 → 2 → 3 → ⋯ 1 \to 2 \to 3 \to 1 \to 2 \to 3 \to \cdots 1→2→3→1→2→3→⋯你只能在经过3、6、9……步后返回起始状态。
因此,返回起始状态步数的最大公约数(gcd)为:
gcd ( 3 , 6 , 9 , … ) = 3 \gcd(3,6,9,\ldots) = 3 gcd(3,6,9,…)=3这说明所有状态都是周期为3的周期状态(periodic with period 3)。
假设我们修改了转移矩阵为:
P = ( 0.1 0.9 0 0 0.5 0.5 0.4 0 0.6 ) P = \begin{pmatrix} 0.1 & 0.9 & 0 \\ 0 & 0.5 & 0.5 \\ 0.4 & 0 & 0.6 \end{pmatrix} P= 0.100.40.90.5000.50.6 现在状态可以在第1、2、3、4……步返回。
返回步数的最大公约数:
gcd ( 1 , 2 , 3 , 4 , … ) = 1 \gcd(1, 2, 3, 4, \ldots) = 1 gcd(1,2,3,4,…)=1因此,这些状态是非周期性的(aperiodic)。
不变马尔可夫链的应用
和Monte Carlo方法类似,我们的主要兴趣是模拟序列 X 1 , X 2 , ⋯ X_1, X_2, \cdots X1,X2,⋯,这些序列服从(或近似服从)某个概率密度函数 f ( x ) f(x) f(x),但直接从 f ( x ) f(x) f(x) 采样非常困难。
这个问题在贝叶斯统计中非常常见:
频率派统计(Frequentist statistics):存在固定但未知的真实参数 θ \theta θ。
贝叶斯统计(Bayesian statistics):所有模型参数都是随机变量。
对于贝叶斯统计,模型参数 θ \theta θ 有一个先验分布。
给定数据 D \mathbf{D} D,我们想要计算后验分布 p ( θ ∣ D ) p(\theta | \mathbf{D}) p(θ∣D):
p ( θ ∣ D ) = p ( D ∣ θ ) p ( θ ) ∫ p ( D ∣ θ ′ ) p ( θ ′ ) d θ ′ p(\theta | \mathbf{D}) = \frac{p(\mathbf{D} | \theta) p(\theta)}{\int p(\mathbf{D} | \theta') p(\theta') d\theta'} p(θ∣D)=∫p(D∣θ′)p(θ′)dθ′p(D∣θ)p(θ)
通常很难精确计算后验分布 p ( θ ∣ D ) p(\theta | \mathbf{D}) p(θ∣D)。
解决方法是使用MCMC从后验分布 p ( θ ∣ D ) p(\theta | \mathbf{D}) p(θ∣D) 采样。
思路是构造一个马尔可夫链,使其平稳分布(stationary distribution)就是我们想要的后验分布 p ( θ ∣ D ) p(\theta | \mathbf{D}) p(θ∣D)。
MCMC的核心思想
- 构造一个马尔可夫链,其平稳分布(stationary distribution)正是我们想采样的目标分布。
- 通过模拟该马尔可夫链,生成的样本近似服从目标分布。
- 代表算法有Metropolis-Hastings和Gibbs采样。
Metropolis-Hastings 算法
直观理解
想象你是个政治家,想按选民比例拜访所有城镇。
- 目标:按各城镇选民比例在每个城镇停留的时间成比例。
城镇 | 选民人数 | 目标比例 f ( x ) f(x) f(x) |
---|---|---|
A | 500 | 0.25 |
B | 1000 | 0.5 |
C | 300 | 0.15 |
D | 200 | 0.1 |
工作流程 (Workflow)
从随机城镇开始。
提议迁移到另一个随机选定的城镇。
根据下列规则接受或拒绝:
- 新城镇选民更多:总是接受
- 新城镇选民更少:以概率接受
接受概率 = min ( 1 , 新城镇人数 当前城镇人数 ) \text{接受概率} = \min\left(1, \frac{\text{新城镇人数}}{\text{当前城镇人数}}\right) 接受概率=min(1,当前城镇人数新城镇人数)
重复以上步骤大量次数(如 10000 次)。
记录在各城镇停留的比例。
举例说明:
- 当前城镇人数是1000,新城镇人数是500:
- 接受概率 = min(1, 500 / 1000) = 0.5
- 随机抽U,如果U ≤ 0.5,就去新城镇;否则不去。
- 当前城镇人数是300,新城镇人数是500:
- 接受概率 = min(1, 500 / 300) = 1
- 因为概率是1,直接去新城镇。
- 当前城镇人数是1000,新城镇人数是500:
算法解释
- 类似于接受-拒绝方法。
- 利用马尔可夫链性质:每个新状态只依赖前一个状态(无记忆)。
- 目标是构建马尔可夫链 { X t , t = 0 , 1 , … } \{X_t, t=0,1,\ldots\} {Xt,t=0,1,…},使得极限分布为目标分布 f ( x ) f(x) f(x)。
算法泛化 (Generalisation)
- 从初始状态 X 0 X_0 X0 开始。
- 根据当前状态 X t X_t Xt 生成提议点 Y Y Y,服从建议分布 q ( y ∣ x ) q(y \mid x) q(y∣x)。
- 以接受概率 α ( X t , Y ) \alpha(X_t, Y) α(Xt,Y) 接受提议:
α ( x , y ) = min { 1 , f ( y ) q ( x ∣ y ) f ( x ) q ( y ∣ x ) } \alpha(x, y) = \min\left\{1, \frac{f(y) q(x \mid y)}{f(x) q(y \mid x)}\right\} α(x,y)=min{1,f(x)q(y∣x)f(y)q(x∣y)}
- 从均匀分布 U ∼ Uniform ( 0 , 1 ) U \sim \text{Uniform}(0,1) U∼Uniform(0,1) 采样。
- 如果 U ≤ α U \leq \alpha U≤α,则 X t + 1 = Y X_{t+1} = Y Xt+1=Y,否则 X t + 1 = X t X_{t+1} = X_t Xt+1=Xt。
即使你的proposal distribution q(y|x) 不是完美的(比如不是精确的目标分布f(x)),通过Metropolis-Hastings算法这样设计的接受/拒绝机制,最终你仍然能够生成符合目标分布f(x)的样本。
换句话说:
- 你用一个“近似”的方式提出新点(proposal distribution),
- 通过计算接受概率 α 来修正这个近似,
- 这样长期下来,产生的样本序列会收敛到你想要的目标分布。
对称建议分布 (Symmetric Proposal)
- 如果建议密度是对称的,即
q ( y ∣ x ) = q ( x ∣ y ) q(y \mid x) = q(x \mid y) q(y∣x)=q(x∣y)
- 接受概率简化为
α ( x , y ) = min { 1 , f ( y ) f ( x ) } \alpha(x,y) = \min\left\{1, \frac{f(y)}{f(x)} \right\} α(x,y)=min{1,f(x)f(y)}
- 此时算法也称为随机游走采样器 (Random Walk Sampler)。
- 常用对称建议函数为高斯分布:
q ( x ) ∼ N ( x t , σ ) q(x) \sim \mathcal{N}(x_t, \sigma) q(x)∼N(xt,σ)
- σ \sigma σ 控制状态空间的探索速度。
MCMC 的应用
贝叶斯统计中的后验采样
- 可以使用贝叶斯定理对模型和数据进行建模。
后验分布表示为:
p ( θ ∣ D ) = p ( D ∣ θ ) p ( θ ) p ( D ) p(\theta | \mathbf{D}) = \frac{p(\mathbf{D}|\theta) p(\theta)}{p(\mathbf{D})} p(θ∣D)=p(D)p(D∣θ)p(θ)
其中:
- p ( θ ∣ D ) p(\theta | \mathbf{D}) p(θ∣D) 是参数 θ \theta θ 在给定数据 D \mathbf{D} D 后的后验概率。
- p ( D ∣ θ ) p(\mathbf{D}|\theta) p(D∣θ) 是似然函数(likelihood),表示在参数为 θ \theta θ 时,数据 D \mathbf{D} D 出现的概率。
- p ( θ ) p(\theta) p(θ) 是先验概率(prior),表示在获得数据前对参数的认识。
- p ( D ) p(\mathbf{D}) p(D) 是边缘似然(marginal likelihood)或证据,是归一化常数。
具体含义:
- Posterior:给定数据 D \mathbf{D} D 后,参数 θ \theta θ 发生的可能性。
- Likelihood ratio:数据 D \mathbf{D} D 对参数 θ \theta θ 的支持程度。
- Prior:未观察数据前参数 θ \theta θ 的概率分布。
计算边缘似然通常是一个难以直接求解的积分:
p ( D ) = ∫ p ( D ∣ θ ) p ( θ ) d θ p(\mathbf{D}) = \int p(\mathbf{D}|\theta) p(\theta) d\theta p(D)=∫p(D∣θ)p(θ)dθ
回归模型参数估计举例
考虑以下线性回归模型:
Y = β 0 + β 1 X 1 + ⋯ + β p X p + ε , ε ∼ N ( 0 , σ 2 ) Y = \beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p + \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, \sigma^2) Y=β0+β1X1+⋯+βpXp+ε,ε∼N(0,σ2)
参数集合为:
θ = { β 0 , β 1 , … , β p , σ 2 } \theta = \{\beta_0, \beta_1, \ldots, \beta_p, \sigma^2\} θ={β0,β1,…,βp,σ2}
观察数据为:
D = { ( Y i , X i 1 , … , X i p ) , i = 1 , … , n } \mathbf{D} = \{(Y_i, X_{i1}, \ldots, X_{ip}), i=1,\ldots,n \} D={(Yi,Xi1,…,Xip),i=1,…,n}
似然函数基于正态分布,形式为 p ( D ∣ θ ) p(\mathbf{D}|\theta) p(D∣θ),但后验分布:
p ( θ ∣ D ) ∝ p ( D ∣ θ ) p ( θ ) p(\theta|\mathbf{D}) \propto p(\mathbf{D}|\theta) p(\theta) p(θ∣D)∝p(D∣θ)p(θ)
通常无法解析计算。此时,MCMC用于估计此后验分布,获取参数的分布特性。
计算难积分的间接方法
后验分布的归一化常数:
p ( D ) = ∫ p ( D ∣ θ ) p ( θ ) d θ p(\mathbf{D}) = \int p(\mathbf{D}|\theta) p(\theta) d\theta p(D)=∫p(D∣θ)p(θ)dθ
难以直接计算积分,尤其在高维参数空间。
MCMC避免显式计算该积分,而是采样后验分布,间接获得参数分布信息。
抛硬币例子
假设我们观察多次抛硬币结果,目标是估计硬币正面概率:
θ = P ( Head ) \theta = P(\text{Head}) θ=P(Head)
- 频率学派认为 θ \theta θ 是一个固定但未知的常数;
- 贝叶斯派则视 θ \theta θ 为随机变量,赋予先验分布,基于数据推断后验分布 p ( θ ∣ Data ) p(\theta|\text{Data}) p(θ∣Data)。
MCMC用于从该后验分布采样,帮助估计硬币是否有偏。
采样相关性与Burn-in期
MCMC开始阶段生成的样本,在算法收敛到真实分布之前,这段时间称为“burn-in period”(预热期)。
- 这段样本应该被丢弃,不纳入最终分析。
MCMC生成的样本是相关的,因为它们来源于一个马尔可夫链。
- 以前,许多实践者主张对样本进行稀疏采样(thinning),即每隔第 k t h k^{th} kth个样本保留一个。
- 这种做法历史上出于几个原因:
- 减少样本间的相关性,更容易计算标准误差。
- 减少存储马尔可夫链所需的空间。
总结
- MCMC为复杂概率分布提供有效采样方案,尤其适用于无法直接采样的后验分布。
- 广泛应用于贝叶斯统计参数估计、复杂模型推断、概率积分估计、事件概率推断等领域。
- 理解采样过程中的相关性及Burn-in期对结果质量至关重要。