MLDA采样器:介绍与资源#
本笔记本包含了对[1]中提出的多级延迟接受MCMC算法(MLDA)的介绍。它解释了该方法背后的主要思想,概述了该方法擅长解决的问题,并指出了包含如何在PyMC中使用它的示例的具体笔记本。
[1] Dodwell, Tim & Ketelsen, Chris & Scheichl, Robert & Teckentrup, Aretha. (2019). 多级马尔可夫链蒙特卡洛. SIAM评论. 61. 509-545. https://doi.org/10.1137/19M126966X
MLDA采样器#
MLDA采样器旨在处理计算密集型问题,在这些问题中,我们不仅可以访问所需的(精细)后验分布,还可以访问一组精度递减、计算成本递减的近似(粗略)后验分布(我们至少需要其中一个)。
其主要思想是运行多个链,每个链从不同的后验版本中采样(层次越低,后验越粗糙)。每个链生成一定数量的样本,最后一个样本作为提议传递给上一层链。后者接受或拒绝该样本,然后将控制权交还给第一个链。这种策略是递归应用的,因此每个链都使用其下方的链作为提议样本的来源。
MLDA 提高了最细链条的有效样本大小,相比于标准采样器(例如 Metropolis),这使得我们能够在仍然充分探索后验分布的同时,减少昂贵的细链条似然评估次数。请注意,底层采样器是像 Metropolis 或 DEMetropolisZ 这样的标准 MCMC 采样器。
它擅长解决的问题#
在许多现实世界的问题中,我们使用模型来表示空间或时间上变化的量。我们通常有能力修改模型的空间和/或时间粒度。例如,在表示高分辨率图像时,我们可以使用粗略的64x64网格,但也可以使用更精细的512x512网格,这在处理时更准确且计算量更大。在这些情况下,通常可以应用多层次建模来推断模型中的未知量。在多层次建模中,使用一系列精度/分辨率和计算成本逐渐增加的模型来更高效地进行推断,而不是仅使用最精细的模型进行推断。
示例应用包括物理、自然或其他系统的逆问题,例如地下流体运输、生态学中的捕食者-猎物模型、阻抗成像、超声成像、发射断层扫描、海洋环流流场。
在许多逆问题中,评估贝叶斯似然需要数值求解偏微分方程(PDE)。在细分辨率模型上进行此操作可能比在粗分辨率模型上进行此操作慢几个数量级。这是多层次建模和MLDA的理想场景,因为MLDA允许我们仅计算一小部分昂贵的细分辨率似然性,以换取许多廉价的粗分辨率似然性。
PyMC 实现#
MLDA 是 PyMC 中可用的 MCMC 推断方法之一。您可以使用 pm.MLDA(coarse_models=...)
实例化一个 MLDA 采样器,其中您需要传递至少一个粗略模型在列表中。
PyMC 实现的 MLDA 支持任意数量的层级,为底层采样器调整参数化,为每个层级设置独立的子采样率,选择底层采样器的块采样或复合采样方式,两种类型的底层采样器(Metropolis, DEMetropolisZ),自适应误差校正和方差减少。
关于MLDA采样器的更多详细信息以及如何使用和参数化它,用户可以参考代码中的文档字符串和其他示例笔记本(链接如下),这些内容涉及更复杂的问题设置和更高级的MLDA功能。
请注意,MLDA采样器是PyMC中的新功能。用户应对结果持额外批判态度,并在PyMC的GitHub仓库中报告任何问题。
带有示例代码的笔记本#
简单线性回归: 本笔记本演示了在PyMC中使用MLDA的工作流程。它采用了一个非常简单的玩具模型。
重力测量: 在这个笔记本中,我们使用MLDA解决一个二维重力测量反问题。评估似然性需要求解一个偏微分方程(PDE),我们使用scipy来完成。我们还比较了MLDA与其他PyMC采样器(Metropolis, DEMetropolisZ)的性能。
方差减少 1 和 方差减少 2(外部链接):这两个笔记本展示了在线性回归模型和地下水流动模型中的方差减少功能。此功能允许用户定义他们需要使用MCMC样本估计的感兴趣量。然后,在MLDA采样期间收集这些感兴趣量以及这些量在不同层次之间的差异。收集的量可以用于生成比仅使用精细链样本的标准估计具有更低方差的估计。第一个笔记本没有外部依赖,而第二个笔记本需要FEniCS。请注意,第二个笔记本不在PyMC核心仓库中,因为FEniCS不是PyMC的依赖项。
自适应误差模型(外部链接):在这个笔记本中,我们使用MLDA来解决另一个逆问题;地下水流动建模。目标是推断给定数据(水头测量值)的模型参数(水力传导率)的后验分布。在这个例子中,我们利用PyTensor Ops来定义一个“黑箱”似然函数,即使用外部代码的似然函数。具体来说,我们的似然函数使用FEniCS库来求解偏微分方程(PDE)。这是一个常见的情况,因为这类PDE使用scipy或其他标准库求解速度较慢。请注意,这个笔记本不在PyMC核心仓库中,因为FEniCS不是PyMC的依赖项。我们采用了自适应误差模型(AEM)功能,并比较了基本MLDA与AEM增强的MLDA的性能。自适应误差模型(AEM)的思想是估计相邻层次之间正向模型误差的均值和方差,即估计粗略正向模型与精细正向模型之间的偏差,并使用这些估计值来校正粗略模型。使用该技术应能提高精细层次上的ESS/秒。
基准测试和调优(外部链接):在这个笔记本中,我们使用地下水流动模型的不同参数化方法,将MLDA与其他采样器进行基准测试。我们还提供了一些关于调优MLDA的建议。请注意,这个笔记本不在核心PyMC存储库中,因为FEniCS不是PyMC的依赖项。
%load_ext watermark
%watermark -n -u -v -iv -w
Last updated: Sun Jan 09 2022
Python implementation: CPython
Python version : 3.8.10
IPython version : 7.30.1
Watermark: 2.3.0