了解机器学习的贝叶斯建模和概率规划
扫描二维码
随时随地手机看文章
传统机器学习 (ML) 模型和 AI 技术通常存在一个严重缺陷:它们缺乏不确定性量化。这些模型通常提供点估计,而不考虑其预测的不确定性。这种限制削弱了评估模型输出可靠性的能力。此外,传统 ML 模型需要大量数据,通常需要正确标记的数据,因此,在数据有限的问题上往往会遇到困难。此外,这些模型缺乏将专家领域知识或先验信念纳入模型的系统框架。如果无法利用特定领域的见解,模型可能会忽略数据中的关键细微差别,并且往往无法发挥其潜力。ML 模型正变得越来越复杂和不透明,人们越来越需要数据和人工智能做出的决策具有更高的透明度和可问责性。
概率编程:解决这些挑战的解决方案
概率编程提供了一个解决这些挑战的建模框架。其核心是贝叶斯统计,与频率派的统计学解释不同。
贝叶斯统计
在频率统计学中,概率被解释为事件的长期相对频率。数据被认为是随机的,是从固定定义的分布中抽样的结果。因此,测量中的噪声与抽样变化有关。频率论者认为概率是存在的,并且是固定的,无限的实验都会收敛到这个固定值。频率论方法不为参数分配概率分布,他们对不确定性的解释植根于估计量的长期频率特性,而不是关于参数值的明确概率陈述。
在贝叶斯统计中,概率被解释为对特定信念的不确定性的度量。数据被视为固定的,而系统的未知参数被视为随机变量,并使用概率分布进行建模。贝叶斯方法可以捕获参数本身的不确定性,因此提供了一种更直观、更灵活的不确定性量化方法。
频率统计与贝叶斯统计[1]
概率机器学习
在频率论 ML 中,模型参数被视为固定的,并通过最大似然估计 (MLE) 进行估计,其中似然函数量化了给定统计模型观察数据的概率。MLE 寻求最大化此概率的参数点估计。要实现 MLE:
· 假设一个模型和底层模型参数。
· 根据假设模型推导似然函数。
· 优化似然函数以获得参数的点估计。
因此,包括深度学习在内的频率学派模型依赖优化(通常基于梯度)作为其基本工具。
相反,贝叶斯方法对未知参数及其与概率分布的关系进行建模,并在我们获得新数据时使用贝叶斯定理来计算和更新这些概率。
贝叶斯定理: “贝叶斯规则告诉我们如何从关节点导出条件概率,条件告诉我们如何理性地更新我们的信念,而更新信念正是学习和推理的全部内容”[2]。
这是一个简单但有力的等式。
· 先验表示对未知参数的初始信念
· 似然表示基于假设模型的数据的概率
· 边际似然是模型证据,是一个标准化系数。
· 后验分布代表我们对参数的更新信念,结合了先验知识和观察到的证据。
在贝叶斯机器学习中,推理是基本工具。利用后验分布表示的参数分布进行推理,可以更全面地理解不确定性。
贝叶斯更新的实际应用: 下图展示了一个简单的抛硬币实验,在不同样本量和两个不同的先验分布下,其后验分布。此可视化提供了不同样本量和先验信念的组合如何影响最终的后验分布的见解。
样本大小和先验对后验分布的影响
如何建立后验分布模型
在大多数情况下,看似简单的后验分布很难计算。特别是,分母,即边际似然积分往往是可交互的,尤其是在处理更高维度的参数空间时。而且在大多数情况下,没有闭式解,数值积分方法也是计算密集型的。为了应对这一挑战,我们依靠一类称为马尔可夫链蒙特卡罗模拟的特殊算法来建模后验分布。这里的想法是从后验分布中抽样,而不是明确地对其进行建模并使用这些样本来表示模型参数的分布
马尔可夫链蒙特卡洛(MCMC)
“ MCMC 方法包括一类从概率分布中抽样的算法。通过构建以期望分布作为其平衡分布的马尔可夫链,可以通过记录链中的状态来获得期望分布的样本” [3]。一些常用的 MCMC 采样器包括:
· 大都会-黑斯廷斯
· 吉布斯取样器
· 哈密顿蒙特卡罗 (HMC)
· 无掉头采样器 (NUTS)
· 序贯蒙特卡洛 (SMC)
概率规划
概率编程是贝叶斯统计的编程框架,即它涉及表示条件推理问题的语言的语法和语义的开发,以及为这些推理问题开发“求解器”。本质上,概率编程之于贝叶斯建模就像自动微分工具之于经典机器学习和深度学习模型一样[2]。
概率编程语言生态系统多种多样,每种语言都有自己的语法、语义和功能。一些最流行的语言包括:
· BUGS(使用吉布斯抽样的贝叶斯推理)[4]: BUGS 是最早的概率编程语言之一,以其用户友好的界面和对各种概率模型的支持而闻名。它实现了吉布斯抽样和其他马尔可夫链蒙特卡罗 (MCMC) 方法进行推理。
· JAGS(Just Another Gibbs Sampler)[5]: JAGS 是一种用于贝叶斯分层建模的专用语言,特别适合具有嵌套结构的复杂模型。它利用 Gibbs 采样算法进行后验推理。
· STAN:一种概率编程语言,以其富有表现力的建模语法和高效的采样算法而闻名。STAN 在学术界和工业界广泛用于各种贝叶斯建模任务。“Stan 与 BUGS 和 JAGS 的主要区别在于两个方面。首先,Stan 基于一种新的命令式概率编程语言,这种语言比 BUGS 或 JAGS 所基于的声明式图形建模语言更灵活、更具表现力,例如声明具有类型的变量以及支持局部变量和条件语句。其次,Stan 的马尔可夫链蒙特卡罗 (MCMC) 技术基于汉密尔顿蒙特卡罗 (HMC),对于具有复杂后验的模型,这是一种比吉布斯采样或 Metropolis-Hastings 更高效、更强大的采样器” [6]。
· BayesDB: BayesDB 是一个概率编程平台,专为大规模数据分析和概率数据库查询而设计。它使用户能够使用类似 SQL 的查询对关系数据库执行概率推理 [7]
· PyMC3: PyMC3 是一个用于概率编程的 Python 库,它提供了一个直观而灵活的界面来构建和分析概率模型。它利用先进的采样算法(如汉密尔顿蒙特卡罗 (HMC) 和自动微分变分推理 (ADVI))进行推理 [8]。
· TensorFlow Probability: “ TensorFlow Probability (TFP) 是一个基于 TensorFlow 构建的 Python 库,它可以轻松地在现代硬件(TPU、GPU)上结合概率模型与深度学习” [9] 。
· Pyro: “Pyro 是一种用 Python 编写的通用概率编程语言 (PPL),后端由 PyTorch 支持。Pyro 支持灵活且富有表现力的深度概率建模,将现代深度学习和贝叶斯建模的优点统一起来” [10]。
这些语言共享一个通用的工作流程,概述如下:
1. 模型定义:模型定义控制数据生成、潜在参数及其相互关系的过程。此步骤需要仔细考虑底层系统及其行为的假设。
2. 先验分布规范:定义模型中未知参数的先验分布。这些先验编码了从业者在观察任何数据之前对参数的信念、领域或先验知识。
3. 似然函数: 描述似然函数,表示在未知参数条件下观测数据的概率分布。似然函数量化了模型预测与观测数据之间的一致性。
4. 后验分布推断:使用采样算法根据观测数据近似模型参数的后验分布。这通常涉及运行马尔可夫链蒙特卡罗 (MCMC) 或变分推断 (VI) 算法以从后验分布中生成样本。
案例研究:预测股票指数波动率
在本案例研究中,我们将采用贝叶斯建模技术来预测股票指数的波动性。这里的波动性衡量股票价格随时间的变化程度,是评估特定股票相关风险的关键指标。
数据:为了进行此分析,我们将利用标准普尔 500 股票指数的历史数据。标准普尔 500 指数是一种广泛使用的基准指数,用于追踪美国 500 只大盘股的表现。通过检查该指数价格随时间变化的百分比,我们可以深入了解其波动性。
标准普尔 500 指数 — 股价和百分比变化
从上图中我们可以看到时间序列——连续几天之间的价格变化:
· 恒定均值
· 方差随时间变化,即时间序列表现出异方差
异方差建模: “在统计学中,如果一系列随机变量都具有相同的有限方差,则该序列是同方差的;这也称为方差齐性。互补的概念称为异方差,也称为方差异质性”[11]。 自回归条件异方差(ARCH) 模型专门用于解决时间序列数据中的异方差问题。
ARCH 模型的贝叶斯实现与频率派实现
贝叶斯建模的主要优势包括能够整合先验信息并量化模型参数和预测中的不确定性。这在数据有限且有先验知识的情况下尤其有用。
总之,贝叶斯建模和概率编程提供了强大的工具来解决传统机器学习方法的局限性。通过采用不确定性量化、结合先验知识并提供透明的推理机制,这些技术使数据科学家能够在复杂的现实场景中做出更明智的决策。