楼主: neojg
57 0

[学科前沿] 贝叶斯机器学习实战:从概率图模型到变分推断与MCMC [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

14%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
40 点
帖子
3
精华
0
在线时间
0 小时
注册时间
2018-10-18
最后登录
2018-10-18

楼主
neojg 发表于 2025-12-10 12:26:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

引言:从确定性到不确定性——建模思维的范式转变

在传统的机器学习方法中,模型往往采用确定性的形式。通过优化技术(例如梯度下降),我们试图找到一组“最优”参数,并使用这组固定的参数进行预测。这种模型通常输出一个点估计值(比如房价为635.2万元)或划定一条决策边界。然而,现实世界本质上是充满不确定性的:数据存在噪声、模型的认知能力有限、未来也具有随机性。忽略这些不确定性容易导致模型做出过度自信的判断,在医疗诊断、金融风控、自动驾驶等高风险场景中可能带来严重后果。

贝叶斯机器学习为此提供了一个系统化的解决方案,将不确定性作为建模过程的核心要素。其基本理念是:所有未知量(包括模型参数)都应被视为随机变量,并通过概率分布来表达我们的认知状态。我们从一个代表先验信念的先验分布出发,当获得观测数据后,依据贝叶斯定理更新这一信念,得到更符合实际证据的后验分布。最终的预测不再是单一数值,而是综合考虑了各种可能参数配置下的预测分布

这种建模范式带来了三大核心优势:

  • 量化不确定性:能够输出预测的置信区间,帮助决策者明确识别潜在风险;
  • 融入先验知识:允许将领域专家的经验以先验信息的形式引入模型,在数据稀少时尤为有效;
  • 抑制过拟合:由于参数本身服从某种分布而非固定值,贝叶斯方法天然具备正则化特性。

掌握贝叶斯机器学习的关键在于理解两个支柱:一是如何对模型进行结构化表示,即模型的表示,描述变量之间的概率依赖关系;二是如何计算或逼近复杂的后验分布,即后验推断。前者主要由概率图模型实现,后者则依赖于两大主流方法——变分推断马尔可夫链蒙特卡洛(MCMC)。

第一部分:模型的蓝图——概率图模型

概率图模型(PGM)是贝叶斯思想的一种结构化表达语言。它将复杂的联合概率分布分解为多个简单的局部因子乘积,并借助图结构直观展现变量间的条件依赖与独立性关系。根据图的类型,主要分为两类:

1. 贝叶斯网络

贝叶斯网络是一种有向无环图(DAG)。其中节点表示随机变量,有向边表示因果关系或直接依赖。其理论基础是条件独立性假设:每个节点在其父节点已知的情况下,与其非后代节点相互独立。

该网络的联合概率可以被分解如下:

( P(S, L, X, D) = P(S) \cdot P(L|S) \cdot P(X|L) \cdot P(D|L) )

这种分解方式显著简化了模型的表示、学习和推理过程。贝叶斯网络特别适用于刻画因果关系或时间序列结构,例如动态贝叶斯网络用于处理时序数据,而隐马尔可夫模型正是其在时间维度上的经典应用实例。

[吸烟(S)] -> [肺癌(L)]
[肺癌(L)] -> [X光结果(X)]
[肺癌(L)] -> [呼吸困难(D)]

2. 马尔可夫随机场

马尔可夫随机场(MRF)基于无向图构建,强调变量之间的关联性或相互作用,而非因果方向。其核心性质是局部马尔可夫性:任一节点在给定其邻居节点的条件下,与其他非邻接节点相互独立。

MRF的联合分布由各极大团上的势函数乘积归一化得到:

( P(\mathbf{x}) = \frac{1}{Z} \prod_{c \in C} \psi_c(\mathbf{x}_c) )

其中 (Z) 是归一化常数(又称配分函数),通常难以精确计算。MRF广泛应用于图像处理(如像素标签推断)、统计物理以及自然语言处理中的条件随机场(CRF)等任务。

概率图模型的价值在于:它能将领域知识清晰地编码进图结构之中,并为后续的概率推断(如边缘分布计算、条件概率查询)提供了坚实的理论基础(如消元法、信念传播算法)。但面对复杂模型时,精确推断常常不可行,因此我们必须转向近似推断方法

第二部分:推断的艺术(上)——变分推断

当目标后验分布 ( P(\mathbf{z}|\mathbf{x}) ) 极其复杂且无法解析求解时(其中 (\mathbf{z}) 表示隐变量或模型参数,(\mathbf{x}) 为观测数据),变分推断(Variational Inference, VI)提供了一种高效的确定性近似策略。其核心思想是:

在某个易于处理的分布族 ( \mathcal{Q} ) 中,寻找一个最接近真实后验分布的近似分布 (q^*(\mathbf{z}))

1. 数学框架:从KL散度到证据下界

衡量“最接近”的常用标准是KL散度:( KL(q(\mathbf{z}) || p(\mathbf{z}|\mathbf{x})) )。但由于真实后验未知,直接最小化KL不可行。VI巧妙利用以下恒等式进行转化:

[ \log p(\mathbf{x}) = \underbrace{\mathbb{E}_{q}[\log p(\mathbf{x}, \mathbf{z}) - \log q(\mathbf{z})]}{\text{证据下界}} + KL(q(\mathbf{z}) || p(\mathbf{z}|\mathbf{x})) ]

由于观测数据的对数似然 (\log p(\mathbf{x})) 对于变分分布 (q) 是常数,因此最小化KL散度等价于最大化证据下界(ELBO)。而ELBO仅涉及可计算的项,因而可通过优化手段进行求解。

2. 平均场变分推断

最常用的简化策略是平均场假设,即假设变分分布 (q(\mathbf{z})) 可分解为各个隐变量的独立乘积形式:

( q(\mathbf{z}) = \prod_i q_i(z_i) )

尽管这一假设忽略了变量间的相关性,但在许多实际问题中仍能提供良好的近似效果,同时大幅降低计算复杂度。结合坐标上升法或其他优化算法,可在该框架下高效迭代求解最优变分因子。

假设隐变量之间相互独立,即满足形式 $ q(\mathbf{z}) = \prod_{i=1}^m q_i(z_i) $。在此独立性假设下,利用坐标上升法可推导出每个变分因子 $q_j(z_j)$ 的最优解应符合以下关系: $$ \log q_j^*(z_j) = \mathbb{E}_{i \neq j}[\log p(\mathbf{x}, \mathbf{z})] + \text{const.} $$ 该表达式构成一个固定点方程,需通过迭代方式求解。其中期望是基于除 $z_j$ 外所有其他隐变量当前的变分分布计算得出。 现代变分推断方法在面对大规模数据与复杂模型时,逐渐摒弃传统坐标上升法,转而采用**随机优化**策略。其核心难点在于如何有效估计ELBO(证据下界)关于变分参数的梯度。 为此,**重参数化技巧**被提出并广泛应用。若能将从 $q_\phi(\mathbf{z})$ 中采样的过程表示为一个可微变换:$ z = g_\phi(\epsilon),\ \epsilon \sim p(\epsilon) $,则梯度可重写为: $$ \nabla_\phi \text{ELBO} = \mathbb{E}_{p(\epsilon)}\left[\nabla_\phi \left(\log p(\mathbf{x}, g_\phi(\epsilon)) - \log q_\phi(g_\phi(\epsilon))\right)\right] $$ 此期望可通过蒙特卡洛方法进行无偏估计,且具有较低方差。这使得我们可以使用少量样本进行批量更新,结合随机梯度下降优化变分参数 $\phi$,这一框架被称为**随机梯度变分推断**。当底层模型 $p(\mathbf{x}, \mathbf{z})$ 是一个难以解析处理的“黑盒”结构(例如深度神经网络),该方法依然适用,因而发展为**黑盒变分推断**,展现出极强的通用性。
[真实后验P(z|x),复杂多峰]  <-- (最小化KL散度) --> [近似后验Q(z; φ),简单分布,如高斯]
                              (最大化ELBO)
相较于传统推断方法,变分推断(VI)的主要优势在于将后验推断问题转化为参数优化任务,具备较高的计算效率,并易于扩展至大规模数据和深层模型。 然而,其局限性也较为明显:通常限定使用简单分布族(如高斯分布),难以刻画真实后验中的复杂结构(如多峰分布、长尾特性等),从而导致近似存在系统性偏差。

第三部分:推断的艺术(下)——马尔可夫链蒙特卡洛

当需要更高精度的后验近似,尤其是希望捕捉多模态、长尾或强相关结构时,**马尔可夫链蒙特卡洛**(MCMC)成为更强大的选择。其基本思想是: 构造一条马尔可夫链,使其平稳分布恰好等于目标后验分布 $P(\mathbf{z}|\mathbf{x})$。通过长时间运行该链并收集状态序列,所得样本的分布将逐渐收敛于真实后验。

1. 核心算法:Metropolis-Hastings

MH算法是MCMC方法的基础。在每一步 $t$,给定当前状态 $\mathbf{z}^{(t)}$,执行如下步骤: - 从提议分布 $q(\mathbf{z}^* | \mathbf{z}^{(t)})$ 中生成候选状态 $\mathbf{z}^*$; - 计算接受概率: $$ A(\mathbf{z}^{(t)}, \mathbf{z}^*) = \min \left(1, \frac{p(\mathbf{z}^*|\mathbf{x}) q(\mathbf{z}^{(t)}|\mathbf{z}^*)}{p(\mathbf{z}^{(t)}|\mathbf{x}) q(\mathbf{z}^*|\mathbf{z}^{(t)})} \right) $$ - 以概率 $A$ 接受新状态(令 $\mathbf{z}^{(t+1)} = \mathbf{z}^*$),否则保持原状态($\mathbf{z}^{(t+1)} = \mathbf{z}^{(t)}$)。 MH算法的关键优势在于,接受率的计算仅依赖于**未归一化的后验概率**,归一化常数 $p(\mathbf{x})$ 在比值中自然抵消,从而规避了配分函数难以计算的问题。

2. 高效采样器:Gibbs采样

Gibbs采样可视为MH算法的一种特例,适用于各变量的条件分布易于采样的场景。每次迭代中,依次对每个变量 $z_i$ 从其满条件分布 $p(z_i | \mathbf{z}_{-i}, \mathbf{x})$ 中直接采样。由于提议完全来自目标条件分布,接受率恒为1,无需拒绝步骤,因此效率更高。其实质是一种随机化的坐标更新机制。

3. 现代进展:Hamiltonian Monte Carlo与No-U-Turn Sampler

在高维复杂空间中,传统的随机游走式提议(如各向同性高斯噪声)往往导致探索效率低下,样本间自相关性强。为解决此问题,**Hamiltonian Monte Carlo**(HMC)引入哈密顿动力学模拟,利用梯度信息引导采样路径,使提议能够在高概率区域快速移动,显著提升采样效率。 **No-U-Turn Sampler**(NUTS)是对HMC的重要改进,能够自动确定轨迹积分长度,避免手动设置步长和步数等敏感参数,增强了算法的鲁棒性与实用性。目前,诸如Stan等主流概率编程语言均采用NUTS作为默认采样引擎。
[初始点] -> [提议分布q] -> [候选点] -> [根据接受概率A决定] -> [下一状态] -> ... (形成马尔可夫链)
    目标:链的平稳分布 = 目标后验分布P(z|x)
    最终:收集的样本 {z^(1), z^(2), ..., z^(N)} 近似服从 P(z|x)
MCMC方法的突出优点在于:理论上只要链足够长,即可获得任意精度的后验近似,属于无偏估计方法。 但其缺点同样显著:计算开销大,收敛诊断复杂,样本之间可能存在较强自相关,且难以准确判断收敛时机。

第四部分:实战演练——基于Pyro实现贝叶斯线性回归

本节将通过一个实际案例,使用Uber开发的开源概率编程库 Pyro(构建于PyTorch之上),完整演示贝叶斯建模与推断的主要流程。我们将以房屋面积预测房价为任务目标,重点在于获得带有不确定性估计的预测结果,而不仅仅是点估计。

1. 模型构建:设定先验与似然函数

在贝叶斯框架中,模型定义包括参数的先验分布和数据生成的似然结构。以下代码展示了如何用Pyro定义一个简单的贝叶斯线性回归模型:

import torch
import pyro
import pyro.distributions as dist

def model(x_data, y_data=None):
    # 定义模型参数的先验分布
    w = pyro.sample("w", dist.Normal(0., 1.))      # 回归系数:均值为0,标准差为1的正态分布
    b = pyro.sample("b", dist.Normal(0., 1.))      # 偏置项:同样采用标准正态先验
    sigma = pyro.sample("sigma", dist.HalfNormal(1.))  # 噪声标准差:半正态分布先验

    # 构建线性预测均值
    mean = w * x_data + b

    # 定义观测数据的似然——每个输出y服从以mean为均值、sigma为标准差的正态分布
    with pyro.plate("data", len(x_data)):
        obs = pyro.sample("obs", dist.Normal(mean, sigma), obs=y_data)
    
    return mean

2. 变分推断:定义指导函数并训练模型

由于后验分布难以精确计算,我们采用随机变分推断(SVI)方法进行近似。首先定义一个“指导函数”(guide),用于表示可学习的变分后验分布族。

from pyro.infer import SVI, Trace_ELBO
from pyro.optim import Adam

def guide(x_data, y_data=None):
    # 为回归系数w定义变分参数
    w_loc = pyro.param("w_loc", torch.tensor(0.))
    w_scale = pyro.param("w_scale", torch.tensor(1.), constraint=dist.constraints.positive)
    pyro.sample("w", dist.Normal(w_loc, w_scale))

    # 为偏置b定义变分参数
    b_loc = pyro.param("b_loc", torch.tensor(0.))
    b_scale = pyro.param("b_scale", torch.tensor(1.), constraint=dist.constraints.positive)
    pyro.sample("b", dist.Normal(b_loc, b_scale))

    # 为噪声项sigma定义LogNormal分布的变分参数(保证正值)
    sigma_loc = pyro.param("sigma_loc", torch.tensor(1.), constraint=dist.constraints.positive)
    sigma_scale = pyro.param("sigma_scale", torch.tensor(0.1), constraint=dist.constraints.positive)
    pyro.sample("sigma", dist.LogNormal(sigma_loc, sigma_scale))

接下来,生成模拟数据用于训练:

# 设置随机种子以确保结果可复现
torch.manual_seed(42)

# 真实参数值(用于生成合成数据)
true_w, true_b, true_sigma = 0.5, 2.0, 0.2

# 随机生成100个房屋面积数据(范围0~10)
x_data = torch.rand(100) * 10

# 根据真实模型生成带噪声的房价数据
y_data = true_w * x_data + true_b + torch.randn(100) * true_sigma

初始化优化器与SVI对象,并开始训练过程:

# 使用Adam优化器最小化ELBO损失
optimizer = Adam({"lr": 0.01})
svi = SVI(model, guide, optimizer, loss=Trace_ELBO())

# 进行2000轮迭代训练
num_iterations = 2000
for j in range(num_iterations):
    loss = svi.step(x_data, y_data)
    if j % 500 == 0:
        print(f"Iteration {j}, loss = {loss:.4f}")

训练完成后,查看变分推断所学习到的后验近似参数:

print(f"Learned w: {pyro.param('w_loc').item():.3f} ± {pyro.param('w_scale').item():.3f}")
print(f"Learned b: {pyro.param('b_loc').item():.3f} ± {pyro.param('b_scale').item():.3f}")

3. 预测阶段与不确定性量化

训练结束后,我们可以利用学到的变分后验分布对新样本进行预测,并生成具有置信区间的预测结果。通过对后验样本采样,可以得到预测分布的均值与方差,从而实现对预测不确定性的有效刻画。

[吸烟(S)] -> [肺癌(L)]
[肺癌(L)] -> [X光结果(X)]
[肺癌(L)] -> [呼吸困难(D)]

该图展示了模型预测的均值曲线及其周围一定置信水平下的不确定性带,反映出在不同输入区域下模型对预测的信心程度。例如,在数据稀疏区域,不确定性明显增大,这正是贝叶斯方法的优势所在。

训练完成后,可以从近似后验分布(即指导函数)中抽取多组参数样本 ((w^{(s)}, b^{(s)}, \sigma^{(s)}))。对于新的输入值 (x_{new}),利用这些参数生成对应的预测输出 (y^{(s)} \sim \mathcal{N}(w^{(s)}x_{new} + b^{(s)}, \sigma^{(s)}))。通过收集所有采样得到的 (y^{(s)}) 值,即可构建出完整的

后验预测分布。基于该分布,可以进一步计算预测的均值(作为点估计)以及分位数,例如95%置信区间,从而量化预测的不确定性。

# 利用近似后验采样实现预测

with torch.no_grad():
    # 从模型和引导函数中采样1000次
    predictive = pyro.infer.Predictive(model, guide=guide, num_samples=1000)(x_data, None)
    # predictive['obs'] 的维度为 (1000, 100),表示1000个采样对100个数据点的预测结果

    # 对新输入进行预测
    x_new = torch.tensor([7.5])
    predictive_new = pyro.infer.Predictive(model, guide=guide, num_samples=1000)(x_new, None)
    y_samples_new = predictive_new['obs'].squeeze()

    print(f"Prediction for x=7.5: mean={y_samples_new.mean():.3f}, "
          f"95% CI [{y_samples_new.quantile(0.025):.3f}, {y_samples_new.quantile(0.975):.3f}]")

上述过程不仅提供了具体的预测数值,还给出了相应的

不确定性区间,这正是贝叶斯方法的核心优势所在——在做出预测的同时,明确表达我们对结果的信心程度。

第五部分:前沿方向与未来展望

当前,贝叶斯机器学习正经历快速演进,并与深度学习深度融合,催生了一系列新兴研究方向:

  • 贝叶斯深度学习:将神经网络中的权重视为具有分布的随机变量,采用变分推断或马尔可夫链蒙特卡洛(MCMC)方法(如SG-MCMC)进行训练。这种方法赋予深度模型量化不确定性的能力,同时增强泛化性能,衍生出诸如

贝叶斯神经网络深度高斯过程 等先进模型。

  • 概率编程:借助Pyro、Stan、TensorFlow Probability等工具,用户能够以简洁的高层语法定义复杂的概率模型,而底层的推断过程由系统自动完成。这一范式显著降低了贝叶斯建模的技术门槛,使更多研究者和开发者得以高效构建和实验模型。
  • 摊销推断:引入神经网络(如推断网络)直接从观测数据映射到变分分布的参数,实现

摊销变分推断。这种方式使得面对新数据时无需重复优化变分目标,仅需一次前向传播即可获得近似后验,极大提升了推断效率。

  • 面向大规模模型与海量数据的发展趋势:针对现代应用场景,研究者正在推进更高效的近似推断算法,包括随机梯度MCMC、分布式推断架构,以及充分利用GPU/TPU等硬件加速技术,推动贝叶斯方法在大模型时代的实际落地。

结语:拥抱不确定性

贝叶斯机器学习并非一组固定的计算流程,而是一种

强大的建模哲学严谨的推理框架。它重新定义了“不确定性”的角色——不再将其视为需要剔除的噪声,而是转化为可度量、可分析、可决策支持的信息资产。

从结构化的概率图模型,到变分推断与MCMC两大核心推断引擎,贝叶斯方法提供了一套逻辑严密、原理清晰的工具体系,用于应对现实世界中复杂且充满噪声的问题。尽管其计算开销相对较高,但随着算法优化、软件平台成熟以及硬件性能提升,其应用范围正在持续扩展。

掌握贝叶斯思维,意味着你不仅能回答“最可能的结果是什么”,更能深入探讨“我们对这个结论有多大的信心”。在数据驱动决策日益重要的今天,这种对不确定性的深刻理解与量化能力,已成为极具价值的核心素养。希望本文能成为你开启贝叶斯世界之旅的第一把钥匙。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:概率图模型 机器学习 mcmc 图模型 CMC

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-24 19:49