UCI-CS274b-图模型学习笔记-全-
UCI CS274b 图模型学习笔记(全)
001:应用与算法概述


在本节课中,我们将学习图形模型的基本概念、其广泛的应用领域以及核心算法的初步介绍。图形模型是机器学习中用于表示和处理结构化概率分布的有力工具。

课程介绍与背景
欢迎来到CS 274B:图形模型中的学习。我是Eric,是加州大学尔湾分校的教员,主要研究方向是计算机视觉中的机器学习应用,以及其他涉及时空数据的科学领域。本季度我们有一位助教Dahai,他也在线上。
本课程将重点讨论从结构化数据中学习。图形模型是机器学习的一部分,其独特之处在于两点:首先,我们通常对明确表示概率和不确定性感兴趣;其次,我们关注的应用场景中,不仅输入是高维和结构化的,输出本身也常常是高维和结构化的。
什么是概率图形模型?

上一节我们介绍了图形模型的核心思想,本节中我们来看看其具体形式。概率图形模型使用图(由节点和边组成)来表示随机变量之间的依赖关系。节点代表随机变量,图则指明了联合概率分布的分解结构。

以下是图形模型的主要类型:
- 有向图模型:使用有向边,如贝叶斯网络。
- 无向图模型:使用无向边,如马尔可夫随机场。
- 超图模型:边可以连接两个以上的节点。
图结构不仅使模型对人类可解释,还能被算法利用,将原本指数级复杂度的推理问题转化为线性或多项式复杂度的问题。
从隐马尔可夫模型开始

为了理解图形模型如何工作,我们先从一个简单但经典的模型——隐马尔可夫模型开始。HMM用于建模序列数据,如语言或时间序列。
在HMM中,我们有一系列隐藏状态 Z_t 和对应的观测值 X_t。其图模型表示如下:隐藏状态形成一个马尔可夫链,每个观测值仅依赖于当前时刻的隐藏状态。这对应着联合概率的分解公式:

P(X, Z) = P(Z_1) * ∏_{t=2}^T P(Z_t | Z_{t-1}) * ∏_{t=1}^T P(X_t | Z_t)

HMM在语音识别、机器人定位等领域有广泛应用。例如,在机器人定位中,状态 Z_t 表示机器人的位置,观测 X_t 表示传感器读数,通过推理算法可以实时估计机器人的位置。


更复杂的图形模型应用
HMM展示了图形模型处理序列数据的能力。现在,我们来看看图形模型如何扩展到更复杂的结构和应用中。
同时定位与地图构建:在SLAM问题中,机器人需要在未知环境中同时估计自身位置和构建地图。其图模型不仅包含机器人位姿的马尔可夫链,还包含了未知的地标位置节点,观测则同时依赖于机器人位姿和地标位置。
人体姿态估计:人体可以建模为关节连接的部件图。每个身体部件对应一个节点。给定图像,通过高效的图模型推理算法,可以估计出所有部件的2D或3D位置,避免了在巨大姿态空间中进行暴力搜索。
图像处理与遥感:图形模型可用于图像去噪、立体视觉深度估计和语义分割。例如,在语义分割中,目标是为每个像素分配一个物体类别标签,这可以建模为一个在像素网格上的无向图模型。多尺度树状模型也被用于对图像或海面温度等空间数据进行建模和插值。
其他领域应用:
- 纠错编码:现代最好的纠错解码器使用基于图模型的消息传递算法。
- 蛋白质结构预测:分子间的物理相互作用可以建模为图,进而用推理算法预测蛋白质的3D折叠结构。
- 主题建模:潜在狄利克雷分配模型将文档视为多个主题的混合,每个词来自某个主题,这是一种对文本数据的概率生成模型。
- 网络分析:社会网络等关系数据可以用潜在社区模型来分析,推断节点的社区归属和社区间的连接概率。
- 游戏评分系统:如Xbox Live的TrueSkill系统,使用大型图模型根据比赛结果推断玩家的隐含技能水*。
- 脑机接口:通过植入电极读取神经元信号,并用图模型实时解码用户的运动意图,控制光标移动。
核心算法思想预览
了解了众多应用后,我们来看看支撑这些应用的核心算法思想。许多图形模型推理算法都属于消息传递算法的变体。
在这些算法中,图中的节点会向其邻居传递“消息”(可以理解为函数或向量)。每个节点根据来自邻居的消息和本地概率信息,计算新的消息并传递给其他邻居。信念传播算法就是一个典型例子,其消息更新规则可以看作是动态规划的推广。
对于复杂的模型,我们还需要更强大的推理工具:
- 马尔可夫链蒙特卡洛:通过抽样模拟来*似复杂的概率分布。
- 变分推断:将推理问题转化为优化问题,通过寻找一个易处理的*似分布来逼*真实后验分布。
此外,我们也会学习如何从数据中学习图结构本身,这与特征选择问题紧密相连。例如,可以通过稀疏正则化方法从完全连接的图开始,剪枝掉不重要的边,得到更能反映数据依赖关系的稀疏图。

最后,课程也会涉及如何将图形模型与深度学习(如神经网络)结合,以建模更复杂的非线性关系,并扩展到海量数据集,例如使用随机变分推断等方法。

课程管理与总结
本节课我们一起概览了图形模型的学习内容。以下是课程的管理信息:
预备知识:需要熟练掌握多变量微积分、线性代数、概率论基础,以及机器学习入门知识(如朴素贝叶斯、逻辑回归、SVM、EM算法、PCA等)。未正式选修CS274A的同学需自行评估。
作业与项目:
- 课程无考试,成绩由作业(50%)和期末项目(50%)构成。
- 共有3次计分作业,每次为期两周,包含数学推导、算法设计和编程(使用Python)。
- 期末项目以小组(2-4人)形式进行,鼓励与个人研究结合,需提交提案、进行展示并完成最终报告。
学习资源:课程网站提供多种教材和论文作为参考,鼓励根据个人偏好选择阅读。

希望本课程能帮助你深入理解图形模型的原理,并具备开发和扩展新模型的能力。
002:有向与无向图模型


在本节课中,我们将深入探讨定义图形模型的关键属性——马尔可夫性或条件独立性。我们将更精确地讨论不同类型的图形模型,包括基于有向图、无向图以及更复杂的超图的模型,并阐述它们是如何定义以及彼此之间如何关联的。
有向图模型
上一节我们介绍了图形模型的基本概念,本节中我们来看看有向图模型。这是最容易理解的一种模型。
根据概率的链式法则和条件概率的定义,对于任意分布 p(x),我们总可以将其重写为:
p(x) = p(x1) * p(x2|x1) * p(x3|x2, x1) * ... * p(xn|x1, x2, ..., xn-1)
实际上,对于变量的任意排序,这个分解都成立。
有向图模型的核心思想是简化这个分解。它指出,对于某些分布,这些条件概率并不依赖于所有先前的变量,而只依赖于其中的一个子集。我们用一个图来描述这种依赖关系。
在有向图中,每个节点对应一个随机变量。我们用 Γ(S) 表示节点 S 的父节点集合,即图中所有指向该节点的节点。一个有向图模型定义联合分布为所有节点上条件概率的乘积:
p(x) = ∏_S p(x_S | x_{Γ(S)})
其中,每个节点的概率仅依赖于其父节点的变量。
为了使这样定义的联合分布有效,其对应的图必须是一个有向无环图。这意味着图中不能存在有向环,即不能从一个节点出发,沿着箭头方向前进最终又回到该节点。
参数化表示
除了图结构,我们还需要指定概率的具体数值。这取决于变量是离散的还是连续的,以及它们取值的数量。
以一个简单的二值变量为例,每个变量取值为0或1。对于没有父节点的变量,其分布可以用一个和为1的二维向量表示。对于有一个父节点的变量,其条件分布可以用一个2x2的矩阵表示。对于有多个父节点的变量,则需要一个更高维的数组来表示所有父节点取值组合下的条件分布。
模型的优势
使用图形表示法能带来显著的效率提升。一个无约束的n个二值变量的联合分布需要约 2^n 个参数。而在有向图模型中,参数数量与节点数呈线性关系,仅与节点的父节点数量呈指数关系。这大大减少了存储需求、计算复杂度以及从数据中学习参数所需的样本量。
示例:警报网络
考虑一个简单的警报模型。警报可能因入室盗窃或地震而触发。邻居约翰和玛丽在听到警报后可能会打电话报警。
对应的有向图模型如下:
- 入室盗窃和地震是独立的根节点。
- 警报的概率依赖于入室盗窃和地震是否发生。
- 约翰和玛丽打电话的概率仅依赖于警报是否响起,并且在给定警报的条件下彼此独立。
这个模型仅用少量参数就描述了五个变量间的复杂依赖关系,而完整的联合分布则需要多得多的参数。
实际应用
有向图模型(常被称为贝叶斯网络)已应用于许多领域。一个经典的“Alarm”网络包含37个变量,用于医疗诊断,它仅用509个参数就*似描述了原本需要天文数字参数的联合分布。在重症监护室中,此类模型被用于整合多种监测设备的数据,以减少误报并更准确地预测真实问题。
无向图模型
现在,我们转向另一种重要的图形模型——无向图模型,它通常被称为马尔可夫随机场。
在无向图中,我们有一组节点和一组连接节点的无向边。我们用 Γ(T) 表示节点 T 的邻居集合,即所有通过边与 T 直接相连的节点。
无向图模型的一个核心直观概念是图分离与条件独立性之间的联系。

我们称集合 B 分离了集合 A 和 C,如果所有从 A 到 C 的路径都必须经过 B。
一个概率分布 p(x) 被称为关于图 G 是马尔可夫的,当且仅当对于任何被 B 分离的 A 和 C,都有:
p(X_A, X_C | X_B) = p(X_A | X_B) * p(X_C | X_B)
即,给定 B,A 和 C 条件独立。
一个特例是局部马尔可夫性质:对于每个节点,给定其所有邻居节点,该节点与图中所有其他非邻居节点条件独立。

成对马尔可夫随机场


那么,如何构建满足这些马尔可夫性质的分布呢?一个常见的方法是使用成对马尔可夫随机场。
给定一个无向图,其对应的成对MRF定义如下:
p(x) = (1/Z) * ∏_{(s,t)∈E} ψ_{st}(x_s, x_t)
这里,ψ_{st}(x_s, x_t) 是定义在边 (s, t) 上的势函数,它是一个非负函数。Z 是归一化常数(或称配分函数),确保所有状态的概率之和为1:
Z = ∑_x ∏_{(s,t)∈E} ψ_{st}(x_s, x_t)
势函数并不直接表示概率,而是表示变量状态间的“亲和度”或“兼容性”。数值越大,表示该状态组合越可能出现。
一般无向MRF与团
成对MRF并非最一般的无向模型。更一般的无向马尔可夫随机场基于团的概念。
一个团是图中节点的子集,其中每对节点都有边相连。一个极大团是不能被其他任何团真包含的团。
一般的无向MRF将联合分布定义为所有极大团上势函数的乘积:
p(x) = (1/Z) * ∏_{c ∈ C} ψ_c(x_c)
其中,C 是图中所有极大团的集合,ψ_c 是定义在团 c 上的势函数。
示例与应用
在计算机视觉中,无向图模型被广泛用于图像处理任务,如立体视觉(估计深度)和语义分割(标注每个像素的物体类别)。模型通常将图像像素排列成网格,势函数编码了相邻像素倾向于具有相同标签或深度这一空间先验知识。
因子分解与马尔可夫性的等价关系
一个重要且深刻的结论是Hammersley-Clifford定理。它指出,对于一个严格正的概率分布(即所有状态概率均大于零),其满足关于图 G 的全局马尔可夫性质,当且仅当它可以被分解为图 G 上团势函数乘积的形式(在归一化后)。这建立了图表示的分离性质与代数表示的因子分解形式之间的根本联系。
因子图
最后,我们介绍因子图,它是一种更精细地表示因子分解结构的工具。
因子图是一种二分图,包含两类节点:
- 变量节点(通常用圆圈表示),对应随机变量。
- 因子节点(通常用方块表示),对应势函数。


边连接因子节点和该因子所依赖的变量节点。


因子图对于明确表示高阶依赖关系特别有用。在标准的无向图中,一个三角形结构可以对应一个三元势函数,也可以对应三个二元势函数的乘积。这两种参数化方式在马尔可夫性上等价,但具有不同的参数数量和表达能力。因子图通过显式画出因子节点,消除了这种歧义。
因子图在纠错编码等领域有天然的应用,其中奇偶校验约束自然地表示为涉及多个变量的因子。

总结

本节课中,我们一起学习了图形模型的两种主要类型:
- 有向图模型(贝叶斯网络):其直观基础是变量间的因果或生成关系。联合分布通过条件概率的链式乘积来因子分解,其中每个变量仅依赖于其父节点。它要求图是有向无环的。
- 无向图模型(马尔可夫随机场):其直观基础是变量间的交互与兼容性。联合分布通过定义在团上的势函数的乘积来因子分解。其核心性质是图分离意味着条件独立性。
- 因子图:作为无向模型的一种显式表示,它清晰地展示了分布如何分解为多个因子的乘积,尤其便于表示高阶交互。


理解这些模型如何表示变量间的依赖关系和独立性,是后续学习如何在它们上进行高效推理(计算边际概率、条件概率)和学习(从数据中估计参数和结构)的基础。不同的表示法在直观性、表达能力和计算便利性上各有优劣,适用于不同的实际问题。
003:推理问题与变量消除算法 🧠
在本节课中,我们将完成对各类图形模型的概览,并开始探讨如何在这些模型中高效地进行推理。我们将介绍一种基础的推理算法——变量消除算法。
模型间的转换与独立性 🔄
上一节我们介绍了因子图,它是一种更灵活的框架,用于描述概率分布的结构。联合分布是这些势函数的乘积。因子图包含表示变量的圆形节点和表示因子的方形节点,指示每个因子依赖于哪些变量子集。
以下是三种主要图形模型之间的转换:
- 有向图转因子图:为每个节点创建一个因子,该因子等于给定其父节点的条件概率分布。这会丢失局部因子是条件分布的信息,且全局归一化常数Z为1。
- 有向图转无向图(道德化):保留所有边但去掉方向,并为所有拥有共同子节点的节点对添加边。形成的无向图称为“道德图”。
- 无向图转有向图:选择一个节点顺序,根据无向图结构检查隐含的独立性,并相应地添加有向边。结果对节点顺序敏感,且转换可能丢失信息。
了解这些转换很重要,因为根据应用场景,不同模型各有优势,且有时需要转换以利用特定推理软件。
有向图中的独立性
在有向图中,独立性判断比无向图更复杂,涉及“碰撞点”的概念。
- 碰撞点:在一条路径中,一个节点有至少两个传入箭头。
- D-分离规则:要判断给定观测集 C 时,X 和 Y 是否条件独立,需检查所有连接 X 和 Y 的路径。一条路径被“阻塞”如果:
- 路径上有一个非碰撞点节点被观测(在 C 中)。
- 路径上有一个碰撞点节点及其后代未被观测(不在 C 中)。
- 马尔可夫毯:在有向图中,一个节点 X 的马尔可夫毯是其父节点、子节点以及子节点的其他父节点。给定其马尔可夫毯,X 与图中所有其他节点条件独立。

推理问题概述 🎯

推理是指在模型参数已知的情况下,根据已观测变量的值,估计未观测(隐藏)变量的值或分布。这与“学习”(从数据中估计模型参数)不同,但学习算法(如EM算法)常以推理作为子步骤。
一个简单的二变量推理例子:给定联合分布 P(x, y) = P(x) * P(y|x)。
- 若观测
x,则P(y|x)可直接从模型中获得。 - 若观测
y,需计算P(x|y),这可通过贝叶斯规则完成:P(x|y) = P(y|x) * P(x) / P(y)。

在具有多个变量的模型中,目标通常是计算隐藏变量的边际分布。对于离散变量,这涉及对非目标非观测变量求和,但直接计算的项数随变量数指数增长,因此需要更高效的算法。

决策理论与推理目标
推理常与决策理论结合。设定观测数据 Y,隐藏变量 X,行动 a 和损失函数 L(x, a)。最优行动是最小化期望损失的行动。
两种常见的损失函数及其对应的推理目标:

- 汉明损失/二次损失:损失函数分解为各变量损失之和。最小化期望损失仅需每个变量的边际分布
P(x_i | Y)。 - 0-1损失:仅当预测完全正确时损失为0。这激励了最大后验估计,即寻找使后验概率
P(X | Y)最大的 X 配置。这等价于最大化势函数乘积(忽略归一化常数Z),通常通过最大化对数势函数的和来实现,也称为能量最小化。
变量消除算法 ⚙️
变量消除算法是一种通过逐步“消除”(求和或最大化)变量来简化模型,以进行边际推断或MAP估计的基础方法。
约束满足问题示例
以图着色问题为例:能否为图中每个节点分配颜色,使得相邻节点颜色不同?这可以建模为无向图模型,其中因子(约束)在配置满足约束时为1,否则为0。此时:
- MAP估计(最大化乘积)可找到一个可行解(如果存在)。
- 归一化常数 Z 则计算了可行解的总数。
消除策略
核心思想是选择一个变量消除顺序。对于每个要消除的变量:
- 收集所有包含该变量的因子。
- 对这些因子的乘积执行求和(求边际)或最大化(MAP)操作,消除该变量。
- 生成一个只依赖于该变量邻居的新因子。
- 将该新因子加入模型,并移除旧因子。
图形效果:消除一个节点后,需要在它的所有邻居之间添加边(形成一个团),因为新因子依赖于所有这些邻居变量。
计算效率:消除顺序至关重要。消除连接度高的节点会产生涉及大量变量的新因子,计算成本高。优先消除边缘的、连接度低的节点更高效。
分配律:算法的效率提升源于求和/最大化操作满足分配律。例如,最大化 f1(x,y) + f2(x,z) 相对于 y 和 z,可以先分别对 y 最大化 f1,对 z 最大化 f2,再将结果相加,这比枚举所有 (y,z) 对更高效。

本节课中,我们一起学习了图形模型间的转换、有向图中的独立性判断、推理问题的定义及其与决策理论的关系,并初步介绍了变量消除算法的基本思想与操作流程。下一节,我们将更详细地探讨变量消除算法在因子图上的具体步骤和复杂度分析。
004:消息传递算法与信念传播
在本节课中,我们将深入探讨消元算法,并更详细地了解它们在因子图上的工作原理。这些算法不仅是计算我们关心的推理结果的有用工具,也是构建更复杂方法的基础模块。
概述
我们将从一个具体的例子出发,解释如何通过利用分配律来高效地计算边际分布。核心思想是,通过巧妙地改变求和与乘积的顺序,可以在不改变结果的前提下,显著节省计算量。我们将首先介绍消元算法,然后将其扩展为更高效的信念传播算法,该算法能一次性计算出图中所有变量的边际分布。
消元算法详解
上一节我们介绍了分配律的基本思想。本节中,我们来看看如何在一个具体的模型上应用消元算法。
模型与问题设定
假设我们有一个包含六个离散变量的有向图模型,每个变量有 K 个可能的状态。其联合分布根据图结构分解如下:
p(x1, x2, x3, x4, x5, x6) = p(x1) * p(x2|x1) * p(x3|x1) * p(x4|x2) * p(x5|x2, x3) * p(x6|x2, x5)
我们的推理目标是:在观察到变量 x4 和 x6 取特定值(记作 x4_bar 和 x6_bar)后,计算变量 x1 的边际分布 p(x1 | x4_bar, x6_bar)。这需要我们对未观测变量 x2, x3, x5 进行求和(边际化)。
朴素方法的计算代价
如果直接对联合分布进行求和,计算量将非常庞大。对于每个固定的 x1,我们需要对 x2, x3, x5 的所有 K^3 种组合进行求和。由于 x1 本身有 K 种可能,并且联合分布中有 N 个因子项,总计算复杂度约为 O(N * K^4)。当需要边际化的变量很多时,这种指数级增长的计算量是无法承受的。
转换为因子图
为了应用消元算法,我们首先将模型转换为因子图。每个条件概率项都成为一个因子。例如,p(x6|x2, x5) 成为因子 φ6(x2, x5, x6)。
对于观测变量,我们将其“固定”为观测值,从而创建新的、维度更低的因子(或称为“证据势能”)。例如,观测到 x6 = x6_bar 后,我们得到一个新的因子 M6(x2, x5) = φ6(x2, x5, x6_bar)。这可以看作是变量 x6 向其邻居 x2 和 x5 发送的“消息”。
逐步消元过程
消元算法的核心是每次从图中移除(消元)一个未观测变量,并用一个新的因子来概括该变量对其邻居的影响。
以下是消元步骤:
- 选择消元顺序:假设我们首先消元
x5。 - 识别相关因子:找出所有与
x5相连的因子,即φ5(x2, x3, x5)和消息M6(x2, x5)。 - 计算新因子:通过对
x5求和,将这两个因子合并为一个新的因子M5(x2, x3):
这个操作本质上是一个矩阵乘法,计算复杂度为M5(x2, x3) = Σ_{x5} [ φ5(x2, x3, x5) * M6(x2, x5) ]O(K^3)。新因子M5编码了在x5被边际化后,x2和x3之间的关系。 - 更新因子图:从图中移除变量
x5及其相连的因子φ5和M6,并添加新因子M5。 - 迭代消元:接下来,我们选择消元
x3。与x3相连的因子是φ3(x1, x3)和M5(x2, x3)。通过对x3求和得到新因子M3(x1, x2):
同样,计算复杂度为M3(x1, x2) = Σ_{x3} [ φ3(x1, x3) * M5(x2, x3) ]O(K^3)。更新图,移除x3,φ3,M5,添加M3。 - 最终消元:最后消元
x2。与x2相连的因子是φ2(x1, x2),M4(x2)(来自观测x4)和M3(x1, x2)。求和得到最终消息M2(x1):
由于这里只涉及两个变量,计算复杂度降为M2(x1) = Σ_{x2} [ φ2(x1, x2) * M4(x2) * M3(x1, x2) ]O(K^2)。 - 计算目标边际:现在,图中只剩下变量
x1及其先验因子φ1(x1)和来自x2的消息M2(x1)。x1的未归一化边际分布正比于它们的乘积:
最后,通过归一化得到真正的边际分布:p~(x1) = φ1(x1) * M2(x1)p(x1 | x4_bar, x6_bar) = p~(x1) / Σ_{x1} p~(x1)


通过这种分步消元的方法,我们将总计算复杂度从 O(K^4) 降低到了 O(K^3)。虽然在这个小例子中提升不大,但对于大型图模型,这种节省是指数级的。
消元顺序与计算复杂度
消元算法的效率高度依赖于消元顺序。每次消元一个变量时,会生成一个连接其所有邻居的“团”(clique)。该团的大小决定了这一步的计算成本(指数于团的大小)。
- 树宽:一个图的树宽定义为:在所有可能的消元顺序中,所产生的最大团的大小的最小值减一。树宽衡量了图的“复杂程度”。
- 树的树宽为1。
- 单环图的树宽为2。
- 一个
n x n网格的树宽约为n。
- 寻找最优顺序:寻找最小树宽的消元顺序本身是一个NP难问题。但在实践中,我们可以使用启发式方法,例如每次都选择当前图中度数最小的节点进行消元,这通常能获得不错的次优顺序。
对于树宽很大的图(如大型网格),精确的消元计算仍然是不可行的,这引出了对*似推理算法的需求。
信念传播算法
上一节我们介绍了如何通过消元高效计算单个变量的边际。然而,如果我们想计算图中所有变量的边际,重复运行消元算法是低效的,因为很多中间计算是共享的。信念传播算法解决了这个问题。
从消元到信念传播
考虑一个树结构的因子图(无环)。假设我们想计算所有变量的边际。观察消元过程,我们发现:
- 计算
x1的边际时,需要消息M4->2,M3->2和M2->1。 - 计算
x2的边际时,同样需要M4->2和M3->2,以及一个新的消息M1->2。 - 消息
M4->2和M3->2在两次计算中是相同的。
因此,我们可以通过系统地计算图中所有方向上的消息,并复用它们,来一次性获得所有边际。
算法原理:在树上传递消息
信念传播算法通过节点之间传递“消息”来工作。在树结构的成对因子图(即每个因子只连接两个变量)上,算法最为简洁。
核心公式:
-
变量到变量的消息:消息
M_{j->i}(x_i)从变量j发送到邻居变量i,计算公式为:M_{j->i}(x_i) = Σ_{x_j} [ ψ_{ij}(x_i, x_j) * Π_{k ∈ N(j) \ i} M_{k->j}(x_j) ]其中:
ψ_{ij}是连接变量i和j的因子。N(j) \ i表示变量j除了i之外的所有邻居。Π表示乘积。
这个公式的含义是:为了告诉i关于j的信息,j需要汇总来自其所有其他邻居 (k) 的消息,结合它和i之间的局部关系 (ψ_{ij}),然后对j的所有可能状态求和。
-
计算边际(信念):一旦所有消息都计算完毕,变量
i的边际分布(称为信念b_i(x_i))正比于所有传入消息的乘积:b_i(x_i) ∝ Π_{k ∈ N(i)} M_{k->i}(x_i)然后需要归一化,使得
Σ_{x_i} b_i(x_i) = 1。
计算顺序(调度):
由于消息之间存在依赖关系,需要按特定顺序计算。
- 从叶子开始:叶子节点(只有一个邻居)可以立即向外发送消息,因为公式中的乘积项为空。
- 同步或异步更新:可以像涟漪一样,从所有叶子节点开始,同步地向内传递消息,直到所有消息都被计算一次(对于树,两轮即可:一轮向上到根,一轮向下从根到叶)。也可以随机初始化消息,然后迭代更新直至收敛(在树上保证收敛)。
计算复杂度:对于有 N 个变量、每个变量有 K 个状态的树,计算所有消息的总复杂度为 O(N * K^2),这是关于变量数量线性的,远优于朴素方法的指数复杂度。
与向前-向后算法的联系
著名的隐马尔可夫模型(HMM)的向前-向后算法,正是信念传播在链式树结构(一种特殊的树)上的特例。向前消息(α)和向后消息(β)分别对应信念传播中沿着链的两个方向传递的消息。
推广到一般因子树
如果树中的因子不是成对的,而是涉及多个变量(例如三元因子),算法可以推广。此时,因子图中存在两种类型的节点:变量节点和因子节点。消息也分为两种:
- 变量 -> 因子的消息:是该变量从其他相邻因子收到的消息的乘积。
- 因子 -> 变量的消息:是该因子涉及的所有其他变量传入消息的乘积,乘以因子函数本身,再对其他变量求和。
即使底层无向图有环,只要对应的因子图是无环的(树),信念传播就能给出精确的边际分布。
总结
本节课中我们一起学习了两种核心的精确推理算法:
- 消元算法:通过每次边际化一个变量并更新图结构,来高效计算单个查询变量的边际分布。其效率取决于消元顺序,并由图的树宽所刻画。
- 信念传播算法:通过在图中的节点间传递消息,能够一次性高效计算出树结构因子图上所有变量的精确边际分布。它本质上是消元算法中共享计算的系统化利用。

这两种算法都巧妙地利用了图的局部结构和分配律,将看似指数复杂的计算问题转化为可处理的规模。对于树宽较大的模型,精确计算可能仍然不可行,这为我们在后续课程中学习*似推理方法(如循环信念传播)奠定了基础。
005:连接树与循环信念传播
概述
在本节课中,我们将继续学习信念传播算法。首先,我们将探讨如何在真实的树结构模型上应用该算法,并处理数值稳定性问题。随后,我们将深入探讨如何处理包含循环的图结构模型,介绍两种主要方法:精确的连接树算法和*似的循环信念传播算法。

树结构模型中的细节与归一化
上一节我们介绍了树结构模型上的信念传播算法。本节中,我们来看看算法实现中的一些细节,特别是关于计算归一化常数 Z 和避免数值下溢的技巧。
在无向模型中,分布通常表示为势函数乘积除以归一化常数 Z:
P(X) = (1/Z) * ∏ φ_c(X_c)
其中 Z 是对所有变量联合配置求和的结果,计算复杂度是指数级的。


归一化常数 Z 的意义
Z 在许多场景下具有实际意义。例如,在一个包含观测变量 Y 和隐变量 X 的模型中,给定观测值 y_bar 时,条件分布 P(X | Y=y_bar) 的归一化常数恰好是观测数据的边际概率 P(Y=y_bar)。这个量在模型选择等任务中非常关键。
通过和积算法计算 Z
在和积算法中,通过归纳论证可以证明,将消息传播到任一节点 s 后,对该节点的消息乘积求和,即可得到全局归一化常数 Z:
Z = ∑_xs [ ∏_{k ∈ N(s)} m_{k->s}(xs) ]
其中 N(s) 是节点 s 的邻居集合。

数值稳定性问题与解决方案
然而,在实际计算中,如果模型很大,连续乘以许多小于1的概率值会导致数值下溢(结果变为0)。为了解决这个问题,标准的做法是在每次计算消息后,立即对其进行归一化,使其元素之和为1。
假设原始计算的消息为 m_prime,归一化后的消息 m 为:
m = m_prime / sum(m_prime)
我们记归一化因子为 z_local,即 z_local = sum(m_prime)。
在归一化后恢复全局 Z
尽管每一步都进行了归一化,我们仍然可以恢复全局归一化常数 Z。技巧在于,全局 Z 等于所有局部归一化因子 z_local 的乘积:
Z = ∏ z_local
在实现中,通常计算其对数值以避免溢出:
log Z = ∑ log(z_local)
这种方法保证了数值稳定性,同时允许我们在需要时计算 Z。


处理带循环的图:两种视角
到目前为止,我们方法的局限性在于假设图是树结构的。然而,许多我们感兴趣的模型都包含循环。处理带循环的图主要有两种视角:
- 连接树算法:将带循环的图转换为一个等价的树结构(称为连接树),然后在其上运行树推断算法。这种方法能得到精确的边际分布,但计算代价可能较高,因为转换后的变量域更大。
- 循环信念传播:直接在原带循环的图上运行类似信念传播的消息传递。这种方法速度更快,但得到的是对边际分布的*似。
接下来,我们将首先探讨连接树算法。
连接树算法
连接树算法的核心思想是将原始图转换为一个特殊的团树,使其满足连接树性质,从而在其上运行精确的信念传播。

从团与因子图出发
考虑一个无向图模型,其分布是定义在团(完全连接的子图)上的势函数的乘积。例如,一个包含团 {x1, x2, x3} 和 {x3, x4} 的模型。
我们可以为每个团 C 定义一个组合变量 Z_C,它代表了该团内所有原始变量的联合状态。那么,新分布可以写成这些团势函数的乘积。然而,这引入了一个问题:同一个原始变量(如 x3)可能出现在多个团中,而这些副本在采样时可能不一致。
添加一致性约束
为了确保所有团中同一变量的副本取值相同,我们需要在每对共享变量的团之间添加一致性约束势函数。这个势函数在变量取值一致时为1,否则为0。
得到树结构
如果添加约束后的图满足连接树性质,即对于任何变量,包含它的所有团在团树中形成一个连通子树,那么这些一致性约束就具备了传递性。这意味着我们只需要在相邻团之间强制执行一致性,就能保证全局一致性。这样就得到了一个树结构,可以在其上运行精确的信念传播。
三角化与连接树存在性
并非所有的团树都满足连接树性质。一个关键的理论结果是:一个图的最大团集合能构成连接树,当且仅当该图是三角化的(或称弦图)。
- 弦:图中环路上两个非相邻节点之间的边。
- 三角化图:图中所有长度大于等于4的环都至少有一条弦。
如果一个图不是三角化的,我们可以通过添加边(弦)使其三角化,但这会增大团的规模,从而增加计算复杂度。寻找最小化最大团规模的三角化顺序是一个NP难问题,但存在有效的启发式方法。
连接树算法步骤
以下是连接树算法的高级步骤:
- 三角化:向原始无向图中添加边,直到其成为三角化图。
- 识别最大团:找出三角化图中的所有最大团。
- 构建连接树:
- 以最大团为节点。
- 为每对团计算边的权重,权重为它们共享的变量数(分隔集大小)。
- 寻找一个最大权重生成树。这棵树就是满足连接树性质的连接树。
- 在连接树上运行和积算法:
- 每个团节点维护一个信念,是其势函数与来自邻居团消息的乘积。
- 消息传递规则涉及对发送团中不属于分隔集的变量进行求和(边缘化)。
- 计算成本主要取决于最大团的规模,是指数级的。
连接树算法将推断问题转化为在(可能更大的)团变量树上的精确推断。一旦获得团的边际分布,由于连接树性质,同一个原始变量在不同团中的边际分布是一致的。

循环信念传播

连接树算法虽然精确,但在稠密图上可能计算量过大。循环信念传播提供了一种更轻量级的*似方法。
基本思想
循环信念传播直接忽略图的循环结构,将原本为树推导出的和积(信念传播)消息更新规则,反复应用于带循环的图上。
- 每个变量节点根据来自其他邻居的消息计算发送给下一个邻居的消息。
- 每个因子节点也根据传入的消息计算外发的消息。
- 消息在图中循环传递。
由于存在循环,消息更新可能不会像在树上那样经过有限步停止。我们通常迭代执行更新,直到消息收敛到某个固定点,或者达到预设的迭代次数。


效果与影响
尽管缺乏理论保证,循环信念传播在实践中往往表现得出奇得好,能给出非常准确的边际分布*似。它在许多领域取得了巨大成功,最著名的例子是纠错码译码。


在20世纪90年代,使用基于图形模型的码(如Turbo码、LDPC码)并采用循环信念传播进行译码,其性能远远超过了之前数十年的研究成果,接*香农理论极限,这被认为是编码领域的一场“革命”。
循环信念传播的强大之处在于,它以一种分布式、迭代的方式有效地利用了图中的局部约束信息,即使存在全局循环。
总结
本节课中我们一起学习了处理带循环图模型的两种核心策略。
- 连接树算法通过三角化图和构建最大权重生成树,将原图转换为一个树结构,从而允许进行精确推断。其计算成本取决于三角化后产生的最大团规模。
- 循环信念传播则是一种*似方法,它直接在图中的节点和因子间迭代传递消息。尽管是*似且收敛性不保证,但在包括现代纠错码在内的许多实际应用中非常有效。

这两种方法构成了概率图模型推断中处理复杂结构的基础工具。
006:学习有向图模型
概述
在本节课中,我们将继续学习有向图模型的参数估计方法。我们将首先回顾最大似然估计和贝叶斯估计的基本概念,然后探讨如何将这些方法应用于有向图模型,特别是当模型中的节点具有父节点时。我们将学习如何处理参数共享、稀疏数据以及如何利用先验知识进行正则化。
循环信念传播算法回顾
上一节我们介绍了循环信念传播算法。本节中,我们来看看该算法的一些理论性质和应用实例。
循环信念传播算法是一个简单的想法,其名称来源于在具有环或循环的图上运行标准的信念传播算法。尽管它通常不再给出精确答案,但它是一个具有良好性质的*似算法。
循环信念传播的每一步都是局部的消息更新,仅依赖于图中该节点的邻居。即使图不是树,这种局部消息更新仍然可以进行,但这使得信念传播给出精确边缘分布的推导不再成立。
循环信念传播在某些问题上非常有效。例如,在从消息中去除噪声的应用中,它表现良好。
理解循环信念传播何时有效
首先需要注意的是,在一个有向图模型中,如果一个叶节点未被观测,将其边缘化是微不足道的。只需从乘积中删除相应的因子即可。这是因为这些节点没有子节点,其条件分布求和后结果为1。
如果我们将一个有向图模型转换为因子图并运行循环信念传播,即使图中存在环,算法也能自动处理。例如,对于未被观测的叶节点,其发出的消息将是常数,不会影响其他更新,其效果等同于从模型中移除了该节点。
更一般地,如果一个节点及其所有后代都未被观测,那么该节点向其父节点发送的消息将是无信息的常数。这是正确的,因为未被观测的变量不提供任何信息。因此,对于某些有向图模型,循环信念传播实际上可以精确计算先验的边缘分布。
然而,这并不意味着它总是精确的。如果某些节点被观测,循环信念传播通常只能产生可能准确的后验边缘分布*似。
应用实例与收敛性
在医疗诊断等模型中,通常有数百种疾病和数千种可能的发现。对于一个病人,通常只观测到部分发现。如果所有发现都未被观测,循环信念传播会返回正确的疾病先验概率。如果只观测到一个发现,循环信念传播也能给出正确的后验,因为边缘化掉未观测发现后,图结构变为树。
然而,当有多个观测发现时,循环信念传播通常不能保证给出精确结果,其结果是*似的。尽管如此,在这类模型中,*似结果通常相当好。
早期研究表明,在具有随机生成条件概率的较小模型上,循环信念传播的估计值与真实边缘概率非常接*,优于使用有限样本的蒙特卡洛方法(如似然加权法)。
然而,循环信念传播并不总是收敛。在某些真实模型实例中,算法可能无法收敛,信念值会进入极限环振荡。这通常与模型中的极端概率(接*0或1)有关。
理论基础
对于最简单的非树情况——只有一个环的图,理论分析表明:
- 无论势函数如何,循环信念传播都有唯一的固定点。
- 只要所有势函数严格为正,算法保证收敛。如果势函数中存在零值(即某些状态组合不可能),则可能出现振荡。
- 在此单环图上,循环信念传播的估计不精确,但具有一个有趣的性质:概率较高的状态总是与真实边缘分布匹配。这意味着,如果真实概率高于0.5,循环信念传播的估计值也会高于0.5。
- 更快的收敛速度通常意味着更好的边缘分布*似。
对于具有多个环的更复杂图,可以通过“计算树”的概念来分析循环信念传播。其直觉是,如果图中的环很长,依赖关系在环上传播时会减弱,因此*似效果会更好。
有理论保证,只要边依赖足够弱,即使图中有许多环,循环信念传播也能保证收敛。这里的“依赖强度”与势函数矩阵中最大项与最小项的比值有关。如果这个比值过大(例如存在零值),收敛性可能无法保证。
这些理论解释了为什么在作业中使用循环信念传播进行*似是合理的,因为在许多情况下可以期望*似是准确的。
参数估计:最大似然与贝叶斯方法
现在,我们将转向一个新的话题:图形模型的参数从何而来?我们将讨论如何从数据中估计模型的参数。

最大似然估计回顾

假设我们有 L 个独立同分布的观测数据 x^(1), x^(2), ..., x^(L),它们来自某个参数为 θ 的未知分布族 P(x | θ)。
一个估计量是根据数据猜测参数 θ 的函数。最大似然估计是一种直观的参数估计方法,它选择使观测数据出现概率最大的参数。
具体地,似然函数是给定参数下数据的联合概率:∏_{l=1}^{L} P(x^(l) | θ)。最大似然估计量 θ_hat 是最大化该似然函数的参数值。由于对数函数是单调的,我们通常最大化对数似然函数:∑_{l=1}^{L} log P(x^(l) | θ)。
最大似然估计具有一些良好的性质,例如相合性(随着数据量增加,估计值收敛于真实参数)和渐*有效性。
对于许多模型,对数似然函数是参数的光滑连续函数。寻找最大值的一个标准方法是求导并令导数为零。
简单例子:伯努利分布
对于伯努利分布(二元变量),参数 θ 表示取值为1的概率。给定数据,对数似然为 ∑_{l} [ x^(l) log θ + (1 - x^(l)) log(1 - θ) ]。令其关于 θ 的导数为零,解得最大似然估计为 θ_hat = (∑ x^(l)) / L,即数据中1出现的比例。
简单例子:范畴分布
对于范畴分布(K个类别的分类),参数是一个K维向量 θ = (θ_1, ..., θ_K),满足 θ_k ≥ 0 且 ∑ θ_k = 1。给定数据,令 n_k 为类别k出现的次数,则对数似然为 ∑_{k} n_k log θ_k。这是一个在单纯形上的约束优化问题。
利用拉格朗日乘子法求解,得到最大似然估计为 θ_k_hat = n_k / L,即每个类别的经验频率。
当类别数K很大或数据量有限时,某些类别可能从未出现,导致其最大似然估计概率为零。这可能是不可取的,因此需要正则化方法,如贝叶斯估计。
贝叶斯参数估计
贝叶斯方法在参数估计中引入了先验分布 P(θ),表示在见到数据之前对参数的信念。根据贝叶斯规则,参数的后验分布为:
P(θ | x) = [P(θ) P(x | θ)] / P(x)。
后验分布包含了数据和先验的全部信息。有时我们需要一个点估计,两个常用的选择是:
- 最大后验估计:选择后验概率最大的参数:
θ_MAP = argmax_θ P(θ | x)。 - 后验均值估计:选择后验分布的期望:
θ_Mean = E[θ | x] = ∫ θ P(θ | x) dθ。
后验均值在最小化均方误差的意义下是最优的。
简单例子:伯努利分布(贝叶斯)
对于伯努利分布,似然函数为 θ^{#Heads} (1-θ)^{#Tails}。假设先验为 θ 在 [0,1] 上的均匀分布,则后验分布正比于 θ^{#Heads} (1-θ)^{#Tails}。这正是Beta分布的形式:P(θ) ∝ θ^{α-1} (1-θ)^{β-1}。
均匀分布对应 α=1, β=1 的Beta分布。更一般地,如果我们使用参数为 (α, β) 的Beta分布作为先验,那么后验分布将是另一个Beta分布,参数更新为 (α + #Heads, β + #Tails)。这种先验与似然函数共轭的性质称为共轭性。
后验均值为 (α + #Heads) / (α + β + L)。这可以看作在经验计数上加了“伪计数” α 和 β 后再归一化。当使用均匀先验 (α=β=1) 时,得到“加一*滑”估计量,确保概率估计不会为零或一。
简单例子:范畴分布(贝叶斯)
范畴分布的共轭先验是狄利克雷分布:P(θ) ∝ ∏_{k=1}^{K} θ_k^{α_k - 1},其中 θ 位于K维单纯形上。狄利克雷分布可以产生均匀、集中或稀疏(偏向单纯形角落)的先验。
给定数据计数 n_k,后验分布仍是狄利克雷分布,参数更新为 (α_1 + n_1, ..., α_K + n_K)。后验均值为 θ_k = (α_k + n_k) / (∑_j α_j + L)。
稀疏先验(α_k < 1)在图形模型中很有用,因为它可以捕捉变量与其父节点之间可能存在的关系稀疏性。
有向图模型的参数估计
现在,我们将上述概念连接到有向图模型的参数估计。
模型分解与独立学习
一个有向图模型的联合分布分解为每个节点给定其父节点的条件分布的乘积:P(x | θ) = ∏_{i=1}^{n} P(x_i | x_{π(i)}, θ_i)。这里 θ_i 是定义节点 i 条件分布的参数。
因此,整个模型的(对数)似然函数是每个节点(对数)条件概率的和:log P(x | θ) = ∑_{i=1}^{n} log P(x_i | x_{π(i)}, θ_i)。
如果我们进一步假设参数的先验分布也在各节点上分解:P(θ) = ∏_{i=1}^{n} P(θ_i),那么后验分布的对数也是各节点项的和。
关键点:由于这种可加性分解,我们可以独立地为图中的每个节点解决参数估计问题(最大似然或贝叶斯)。学习有向图模型的参数,本质上就是学习如何基于其父节点预测每个变量。
处理训练数据集
假设我们有 L 个独立同分布的训练样本(例如,L个病人,每个病人对应一个图实例)。整个数据集的似然是每个样本似然的乘积。取对数后,我们可以交换求和顺序:
log P({x^(l)} | θ) = ∑_{i=1}^{n} [ ∑_{l=1}^{L} log P(x_i^(l) | x_{π(i)}^(l), θ_i) ]。
这再次证实了我们可以为每个节点 i 独立地最大化其自己的数据项 ∑_{l} log P(x_i^(l) | x_{π(i)}^(l), θ_i)。
参数共享
在实际应用中,我们可能希望在不同节点或不同时间步共享参数。例如,在隐马尔可夫模型中,状态转移概率 P(z_t | z_{t-1}) 在所有时间步 t 可能是相同的。
这很容易实现:我们为每种类型的条件分布(如“状态转移”、“观测发射”)定义一组参数。然后,将所有属于该类型的节点的数据聚合起来,用于估计这组共享参数。
具体实施步骤
- 无父节点的节点:其分布是简单的范畴分布。直接应用前面介绍的伯努利/范畴分布的估计方法。
- 有父节点的节点:需要学习一个条件概率表。对于父节点变量的每一种可能取值组合,都需要学习一个独立的范畴分布。
- 问题:如果父节点很多,组合数会呈指数增长,导致需要估计的参数过多,并且数据可能非常稀疏(许多组合没有观测数据)。
- 解决方案:需要更紧凑的参数化方法(例如,逻辑回归、神经网络等),我们将在后续课程中讨论。

总结
本节课中,我们一起学习了有向图模型的参数估计。我们首先回顾了循环信念传播算法的理论和应用,了解了其*似性质、收敛条件以及在某些情况下的良好表现。接着,我们系统回顾了参数估计的两种基本框架:最大似然估计和贝叶斯估计,并通过伯努利分布和范畴分布的实例加深理解。最后,我们将这些方法应用于有向图模型,展示了如何利用模型的因子分解性质,将全局参数估计问题分解为每个节点独立的局部估计问题,并简要讨论了参数共享和处理父节点众多时面临的挑战。这为我们后续学习更复杂的参数化方法和学习算法奠定了基础。
008:学习无向图模型与指数族


在本节课中,我们将要学习如何从数据中学习无向图模型的参数。我们将看到,无向图模型的学习自然地与统计学和概率机器学习中广泛使用的指数族概率分布联系起来。理解这种联系对于高效地学习和推断至关重要。
指数族概率分布简介
上一节我们介绍了无向图模型的基本形式。本节中,我们来看看一种强大的概率分布框架——指数族。
一个指数族概率分布可以写成以下形式:

其中:
- \(\theta\) 是一个 \(D\) 维向量,称为自然参数。
- \(\phi(x)\) 是一个 \(D\) 维向量,称为充分统计量或特征向量。
- \(\nu(x)\) 是一个与参数无关的参考测度,通常为1。
- \(Z(\theta)\) 是配分函数,用于确保概率和为1,定义为 \(Z(\theta) = \int \nu(x) \exp(\theta^T \phi(x)) dx\)。
- 参数 \(\theta\) 的取值范围 \(\Theta\) 是使得 \(Z(\theta)\) 有限的集合。
这个形式的核心是,概率的对数是参数 \(\theta\) 和特征 \(\phi(x)\) 的线性函数(加上一个对数归一化项)。
为什么指数族如此重要?
以下是研究指数族的几个关键原因:
- 统一框架:它同时涵盖了众多常见的概率分布,如伯努利、分类、泊松、指数、高斯(正态)、伽马、威沙特、贝塔、狄利克雷分布等。
- 最大似然估计简单:对于任何指数族分布,最大似然估计(MLE)的解总是具有相同的形式:让模型特征的期望值等于数据特征的样本均值。
- 共轭先验存在:指数族分布存在共轭先验,这使得贝叶斯学习和分析变得简单。
- 最大熵解释:在满足给定特征期望值的所有分布中,指数族分布是“最随机”或“最无偏”的,即它是最大熵分布。
- 充分性:数据可以被压缩为有限维的统计量 \(\phi(x)\),而不会丢失用于学习或推断的信息。
常见分布的指数族形式
为了更好地理解,让我们看几个具体例子。
伯努利分布



伯努利分布 \(p(x; \mu) = \mu^x (1-\mu)^{1-x}\) 可以写成指数族形式。
通过对数变换和代数重组,我们可以得到:
其中,自然参数 \(\theta\) 是对数几率:\(\theta = \log(\frac{\mu}{1-\mu})\)。
对应的特征函数是 \(\phi(x) = x\)。
从 \(\theta\) 恢复 \(\mu\) 的函数是逻辑函数(sigmoid):\(\mu = \sigma(\theta) = \frac{1}{1+e^{-\theta}}\)。
分类分布
类似地,分类分布 \(p(x=k; \mu) = \mu_k\) 可以写成:
其中,\(\theta_k\) 是自然参数,特征是指示函数 \(\phi_k(x) = \mathbb{I}[x=k]\)。
从 \(\theta\) 恢复 \(\mu\) 的函数是 softmax 函数:\(\mu_k = \frac{e^{\theta_k}}{\sum_j e^{\theta_j}}\)。

高斯分布
多元高斯分布 \(p(x; \mu, \Sigma) = \mathcal{N}(x; \mu, \Sigma)\) 也可以写成指数族形式。
更方便的参数化是使用自然参数:\(\eta = \Sigma^{-1}\mu\) 和 \(\Lambda = \Sigma^{-1}\)(精度矩阵)。
那么分布可以写成:
这里的特征向量 \(\phi(x)\) 包含了 \(x\) 的各分量、各分量的*方以及各分量之间的乘积项。
指数族与无向图模型的联系
现在,我们回到无向图模型,看看它们如何与指数族联系起来。


回想一下,一个因子图或无向图模型定义为:
其中 \(\psi_c(x_c)\) 是非负的势函数。

为了从数据中学习模型,我们需要可调的势函数。一个确保非负性的方便参数化方法是:
这里,\(\phi_c(x_c)\) 是我们定义的、依赖于因子 \(c\) 所关联变量的特征向量。\(\theta_c\) 是对应的参数向量。
将这种参数化代入整体分布:
其中,\(\theta\) 是所有 \(\theta_c\) 拼接成的向量,\(\phi(x)\) 是所有 \(\phi_c(x_c)\) 拼接成的向量。这正是指数族的形式。
因此,通过将因子参数化为指数形式,整个无向图模型就成为一个指数族分布。特征 \(\phi(x)\) 的选择决定了模型的表达能力,而因子图的结构(哪些变量出现在同一个因子中)则反映了模型所隐含的条件独立性假设。
指数族的最大似然学习与凸性
理解了联系之后,我们来看如何学习指数族(即无向图模型)的参数。我们将使用最大似然估计。
对于指数族 \(p(x;\theta) = \exp(\theta^T \phi(x) - A(\theta))\)(这里 \(A(\theta) = \log Z(\theta)\) 称为对数配分函数),其对数似然函数为:
其中 \(x^{(1)}, \dots, x^{(L)}\) 是 \(L\) 个独立观测数据。
为了最大化似然,我们通常最小化负对数似然 \(-\ell(\theta)\)。指数族有一个非常好的性质:
定理:对数配分函数 \(A(\theta)\) 是凸函数。
证明:可以计算 \(A(\theta)\) 的梯度和海森矩阵:
- 梯度:\(\nabla_\theta A(\theta) = \mathbb{E}_{p(x;\theta)}[\phi(x)]\)
- 海森矩阵:\(\nabla_\theta^2 A(\theta) = \text{Cov}_{p(x;\theta)}[\phi(x)]\)
由于协方差矩阵总是半正定的,所以 \(A(\theta)\) 是凸函数。


因此,负对数似然 \(-\ell(\theta)\) 是一个线性项(凸)减去一个凸函数,整体仍然是凸函数。这意味着优化问题没有局部最优,只有全局最优,使用梯度下降等方法可以可靠地找到最优解。

最大似然解的条件

令梯度为零以求最大似然解 \(\hat{\theta}_{MLE}\):
这导出了著名的矩匹配条件:
最大似然估计要求模型特征的期望值等于数据特征的样本均值。
学习中的计算

在实际的梯度下降中,每一步都需要计算梯度:
计算数据均值 \(\frac{1}{L}\sum_i \phi(x^{(i)})\) 是直接的。困难的部分在于计算模型期望 \(\mathbb{E}_{p(x;\theta)}[\phi(x)]\),这通常需要对当前概率分布 \(p(x;\theta)\) 进行推断(例如,计算边际概率)。这解释了为什么推断是学习的基础。
对于树状结构的图,我们可以使用和积算法高效计算边际和期望。对于带环的图,则需要使用*似推断方法(如循环置信传播、 junction tree 算法等)。





正则化与模型选择

当模型有很多特征(即参数很多)时,容易过拟合。正则化是必要的。

在指数族中,参数 \(\theta\) 为零有特殊意义:
- 对于伯努利分布,\(\theta=0\) 对应 \(\mu=0.5\)(最不确定的状态)。
- 对于交互项(如 \(\theta_{12}x_1x_2\)),\(\theta_{12}=0\) 意味着变量 \(x_1\) 和 \(x_2\) 独立。
- 一般来说,若某个因子对应的参数 \(\theta_c=0\),则势函数 \(\psi_c = \exp(0)=1\),相当于从模型中移除了该因子。
因此,一个合理的先验是鼓励参数 \(\theta\) 接*零,这对应于鼓励更简单、更*滑、更独立的模型。

L2 正则化(高斯先验)


使用零均值高斯先验 \(p(\theta) \propto \exp(-\frac{\alpha}{2} \|\theta\|_2^2)\) 等价于在目标函数中添加 L2 惩罚项:
其中 \(\lambda\) 是正则化强度。这会使参数向零收缩,但通常不会恰好为零。

L1 正则化(拉普拉斯先验)与稀疏性
使用拉普拉斯先验 \(p(\theta) \propto \exp(-\alpha \|\theta\|_1)\) 等价于添加 L1 惩罚项:
L1 正则化倾向于产生稀疏解,即许多参数 \(\theta_c\) 恰好为零。这实现了自动特征选择或图结构学习:零参数对应的特征(或因子)被从模型中剔除,从而学习到了一个更稀疏的图结构。
应用示例:词共现图学习
一个经典应用是学习单词在文档中的共现关系。将每个文档表示为一个二元向量,指示100个常见单词是否出现。模型为每个单词对 \((j, k)\) 引入一个特征 \(\phi_{jk}(x) = x_j x_k\) 和参数 \(\theta_{jk}\),用于捕捉共现关系。
使用 L1 正则化逻辑回归(等价于上述指数族模型)学习参数后,许多 \(\theta_{jk}\) 会变为零。非零的 \(\theta_{jk}\) 定义了单词之间的“边”,从而形成一个图。这个图可以揭示语义相关的单词群(如体育、宗教、计算机术语等),正参数表示单词倾向于共同出现,负参数表示它们互斥。
总结
本节课中我们一起学习了:
- 指数族分布:一种形式为 \(p(x;\theta) \propto \exp(\theta^T \phi(x))\) 的强大概率分布框架,涵盖了众多常见分布。
- 与无向图模型的联系:通过将势函数参数化为 \(\psi_c(x_c) = \exp(\theta_c^T \phi_c(x_c))\),整个无向图模型成为一个指数族分布。特征定义表达能力,图结构定义条件独立关系。
- 凸性与最大似然学习:指数族的负对数似然是凸函数,保证了全局最优。最大似然解满足“矩匹配”条件:模型特征的期望等于数据特征的样本均值。
- 学习算法:通常使用梯度下降。每一步都需要在当前模型下进行推断以计算特征期望。
- 正则化:为防止过拟合,可以对参数施加先验。L2正则化使参数收缩,L1正则化能产生稀疏解,自动进行特征选择或图结构学习,这是学习图模型结构的一种有效方法。

理解指数族为学习和分析无向图模型(以及许多其他概率模型)提供了一个统一而强大的理论基础。
009:信息理论与树结构学习

在本节课中,我们将首先介绍信息论的基础知识,这些知识在本课程后续的多个主题中都会出现。之后,我们将探讨如何利用信息论的思想,从数据中学习具有树状结构的图模型。
信息论基础
上一节我们概述了课程内容,本节中我们来看看信息论的起点——熵。熵是衡量随机变量随机性的度量,可以理解为不确定性的多少。
对于一个离散随机变量 X,其熵的定义如下:
公式:H(X) = - Σ P(x) log₂ P(x)
其中,P(x) 是随机变量的概率质量函数。熵的单位是比特。熵具有非负性,即 H(X) ≥ 0。随机变量的熵越大,其*均不确定性就越高,也就越难预测。

熵也可以等价地写为 H(X) = E[-log P(x)],其中 E 表示期望值。在计算熵时,我们约定 0 log 0 = 0。
伯努利分布的熵
让我们看一个特例。对于一个参数为 p 的伯努利随机变量(例如抛硬币,正面概率为 p),其熵为:
公式:H(p) = -p log₂ p - (1-p) log₂ (1-p)

当 p = 0.5 时,熵达到最大值 1 比特,即公*硬币具有最大的随机性。当硬币有偏向性(p 接* 0 或 1)时,熵会减小。当结果完全确定(总是正面或总是反面)时,熵趋*于零。熵函数 H(p) 是关于 p 的凹函数。
均匀分布的熵
对于一个在 M 个值上均匀分布的随机变量,其熵为 log₂ M。这是具有 M 个结果的离散随机变量所能达到的最大熵。任何非均匀分布(某些结果更可能出现)都会导致熵减小。
联合熵与条件熵
我们常常需要讨论多个随机变量。对于两个随机变量 X 和 Y,其联合熵定义为:

公式:H(X, Y) = - Σ Σ P(x, y) log₂ P(x, y)
这可以理解为将 (X, Y) 视为一个组合随机变量后的熵。
观察会影响熵。假设我们观察到 X 的取值,那么在给定 X 的条件下,Y 的条件熵定义为使用条件分布 P(Y|X) 计算的熵。通常,条件熵 H(Y|X) 与边际熵 H(Y) 不同,它可能更大或更小。

然而,我们常常在尚未观察到 X 时,就想知道在观察到 X 后,Y 的熵的期望减少量。这引出了条件熵的另一个定义:
公式:H(Y|X) = Σ P(x) H(Y|X=x)

这表示在可能观察到的 X 值上,对条件熵进行加权*均。经过代数变换,这等价于 H(Y|X) = E[-log P(Y|X)],期望是关于 X 和 Y 的联合分布取的。
条件熵的定义使得一个直观的链式法则成立:
公式:H(X, Y) = H(X) + H(Y|X)
这表明,两个变量的联合不确定性等于第一个变量的不确定性加上在已知第一个变量后第二个变量的剩余不确定性。由于 H(X) 和 H(Y|X) 都非负,因此增加随机变量只会增加(或保持不变)总的不确定性。
互信息
第三个重要概念是互信息,它衡量一个随机变量能提供关于另一个随机变量的信息量。互信息 I(X; Y) 定义为观察 X 后,Y 的熵的期望减少量:
公式:I(X; Y) = H(Y) - H(Y|X)
经过推导,互信息也可以表示为:
公式:I(X; Y) = Σ Σ P(x, y) log₂ [P(x, y) / (P(x)P(y))]
从这个形式可以看出,互信息关于 X 和 Y 是对称的,即 I(X; Y) = I(Y; X)。它衡量了两个变量之间的相互依赖程度。
互信息具有以下重要性质:
- 当且仅当 X 和 Y 相互独立时,I(X; Y) = 0。
- 只要 X 和 Y 不独立,I(X; Y) > 0。
因此,互信息是衡量两个变量是否独立的一个很好的定量指标。在统计学中,许多检验两个变量独立性的经典方法,本质上都是估计它们之间的互信息。
互信息在特征选择中的应用

回到机器学习中的特征选择问题。一个经典有效的特征选择方法是计算每个特征 X_d 与类别标签 Y 之间的互信息 I(X_d; Y)。一个好的特征是那些能显著减少类别标签不确定性的特征,即互信息大的特征。
以下是选择高互信息特征的一个理论依据:假设我们使用特征 X_d 以最优方式(例如,根据后验概率预测)预测类别 Y,那么预测错误率的界限与条件熵 H(Y|X_d) 有关。如果给定某个特征后,类别标签的条件熵很小,那么基于该特征的分类器将会很准确。
熵与互信息的韦恩图表示
熵、条件熵和互信息之间的关系可以用韦恩图来形象地总结:
- 两个圆圈的面积分别代表 H(X) 和 H(Y)。
- 两个圆圈的并集面积代表联合熵 H(X, Y)。
- 两个圆圈的交集面积代表互信息 I(X; Y)。
- 条件熵 H(X|Y) 是圆圈 X 中不属于交集的部分,H(Y|X) 是圆圈 Y 中不属于交集的部分。

从信息论到图模型学习
现在我们将转向图模型的学习,特别是学习图的结构。我们会发现,当开始思考如何学习图模型结构时,互信息等概念会自然地出现在目标函数中。
我们将使用略微不同的记号。现在,我们将熵写为 H(P),其中 P 是概率分布的参数。此外,我们引入另一个重要概念:相对熵,也称为 KL 散度。

KL 散度衡量两个概率分布 P 和 Q(定义在相同样本空间上)之间的“距离”:
公式:D_KL(P || Q) = Σ P(x) log₂ [P(x) / Q(x)]
KL 散度总是非负的,并且当且仅当 P = Q 时为零。但它不是真正的距离,因为它不对称。
有趣的是,互信息可以表示为联合分布 P(X,Y) 与其边际分布乘积 P(X)P(Y) 之间的 KL 散度:
公式:I(X; Y) = D_KL( P(X,Y) || P(X)P(Y) )
这与之前基于条件熵的定义是等价的。
树结构图模型的学习
上一节我们介绍了信息论的核心概念,本节中我们来看看如何利用这些概念学习树结构的图模型。我们将采用一种与之前 L1 正则化不同的方法:我们约束模型结构必须是一棵树,然后从所有可能的树中找到最优的那一棵。
首先,我们需要了解树结构模型的概率分解方式。
树结构模型的分解
对于任何树结构模型,我们总可以通过选择一个节点作为根,将其写成有向分解的形式:
公式:P(x) = P(x_root) Π_{t≠root} P(x_t | parent(x_t))
由于树没有环,这总是可行的。通过代数变换,我们可以得到一个与方向无关的规范分解形式:
公式:P(x) = [Π_s Q_s(x_s)] * [Π_{(s,t)∈E} (Q_{st}(x_s, x_t) / (Q_s(x_s)Q_t(x_t)) )]
这里,Q_s 是节点 s 的边际分布,Q_{st} 是边 (s, t) 上两个节点的联合边际分布。这个分解可以看作是一种无向的、规范化的参数化方式,其整体归一化常数为 1。
如果我们选择的 Q_s 和 Q_{st} 是自洽的(即 Q_{st} 对其中一个变量求和能得到对应的 Q_s),那么它们就是某个分布 P 的真实边际分布。
树结构模型的参数估计
这个规范分解将帮助我们思考如何从数据中估计树结构模型的参数。
假设我们有一个固定的树结构 T,并且有 L 个观测数据。我们定义经验分布:
- \hat{P}s(a) = (1/L) Σ^L δ(x_s^{(l)} = a),即变量 X_s 取值为 a 的经验频率。
- \hat{P}{st}(a, b) = (1/L) Σ^L δ(x_s^{(l)} = a, x_t^{(l)} = b),即变量对 (X_s, X_t) 取值为 (a, b) 的经验频率。
我们的目标是进行最大似然估计。目标函数是数据的*均对数似然。我们可以将树模型的分布视为一个指数族分布,其特征函数包括每个节点的指示函数和每条边上变量对的联合指示函数。
根据指数族分布的性质,最大似然估计会匹配这些特征的经验期望。因此,最优参数可以直接设定为:
公式:Q_s^ = \hat{P}s, Q^ = \hat{P}_{st}**
也就是说,对于给定的树,最大似然估计就是让每个节点的边际分布和每条边的联合边际分布完全匹配数据的经验分布。
最优似然值与互信息
现在,让我们计算在这个最优参数下的对数似然值。将 Q_s^* 和 Q_{st}^* 代入对数似然公式并整理项,我们得到:
最大对数似然值 = - Σ_s H(\hat{P}s) + Σ I(\hat{P}_{st})
其中,H(\hat{P}s) 是基于经验分布计算的变量 X_s 的熵,I(\hat{P}) 是基于经验分布计算的变量 X_s 和 X_t 之间的互信息。


这个结果非常直观:
- - Σ_s H(\hat{P}_s):所有节点的熵之和的负值。节点的熵越大(数据越随机、越不确定),这部分对似然的贡献就越小(使似然值降低)。
- Σ_{(s,t)∈E} I(\hat{P}_{st}):树中所有边的互信息之和。变量之间的依赖关系(互信息)越强,这部分对似然的贡献就越大(使似然值升高)。

最优树结构选择

对于任何一棵树,在拟合其最优参数后,我们都能得到上述形式的对数似然值。现在,假设我们固定变量集,想要在所有可能的树结构中优化选择。
注意,公式中的第一项 - Σ_s H(\hat{P}_s) 对于所有树都是相同的,因为它只依赖于单个变量的经验分布,与树结构无关。因此,最大化对数似然等价于最大化第二项:
最大化:Σ_{(s,t)∈E} I(\hat{P}_{st})
也就是说,我们需要找到一个树结构(包含 n-1 条边),使得它所包含的边的经验互信息之和最大。
这转化为了一个经典的图算法问题:最大权重生成树。我们有一个包含 n 个节点的完全图,每条边 (s, t) 的权重就是经验互信息 I(\hat{P}_{st})。我们需要找到一个无环的连通子图(即一棵树),使得其边的权重之和最大。
尽管可能的树的数量极其庞大,但这是一个可以高效求解的问题。可以使用贪心算法(如 Kruskal 算法)来找到最优解:
算法步骤:
- 将所有边按互信息值从大到小排序。
- 初始化一个空的边集 T(最终存储生成树的边)。
- 按顺序检查每条边:
- 如果将该边加入 T 不会形成环,则将其加入 T。
- 否则,跳过该边。
- 当 T 中包含 n-1 条边时,算法停止。此时 T 即为最大权重生成树。
这个算法的复杂度与边数大致呈线性关系,因此对于中等规模的问题非常高效。通过这种方法,我们可以快速地为数据集找到最优的树结构图模型。
总结
本节课中我们一起学习了信息论的基础知识及其在图模型学习中的应用。
我们首先介绍了熵、联合熵、条件熵和互信息的概念,理解了它们如何量化随机性和变量间的依赖性。我们看到互信息如何自然地应用于特征选择等机器学习任务。
接着,我们将焦点转向树结构图模型的学习。我们推导了树模型的规范分解形式,并展示了在给定树结构下,最大似然估计具有简单的闭式解。更重要的是,我们发现最大化树模型的对数似然,等价于在变量间寻找一个最大权重生成树,其中边的权重就是变量对的经验互信息。这提供了一个高效且优雅的算法来从数据中学习最优的树结构图模型。

这种方法与之前讨论的带 L1 正则化的方法形成了对比:它通过硬约束(必须是树)来获得稀疏性和可解释性,并利用互信息这一信息论概念直接指导结构学习。
010:期望最大化算法


在本节课中,我们将要学习期望最大化算法。这是一种在统计学和机器学习中广泛使用的通用方法,尤其适用于从观测数据不完整的场景中学习图形模型。

算法概述
期望最大化算法用于处理模型参数未知,且训练数据中部分变量缺失的情况。算法通过迭代两个步骤来估计参数:E步(期望步)和M步(最大化步)。
预备知识:凸函数与期望
在深入EM算法之前,我们需要了解凸函数与期望运算的一个重要性质。
对于任意凸函数 f 和随机变量 X,以下不等式成立:
f(E[X]) ≤ E[f(X)]
其中 E[·] 表示期望值。这意味着函数在期望值处的值,小于或等于函数值的期望。
相反,对于凹函数(如对数函数),不等式方向相反:
log(E[X]) ≥ E[log(X)]
这个性质,即詹森不等式,是推导EM算法的关键。
EM算法推导

我们的目标是最大化观测数据 X 在给定参数 θ 下的对数似然 log P(X|θ)。问题在于,模型包含未观测到的隐变量 Z。
观测数据的似然可以写为对隐变量的边际化:
P(X|θ) = Σ_Z P(X, Z|θ)
为了处理这个难以直接优化的求和,我们引入一个辅助分布 Q(Z),并利用詹森不等式构建一个下界:
log P(X|θ) = log Σ_Z Q(Z) [P(X, Z|θ) / Q(Z)] ≥ Σ_Z Q(Z) log [P(X, Z|θ) / Q(Z)]

我们将这个下界定义为 L(θ, Q):
L(θ, Q) = Σ_Z Q(Z) log P(X, Z|θ) - Σ_Z Q(Z) log Q(Z)
其中,第一项是期望对数似然,第二项是分布 Q 的熵 H(Q)。
EM算法步骤
EM算法本质上是关于下界 L(θ, Q) 的坐标上升法。

以下是算法的具体步骤:

- 初始化参数:随机初始化参数
θ^(0)。 - E步(期望步):固定参数
θ,寻找使下界L最大的分布Q。可以证明,最优解就是给定当前参数和观测数据时,隐变量的后验分布:
Q(Z) = P(Z|X, θ)
因此,E步需要计算后验概率P(Z|X, θ)。 - M步(最大化步):固定分布
Q,寻找使下界L最大的参数θ。由于熵项H(Q)与θ无关,这等价于最大化期望对数似然:
θ_new = argmax_θ Σ_Z Q(Z) log P(X, Z|θ) - 迭代:交替执行E步和M步,直到参数收敛。
每次迭代都会提升下界 L,从而也提升真实对数似然 log P(X|θ),保证算法收敛。
应用于指数族分布


当联合分布 P(X, Z|θ) 属于指数族时,M步有简洁的形式。

指数族分布的形式为:
P(X, Z|θ) = exp(θ^T φ(X, Z) - A(θ))
其中 φ(X, Z) 是充分统计量,A(θ) 是对数配分函数。
在这种情况下,M步的最大化问题导出的解,是令模型参数的期望充分统计量与基于后验 Q 计算的经验期望充分统计量相匹配:
E_P[φ(X, Z)] = (1/L) Σ_{l=1}^L Σ_Z Q(Z|X_l) φ(X_l, Z)
这通常可以通过简单的计算完成。
应用于图形模型

将EM算法应用于具有固定结构的图形模型时,流程非常清晰。
- 模型设定:假设我们有一个因子图,每个因子关联一个指数族分布和参数
θ。我们有L个训练样本,每个样本中部分变量X被观测到,部分变量Z缺失。 - E步:对于每个训练样本,在给定观测
X和当前参数θ的条件下,计算所有隐变量Z的后验分布P(Z|X, θ)。这需要运行推断算法(如信念传播、联结树算法)来获得图中各因子的边际概率。 - M步:利用E步计算得到的后验边际,计算每个因子的期望充分统计量(在所有训练样本上*均)。然后更新参数
θ,使模型的期望充分统计量与这些计算值相匹配。

应用于隐马尔可夫模型示例



隐马尔可夫模型是EM算法的一个经典应用场景。


- 模型参数:包括初始状态概率
π、状态转移概率A和观测发射概率B。 - E步:在给定观测序列和当前参数下,计算隐状态的后验分布。这需要运行前向-后向算法来获得:
- 单个时间点状态的边际概率
P(Z_t|X, θ)。 - 相邻时间点状态对的边际概率
P(Z_t, Z_{t+1}|X, θ)。
- 单个时间点状态的边际概率
- M步:利用E步得到的边际概率进行参数更新:
π_k ∝ Σ_{序列} P(Z_1=k | 该序列观测)。A_{k,l} ∝ Σ_{序列} Σ_t P(Z_t=k, Z_{t+1}=l | 该序列观测)。B_{k,o} ∝ Σ_{序列} Σ_{t:观测为o} P(Z_t=k | 该序列观测)。


扩展到MAP估计

EM算法不仅可以用于最大似然估计,也可用于最大后验概率估计。


若对参数有先验分布 P(θ),则目标变为最大化对数后验:
log P(θ|X) ∝ log P(X|θ) + log P(θ)
我们可以对似然项 log P(X|θ) 同样使用之前的E步下界。在M步中,则最大化 期望对数似然 加上 对数先验:
θ_new = argmax_θ [ Σ_Z Q(Z) log P(X, Z|θ) + log P(θ) ]
这允许我们在学习过程中引入如L1、L2等正则化项。



总结

本节课中我们一起学习了期望最大化算法。EM算法为解决数据存在缺失变量时的参数学习问题提供了一个强大的框架。其核心思想是通过引入隐变量的分布 Q,构建对数似然的一个易于处理的下界,并通过交替执行E步(推断后验)和M步(更新参数)来优化这个下界,从而间接优化真实似然。我们看到了该算法在指数族分布和图形模型中的具体应用形式,并通过隐马尔可夫模型的例子进行了详细说明。EM算法是学习复杂概率模型,特别是包含隐变量模型的基石。
011:蒙特卡洛方法入门 🎲

在本节课中,我们将要学习蒙特卡洛方法的基本原理。这是一种通过随机采样来*似计算复杂积分或期望值的强大技术,尤其适用于难以精确求解的图形模型推断问题。
概述
上一节我们介绍了各种用于推断隐变量和学习模型参数的确定性算法。本节中,我们将转向*似方法的两大家族之一:采样或模拟方法。当模型无法精确求解时,我们通过模拟未知参数或变量可能的值来进行*似,这就是所谓的蒙特卡洛方法。

蒙特卡洛方法的基本原理
蒙特卡洛方法之所以有效,其背后的高层次思想非常简单,它本质上源于大数定律。

首先,假设我从某个分布 P(x) 中获得了 L 个样本。我们使用上标 (l) 来表示不同的样本。在符号上,我们使用带下标 l 的 δ 函数来表示一个在该样本点处无限高、无限窄的分布。
蒙特卡洛方法指出,如果我想知道函数 F(x) 的期望值,即积分 ∫ F(x) P(x) dx,而这个积分可能因为 F 复杂、P 复杂或 x 是高维变量而难以计算,那么我总是可以通过从分布 P 中抽取 L 个样本来*似它。
具体做法是:从 P 中抽取样本,在每个样本处评估你的函数 F,然后简单地取这些数值的*均值。
这个估计器有一个很好的性质:无论 L 多大,它总是无偏的。这意味着估计器的期望值等于真实的积分值。当然,由于我们使用样本,这是一个随机变量,所以会围绕真实值有一些波动。
分析其方差也很容易。基本上,估计器的方差等于原始函数 F 的方差乘以 1/L。因此,随着我获得更多样本,方差会不断减小。



相应地,我们有各种形式的大数定律。随着样本数量 L 的增长,我的估计器与真实积分值以概率 1 相等。此外,根据中心极限定理(假设真实方差有限),估计误差的分布将趋*于高斯分布。

虽然经典上我们常将这种方法用于分析数据集及其计算属性,但我们也可以在计算机中使用模拟来进行难以精确执行的计算。
伪随机数生成器

在计算机蒙特卡洛方法中,惯例是假设我们有一个独立的连续均匀分布随机变量源。其概率密度函数在 0 到 1 之间是均匀的。我们称这些变量为 u1, u2, u3...。
蒙特卡洛方法通常假设你能获得这些均匀随机数,然后将它们转换为你真正关心的任何分布的样本。
稍后我会谈谈这些均匀随机数从何而来。基本上,任何进行科学计算、机器学习或统计的软件包都有生成此类数字的功能。它们并非真正的随机数,因为计算机的操作是确定性的,但它们产生的数字流表现得就像来自这个均匀分布的样本,这些被称为伪随机数。

例如,在 Python 的 NumPy 中,就有一个很好的伪随机数生成器。现在,我们假设你有一个黑盒,可以给你来自这个均匀分布的样本,然后你想用它们来分析其他更复杂的分布。
从离散分布中采样

首先,假设我有一个离散分布需要采样。例如,我有一个在六个点上具有正概率的概率质量函数 P(x)。
除了概率质量函数,分布的另一种表示是累积分布函数。根据定义,CDF 是 x 小于等于某个值的概率。对于离散分布,CDF 呈阶梯状,在每个具有正概率的值处跳跃。这个函数从 0 开始,最终增加到 1。
现在,这个函数不是可逆的,因为它在某些区间是常数,在某些点跳跃。但存在一种类似逆函数的东西,我们称之为逆 CDF 函数 H(u)。它将 0 到 1 之间的数字映射回 x 的值。具体做法是:对于给定的 u,找到使得 CDF 首次大于或等于 u 的最小 x 值。


有趣的是,如果我采样一个在 0 到 1 之间均匀分布的数字 U,并通过这个函数 H 进行转换,那么生成的随机变量 X = H(U) 的分布恰好就是原来的 P(x)。
你可以这样验证:X 等于某个值 k 的概率,就是 U 落在 F(k-1) 和 F(k) 之间的概率,而这正好等于原始概率质量函数在 k 处的值。
因此,你可以立即将均匀分布的样本转换为任何你想要的离散分布的样本。直观地看,对于概率大的 x 值,CDF 的阶梯跳跃幅度大,因此你的均匀随机数落入该区间的概率也高;反之亦然。
从连续分布中采样
现在,如果我想从一个连续分布中采样呢?

如果我有一个连续分布,你仍然可以定义 CDF,并且它是一个单调递增的函数。如果我的分布是连续的,那么 CDF 将是可逆的。让我定义 H 为这个 CDF 的逆函数,它将 0 到 1 之间的数字映射回我分布的支撑集。
假设我取一个均匀数 U 并通过这个逆 CDF。鉴于我刚才展示的内容,你可能不会惊讶地发现,这实际上会给我一个来自我想要的连续分布的样本。
证明如下:我以这种方式生成的 X 小于某个值 x 的概率,就是 H(U) 小于 x 的概率。由于 H 是可逆的,这等价于 U 小于 H^{-1}(x) 的概率,而 H^{-1} 就是 CDF。一个在 0 到 1 之间均匀分布的数小于某个值 c 的概率就是 c 本身。因此,我们得到了正确的概率。

这是一种将均匀变量转换为你想要的任何连续分布的简单方法,前提是你能轻松计算这个逆 CDF。有些分布的逆 CDF 可能很复杂,难以处理,但如果容易计算,这就是一种简单的采样方法。
伪随机数生成器的实现
我们假设有一个独立的连续均匀随机变量源,但这是一个提到 MATLAB 的旧幻灯片,不过 Python 也有类似功能。
生成这些数字的方法是使用一个混沌的动力系统。随机数生成器有一个内部状态,每次生成一个数字时,你都会改变那个状态。所谓“混沌”,是指改变状态的函数不是一个“好”函数,而是一个输入微小变化会导致输出巨大变化的非常不稳定的函数。
你可以想象,如果我有确定性的但高度混沌和不稳定的东西,那么对我来说,它可能看起来几乎是随机的。这就是这些随机数生成器的工作原理。
最简单的随机数生成器实际上只使用线性函数。这些不是最好的生成器,但它们可以是有效的。其思想是:U_bar 是一个大整数(如 32 位或 64 位整数),M 是这个整数能取的最大值(如 2^64)。我通过将整数除以 M 来获得 0 到 1 之间的数字,而整数本身通过取模 M 的线性函数来演化。
让我用图片给你举个例子。你有一个种子,即你的起始整数。假设 M=9,我的生成器状态是 0 到 8 之间的整数。假设我设 a=2, c=0。生成器的工作方式是:你乘以 2,如果结果超过 9,就取除以 9 的余数。从 1 开始,跳到 2,到 4,到 8。2*8=16,模 9 余 7,所以到 7。2*7=14,模 9 余 5。2*5=10,模 9 余 1。我又回到了起点。我遍历了六个整数的循环,并没有得到所有九个整数。如果我以 3 开始,则跳到 6,2*6=12 模 9 余 3,我就在 3 和 6 之间振荡。所以这不是一个好的生成器。
另一方面,如果我设 a=4, c=1,那么你会遍历 0 到 8 之间所有可能的整数,并且以一种看似随机的方式遍历它们。现在的想法是,你将做类似的事情,只不过不是圆圈上有九个点,而是有像 2^64 这样多的点。

设计这类生成器有很多工作,这实际上更像是一个数学问题,涉及数论等专门主题。如果你仔细想想,你会希望 M 是互质且较大的,你不希望有公因数。

这真的很重要。例如,在 20 世纪 70 年代,有一个名为 RANDU 的随机数生成器,它是这个想法的一个简单版本。他们使用的函数是乘以 65,539。他们选择这个数字是因为它几乎是 2 的幂,在当时的计算机上乘法运算很快。然而,如果你取生成序列的三元组并在三维空间中绘制它们,它们基本上精确地位于这些*面上,存在强烈的相关性。实际上,有数百篇科学论文的结果因此变得无效。

所以,这真的很重要。你不应该尝试实现自己的伪随机数生成器。有些人毕生致力于完善这些细节,这非常棘手,很容易出错。有基准测试来检验生成器是否能通过随机性测试。好的生成器(如 Python、MATLAB、R 等内置的生成器)基本上与真正的随机数无法区分,或者从实际计算的角度看无法区分。

重要性采样
现在,让我将其与图形模型联系起来。我们将讨论一系列蒙特卡洛方法,从非常简单的方法到更高级的方法。
其中最简单的方法是有向图形模型的模拟。
假设我有一个有向图形模型。从它的分解方式,我知道节点 1 的边缘分布,但如果我想知道节点 4 的边缘分布,这并不直接可及。我可以使用联结树算法来获得节点 4 的精确边缘分布,但对于更复杂的模型,计算成本可能很高。
另一种方法是:首先,我选择图中变量的一个顺序,这个顺序要与偏序一致,即对于每个节点,其父节点都排在它之前。然后,我按照这个顺序遍历并模拟节点。例如,从模拟节点 1 开始,然后根据已知的 x1 模拟 x2 的分布,接着模拟 x3,依此类推。这样,用几个均匀随机数,我就可以模拟这个模型中的所有变量,从而得到联合分布的一个样本。
如果我想知道节点 4 取某个特定值的概率,我可以重复这个过程很多次(例如 10,000 次),绘制联合配置的样本,然后计算节点 4 取该值的次数除以总次数。这将给我一个无偏估计,并且随着样本数量的增加,它会越来越接*真实值。
蒙特卡洛方法与精确推断方法(如联结树算法)有不同的权衡。联结树算法总是给出零误差(或接*零)的答案,但可能非常慢,甚至完全无法处理,具体取决于图结构。而蒙特卡洛方法,你可以通过选择样本数量来决定愿意花费多少计算时间。权衡在于你得不到精确答案,得到的是真实值加上由于有限次模拟带来的噪声。
另一个优点是,我可以计算不仅仅是关于单个节点的函数的期望值,还可以计算复杂函数的期望值。只要我能够模拟并在任何变量值上评估我的函数,就可以使用蒙特卡洛方法。函数不需要可微或具有良好性质。
但是,如果图中有环怎么办?对于有向图模型,它必须是无环的,所以不能有有向环。我描述的这种祖先采样方法不能直接应用于无向马尔可夫随机场或因子图。这是利用了有向图模型分解特性的方法。对于无向模型,我们后面会讨论一些更高级的方法。
更常见的是,我们关心给定数据的后验分布。如果某些节点被观测到,我如何修改这个过程来考虑这一点?仅仅按照上述过程模拟无法得到正确的结果。有一个称为重要性采样的扩展方法可以处理这个问题。
重要性采样的原理
重要性采样是一种处理难以直接从目标分布 P(x) 中采样的通用方法。
其思想如下:我有一个目标分布 P(x),我想计算关于它的期望。P(x) 可以写成未归一化的 P*(x) 乘以一个归一化常数 Z_P。我可能不知道这个归一化常数。假设从 P 中采样是困难的。
我将构建另一个分布 Q(x),称为提议分布。Q 也可以写成未归一化的 Q*(x) 除以一个归一化常数 Z_Q。唯一严格的要求是,Q(x) 必须在 P(x) 为正的任何地方都有正概率。除此之外,Q 可以是任意的。一个好的 Q 应该是与 P 相似但更容易处理的分布。
现在,我的积分,F(x) 的期望值,可以写成 F(x) 乘以一个权重函数 W(x) = P(x)/Q(x),再乘以 Q(x)。这样,积分值没有改变。现在,这可以看作是关于分布 Q 的 F(x)W(x) 的期望值。
因此,我可以从 Q 中采样,在每个样本处评估 F 乘以 W,然后*均这些值,得到一个蒙特卡洛估计。

最广泛使用的重要性采样版本做了一些更巧妙的事情来处理我们不知道归一化常数的事实。它使用未归一化密度的比率 W*(x) = P*(x)/Q*(x)。我抽取一堆来自 Q 的样本,评估每个样本的 W*,得到正数权重,然后将这些权重归一化使其和为 1。接着,我取函数值的加权*均。
在基本的蒙特卡洛方法中,你抽取样本并取未加权的均值。在这里,我做的是加权*均。权重基本上根据 P 与 Q 的比率来调整。如果在某个 x 处 P/Q > 1,说明提议分布在该处概率过低,采样不足,因此该点会获得较大的权重。反之,如果 P/Q < 1,说明提议分布在该处概率过高,采样过多,因此该点会获得较小的权重。这样,你就校正了采样偏差。
这个估计器是渐*无偏的。实际上存在偏差,因为忽略了归一化常数,但随着样本数量的增加,偏差会减小到零。
你可能会问,什么是最好的提议分布 Q?直觉上,你可能认为设置 Q = P 是最好的。但事实上,你可以做得更好。为了最小化估计器的方差,最好的 Q 是取 P(x) 乘以 |F(x)|,然后重新归一化。这意味着,如果你的目标是评估某个特定函数 F(x) 的期望值,那么在 F(x) 幅度大的区域放置更多样本,可以获得更快的收敛速度。
这在稀有事件模拟中很有用。例如,在计算机系统中,你想估计系统失败的概率,但失败可能非常罕见(如十亿分之一)。如果直接从真实分布采样,你需要海量样本才能观察到几次失败。使用重要性采样,你可以设计一个偏向的提议分布 Q,使失败更常见,然后通过重要性权重来校正偏差,从而更有效地估计稀有事件的概率。

重要性采样在有向图模型后验推断中的应用
现在,让我们看看如何将重要性采样应用于有向图模型的后验推断。
假设我有一个有向模型,并且我观测到了一些变量(例如 x2 和 x5),我想知道其他变量(隐变量)的后验分布。
和之前一样,我选择一个变量的顺序,使得每个节点的父节点都排在它之前。现在,观测变量的值是固定的。我按照顺序,只对隐变量根据其父节点进行采样。
例如,我从先验中模拟 x1,然后根据 x1 模拟 x3,接着根据 x3 的样本和观测到的 x2 值模拟 x4。这个过程部分地考虑了我的观测(例如模拟 x4 时考虑了 x2),但没有完全考虑所有观测的影响(例如 x2 本应影响 x1 的后验,x5 也会影响其他变量)。

这样生成的样本来自一个提议分布 Q,它并不是真正的后验分布。然后,我计算重要性权重。有趣的是,在权重计算中,隐变量的条件概率项会抵消掉,最终权重简化为所有观测节点在其父节点条件下的概率的乘积。

因此,这种方法被称为似然加权。权重就是给定父节点下观测数据的似然。

似然加权的效果与局限

这个方法很简单,是这类模型最早的方法之一,可以追溯到 20 世纪 80 年代。
然而,它的效果可能并不理想。在一项 1996 年的研究中,一个包含 146 个节点的医疗诊断网络被用作测试。研究者能够运行联结树算法获得精确边缘分布作为基准。他们比较了似然加权方法在 50,000 和 100,000 个样本下的误差。结果显示,即使使用 100,000 个样本,仍有约 16% 的相对误差。虽然随着样本增加误差在下降,但对于一个不算巨大的模型来说,100,000 个样本已经很多,且误差仍然显著。

为什么需要这么多样本?考虑一个情景:假设 x1 代表一种罕见疾病,先验概率极低(如万分之一)。但给定某个检测结果 x5 后,后验概率变得非常高。当从先验中模拟 x1 时,你几乎总是得到“健康”的样本。这些样本在后续计算中权重会非常低(因为观测数据与“健康”假设不符)。只有极少数从先验中抽到“患病”且与数据一致的样本才会获得高权重。因此,如果后验与先验差异很大,或者观测数据非常多、信息量很大,这种方法就会效率低下,需要大量样本才能捕捉到后验的高概率区域。


此外,权重是所有观测节点概率的乘积。随着观测节点增多,权重的方差可能会变得非常大,导致估计不稳定。
因此,虽然似然加权实现简单,但计算负担可能很高。后续我们将学习更高级的方法(如马尔可夫链蒙特卡洛),它们能更好地处理变量间的依赖关系,从而更有效地进行采样。


总结

本节课中,我们一起学习了蒙特卡洛方法的基础。我们从大数定律和基本采样原理出发,介绍了如何利用均匀随机数生成其他分布的样本。接着,我们探讨了重要性采样的核心思想,它通过从一个易于采样的提议分布中抽取样本,并用重要性权重进行校正,来*似难以直接采样的目标分布的期望。最后,我们看到了重要性采样(特别是似然加权)在图形模型后验推断中的应用及其局限性。蒙特卡洛方法为我们提供了一种强大的*似工具,尤其适用于高维、复杂的模型推断问题。下一讲,我们将深入探讨马尔可夫链蒙特卡洛方法。
012:MCMC方法之Metropolis-Hastings 🎲



在本节课中,我们将要学习一种强大的蒙特卡洛方法——马尔可夫链蒙特卡洛(MCMC)。我们将重点介绍其中最著名且应用最广泛的Metropolis-Hastings算法。当面对高维复杂模型时,基本的采样方法往往不切实际,而MCMC方法则提供了一种有效的解决方案。
目标与基本设定
上一节我们介绍了蒙特卡洛方法的基本思想。本节中,我们来看看当直接采样变得困难时,如何通过构建一个马尔可夫链来从目标分布中采样。
我们的目标是:从一个目标分布 P(x) 中采样。这个分布可以是离散的或连续的。我们假设由于某些原因,无法直接从 P(x) 中采样。

但我们能做一件更弱的事情:评估这个分布。也就是说,给定任何一个具体的 x,我们可以计算出它的(未归一化的)概率值 P*(x)。本课程中讨论的所有模型都满足这个条件。
MCMC的核心思想
MCMC方法的核心是:设计一个马尔可夫链,使其*稳分布恰好是我们关心的目标分布 P(x)。
如果我们能模拟这个马尔可夫链足够长的时间,那么链的状态最终就会成为来自 P(x) 的样本。这基于马尔可夫链的一个基本性质:在特定条件下,链会收敛到一个唯一的*稳分布。



对于一个离散状态的马尔可夫链,*稳分布需满足以下方程:
∑_x P(x) T(x'|x) = P(x')
其中 T(x'|x) 是从状态 x 转移到 x' 的概率。对于连续状态,方程变为积分形式。
满足此*稳分布的马尔可夫链有很多。我们的目标是找到一个“好”的链:它能快速收敛到*稳分布,并且每一步的模拟计算成本低廉。
细致*衡条件
在分析马尔可夫链时,一个关键概念是“细致*衡”。它比*稳分布的条件更强,也更易于验证。

细致*衡条件定义为:对于所有状态对 (x, x'),满足
P(x) T(x'|x) = P(x') T(x|x')
这个条件的直观理解是:从 x 跳到 x' 的“流量”,必须等于从 x' 跳回 x 的“流量”。如果 P(x') > P(x),那么从 x 跳到 x' 的概率应该更高,这样才能在*衡时更多地停留在高概率状态。




一个重要的结论是:如果细致*衡条件成立,那么 P(x) 一定是该马尔可夫链的*稳分布。虽然存在不满足细致*衡但仍有正确*稳分布的链,但它们更难分析和构造。因此,实践中广泛使用的方法通常都满足细致*衡。
Metropolis-Hastings 算法 🛠️

现在,我们来看如何构造这样一个链。Metropolis-Hastings算法提供了一个通用框架。
用户需要提供两样东西:
- 目标分布 P(x)(可以未归一化)。
- 一个“提议分布” Q(x'|x)。给定当前状态 x,它能提出一个候选新状态 x'。我们假设可以从 Q 中采样,也能计算其概率值。
算法步骤如下:
- 从提议分布 Q(x̃|x) 中采样一个候选状态 x̃。
- 计算“接受率” r:
r = min( 1, [P(x̃) Q(x|x̃)] / [P(x) Q(x̃|x)] ) - 以概率 r 接受这个提议:采样一个伯努利变量,若为1(成功),则令新状态 x' = x̃;若为0(失败),则拒绝提议,令 x' = x(链保持原状态)。

接受率 r 的含义:如果分子(新状态的概率与反向提议概率的乘积)大于分母(旧状态的概率与正向提议概率的乘积),则 r=1,总是接受。否则,以概率 r 接受。这确保了链更倾向于移动到高概率区域,但有时也会“冒险”进入低概率区,从而能探索整个分布。
特例分析
以下是两种重要的特例:
- 独立采样提议:当 Q(x'|x) = Q(x'),即提议与当前状态无关时。此时接受率简化为:
r = min( 1, [P(x̃)/Q(x̃)] / [P(x)/Q(x)] )
这正好是重要性采样中权重 w(x)=P(x)/Q(x) 的比值。算法会倾向于接受那些在 P 下概率高、在 Q 下概率低的样本。

- Metropolis算法(对称提议):当提议分布对称,即 Q(x'|x) = Q(x|x') 时。此时 Q 项抵消,接受率简化为:
r = min( 1, P(x̃)/P(x) )
这很像一种带随机性的“贪心搜索”:如果新状态概率更高,总是接受;如果新状态概率更低,则以新旧概率之比为概率接受。通过有时接受向低概率状态的移动,链最终能采样到整个目标分布,而不仅仅是困在某个峰值。


简单示例与调参

让我们通过简单例子理解算法的行为。


-
离散均匀分布:目标是在整数{0,...,20}上的均匀分布。使用一个简单提议:以0.5概率加1,0.5概率减1(在边界处调整)。模拟显示,由于链的状态是相关的(随机游走),它需要比独立采样更多步骤才能让直方图接*均匀。从状态1游走到状态20需要很多步,这体现了“混合速度”的概念。
-
连续高斯分布:目标是标准正态分布 N(0,1)。使用“随机游走Metropolis”提议:Q(x'|x) = N(x'|x, σ²),即给当前值加高斯噪声。
- σ=1(适中):接受率约68%,链能较好地探索空间。
- σ=100(过大):提议步长巨大,绝大多数候选点落在目标分布的低概率区,因此几乎总是被拒绝,链长时间停滞,效率极低。
- σ=0.1(过小):接受率超过99%,但每一步移动极小,链像爬行一样缓慢探索空间,从2移动到-2需要极长时间。
核心权衡:我们希望每一步能做出较大的状态改变以快速探索空间,但又不能大到导致提议总被拒绝。因此,提议分布的尺度(如σ)需要仔细调整。
Gibbs采样:图形模型的利器 🔗
对于具有多变量的图形模型,一种特别流行且强大的MCMC方法是Gibbs采样。它可以看作是Metropolis-Hastings的一个特例,并且能自动利用模型的结构。

基本思想是:每次只更新一个变量,依据该变量在给定所有其他变量当前值下的条件分布进行采样。
算法流程

- 按某种顺序(固定或随机)遍历所有变量。
- 对于当前要更新的变量 X_s,计算其条件分布 P(X_s | X_{\s}),即给定所有其他变量值时 X_s 的分布。
- 从这个条件分布中采样一个新值 x_s̃。
- 用新值替换旧值,其他变量保持不变,然后处理下一个变量。

在图形模型中,根据马尔可夫性质,一个变量的条件分布只依赖于其邻居节点。因此,计算条件分布时,只需聚合与 X_s 相连的因子即可,无需计算整个联合分布,效率很高。
为何它是Metropolis-Hastings的特例?
如果我们把Gibbs采样中的“从条件分布采样”看作是一个特殊的提议分布 Q,那么计算Metropolis-Hastings的接受率 r 时,会发现分子和分母完全相等,r 恒等于 1。这意味着在Gibbs采样中,我们总是接受提议的新值,无需额外的接受-拒绝步骤。

优势与自动化


Gibbs采样的巨大优势在于其自动化程度高。用户只需指定模型(即联合分布),算法就能自动推导出每个变量的条件分布并进行采样。因此,出现了许多概率编程语言(如BUGS, JAGS)和软件包,它们允许用户用高级语言描述模型,然后自动执行Gibbs采样进行推断。这在统计学、社会科学、生态学等领域的应用中非常流行。

需要注意的是,虽然理论上保证链在无限长时间后收敛到正确分布,但实际中我们只能运行有限步。对于某些复杂模型,“混合时间”(链接**稳分布所需的步数)可能非常长,这是所有MCMC方法共有的挑战。

本节课中我们一起学习了MCMC方法的核心——Metropolis-Hastings算法。我们理解了如何通过设计一个满足细致*衡条件的马尔可夫链,来从难以直接采样的复杂分布中获取样本。我们还探讨了其重要特例:对称提议的Metropolis算法和特别适用于图形模型的Gibbs采样。Gibbs采样通过每次更新一个变量并利用局部条件分布,实现了高效且易于自动化的推断,成为实践中极其重要的工具。
013:MCMC方法 - 吉布斯采样器
在本节课中,我们将继续讨论蒙特卡洛方法,特别是吉布斯采样器。这是一种在图形模型中广泛应用的采样方法。我们将探讨其工作原理、实际应用中的问题、如何评估其收敛性,以及如何将其用于模型参数的学习,例如在混合模型中。我们还将介绍一种称为“块吉布斯采样”的改进方法,它可以加速马尔可夫链的混合过程。
吉布斯采样器的工作原理
上一节我们介绍了蒙特卡洛方法的基本思想。本节中,我们来看看吉布斯采样器这一具体方法。对于图形模型而言,吉布斯采样器是一种典型的蒙特卡洛方法。
其工作流程非常简单:
- 以某种随机顺序遍历模型中的所有节点。
- 对于每个节点,计算其在给定模型中所有其他节点情况下的条件分布。根据马尔可夫结构,这等价于给定其邻居节点时的条件分布。
- 计算出该分布后,从中采样一个新的值来更新该节点。
这个过程可以理解为,通过逐个移动单个变量,使样本在状态空间中逐渐向高概率区域移动。重复此过程多次后,最终得到的样本将服从目标后验分布。
吉布斯采样器之所以正确,是因为:假设我们已经有了一个来自联合分布的样本。如果我们取出其中一个变量,根据给定其他所有变量的条件分布重新采样并更新它,那么更新后的样本仍然来自我们关心的同一个联合分布。这就是吉布斯采样器有效的原因。
实际应用中的问题
现在我们已经了解了这个方法,接下来看看在实际使用中会遇到的一些问题。
以下是使用吉布斯采样器时常见的几个问题:
- 样本相关性:马尔可夫链的连续步骤之间不是独立的,它们存在相关性。因此,在计算期望时,是否需要丢弃一些迭代以使样本更独立?这个过程称为“稀释”链。
- 初始化和老化期:如果初始化是任意的,显然初始样本并非来自目标分布。只进行少量迭代后,样本通常也不是有效的。因此,需要运行足够多的步骤,使链“游走”到真正的样本区域。这个初始阶段有时被称为“老化期”。

对于这些问题,没有绝对严格的答案。通常的做法是:
- 丢弃初始的一系列样本点(即老化期),因为链需要时间从低概率区域游走到高概率区域。
- 之后,可以选择对样本进行二次采样(例如每10个样本取一个),但这并非统计上的必需。即使使用所有相关样本计算蒙特卡洛*均值,只要样本数量足够大,根据大数定律的某些版本,它仍然会收敛到正确的均值。进行二次采样的一个可能原因是,如果要评估的函数计算成本很高,稀释可以减少函数评估次数,从而节省计算资源。

总之,通常的做法是丢弃初始的一组样本,然后使用之后的大量样本来*似我们关心的任何量。
评估收敛性的方法


不幸的是,尽管从原理上我们知道,只要马尔可夫链运行足够长的时间,最终就能得到来自正确分布的样本,但很难判断对于特定模型、特定迭代次数和特定初始化,我们是否已经运行了足够长的时间以获得良好的样本。


因此,通常需要手动检查输出来评估情况。以下是两种常用的评估方法:


- 迹线图:绘制模型中某个重要统计量(如关键变量的值)随时间变化的曲线,观察其是否似乎已经收敛。例如,在迹线图中,如果曲线在迭代后期趋于稳定在一个范围内,则可能表明链已收敛。
- 自相关图:计算马尔可夫链在不同滞后步长(如2、10、50、100步)下的自相关性,并观察其衰减到零的速度。自相关性快速衰减通常意味着链混合得较快。
然而,这两种图都有局限性。自相关性大肯定意味着有问题;自相关性衰减到零可能意味着混合迅速,但也可能意味着链被困在某个模态中,无法到达其他模态。迹线图显示单次运行的情况,但无法保证链是否探索了分布的所有重要区域。

一种更好的诊断方法是运行多个不同初始化的链,并检查它们是否收敛到一致的结果。如果所有链都给出相似的统计量,则更有把握认为链已收敛。

吉布斯采样器的局限性:慢混合
吉布斯采样器有一个特性,即每次只改变一个变量。这可能导致“慢混合”问题。
考虑一个简单的例子:一个包含两个变量的图形模型。吉布斯采样的每一步只能水*或垂直移动,无法沿对角线移动。如果目标分布(如一个正相关的多元高斯分布)在某个方向上被拉长,那么要从分布的一个角落移动到另一个角落,吉布斯采样器必须通过许多小的、锯齿状的步骤才能完成。随着分布被拉伸得越来越厉害,来回移动所需的时间会越来越长。
在高维空间中,这个问题会更加严重。即使是最简单的模型也可能出现慢混合。例如,考虑两个二元变量,其联合分布使得两个变量通常相同(如00和11状态的概率很高,01和10状态的概率ε很小)。如果当前状态是00,要跳转到11状态,必须经过概率很低的01或10状态。随着ε变小,在两个主要状态间跳转的频率会越来越慢。
同样,对于具有多个分离模态的分布(如双峰高斯混合分布),吉布斯采样器也很难在不同模态之间移动。这就是所谓的“慢混合”问题,意味着马尔可夫链需要非常长的时间才能充分探索整个状态空间。
虽然存在一些更高级的MCMC方法试图解决这个问题,但它们通常针对特定类别的模型,而非通用。
一个警示性的例子:空间马尔可夫随机场
让我们看一个实际例子,说明有限次数的MCMC运行可能产生误导。空间马尔可夫随机场是一种广泛使用的空间数据模型。其简单的形式为相邻像素分配相同标签时给予奖励(即势函数值更高),这符合图像中物体区域通常具有空间连续性的直觉。
在1984年一篇引入吉布斯采样器的著名论文中,作者使用该模型作为图像分割的先验。他们在128x128的网格上运行吉布斯采样器200次迭代(每次迭代对每个变量重采样一次),并将结果展示为来自该分布的样本,样本显示出空间相干的斑块。
然而,后续分析表明,如果运行更长时间(例如10,000次迭代),样本会逐渐合并成少数几个巨大区域,甚至最终变成一个主导区域加上少量噪声。这表明200次迭代远未达到*衡分布,早期结果具有误导性。
该模型本质上是一个指数族模型,其行为类似于统计物理中的伊辛模型,存在相变。在参数空间的某个临界点附*,模型会从噪声状态突然转变为单一团块状态,而无法稳定在产生理想空间分割的中间状态。因此,这个模型虽然直观,但对于实际的空间建模可能存在根本性缺陷。
这个故事的启示是:首先,对于伊辛/波茨模型等空间模型,需要警惕其性质;其次,有限次数的MCMC运行结果可能具有很大的误导性。由于早期计算能力限制,运行长时间链不可行,但如今我们能够进行更长时间的分析,不过对于更复杂的模型,我们可能仍处于类似的境地。
计算资源分配建议
考虑到慢混合问题,在进行MCMC时,应如何分配计算资源?通常有以下几种策略:
- 进行单次长时间运行的马尔可夫链。
- 进行大量随机初始化,每个运行较短时间。
- 折中方案:进行少量初始化,每个运行中等长度时间。
通常,最佳实践方案类似于第二种。始终建议进行多次初始化,因为这有助于发现是否存在未被访问的多模态。对于每次初始化,通常需要运行数千次迭代。如果只运行100次迭代,结果可能不可信。
使用吉布斯采样器进行参数学习
以上我们讨论了在已知模型概率的情况下使用MCMC进行采样。但吉布斯采样器也可用于学习模型参数,特别是在贝叶斯框架下,将参数视为随机变量,然后从其后验分布中采样。
为了使讨论具体化,我们以混合模型为例。混合模型的图模型表示包含观测数据点 X、每个数据点所属簇的隐变量 Z、簇权重 π 以及每个簇的参数 θ_k(例如高斯分布的均值和协方差)。
在贝叶斯方法中,我们为 π 和 θ 设置先验分布:
π通常采用狄利克雷先验,它是类别分布参数的共轭先验。- 对于高斯簇的未知均值和方差,我们也可以设置共轭先验。对于未知均值(方差已知),共轭先验是高斯分布。对于未知方差(或更常用的精度,即方差的倒数),共轭先验是伽马分布(单变量)或威沙特分布(多变量,用于精度矩阵)。当均值和协方差均未知时,其联合共轭先验是正态逆威沙特分布。
吉布斯采样器用于混合模型时,需要依次采样所有未知变量:Z、π 和 θ。其步骤与EM算法有相似之处,但也有关键区别:
-
采样 Z(类似于E步):固定
π和θ,每个数据点i属于簇k的后验概率为:
P(Z_i = k | X_i, π, θ) ∝ π_k * P(X_i | θ_k)
与EM算法计算“责任”相同,但吉布斯采样器是根据这个概率分布进行采样,为每个数据点随机分配一个簇标签,而不是保留软分配。 -
采样 π:给定
Z和X,π的后验分布是狄利克雷分布,其参数依赖于每个簇的样本计数。我们从该后验中采样一个新的π。 -
采样 θ:给定
Z和X,每个簇的参数θ_k是条件独立的。对于分配给簇k的数据子集X_k,我们基于该数据和先验,从θ_k的后验分布(如正态逆威沙特分布)中采样新的均值和协方差。

这个过程不断迭代。与EM算法相比,吉布斯采样器在“E步”进行采样而非计算期望,在“M步”从参数的后验分布采样而非最大化似然。这避免了EM可能陷入局部最优的问题,因为MCMC链最终可以跳出局部模式,但代价是收敛可能更慢,且需要处理采样带来的不确定性。
加速混合:块吉布斯采样
最后,我们介绍一种旨在加速混合的策略:块吉布斯采样。
基本思想是,与其每次只采样一个变量,不如将一组变量作为一个“块”一起采样。如果能够从这些变量的联合条件分布中高效采样,那么链的混合速度可能会大大加快。
一个典型的例子是在树结构图模型中。对于树,我们可以利用信念传播算法高效地计算根节点的边际分布,采样根节点,然后根据条件独立性递归地采样其他节点,从而精确地从整个树的联合分布中采样一个样本。
将这一思想应用于MCMC,例如在隐马尔可夫模型中:
- 基本吉布斯采样器:逐个采样每个时刻的隐状态
Z_t,给定其前后状态和观测。 - 块吉布斯采样器:利用前向-后向算法计算整个隐状态序列
Z_{1:T}的条件分布,然后通过前向计算、后向采样的方式一次性采样整个序列。
两种方法定义的马尔可夫链具有相同的*稳分布,但块采样器的混合速度通常快得多。实验表明,对于HMM参数学习,块采样器可能在10-20次迭代内接*收敛,而基本吉布斯采样器可能需要上千次迭代仍远离收敛。
对于带环的复杂图模型,虽然无法对整个图进行精确块采样,但可以识别其中的树状子图或可处理子结构,并对这些子块进行联合采样。这仍然可以比逐个变量采样更快地收敛。许多高级MCMC方法都采用了这种“分块”思想。
总结

本节课中,我们一起深入探讨了吉布斯采样器这一重要的MCMC方法。我们学习了它的工作原理,分析了其在实际中遇到的样本相关性、初始化、慢混合等问题,并介绍了迹线图和自相关图等收敛性诊断工具。通过空间马尔可夫随机场的例子,我们看到了MCMC运行不充分可能带来的误导。我们还探讨了如何将吉布斯采样器应用于贝叶斯参数学习,例如在混合模型中,通过交替采样隐变量和模型参数来从后验分布中获取样本。最后,我们介绍了块吉布斯采样的概念,它通过联合采样一组变量来显著加速马尔可夫链的混合过程,是提高MCMC效率的重要策略。理解这些内容和挑战,对于在实践中有效应用MCMC方法至关重要。
014:卡尔曼滤波与粒子滤波
在本节课中,我们将学习如何处理包含连续变量的模型。我们将从变量为高斯分布、可以进行闭式求解的模型开始,包括著名的卡尔曼滤波。接着,我们将探讨更复杂的非高斯模型,其中需要借助蒙特卡洛方法进行*似,这将引出一个称为粒子滤波的方法。
高斯变量与线性高斯模型
上一节我们提到了连续变量推断的挑战。本节中,我们来看看当变量服从高斯分布时,我们可以利用其良好的数学性质进行闭式求解。
首先,我们回顾一些关于高斯变量的基本概念。如果 x 是一个 D 维的随机向量,其协方差矩阵 Σ 是一个 D×D 的矩阵,其中第 (i, j) 项是变量 i 和变量 j 之间的协方差。该矩阵总是半正定的。
多元高斯分布是单变量高斯分布向多维的推广。它由均值向量 μ 和协方差矩阵 Σ 参数化。协方差矩阵的非对角线项建模了不同维度之间的相关性。
一个经典的线性高斯模型是线性回归的生成式模型。它假设存在一个未知的潜在变量 z,服从先验分布 z ~ N(μ_z, Σ_z)。观测值 x 是 z 的线性函数加上高斯噪声:x ~ N(Az + b, Ψ)。在这个模型中,x 的边缘分布和 z 的后验分布 P(z|x) 也都是高斯分布,其均值和协方差可以通过公式计算。
- 后验协方差公式:Σ_{z|x} = (Σ_z^{-1} + A^T Ψ^{-1} A)^{-1}
- 后验均值公式:μ_{z|x} = Σ_{z|x} (Σ_z^{-1} μ_z + A^T Ψ^{-1} (x - b))
直观上,后验协方差的逆(精度矩阵)是先验精度与观测精度之和,意味着获得观测数据后不确定性会降低。后验均值是先验均值和观测数据的加权组合。
从降维到时序模型
上一节我们介绍了用于静态数据的线性高斯模型。本节中,我们来看看如何将这些思想扩展到具有时序或序列结构的数据上。
主成分分析(PCA)和因子分析是经典的降维方法,其背后正是上述线性高斯生成模型。它们假设高维数据 x 由一个低维潜在变量 z 通过线性变换加噪声生成:x = Wz + μ + ε。
如果我们希望为具有时序依赖性的数据做类似的降维,就需要引入状态空间模型,特别是线性高斯状态空间模型。其图模型与隐马尔可夫模型(HMM)相同,但状态变量 z_t 是连续的。
- 状态转移方程:z_{t+1} = A z_t + w_t, 其中 w_t ~ N(0, Q)
- 观测方程:x_t = C z_t + v_t, 其中 v_t ~ N(0, R)
由于所有变量都是高斯的线性函数加高斯噪声,整个序列的联合分布是一个巨大的多元高斯分布。因此,给定任何观测序列,状态的后验分布也一定是高斯的。我们的目标就是高效地计算这些后验分布的均值和协方差。
卡尔曼滤波:线性高斯时序推断
面对时序模型,直接计算大规模协方差矩阵的逆运算量巨大。我们需要高效的递归算法,这就是卡尔曼滤波。
卡尔曼滤波是一种在线算法,用于递归地计算当前状态 z_t 给定截至当前所有观测 x_{1:t} 的后验分布 P(z_t | x_{1:t})。它分为两个步骤:
1. 预测步
根据上一时刻的后验,预测当前时刻的先验分布。
- 先验均值:μ_{t|t-1} = A μ_{t-1|t-1}
- 先验协方差:Σ_{t|t-1} = A Σ_{t-1|t-1} A^T + Q
2. 更新步
结合当前时刻的新观测,更新先验分布,得到后验分布。
- 卡尔曼增益:K_t = Σ_{t|t-1} C^T (C Σ_{t|t-1} C^T + R)^{-1}
- 后验均值:μ_{t|t} = μ_{t|t-1} + K_t (x_t - C μ_{t|t-1})
- 后验协方差:Σ_{t|t} = (I - K_t C) Σ_{t|t-1}
卡尔曼增益 K 决定了新观测值对状态估计的修正程度。该算法计算复杂度与状态维度的立方成正比,但随时间线性增长,因此被广泛应用于导航、控制等领域。
除了在线滤波,还有*滑问题,即计算状态给定全部过去和未来观测的后验 P(z_t | x_{1:T})。这可以通过前向(卡尔曼滤波)和后向的信息传递相结合来实现,其思想与离散变量模型中的和积算法一致。
非线性非高斯模型的挑战
上一节我们学习了处理线性高斯模型的精确方法。然而,现实中的模型往往包含非线性动力学或非高斯噪声。
例如:
- 状态转移:z_{t+1} = f(z_t) + w_t
- 观测方程:x_t = h(z_t) + v_t
其中 f(·) 和 h(·) 是非线性函数,噪声分布也可能非高斯。
在这种情况下,后验分布不再是高斯分布,卡尔曼滤波的闭式更新公式不再适用。我们需要新的*似推断方法。
粒子滤波:序贯蒙特卡洛方法
为了解决非线性非高斯模型的推断问题,我们引入粒子滤波,也称为序贯蒙特卡洛方法。
其核心思想是用一组带权重的样本(称为“粒子”)来*似表示后验分布,而不是用解析形式(如均值和方差)。每个粒子代表状态空间中的一个可能取值。
基本的序贯重要性采样效率很低,因为在长序列中,采样整个轨迹的权重方差会极大。粒子滤波通过引入重采样步骤解决了这个问题。
以下是粒子滤波的一个迭代步骤:
- 重要性采样(传播):从上一时刻的粒子集 {z_{t-1}^{(i)}} 出发,根据状态转移模型 P(z_t | z_{t-1}) 采样得到新的粒子 {z_t^{(i)}}。
- 计算权重:根据当前观测 x_t,计算每个新粒子的权重 w_t^{(i)} ∝ P(x_t | z_t^{(i)})。权重反映了该粒子与当前观测的匹配程度。
- 重采样:根据权重 {w_t^{(i)}} 对粒子集进行重采样。高权重的粒子更可能被多次选中,低权重的粒子更可能被淘汰。这得到了一个新的、未加权的粒子集 {z_t^{(j)}},它们*似表示当前的后验分布 P(z_t | x_{1:t})。
通过不断重复“预测-加权-重采样”的循环,粒子集能够动态地聚焦在状态空间的高概率区域,从而有效地跟踪状态。
以下是该过程的伪代码示意:
# 初始化粒子
particles = sample_from_prior()
for t in range(1, T+1):
# 1. 预测:根据动力学传播粒子
predicted_particles = [dynamics_model.sample(p) for p in particles]
# 2. 更新:根据观测计算权重
weights = [observation_likelihood(x_t, p) for p in predicted_particles]
weights = normalize(weights)
# 3. 重采样
indices = resample(weights)
particles = [predicted_particles[i] for i in indices]
# 此时,particles *似表示 P(z_t | x_{1:t})
总结

本节课中我们一起学习了针对连续变量状态空间模型的两种核心推断方法。




我们首先回顾了高斯分布的性质以及线性高斯模型,并从中推导出了经典的卡尔曼滤波算法。该算法通过预测和更新两个步骤,能够在线、高效地计算线性高斯模型中状态的后验均值和协方差。
接着,我们探讨了当模型包含非线性或非高斯成分时面临的挑战。为此,我们引入了粒子滤波方法。该方法使用一组粒子来*似表示后验分布,通过序贯的重要性采样和重采样步骤,使粒子集能够聚焦于状态空间的高概率区域,从而处理更复杂的模型。

这两种方法构成了时序数据中状态估计的基础,在机器人学、导航、信号处理、金融等众多领域有着广泛的应用。
016:*均场变分方法 🧠

在本节课中,我们将从蒙特卡洛方法转向讨论另一类基于优化的*似推断方法,即变分推断方法。我们将首先聚焦于其中最广泛使用且易于理解的方法——*均场方法。
概述 📋
我们将从信息论的基本概念回顾开始,然后介绍变分推断的核心思想:通过在一个易于处理的分布族中寻找一个*似分布,来最小化其与真实后验分布之间的某种“距离”(通常是KL散度)。我们将详细推导朴素*均场方法,并通过一个图像分割的实际案例展示其强大性能。最后,我们将简要探讨如何超越朴素*均场,引入结构化*均场方法。
信息论概念回顾 🔄
上一节我们提到了变分推断,本节我们首先回顾几个关键的信息论概念,它们是理解后续推导的基础。
-
熵:衡量分布的不确定性。对于离散变量X的概率分布P(x),其熵定义为:
H(P) = -∑_x P(x) log P(x)
确定性分布的熵为0;越接*均匀分布,熵值越高。 -
KL散度:衡量两个分布P和Q之间的差异。它不是对称的,且总是非负,当且仅当P=Q时为零。
D_KL(P || Q) = ∑_x P(x) log (P(x) / Q(x)) -
互信息:KL散度的一个特例,衡量两个变量之间的依赖性,是联合分布与边缘分布乘积之间的KL散度。当变量独立时,互信息为零。
变分推断的核心思想 💡
我们已经回顾了信息论的基础,现在来看看变分推断的通用框架。其核心思想是选择一个易于处理的*似分布族Q,然后优化Q使其尽可能接*真实的后验分布P。
以下是变分推断的一般步骤:
- 选择*似分布族Q:这个族应该易于计算。一个最简单的例子是假设所有变量相互独立的完全因子化分布。
- 定义距离度量:需要一个具体的指标来衡量P和Q的差异。通常使用KL散度,虽然它不对称,但能导出简洁的算法。
- 优化以最小化距离:将Q参数化,然后调整参数,使选定的KL散度最小化。
关于为何使用KL散度,一个直观的解释来自信息论和压缩领域:如果我们用*似分布Q而非真实分布P来编码数据,所浪费的*均比特数正好是D_KL(P || Q)。因此,最小化这个散度意味着减少因使用错误模型而造成的效率损失。
两种KL散度方向 🔀
上一节我们介绍了变分推断的通用框架,本节中我们来看看KL散度方向选择带来的不同路径。
如果我们假设Q是一个完全因子化的分布,并尝试最小化 D_KL(P || Q),经过代数推导,可以将其分解为几项。其中关键的一项是各变量真实边缘分布与*似边缘分布之间的KL散度之和。显然,最优解是令Q的每个边缘分布都精确匹配P的真实边缘分布。
然而,这并没有提供计算这些真实边缘分布的有效算法,因此这条路径对于构建实用算法来说是条“死胡同”。
*均场方法与证据下界 🎯
既然最小化 D_KL(P || Q) 不直接导向算法,我们转向另一个方向:最小化 D_KL(Q || P)。这就是*均场方法。
这种选择有很好的动机。考虑我们通常关心的场景:在有观测数据y的情况下,*似隐藏变量x的后验分布 P(x|y)。我们关心数据的边际似然 P(y)。利用琴生不等式,我们可以为对数似然建立一个证据下界:
log P(y) ≥ E_{Q(x)}[log P(x, y)] - E_{Q(x)}[log Q(x)]
这个下界的右边恰好等于 -D_KL(Q || P) + log P(y)。因此,最小化 D_KL(Q || P) 等价于最大化对数边际似然的这个下界。即使Q不能完全匹配P,我们也能得到一个可计算的下界。
能量与自由能 ⚡
为了深入理解*均场,我们引入统计物理中的概念。可以将概率分布写为:
P(x) = (1/Z) exp(-E(x))
其中 E(x) 称为能量,Z 是归一化常数(配分函数)。能量越高,状态概率越低。
现在,KL散度 D_KL(Q || P) 可以展开为:
D_KL(Q || P) = E_{Q(x)}[E(x)] - H(Q) + log Z
其中 H(Q) 是Q的熵。我们定义:
- *均能量:
E_{Q(x)}[E(x)] - (负)熵:
-H(Q) - 自由能:
*均能量 - 熵 = E_{Q(x)}[E(x)] - H(Q)
由于 log Z 是常数,最小化 D_KL(Q || P) 等价于最小化自由能。最小化*均能量本身会得到一个集中在最低能量状态(MAP估计)的确定性分布;最大化熵会得到一个均匀分布。而最小化自由能(即*均能量减去熵)则能*衡两者,最终恢复出我们关心的真实分布P。如果Q是一个受限的、易于处理的分布族,那么优化得到的Q就能给出真实边缘分布的*似。
朴素*均场算法推导 🧮
有了自由能最小化的目标,我们现在为具体的模型推导算法。我们假设真实分布P是一个成对马尔可夫随机场,所有变量是离散的。我们选择完全因子化的分布作为*似族Q,这种方法称为朴素*均场。
我们用参数 μ_{s,k} 表示在分布Q中,变量 x_s 取值为 k 的概率。我们需要在约束(每个节点的概率和为1)下,最小化自由能 F(μ) = *均能量 - 熵。
- 熵项:由于变量独立,联合熵等于各变量熵之和。
H(Q) = -∑_s ∑_k μ_{s,k} log μ_{s,k} - *均能量项:由于P是成对MRF,其能量是节点和边上的势函数(的负对数)之和。计算其在Q下的期望,利用了Q的因子化性质。
E_{Q}[E(x)] = ∑_s ∑_k μ_{s,k} * φ_s(k) + ∑_{(s,t)∈E} ∑_j ∑_k μ_{s,j} μ_{t,k} * φ_{st}(j, k)
使用拉格朗日乘子法处理概率和为1的约束,然后对参数 μ_{s,k} 求导并令导数为零。经过推导(过程略),我们可以得到坐标下降更新公式。对于每个节点s,固定其邻居的当前估计 μ_{t},更新其自身的分布:
μ_{s,k} ∝ exp( -φ_s(k) - ∑_{t∈N(s)} ∑_{j} μ_{t,j} * φ_{st}(k, j) )
然后进行归一化,使得 ∑_k μ_{s,k} = 1。
这个公式非常直观:节点s取值为k的“概率”正比于其自身的“能量” φ_s(k) 加上其所有邻居的“*均能量”贡献(用邻居的当前边缘分布 μ_{t} 加权*均),然后取负指数。
*均场作为消息传递 📨
上一节我们得到了坐标更新公式,本节我们将其表述为一种消息传递算法,这有助于理解其与其它算法(如置信传播)的联系。


朴素*均场的更新可以写成类似置信传播的消息传递形式:
- 置信(*似边缘):
b_s(k) = μ_{s,k} ∝ exp(-φ_s(k)) * ∏_{t∈N(s)} m_{t→s}(k) - 消息更新:
m_{t→s}(k) ∝ exp( -∑_j μ_{t,j} * φ_{st}(k, j) )
与置信传播相比,消息计算方式不同:*均场是在对数能量域 (φ) 进行加权*均,然后取指数;而置信传播是直接在概率域对势函数进行加权*均。此外,*均场的更新是坐标下降,每一步都保证自由能下降,因此算法总是收敛(可能到局部最优)。而置信传播在带环图上可能不收敛。

案例研究:语义图像分割 🖼️
理论需要实践检验。*均场方法在计算机视觉的语义图像分割任务中取得了巨大成功。

在一个前沿工作中,研究者使用了一个全连接的成对MRF模型(每对像素之间都有边)。在这种极度稠密的图上,精确推断是不可能的。吉布斯采样可以得到高质量的分割结果,但处理一张图像需要36小时。

应用朴素*均场变分推断后,得到了视觉上非常相似的高质量结果,而每张图像的处理时间仅需0.2秒,速度提升了数个数量级。尽管*似分布Q假设所有像素独立,但通过迭代的消息更新,模型有效地传播了全局上下文信息,纠正了仅基于局部特征分类的错误。
这个案例表明,即使是最简单的因子化假设,结合有效的优化,也能在复杂模型上实现强大而高效的*似推断。
超越朴素*均场:结构化*均场 🏗️
朴素*均场假设所有变量独立,这有时限制太大。我们可以通过结构化*均场来引入一些依赖关系。
其核心思想是:不再用完全因子化的Q,而是用一个推断可处理的子图结构(例如,一组不相交的树或链)来定义Q。我们将原始图的边分为两类:
- 核心边:包含在子图结构中的边,在Q中精确建模其依赖关系。
- 残差边:不在子图结构中的边,在Q中假设其端点变量独立(即用*均场方式处理)。
例如,在一个网格中,我们可以只保留垂直边作为核心边(形成一系列链),而将水*边作为残差边。
推导结构化*均场的自由能表达式会更复杂,因为它需要参数化树结构分布的联合概率并计算其熵(涉及互信息项)。最终,优化过程会导出一个混合消息传递算法:
- 对于核心边,使用置信传播风格的消息更新。
- 对于残差边,使用*均场风格的消息更新。
这种方法比朴素*均场更灵活,能给出更紧的证据下界和通常更准确的边缘估计,同时如果核心边构成一个森林,算法依然能保证收敛。
总结 🎓
本节课我们一起学习了变分推断,特别是*均场方法。
- 我们从信息论基础和变分推断的通用框架出发,理解了通过优化来*似复杂分布的核心思想。
- 我们深入探讨了*均场方法,它通过最小化
D_KL(Q || P)来最大化证据下界,其目标函数可以解释为最小化自由能(*均能量 - 熵)。 - 我们为成对MRF模型推导了朴素*均场的具体算法,它是一种坐标下降法,也可以视为一种保证收敛的消息传递算法。
- 通过语义图像分割的案例,我们看到了*均场方法如何将处理全连接图的时间从数十小时缩短到零点几秒,展示了其强大的实用价值。
- 最后,我们简要介绍了结构化*均场,它通过在图的一部分保留精确结构来提升*似能力,其算法是*均场与置信传播更新的混合体。

变分推断为我们提供了一类强大、灵活且通常高效的确定性*似推断工具,是处理复杂概率模型中不可解推断问题的重要武器。
017:贝特变分方法与循环信念传播
在本节课中,我们将学习循环信念传播的理论基础,了解其与变分推断的联系,并探讨其在脑机接口中的一个具体应用。
理论部分:变分推断与信念传播的几何视角
上一节我们介绍了变分推断的基本思想。本节中,我们来看看如何从几何角度理解*均场和信念传播方法。
边际多面体与局部一致性
首先,我们从一个简单的二元变量模型开始。假设有两个二元变量 \(x_1\) 和 \(x_2\),其联合分布可以用指数族模型表示:
其中,\(\theta_1, \theta_2, \theta_{12}\) 是参数。这个模型定义了四个可能状态的概率。
我们可以用特征期望值 \(\mu_1 = \mathbb{E}[x_1]\), \(\mu_2 = \mathbb{E}[x_2]\), \(\mu_{12} = \mathbb{E}[x_1 x_2]\) 来描述这个分布。然而,这些期望值 \(\mu\) 不能独立指定,它们必须位于一个被称为边际多面体的凸区域内。这个区域由所有可能的联合分布产生的期望值向量构成。
更一般地,对于任何指数族模型,边际多面体 \(\mathcal{M}(G)\) 是所有可能的期望值向量 \(\mu\) 的集合,使得存在一个分布 \(p\),其期望特征向量等于 \(\mu\)。这个多面体是凸的,但其顶点数量随变量数呈指数增长,直接处理非常困难。
*均场方法的几何特性
*均场方法通过假设变量间独立或依赖关系更简单(例如,移除原图中的一些边)来*似复杂分布。这等价于在指数族模型中强制某些参数(如边参数 \(\theta_{ij}\))为零。
因此,*均场所能表示的分布集合是原边际多面体 \(\mathcal{M}(G)\) 的一个非凸子集。虽然它包含了所有顶点(即确定性分布),但由于其非凸性,优化*均场目标函数时可能会遇到局部最优解。
以下是一个简单的例子,展示了即使在两个变量的模型中,*均场目标函数也可能存在多个局部最优解:
- 考虑两个取值为 \(\{-1, +1\}\) 的变量,其分布为 \(p(x) \propto \exp(\theta x_1 x_2)\)。
- *均场假设变量独立,即 \(q(x) = q_1(x_1)q_2(x_2)\)。
- 在此假设下,目标函数(变分下界)在参数空间(例如固定 \(\mu_1 = \mu_2\) 的切片上)可能呈现非凸形状,存在多个固定点。
这种非凸性意味着,在实际应用中运行*均场算法时,不同的初始化可能导致收敛到不同的(次优)解。一个实用的解决方法是尝试多种不同的初始化。
循环信念传播的几何*似
循环信念传播做出了不同的*似。它并不要求分布属于严格的边际多面体 \(\mathcal{M}(G)\),而是放宽要求,只满足局部一致性约束 \(\mathcal{L}(G)\)。
以下是局部一致性约束的定义:
- 对于每个节点和每条边,其边际分布是有效的概率分布(非负且和为1)。
- 对于每条边 \((s, t)\),其联合边际分布 \(q_{st}(x_s, x_t)\) 在边缘化掉一个变量后,必须与对应节点的边际分布 \(q_s(x_s)\) 和 \(q_t(x_t)\) 一致。
显然,任何真实分布都必须满足这些约束,因此 \(\mathcal{M}(G) \subseteq \mathcal{L}(G)\)。对于树状图,两者相等;但对于带环的图,\(\mathcal{L}(G)\) 是一个更宽松的凸外*似。例如,三个变量构成环时,可以构造出满足所有两两局部一致性、但无法由任何三维联合分布产生的“边际”集合。
循环信念传播的第二个*似是关于熵的。它使用贝特*似来估计分布的熵:
其中 \(H\) 是熵,\(I\) 是互信息。这个公式在树状图上精确成立,但在带环图上只是一个*似,有时甚至可能得出负熵(这是不可能的)。
尽管存在这些*似,对于稀疏图,循环信念传播通常能给出非常准确的边际估计,其性能往往优于容易陷入局部最优的*均场方法。
加权信念传播与凸上界
为了改进循环信念传播,我们可以寻求一个具有更好理论性质的*似。一个想法是使用树状分布的熵来构造原分布熵的凸上界。
具体做法如下:
- 从原图中选择一棵生成树(即包含所有节点的树状子图)。
- 考虑一个分布,其在该树上的边际与原分布相同。
- 由于树状分布是在更少约束下最大熵的结果,其熵不小于原分布的熵。
- 因此,任何树状分布的熵都是原分布熵的一个上界。
我们可以进一步考虑一个生成树的分布(即一组树及其对应的概率)。取这些树熵的加权*均,我们得到一个更紧的凸上界。这个上界对应的优化问题是凸的,具有唯一最优解。
令人惊讶的是,优化这个上界对应的算法,可以通过对标准信念传播算法进行微小修改得到,即加权信念传播或分数信念传播。其消息更新规则为:
其中 \(\rho_{st}\) 是边 \((s,t)\) 在所选树分布中出现的期望频率(介于0和1之间)。
这种加权信念传播具有以下性质:
- 当所有权重 \(\rho_{st} = 1\) 时,它退化为标准循环信念传播。
- 当权重 \(\rho_{st} \to \infty\) 时,在极限下它等价于*均场方法。
- 当权重 \(\rho_{st}\) 取自某个树分布时,它优化一个凸上界,通常具有更好的收敛性和稳定性。
应用部分:脑机接口中的轨迹解码
现在,让我们转换视角,看一个循环信念传播在脑机接口中的具体应用。


背景与任务
脑机接口旨在让瘫痪患者通过思维控制外部设备,如电脑光标。系统通过植入运动皮层的电极阵列读取神经元活动,并实时解码用户的运动意图。
一个常见的实验任务是“中心-外目标”任务:屏幕上出现一个目标,用户需要控制光标移动到目标上并停留片刻。这模拟了使用光标进行点击的基本操作。
传统方法:卡尔曼滤波器
长期以来,state-of-the-art的解码器是卡尔曼滤波器。其模型如下:
- 状态:用户期望的运动方向,表示为一个二维向量 \(d_t\)。
- 动力学模型:假设运动方向随机游走,\(d_{t+1} = d_t + \epsilon_t\)。
- 观测模型:假设第 \(i\) 个电极的神经活动(如放电功率)\(z_t^i\) 服从高斯分布,其均值是状态 \(d_t\) 的线性函数。
卡尔曼滤波器利用该线性高斯模型进行高效的递归状态估计。其观测模型的线性假设源于神经科学的发现:许多运动皮层神经元具有“方向调谐”特性,即其*均放电率随运动方向*似呈余弦变化。
改进模型:多尺度半马尔可夫模型
传统卡尔曼滤波器模型存在局限:
- 观测非线性:神经活动与运动方向的关系可能比简单的余弦函数更复杂。
- 目标信息缺失:用户意图是到达目标,而不仅仅是当前运动方向。由于解码噪声,光标路径会弯曲,导致所需运动方向不断变化。如果能直接推断目标,可能获得更*滑、鲁棒的控制。
因此,我们提出了一个更丰富的多尺度半马尔可夫模型:
- 状态变量:
- \(G_t\):离散化的目标位置(屏幕上的一个网格点),变化缓慢。
- \(\theta_t\):当前光标指向目标所需的角度,变化较快。
- \(P_t\):光标当前位置(已知)。
- \(C_t, B_t\):计数器,用于模拟在目标和角度状态停留的非几何分布时长(半马尔可夫特性)。
- 依赖关系:
- 给定目标 \(G_t\) 和光标位置 \(P_t\),可以计算理想角度。
- 实际运动意图角度 \(\theta_t\) 围绕该理想角度波动(用冯·米塞斯分布建模)。
- 神经观测 \(Z_t\) 依赖于角度 \(\theta_t\)(可能通过更灵活的非线性基函数建模)。
该模型通过图结构明确表示了目标、角度和观测之间的多尺度时间关系。
推理算法:博伊斯-查普曼*似与循环信念传播
上述模型是一个复杂的动态贝叶斯网络。为了进行实时在线推理,我们采用了博伊斯-查普曼*似,这本质上是循环信念传播在时序模型上的一个特定应用。
推理步骤的核心思想是:
- 在时间步 \(t\),假设来自过去的信息关于目标 \(G\) 和角度 \(\theta\) 是*似独立的。
- 将当前时间片 \(t\) 的所有变量(\(G_t, \theta_t, P_t, C_t, B_t, Z_t\))视为一个静态贝叶斯网络。
- 在这个静态网络上运行联结树算法(一种精确推理算法),计算当前时间片变量的边际分布。由于模型结构经过精心设计,这个计算可以高效完成。
- 将计算出的边际信息向前传递到下一个时间步。
这个过程可以解释为在时间轴展开的模型上进行循环信念传播,其中消息在时间步内和时间步之间传递。对于这类动态模型,甚至可以理论分析这种*似误差的界限。
结果与优势
实验表明,与传统的卡尔曼滤波器相比,这种基于更丰富图模型和*似推理的方法能够:
- 产生更*滑、更直接的光标运动轨迹。
- 为用户提供更轻松、更直观的控制体验。
- 得益于图模型的模块化特性,易于扩展(例如,集成点击意图、语言模型等)。
总结
本节课中我们一起学习了:
- 变分推断的几何视角:理解了边际多面体、局部一致性约束,以及*均场(非凸下界)和循环信念传播(基于凸外*似的*似)的几何特性。
- 加权信念传播:作为一种改进,它通过树分布的凸组合提供熵的上界,从而得到一个具有唯一解且更稳定的凸优化问题,并通过修改消息权重来实现。
- 脑机接口应用:看到了如何将图模型和*似推理(特别是循环信念传播的思想)应用于神经解码问题。通过构建一个包含目标、角度等多状态变量的动态图模型,并利用高效的在线*似推理,实现了比传统卡尔曼滤波器更优的光标控制性能。

这些内容展示了图模型理论如何指导算法设计,以及复杂的*似推理方法如何解决具有挑战性的实际问题。
018:贝叶斯非参数简介 🧠
在本节课中,我们将学习一个与图形模型交叉的高级主题——贝叶斯非参数方法。这些方法旨在解决许多包含隐变量的模型(如具有隐状态的马尔可夫模型、具有隐簇的混合模型或具有隐社区的关系模型)中的一个核心问题:如何选择隐变量的数量(例如,社区的数量)?我们将看到,贝叶斯非参数方法通过构建能够自动确定数据合适复杂度、并能随着数据量增长而优雅扩展的模型,来巧妙地解决这个问题。


回顾:参数化混合模型 🔄
在深入贝叶斯非参数之前,我们先回顾一下已经学过的参数化模型,特别是有限混合模型,以建立清晰的符号体系。
想象我们想用高斯混合模型拟合数据。在经典的混合模型中,我们假设有 K 个已知且恒定的簇。每个簇 k 有其均值 μ_k 和协方差矩阵 Σ_k,以及出现的频率 π_k。给定这些参数,数据的边际似然是高斯分布的混合:

p(x) = Σ_{k=1}^{K} π_k * N(x | μ_k, Σ_k)
如果组件数量 K 足够大,理论上可以任意好地逼*任何分布。
有时我们不仅对估计密度感兴趣,还想进行聚类。在生成模型中,每个数据点都来自某个高斯分布。如果我们不知道真实的簇分配,就需要根据数据推断这些分配。根据贝叶斯规则,在已知模型参数的情况下,数据点 i 属于簇 k 的后验概率为:
p(z_i = k | x_i, θ) ∝ π_k * N(x_i | μ_k, Σ_k)
这只是一个简单的归一化过程。
正则化与狄利克雷先验 🛡️
当我们考虑簇数量 K 变得非常大甚至无限时,正则化变得至关重要。在贝叶斯非参数的世界里,正则化是通过设置先验分布来实现的,这些先验即使在世界存在大量潜在簇的情况下,也能控制其特性,防止过拟合并保证对新数据的良好泛化。
狄利克雷过程是有限狄利克雷分布的推广。狄利克雷分布是定义在单纯形(即和为1的非负向量)上的分布,常用作离散概率分布的贝叶斯先验。其概率密度函数为:
p(π | α) ∝ Π_{k=1}^{K} π_k^{α_k - 1}
其中 α_k 是分布的参数。我们可以将其参数化为一个均值向量,而 α 参数之和控制着方差。特别地,方差与这些概率之和成反比。

当所有 α_k 很小时(例如都小于1),狄利克雷分布会倾向于产生稀疏的向量,即大部分概率质量集中在少数几个分量上,而其他分量概率很低。这种“偏好稀疏性”的特性,在簇数量很大时是一个很好的先验,因为它鼓励模型认为除非数据强烈支持,否则只有少数簇是高概率的。
应用于有限混合模型 🧩
我们可以将对称狄利克雷先验应用于有限混合模型的混合权重 π。通常我们将其参数化为 Dir(α/K, ..., α/K),其中 α 是一个总的质量参数,被均匀地分给 K 个分量。当 K 增大时,每个 α/K 会变小,从而得到一个偏好稀疏性的先验。
完整的生成式图形模型如下:
- 从
Dir(α/K, ..., α/K)中抽取混合权重 π。 - 对于每个簇 k,从基分布 H(例如正态逆Wishart分布)中抽取其参数 θ_k。
- 对于每个数据点 i:
- 从分类分布
Cat(π)中抽取簇分配 z_i。 - 从分布
F(θ_{z_i})(例如高斯分布)中抽取观测值 x_i。
- 从分类分布
混合模型的另一种视角:离散测度 🎯
上一节我们回顾了标准的混合模型表示法。本节中,我们来看一种不同的、看似奇怪但能引向有趣方向的思考方式。
我们可以将混合模型表示为一个离散概率测度 G:
G = Σ_{k=1}^{K} π_k * δ_{θ_k}
其中 δ_{θ_k} 是在点 θ_k 处的点质量(或狄拉克δ函数)。这可以看作是一个在参数 θ 空间上的离散分布:每个“尖峰”的位置 θ_k 代表一个簇的参数,其高度 π_k 代表该簇的概率。
在这个视角下,生成模型变为:
- 从先验分布中抽取这个离散测度 G(它依赖于超参数 α 和 H)。
- 对于每个数据点 i:
- 从 G 中抽取一个参数 θ̄_i。由于 G 是离散的,这等价于以概率 π_k 选中 θ_k 并复制它。
- 从以 θ̄_i 为参数分布
F(θ̄_i)中抽取观测值 x_i。

这种表示法虽然目前看起来多此一举,但稍后我们会看到它的妙用。
从分配到分区 🤝
混合模型诱导了数据点的一种分区(partition)。当我们从混合模型中抽样簇分配时,我们得到的是将 N 个数据点分配到 K 个标签的众多方式之一(共有 K^N 种)。然而,在聚类问题中,簇的标签是任意的、没有实际意义的。真正重要的是数据点如何被分组到一起,即分区。


对于 N 个数据点,可能的分配方式数量远大于可能的分区方式数量。例如,3个点有5种分区方式,但若用3个标签来表示,则有27种分配方式。随着数据量增大,这种差异会急剧扩大。

因此,一个高效的、对标签置换不变的模型应该直接对分区进行建模和推理,而不是对标签分配。这不仅能提升计算效率,也符合我们对隐变量模型的要求:先验和推理过程应对簇的重标记保持不变。
狄利克雷过程混合模型 ♾️
现在,我们引入核心的贝叶斯非参数模型——狄利克雷过程混合模型。它是有限混合模型在簇数量 K 趋于无穷时的极限,并保持了良好的数学性质。
狄利克雷过程 DP(α, H) 是一个随机概率测度 G 上的分布。它具有一个关键性质:对测度所在空间的任何有限划分,该随机测度赋予各划分块的概率向量服从一个有限维的狄利克雷分布。
狄利克雷过程混合模型的生成过程如下:
- 从
DP(α, H)中抽取随机测度 G。 - 对于每个数据点 i:
- 从 G 中抽取参数 θ̄_i。
- 从
F(θ̄_i)中抽取观测值 x_i。

这等价于一个无限混合模型:p(x) = Σ_{k=1}^{∞} π_k * F(x | θ_k),其中权重 {π_k} 和参数 {θ_k} 来自某个特定的先验过程。
狄利克雷过程的三种等价构造 🔨
狄利克雷过程可以通过三种等价但视角不同的方式来理解和构造,每种都揭示了其不同方面的特性。
1. 折棍构造 (Stick-Breaking Construction)
这是一种显式生成无限权重序列 {π_k} 的方法。想象一根长度为1的“棍子”,它代表总的概率质量。
- 第一步:从
Beta(1, α)分布中抽取一个比例 V_1。折断棍子的前 V_1 部分作为 π_1。 - 第二步:对剩余的长度为
1 - π_1的棍子,从Beta(1, α)中抽取比例 V_2。折断V_2 * (1 - π_1)作为 π_2。 - 重复此过程,得到 π_3, π_4, ...。
可以证明,这样得到的序列满足 Σ π_k = 1 (几乎必然)。这个过程产生的权重在*均意义上是递减的,这有利于计算。
2. 中国餐馆过程 (Chinese Restaurant Process, CRP)
这是一种直接生成数据点分区(或等价地,生成其隐变量分配序列 {z_i})的方法,它边缘化了权重 π。想象一个有无穷多张桌子的餐馆,顾客(数据点)依次进入。
- 第一位顾客坐在一张新桌子。
- 第 (N+1) 位顾客:
- 以概率
n_k / (α + N)坐在已有 n_k 位顾客的第 k 张桌子。 - 以概率
α / (α + N)坐在一张全新的桌子。
这个过程产生的顾客座位分布(即分区)是可交换的——其概率不依赖于顾客进入的顺序。参数 α 控制着新桌子被创建的概率,α 越大,越容易形成新簇。
- 以概率
3. 波利亚瓮模型 (Pólya Urn Scheme)
这是一种从狄利克雷过程后验预测分布中抽样的方法。设想一个瓮,最初装有来自基分布 H 的“颜色”(即参数)。
- 抽取第一个样本:从瓮中取出一粒沙子,记下其颜色 θ_1,然后将其放回,并额外加入一粒相同颜色的沙子。
- 抽取第 (N+1) 个样本:瓮中现有 N 粒沙子(来自之前的抽取和添加)。以概率
N / (α + N)从现有沙子中均匀抽取一粒,记下其颜色 θ_{N+1},然后放回并添加一粒同色沙子。以概率α / (α + N)从基分布 H 中抽取一个新颜色 θ_{new},记下它,并向瓮中加入一粒该颜色的沙子。
这个过程同样体现了“富者愈富”的特性,并等价于中国餐馆过程。
这三种视角是相互联系的:折棍构造生成了权重 π,基于 π 进行独立抽样得到分配 z,而边缘化 π 后 z 的分布就是中国餐馆过程。波利亚瓮则描述了在给定已有观测下,预测新观测的机制。

从理论到数据:模型的行为与扩展 📈

现在,让我们看看狄利克雷过程混合模型在实际数据生成中表现如何。当我们从这样的无限混合模型中抽样时,尽管理论上存在无限多个簇,但在有限的 N 个数据点中,我们只会观察到有限个簇。观察到的簇数量 K_N 是一个随机变量,其期望值随着 N 的增长而增长。对于狄利克雷过程,期望簇数量以 O(α log N) 的速度增长,这是一种对数级的缓慢增长。

然而,在许多实际领域(如自然语言处理、计算机视觉、社交网络),我们观察到簇的规模分布往往遵循幂律分布(即存在许多小簇和少数大簇),且新簇的发现速度比对数增长更快。标准的狄利克雷过程(对应于折棍构造中 Beta(1, α))无法很好地捕捉这种特性。

为了克服这一限制,我们可以使用皮特曼-约尔过程。它是狄利克雷过程的推广,在折棍构造中使用更一般的 Beta(1-a, b + k*a) 分布,其中 0 ≤ a < 1,b > -a。对应的中国餐馆过程规则变为:顾客以概率 (n_k - a) / (b + N) 加入已有桌子,以概率 (b + K*a) / (b + N) 开设新桌。
皮特曼-约尔过程能产生幂律性质:
- 期望簇数量以
O(N^a)的多项式速度增长。 - 簇规模的衰减遵循幂律(齐普夫定律),而非指数衰减。
这使得它在对文本词汇、图像中物体类别、社交网络社区等具有重尾分布特性的数据进行建模时,表现出更符合经验的归纳偏差,从而成为许多应用(如语言模型*滑)的理论基础。




总结 🎓
本节课我们一起学习了贝叶斯非参数方法的核心思想,特别是狄利克雷过程及其混合模型。我们从回顾有限混合模型及其正则化需求开始,引入了狄利克雷先验。然后,我们探讨了混合模型的离散测度表示法,并指出了直接对数据分区建模的重要性。

接着,我们深入介绍了狄利克雷过程混合模型,并阐述了理解它的三种等价视角:
- 折棍构造:一种显式生成无限权重序列的实用方法。
- 中国餐馆过程:一种直接生成可交换分区、便于推导推理算法的分布。
- 波利亚瓮模型:一种描述后验预测分布的抽样方案。
最后,我们探讨了标准狄利克雷过程在捕捉现实世界幂律分布方面的局限性,并介绍了其扩展——皮特曼-约尔过程,该过程通过引入额外的参数,能够更好地建模具有重尾特性的数据。

在下一讲中,我们将基于这些理论框架,探讨如何为狄利克雷过程混合模型和皮特曼-约尔过程混合模型设计有效的推断(如MCMC和变分方法)和学习算法,并将其应用于更复杂的模型。
019:随机和记忆变分推理



概述

在本节课中,我们将继续探讨贝叶斯非参数建模的思想。上一讲侧重于理论层面,描述了这些分布的工作原理。今天,我们将从一个更高的视角,探讨这些思想如何与图形模型进行多种方式的结合,而不是深入某个具体应用的细节。我们将聚焦于变分推理方法,并借此机会讨论该领域一些更有趣的高级主题。

贝叶斯非参数模型的应用场景
上一节我们介绍了贝叶斯非参数模型的基本概念,本节中我们来看看它们在实际问题中的应用场景。这些非参数方法很多被用于更灵活的聚类任务。其核心思想是:给定数据和算法,目标是发现数据中的簇结构。然而,许多实际应用场景比最初在二维点集上看到的简单聚类示例要复杂得多。
以下是几个应用示例:
- 自然图像块建模:事实证明,如果为每个混合成分(如协方差矩阵)提供足够丰富的参数化,混合模型可以很好地建模自然图像小块的统计特性。你可以从数百万个图像块中学习一个混合模型,得到的簇可能包含*滑区域、纹理区域、不同类型的边缘等。这种模型可用于图像恢复,例如去除噪声或模糊。
- 主题模型:主题模型用于处理文本数据。与简单地将整个文档聚为一类不同,主题模型认为一个文档可能涉及多个主题。模型会尝试在文档内将谈论相同主题的词语分组,并在不同文档间匹配这些主题。
- 时序数据建模:隐马尔可夫模型这类时序模型也可以看作一种聚类。学习HMM后,可以将所有被分配到同一状态的时间点视为一个簇,这为具有时序动态的数据提供了一种聚类方式,例如用于分析人体运动数据以发现活动模式。
- 关系数据聚类:在社交网络或其他交互数据中,可以对人或实体进行聚类,以解释他们之间的交互,这被称为社区发现。这正是作业中看到的模型,而非参数方法可以帮助我们构建此类模型的更灵活版本。
- 图像分割:对于空间数据或图像,可以将来自世界中同一对象的像素位置分组在一起,这本质上也是一种考虑空间依赖性的聚类。
图形模型提供的灵活性,使我们能够通过调整图的其他部分,将这些非参数思想应用于多种不同形式的聚类任务。
模型选择与局部最优问题
在介绍了应用场景后,我们需要面对一个实践中的重大问题:只要模型包含训练数据中未观察到的隐变量,其学习和推理算法通常就容易陷入局部最优(除了少数特殊情况)。例如,在拟合高斯混合模型时,使用EM算法可能会因为初始化不同而收敛到次优解,例如错误地合并或分割了本应独立的簇。
我们希望推理算法是可靠的(这里指即使目标函数非凸,算法也能以高概率获得良好解)。此外,我们还需要考虑可扩展性。许多简单的MCMC方法(如吉布斯采样)按顺序更新变量,难以直接并行化。而我们将要讨论的变分推理的某些变体则可以支持并行化,这对于利用计算集群处理大规模数据集至关重要。
最后,我们将引入非参数思想,以实现模型复杂度的自适应。
从有限混合模型到非参数视角
首先,回顾一下混合模型的符号。设 x 为观测数据,z 为表示数据点来自哪个簇的离散隐变量,π 是各簇的概率向量(和为1),φ 是每个簇的参数(例如高斯分布的均值和协方差)。对于每个数据点,我们从 π 中选取一个簇,然后从该簇对应的分布中采样观测值。
指数族分布的一个优点是,我们可以将似然函数替换为任何指数族分布(如高斯分布、伯努利分布、多项分布等),而今天讨论的所有方法依然适用。
问题的关键在于模型选择:对于一个数据集,我们通常不知道正确的簇数量 K。如果我们尝试用不同 K 值的混合模型去拟合,可能会得到许多不同的局部最优解。在低维数据中,我们或许能通过目视选择,但在高维复杂数据中,我们需要更严谨的自动化方法。
贝叶斯非参数模型提供了一个视角:它假设世界中存在一个无限的潜在簇集合。这个假设是合理的,因为它认为随着我们收集更多数据,总会不断发现新的类别。虽然潜在簇的数量是无限的,但在一个有限的包含 n 个数据点的数据集中,我们观察到的不同簇的数量不会超过 n。推理过程会估计在给定数据下,我们实际“看到”了多少个不同的簇。这样,模型复杂度可以随着数据量的增加而自然增长。
狄利克雷过程与棒棒糖构造
为了实现无限混合,我们使用狄利克雷过程等先验,其构造可以通过棒棒糖过程来理解。想象一根长度为1的“概率棒”,我们依次随机折断一部分作为第一个簇的概率 π1,剩余部分继续折断得到 π2,依此类推。数学上,折断的比例 V_k 服从特定的贝塔分布。
狄利克雷过程先验下,数据中观测到的簇数量期望约为 O(log n)。还有其他先验如皮特曼-约尔过程,能产生簇数量按多项式增长(O(n^σ),0<σ<1)的行为。不同先验适用于不同场景。
推理挑战与变分推断
现在,我们关注推理问题。在图形模型中,我们观测到数据 x,但不知道隐变量 z、簇概率 π 和簇参数 φ。
一种简单的方法是寻求所有未知量的点估计(如最大似然估计),这可以通过一种广义的K-means算法实现:初始化参数,然后交替地(1)为每个数据点分配最可能的簇(E步),(2)根据当前分配重新估计 π 和 φ(M步)。然而,这种方法存在严重问题:随着簇数量 K 增加,似然度总会单调上升(因为更多参数的模型总能拟合得更好),导致模型选择失败。即使引入 π 和 φ 的先验做最大后验估计,通常也不足以解决此问题。对于非参数模型,若进行点估计,似然度可能趋于无穷(例如将每个点都分到自己的簇)。
因此,我们需要更严格的方法来控制复杂度。解决方案是进行贝叶斯推理,计算所有未知量的后验分布 p(z, π, φ | x)。由于精确后验难以计算,我们需要*似方法。
*均场变分推断及其局限
我们可以应用*均场变分推断。最简单的*均场假设所有变量独立。对于无限混合模型,这带来一个难题:每个数据点的分配变量 z_n 是一个支持集为无限(可能来自簇1,2,3,...直至无穷)的分类分布,无法显式表示。
一种解决方案是截断:我们设定一个簇数量的上界 K_max,只考虑前 K_max 个簇,并将剩余的概率质量归入最后一个簇。截断并非选择确切的簇数量,而是设定一个上限,并有一些理论保证这种*似的质量。
经过截断,我们使用因子化的变分分布族 q(z, π, φ) 来*似真实后验,并最小化其与真实后验的KL散度 KL(q||p)。这等价于最大化数据边际似然 p(x) 的一个证据下界。这个下界具有模型选择的能力:当簇数量增加到超过数据真实结构所需时,下界反而可能下降。其直觉是:虽然一个具有许多重叠簇的复杂模型对数据的拟合似然可能略高,但从先验中采样出如此多簇恰好重叠在一起的概率是非常低的,因此其边际似然(综合考虑先验和似然)反而更低。
优化这个下界可以通过迭代更新变分参数来实现,类似于EM算法。然而,这种方法同样会陷入局部最优。不同的初始化可能导致不同的聚类结果,例如出现簇的不当合并或分裂。随着模型和数据规模增大,局部最优问题会更加严重。
改进策略:动态簇操作与随机优化

因此,我们需要更好的方法来自适应模型复杂度。一类方法的核心思想是:在算法运行过程中动态地创建和删除簇。算法可以从单个簇开始,然后根据需要在数据空间的不同部分分裂簇,或者合并看似冗余的簇。变分下界的模型选择能力可以指导这种“生灭过程”的决策。



接下来,我们看看如何实现可扩展的优化。在大规模数据集上,每次迭代遍历所有数据点计算梯度或统计量代价很高。我们可以借鉴深度学习中的随机优化思想,将其应用于变分推断,即随机变分推断。其做法是:在每次迭代中,随机抽取一个数据子集(小批量),仅基于该子集计算变分更新,从而得到全局参数更新方向的一个无偏但带噪声的估计。通过适当降低学习率,算法可以收敛到全数据目标的一个局部最优解。

一个相关的有用技巧是记忆化:我们将数据集分成多个批次,并缓存每个批次上一次计算得到的充分统计量。当重新分析某个批次并更新其统计量后,我们可以通过“旧全局和 - 旧批次统计 + 新批次统计”的方式快速更新全局统计量,而无需重新扫描整个数据集,这实现了常数时间的全局更新。


结合记忆化和随机优化,我们可以高效地实现动态簇操作。例如,要评估合并两个簇是否有利,我们可以快速计算合并后新簇的变分参数(将两个簇的分配概率相加),然后计算变分下界是否提高,从而决定接受或拒绝此次合并。类似地,也可以进行簇的分裂操作。从单一簇初始化开始,算法通过一系列生灭操作,能够可靠地收敛到正确的簇数量,对初始化不敏感。
应用实例:图像去噪与主题建模
这些方法可以应用于大规模实际问题。例如,在自然图像块建模中,我们可以使用具有全协方差矩阵的高斯混合模型来聚类数百万个8x8图像块。学习到的模型可以作为先验,用于图像去噪任务(通过贝叶斯规则,结合噪声似然和图像块先验),并能取得很好的效果。
另一个重要应用是主题建模。层次狄利克雷过程主题模型允许每个文档包含多个主题,并能够从大规模文本语料库(如数百万篇新闻文章)中自动学习主题数量。在模型训练过程中,算法可以动态合并语义相似或冗余的主题,这不仅提高了计算效率,也增强了模型的可解释性。



扩展到隐马尔可夫模型:HDP-HMM
我们可以将非参数思想扩展到隐马尔可夫模型,得到HDP-HMM。在标准HMM中,我们需要预先指定状态数量。而HDP-HMM允许状态空间是无限的,状态转移矩阵是无限维的。通过狄利克雷过程先验的规则化作用,模型倾向于重用一些“流行”的状态,避免过拟合(如每个时间点都进入一个新状态且永不返回)。

HDP-HMM的一个应用是说话人日志:从会议录音中判断有多少个不同的说话人以及每个人何时发言。传统的基于吉布斯采样的推理方法计算成本极高(可能需要数天)。而使用变分推断方法,可以将推理时间缩短数个数量级,达到*乎实时的处理速度,使其更具实用价值。

HDP-HMM还可用于其他时序数据,如从运动捕捉数据中无监督地发现不同的活动模式(如行走、运球、芭蕾跳跃等),或用于生物信息学中的染色质分割任务,从长达数百万个“观测”的基因组数据中自动学习功能状态的数量。

并行化与社区发现


变分推断方法天然支持并行化。例如,在处理多个独立序列或数据批次时,对每个批次的分析可以分配到不同的CPU或GPU核心上并行执行,从而显著加速大规模数据分析。

最后,这些思想也可以应用于社区发现模型。与作业中的模型类似,我们可以构建非参数版本,从大规模社交网络(如数万个节点的网络)中自动学习社区的数量。学习到的社区结构不仅更具可解释性,还能提高链接预测等任务的准确性。
总结

本节课中,我们一起学习了如何将贝叶斯非参数思想与图形模型结合,以解决模型选择、局部最优和可扩展性等挑战。我们重点探讨了基于变分推断的方法,包括:
- 使用截断和*均场*似处理无限混合模型。
- 利用证据下界进行模型选择。
- 通过随机变分推断和记忆化技术实现大规模数据的高效推理。
- 引入动态簇生灭操作以避免局部最优。
- 将这些技术应用于图像建模、主题发现、时序分析(HDP-HMM)和社区发现等多个领域,展示了其灵活性和强大能力。



通过变分推断框架,我们能够在保持模型解释力和理论保证的同时,实现高效、可靠且可扩展的推理,从而处理复杂的现实世界数据。
020:课程项目合集
在本节课中,我们将学习加州大学CS274b课程中多个学生项目的研究内容。这些项目涵盖了从神经科学、传染病学到计算机图形学等多个领域,展示了概率图模型在不同学科中的广泛应用。我们将逐一介绍每个项目的核心目标、方法、结果与未来方向。
项目1:基于小鼠神经记录数据学习神经元连接
概述
本项目旨在利用概率图模型,分析小鼠在不同行为条件下(特别是受到电击前后)的神经元活动数据,以揭示神经元之间的功能连接。
数据与方法
数据来源于微型显微镜记录的小鼠神经元活动。研究人员将小鼠置于实验箱中,在记录过程中施加电击,并观察电击前后神经元活动的变化。
首先,使用传统方法(如动态时间规整聚类算法)对神经元时间序列数据进行初步分析,识别出在电击后表现出高度同步放电的神经元簇。
然而,传统方法在深入分析连接关系方面存在局限。因此,本项目采用了一个半参数贝叶斯模型来检测神经元之间的连接。该模型的核心是描述神经元放电率的函数,其关键参数 β 代表了神经元之间的连接强度(正值表示兴奋性连接,负值表示抑制性连接)。
为了学习模型参数,研究人员使用了马尔可夫链蒙特卡洛方法,并针对不同变量采用了特定的采样策略(如切片采样和球形哈密顿蒙特卡洛)。
结果与讨论
初步结果显示,在电击后的实验条件下,神经元网络中出现了新的连接,并且抑制性连接似乎有所增加。然而,参数 β 的分布大多集中在零附*,且MCMC算法的收敛性不佳,表明模型性能有待提升。
未来方向
未来的改进方向包括:合并多次电击试验的数据以增加统计效力;对数据进行预处理以针对更活跃的神经元;调整时间窗口和分箱大小;以及将神经元空间位置信息纳入模型,因为生物学上距离较远的神经元相互作用的可能性较低。
总结
本节我们介绍了如何利用半参数贝叶斯图模型分析小鼠神经元活动。虽然初步结果显示了电击后连接模式的变化,但模型的收敛性和性能仍需进一步优化。
项目2:贝叶斯神经网络中SGMCMC方法的比较
概述
本项目比较了三种不同的随机梯度马尔可夫链蒙特卡洛方法在贝叶斯神经网络推理中的性能。
背景与方法
在贝叶斯推理中,计算后验概率通常涉及难以处理的高维积分。随机梯度MCMC方法通过使用数据子集(小批量)和梯度信息,提供了可扩展的*似解决方案。
本项目比较了以下三种方法:
- 随机梯度朗之万动力学(SGLD)
- 预条件SGLD(PSGLD):引入预条件矩阵以应对参数曲率差异。
- 随机梯度哈密顿蒙特卡洛(SGHMC):引入动量项以提高混合效率。

研究在贝叶斯神经网络上评估这些方法,使用了波士顿房价(回归)和MNIST/Fashion-MNIST(分类)数据集。

结果与评估
评估指标包括预测精度、积分自相关时间、有效样本量和校准误差。
- 在贝叶斯线性回归中,三种方法得到的后验分布相似。
- 在MNIST分类任务中,SGHMC达到了更高的精度,SGLD收敛速度比PSGLD快。
- 在更具挑战性的Fashion-MNIST任务中,使用预条件器的PSGLD在较大模型上表现出更快的收敛速度和更大的有效样本量。
总结
本节我们比较了三种SGMCMC方法。结果表明,在复杂任务中,引入预条件器或动量项的改进方法(PSGLD, SGHMC)通常能提供更好的收敛性能和不确定性估计。
项目3:利用社会经济数据构建美国移民模式的图表示
概述
本项目旨在构建一个关系图模型,以理解美国各州之间移民流动与社会经济因素之间的关系,从而模拟政策变化对移民模式的影响。
数据与模型构建
项目团队整合了长达15年的州际移民数据,以及薪资、失业率、GDP、犯罪率和地理坐标等社会经济指标。他们将移民流量归一化为离开某州的总体人数比例。
模型采用了一个集体图模型的框架,将州际移民流量(Δ_ij)建模为以Beta分布,其参数由发送州和接收州的元数据(X_i, X_j)通过线性变换决定。模型使用PyTorch实现,并通过梯度下降最大化似然函数进行学习。
结果与发现
学习得到的模型揭示了移民网络的结构:
- 人口流动主要集中在加利福尼亚、德克萨斯和佛罗里达等高人口州。
- 美国东北部及北部各州在模型中的连接度较低,表明这些地区的人口对 socioeconomic 变化的反应可能更不敏感,流动性较低。
- 模型并非简单的人口偏好,例如人口最少的怀俄明州在图中也表现出一定的连接活性。
未来方向
未来工作包括:解释模型系数在社会经济理论中的含义;进行更精细的特征工程;以及探索数据中的潜在社区结构,对行为相似的州进行聚类。


总结
本节我们介绍了一个利用关系图模型分析州际移民的模式。该模型成功识别了主要移民流向和地区差异,为政策模拟提供了基础。
项目4:从数据中学习图模型结构
概述
本项目探索了三种不同的算法,从未标记的普查收入数据中学习特征之间的图模型结构,以进行特征选择和关系推断。
方法比较
研究比较了三种学习方法:
- 基于L1正则化的逻辑回归(作业2方法):将特征转换为二进制后,使用L1正则化逻辑回归学习马尔可夫随机场,通过环传播进行推理。该方法快速,得到了稀疏图,在收入预测上达到了81%的准确率(基线为76%)。
- 贪婪条件熵最小化方法:通过贪婪地添加邻居节点来最小化每个节点的条件熵。该方法能得到较高的准确率,但产生的边较多,导致推理成本上升。
- 节点回归方法:为混合(离散和连续)图模型建模,将联合概率分解为条件分布(高斯分布和多项分布)的乘积,并对每个节点进行L1正则化回归。该方法学习到的图具有可解释性(例如,教育年限与教育程度强相关),准确率达到84%,但计算速度较慢。
结果与观察
- 贪婪方法和节点回归方法在预测精度上优于基础的L1正则化方法。
- 节点回归方法虽然速度慢,但能得到更稀疏、更易解释的图结构。
- 所有方法学习到的图在预测性能上均优于完全连接的图,说明特征选择的有效性。
总结
本节我们比较了三种学习图结构的方法。结果表明,节点回归方法在精度和可解释性之间取得了较好的*衡,而贪婪方法在需要快速得到结果时也是一个可行的选择。
项目5:学习基因调控网络的结构
概述
本项目旨在从单细胞RNA测序数据中学习基因调控网络的无向骨架结构,并识别共表达基因模块。
方法:局部泊松图模型
由于基因表达数据是计数数据,研究者选择了泊松分布。然而,直接定义联合泊松MRF会导致只能建模负依赖关系。因此,项目采用了局部泊松图模型,即只指定每个节点给定其邻居的条件分布为泊松分布。这样既能建模正负依赖关系,又保留了局部马尔可夫性质。
参数学习通过针对每个节点的L1正则化泊松回归完成。模型选择则采用了一种基于一致性的方法:多次对数据子集拟合模型,并选择使得不同子集模型对边存在与否的 disagreement 概率较低的正则化参数 λ。
初步结果与下一步
初步结果显示,学习到的网络边根据λ值的不同而稀疏程度不同,并且边可区分为正相关(蓝色)和负相关(红色)。节点之间的依赖关系并不总是对称的(θ_ij ≠ θ_ji),随着λ增大,非对称性的标准误也会增大。
下一步工作包括:分析不同λ下的基因邻域结构;对更大的基因集进行网络分析;将结果与ICA方法进行比较;并根据已知生物学知识进行验证。
总结
本节我们介绍了一种用于基因表达计数数据的局部泊松图模型。该方法能够学习基因间的非对称依赖关系,为理解基因调控网络提供了新的工具。
项目6:基于递归隐变量模型的ECG数据生成
概述
本项目结合变分自编码器与循环神经网络,构建了一个用于心电图数据生成和建模的递归隐变量图模型。

背景与方法
心电图是反映心脏电活动的时间序列数据。本项目使用Pan-Tompkins算法对心跳进行分割。

模型采用递归变分自编码器,其中观测变量x代表心跳信号,z是隐变量,h是RNN的隐藏状态。在每个时间步,编码器都依赖于前一个时间步的RNN状态(h_{t-1}),从而捕捉时间序列的时序结构。
训练目标是最大化随时间步变化的变分下界。训练完成后,模型可以从隐变量中采样,生成逼真的心跳信号,包括正常心跳和房颤等异常心跳。
总结
本节我们介绍了一个用于ECG数据生成的递归隐变量模型。该模型成功学习了心跳信号的时序结构,并能生成不同类别的合成心跳,在心电信号建模和合成数据生成方面具有潜力。
项目7:网络上的池化检测策略
概述
本项目研究了在传染病检测中,如何利用图模型和最优传输理论来优化池化检测策略,以提高检测效率并重建个体的病毒载量。
背景
池化检测将多个样本混合进行检测,可以大幅减少检测次数,尤其在感染率较低时效率更高。本项目关注非自适应池化策略,即所有检测同时进行。
模型与优化
池化过程可以用矩阵A表示,观测结果y = A * x + noise,其中x是稀疏的个体病毒载量向量。目标是从y和A中重建x。
研究者提出了两种思路:
- 信息论公式:最大化观测y关于x的信息。但由于需要知道x的协方差且问题规模大,难以直接求解。
- 最优传输公式:将病毒载量x和观测y视为两个分布,并寻找它们之间的最优耦合矩阵Q。这可以通过添加熵正则项的Sinkhorn算法高效求解。优化后的耦合矩阵Q可以转化为更高效的池化矩阵A,使得每次检测包含的样本更少,从而提高检测准确性。
因子图与解码
为了高效解码,项目借鉴了低密度奇偶校验码的思想,使用稀疏因子图来表示池化问题,将边的数量从O(N²)降低到约O(N log N)。并计划使用混合高斯先验和置信传播算法来重建*似稀疏的病毒载量向量x。
总结
本节我们介绍了如何利用最优传输理论和稀疏因子图来优化池化检测策略。该方法有望在保持高精度的同时,显著降低大规模检测所需的成本。
项目8:图模型在传染病动力学中的应用
概述
本项目将图模型应用于传染病动力学,旨在从观察到的病例数时间序列中,推断有效再生数Rt,并模拟疾病传播。
模型构建
传统的分支过程模型将当前发病率I_t与有效再生数R_t通过加权历史发病率联系起来:I_t = R_t * Σ (w_s * I_{t-s})。
本项目对此进行了两处改进:
- 添加观测模型:考虑到报告病例数(C_t)只是真实发病率(I_t)的一部分,模型将报告病例数建模为真实发病率和已知检测数量(T_t)的函数。
- 图模型表示:构建了一个三层图模型:观测病例层 -> 真实发病率层 -> 有效再生数层。R_t 本身也通过*滑先验在时间上相关联。
模型使用Stan和哈密顿蒙特卡洛进行实现。
结果
将新模型与忽略检测数量的旧模型在加州橙县COVID-19数据上进行比较,新模型表现出:
- 更*滑的后验估计曲线。
- 更紧致的95%置信区间。
- 在预测未来14天病例时,不确定性显著降低。
- 在均方误差和区间宽度等数值指标上均优于旧模型,仅在区间覆盖率上略有 trade-off。
未来方向
未来工作包括:增加观测模型的灵活性;纳入报告延迟;以及尝试在发病率之间施加稀疏性以简化模型。
总结
本节我们介绍了一个结合了观测噪声的传染病图模型。该模型能提供更准确、更不确定性的有效再生数和病例预测,对传染病监测和政策制定具有参考价值。
项目9:大都会光传输


概述
本项目将大都会-黑斯廷斯这一MCMC算法应用于计算机图形学中的全局光照渲染问题,实现了大都会光传输算法,并与传统方法进行了比较。
背景
渲染方程通过积分计算场景中光线的传播。蒙特卡洛积分是常用方法,双向路径追踪通过从光源和相机分别发射子路径并连接,能有效处理复杂光照。
大都会光传输
MLT算法在双向路径追踪的基础上,引入大都会-黑斯廷斯采样:
- 首先,用双向路径追踪生成一组初始路径,并估计一个归一化因子。
- 然后,通过“路径突变”生成新的路径候选,并根据接受概率决定是否接受该新路径作为样本。
路径突变旨在找到与当前路径相*但贡献值可能不同的新路径,从而更高效地探索高贡献值的路径空间。
结果
在类似水波纹、长隧道等复杂光路场景中,MLT在相同时间内产生的图像噪声远少于传统路径追踪和双向路径追踪。然而,在简单场景中,由于样本相关性和“燃烧期”问题,MLT可能表现不佳。
总结
本节我们介绍了大都会光传输算法。该算法通过MCMC方法智能探索光线路径空间,在处理复杂全局光照效果时能显著提升渲染效率和质量。


项目10:社交网络上的社区检测
概述
本项目利用混合成员随机块模型,在大型同性恋社交网络Hornet的数据上,进行重叠社区检测。
模型:MMSB
混合成员随机块模型允许每个节点属于多个社区。每个节点i有一个社区成员分布向量θ_i。节点i和j之间产生连接的概率,取决于它们各自从自己的成员分布中抽样的社区指示符,以及该社区内部的连接密度β_k。
模型使用随机变分推断进行学习,并采用了多种采样策略(随机节点对采样、随机节点采样、链接采样)来提高在稀疏大图上的计算效率。
结果
- 链接采样效果最好,收敛快,最适合稀疏网络。它检测出了76个重叠社区。
- 批处理推理效果接*链接采样,但每次迭代时间更长。
- 通过K-means对用户的地理位置和语言等协变量进行聚类,得到了8个社区,验证了地理和语言因素对社区形成的影响。
- 网络连接高度集中,少数用户拥有大量连接。
总结
本节我们介绍了如何使用MMSB模型在稀疏社交网络上进行重叠社区检测。链接采样策略在该场景下表现最优,并且协变量分析证实了地理和语言是社区形成的重要驱动因素。
项目11:基于MIF形变配准与迭代图割的无监督器官分割
概述
本项目结合形变配准与迭代图割算法,实现了一种无需人工标注的医学图像(CT/MRI)器官分割方法。
方法
流程分为两步:
- 形变配准:将带有器官掩模的图谱图像配准到目标图像上,得到一个初始的、可能不准确的分割预测。这被建模为一个马尔可夫随机场标记问题,并通过在最小生成树上进行动态规划求解。
- 迭代图割:以上一步的预测作为初始种子点,迭代地运行图割算法来细化分割结果。在每次迭代中,从当前预测的高置信度区域选择新的种子点,用于下一次图割。当预测不再变化时停止。
结果
在肝脏、脾脏和肾脏的CT图像分割任务上,该方法与监督式U-Net进行了比较:
- 在Dice分数上,U-Net仍占优。
- 在95%豪斯多夫距离上,本方法优于U-Net,因为配准引入了更强的形状先验。
- 与单纯形变配准的结果相比,迭代图割能显著改善分割精度,成功修正了配准错误。
- 该方法严重依赖于初始配准的质量,如果初始掩模完全错误,则难以恢复。
总结
本节我们介绍了一种无监督的医学图像分割框架。它通过结合形变配准的全局形状约束和图割的局部边界优化,在缺乏标注数据的情况下取得了有竞争力的结果。
项目12:具有分支特定停止概率的嵌套分层狄利克雷过程主题模型
概述
本项目对嵌套分层狄利克雷过程主题模型进行了简化,引入了分支特定的停止概率,以探索文档处理不同宏观主题时所用术语的泛化与具体程度。
模型改进
在原始NHDP模型中,每个主题节点都有一个停止概率,决定一个词是在当前节点生成还是继续向子树深处游走。
本项目将其简化为分支特定的停止概率。即,每个宏观主题(树的主分支)共享一个停止概率p_j。当词的主题属于分支j时,它游走的深度由一个以p_j为参数的几何分布决定。p_j高意味着文档倾向于用该分支的泛化术语,p_j低则意味着使用更具体的术语。


模型使用随机*均场变分推断进行学习。
初步结果
在《纽约时报》文章数据集上的初步实验显示:
- 模型学习到的主题层次中,高层主题用词更泛化,深层子主题用词更具体。
- 不同文档、不同宏观主题的停止概率存在异质性。例如,“体育”和“科技”主题倾向于使用具体术语(p_j小),而“娱乐”和“家庭”主题则既有具体也有泛化讨论。
总结
本节我们介绍了一个改进的NHDP主题模型。通过引入分支特定的停止概率,模型能够量化文档对不同主题讨论的深入程度,增强了主题层次的可解释性。
项目13:将生成对抗网络与有向图模型结合用于EEG建模
概述
本项目提出了一种新框架,将生成对抗网络的强大生成能力与概率图模型的结构化先验知识相结合,用于脑电图信号的生成和建模。
方法
框架包含生成器G(隐变量z -> 脑电信号x)和推理器E(脑电信号x -> 隐变量z)。为了刻画隐变量的复杂结构,引入了高斯混合模型作为先验。
训练采用期望传播算法作为一种确定性的变分推理方法,通过最小化生成模型P和推理模型Q之间的散度来学习参数。散度估计通过多个针对不同因子(对应GMM的不同组件)的判别器来完成。
推理时,则使用MCMC方法(如辅助变量采样)在给定观测数据的情况下对隐变量进行采样。



结果
在由神经质量模型生成的EEG数据上,将本方法(Graphical-GAN)与原始GAN进行比较:
- Graphical-GAN生成的信号在频域(功率谱)和时域(均值、标准差)上与真实数据匹配得更好。
- 瓦瑟斯坦距离测量也表明,Graphical-GAN生成的数据分布更接*真实分布。
总结
本节我们介绍了一个结合GAN与图模型的混合框架。该框架成功地将结构先验注入到EEG生成模型中,产生了更逼真、统计特性更匹配的合成脑电信号。
项目14:基于图模型的模型化多智能体强化学习
概述
本项目探讨了如何将图模型(特别是变分推理)融入模型化多智能体强化学习,以提高在合作型马尔可夫博弈中的样本效率。
背景
模型化RL通过学习和利用环境转移模型(参数θ)进行规划,比无模型RL更样本高效。在单智能体环境中,使用高斯过程等模型并配合变分推理学习θ已取得成功。
扩展到多智能体
本项目将这一思路扩展到多智能体场景,如“社交距离博弈”。在该博弈中,智能体希望聚集以获得效用,但聚集人数超过阈值(由θ定义)会导致状态变差(如触发社交隔离)。
实验与结果
在实验中,比较了两种方法:
- 无模型策略梯度:直接学习策略。
- 模型化方法:先使用少量轨迹通过推理估计θ,然后用此信息初始化或指导策略。
结果显示,模型化方法能显著加快收敛速度,所有实验在25次迭代内收敛,而无模型方法有些需要更长时间。
未来方向
未来可考虑更复杂的θ先验、更多智能体,以及在只能观察到部分智能体行动(数据缺失)的情况下进行推理。
总结
本节我们介绍了如何利用图模型和变分推理为多智能体强化学习引入环境模型学习。初步结果表明,该方法能有效提升在合作型博弈中的学习效率。
项目15:用于特征选择的混合模型
概述
本项目设计了一个特殊的混合模型,在完成分类任务的同时,自动进行特征选择,并评估各特征的信息量。


模型设计
模型在朴素贝叶斯分类器的基础上进行了扩展:
- 对于每个特征,引入一个二元“特征开关”变量S。
- 如果S=1,则该特征观测值来自与类别标签相关的分布(簇0或簇1)。
- 如果S=0,则该特征观测值来自一个均匀分布(第3个簇),代表该特征与标签无关,是“无关信息”。
- 每个特征开关S有一个参数α,称为信息权重,服从Beta先验。α越大,表示该特征越具有判别信息。
结果
在威斯康星乳腺癌数据集上:
- 模型成功识别出信息量高(α接*0.99)和信息量低(α接*0.41)的特征。
- 丢弃10个最不重要的特征,模型准确率与使用全部30个特征时相*。
- 丢弃10个最重要的特征,错误率翻倍。
- 仅使用最重要的1个特征,其准确率甚至高于使用20个最不重要特征的模型。
总结
本节我们介绍了一个内嵌特征选择机制的混合模型。该模型不仅能进行预测,还能通过信息权重α量化每个特征的重要性,为高维数据下的特征选择和模型解释提供了有效工具。

课程总结
在本节课中,我们一起学习了CS274b课程中涵盖广泛领域的15个学生项目。这些项目生动地展示了概率图模型作为一种强大的建模工具,如何被应用于神经科学、计算生物学、传染病学、社会学、计算机图形学、自然语言处理等多个前沿交叉学科。从推断神经元连接、模拟疾病传播、优化群体检测,到生成医学信号、渲染复杂光影、检测社交社区,每个项目都体现了将图模型理论与具体实际问题相结合,并通过创新方法解决挑战的过程。希望这些案例能为大家在自己的研究或应用中运用图模型带来启发。
021:可处理的概率模型
在本教程中,我们将学习可处理的概率模型。这是一个在不确定性人工智能领域非常丰富的方向。随着该领域的发展,出现了大量首字母缩略词,构成了AI模型的一锅“字母汤”。今天的目标之一就是理清这锅“字母汤”。我们将简要介绍所有这些你可能听说过的AI表示模型。其中一些模型实际上源于传统的逻辑AI,如BDD,它们与可处理的概率模型密切相关,我们稍后会讨论。但现在,我们将专注于那些真正表示概率分布的模型。


在这些模型中,有经典的概率图模型和其他类型的表示,不幸的是,它们通常是难以处理的。因此,本教程的大部分内容将围绕如何构建可处理的概率模型展开,我们稍后会深入探讨。
在所有可处理模型中,问题是:如果你想要可处理性,需要付出什么代价?我们将讨论这些模型的表达能力,以及你是否需要做出妥协。这就是高层次上的收获:让我们理解整个研究领域。
以下是本教程的大纲。我们将首先阐述为什么需要可处理推理,以及表达能力和可处理性之间的权衡。然后,我们将尝试为可处理电路引入一种通用语言,它将涵盖许多现有的形式化方法,并尝试建立一个抽象的通用框架来讨论这些问题。
一旦我们了解了这种表示方法,我们将讨论如何从数据中获取它,或者如何从你喜欢的其他类型模型编译得到它。最后,我们将讨论应用并进行总结。
第一部分:为什么需要可处理推理
在开始我们的可处理推理之旅之前,让我们先问一个问题:为什么一开始就需要概率推理和概率模型?
假设你是一个决策者,负责管理特拉维夫的交通。你可能会问自己:今天是星期一,并且Elatha街发生交通堵塞的概率是多少?或者,你只是一个计划自己每周行程的上班族,你可能想知道哪一天最有可能在上班路线上遇到交通堵塞。这些都是我们可以用自然语言表述的基本问题,它们就是查询。
那么如何回答这些问题呢?假设你现在有数据。你会怎么做?当然,你会拟合一个预测模型,比如一个带有神经网络的分类器。你观察问题并试图预测答案。不,因为你无法提前知道所有可能的问题,你还需要答案,而你永远不会观察到所有情况。相反,我们要做的是拟合一个我们世界的概率模型。
这个模型是 M,我们将查询这个模型。这个模型就像一个黑盒。我们向模型提出一个问题,这些答案就是我们进行概率推理的方式。我认为我们UAI社区对此都有共识。
让我们更深入地看看这类问题。对于第一个问题:“今天是星期一,并且Elatha街发生交通堵塞的概率是多少?”我们如何回答?让我们稍微形式化一下。
假设我们有一组随机变量 X,我们有时间、星期几,以及一组布尔变量,指示每条街道是否发生交通堵塞。回答这个查询基本上是计算根据我们的模型,今天是星期一且Elatha街的布尔变量为真的概率。我们忽略了所有其他变量。所以,基本上,我们是在计算边缘概率。我们边缘化了所有其他变量。
对于第二个查询,我们需要做更复杂的事情。在同一个形式化例子中,我们实际上要做的是计算 argmax,即根据我们的模型 M,星期几是特定的一天,并且我们有这个逻辑约束,使得所有可能的路径都通向我们的上班路线。这肯定更复杂,涉及边缘概率、进行MAP预测(我们稍后会看到MAP的含义),以及进行一些逻辑推理。
到目前为止,我们看到的是两个不同的查询,它们属于不同的查询族。既然我们现在知道我们真的想做概率推理,让我们尝试更正式一点,看看什么是可处理推理,这些查询是什么,它们与模型有什么关系。
这里有一个简单的定义。我们可以说,一个概率模型族 M 对于一类查询 Q 是可处理的,当且仅当,无论我选择哪个 M 和哪个来自该族的查询 Q,我都能在多项式时间内(相对于查询大小和模型大小)精确计算该查询的结果。
在实践中,这个多项式时间通常是线性的,这很好。但有一个注意事项。我们还需要确保模型的大小和查询的大小相对于输入大小也是多项式的。也就是说,我的模型类和查询类是紧凑的表示。总而言之,我们真的希望能够在多项式时间内回答这些查询。
那么精确推理呢?我们真的需要*似推理吗?问题是,当我们一开始就可以精确计算时,为什么还要*似呢?当然,正如Guy所说,这是有代价的,我们稍后会看到是什么代价。同样要记住,有时*似也不便宜,它们也是难以处理的,而且大多数时候它们也没有保证。Rina会有一个非常好的演讲,讨论如何在*似推理过程中获得保证,但通常它们没有保证。无论我们如何链接*似,如果我们没有保证,就像蒙着眼睛飞行,我们不知道要去哪里。这是坚持精确推理的一个强烈动机。
这是接下来15分钟我要讲的内容。我将介绍一系列这类查询,同时回顾一系列模型族,我们将探究它们是否可处理,表达能力如何,我们在权衡什么。之后,我们将引入概率电路作为一种语法来生成可处理模型。

让我们从可能想提出的一个非常基本的概率查询开始。这类问题是:“今天是星期一,时间是中午,并且只有El街发生交通堵塞的概率是多少?”显然,我们需要实例化所有变量。所以,基本上是:今天是星期一,时间是12点,对于我们所有的布尔变量,它们都有一个值。除了El街的那个,其他都是0。这是完全证据。这看起来可能是一个非常琐碎的查询,我们可能一开始并不真想问这个。但如果我们在学习和推理中真的做概率推理,我们已经看到很多次了,每当我们做最大似然学习时,因为我们只是想最大化数据的似然,而数据通常是完整的。

所以这是我们的第一类查询,最简单的。我们将使用哪种概率模型?当然,我们会使用生成对抗网络,它们非常流行。嗯,不完全是。首先,生成对抗网络甚至没有显式的似然,这就是为什么你真的需要对抗训练。所以人们会说,是的,但我可以通过采样来计算这些完全证据概率,采样很多次。但你需要很多样本。而且,如果你在做对抗学习,你迟早会遇到模式崩溃。所以你可能看不到很多好的配置,你的估计会有很大偏差。
所以我们排除生成对抗网络。既然我们不使用生成对抗网络,如今,我们必须使用变分自编码器。变分自编码器现在有显式的似然,所以我们可以计算这些完全证据。这很酷。所以我们将使用变分自编码器。嗯,不完全是,因为在这种情况下,我们确实有显式的似然,但我们实际上无法精确计算它。所以这是难以处理的,因为变分自编码器是一个具有无限且不可数个分量的混合模型。所以对于变分自编码器,没有可处理的完全证据查询,优化它也是有问题的。所以让我们排除它们。让我们回到一个更通用的模型族,变分自编码器属于这个族:概率图模型。
PGM在UAI社区很受欢迎,因为它们提供了模型和如何在其上进行推理之间非常清晰和明确的分离。你知道节点代表随机变量,边定义了它们之间的依赖或独立关系。你有一系列推理算法作为黑盒运行。所以我们真的想使用PGM,但我们知道有一些注意事项。所以让我们回顾一下概率图模型,看看它们是否可处理。
它们有多种形式,但通常我们可以说它们是无向的或有向的。无向的如马尔可夫网络,马尔可夫网络是非归一化概率分布的因子分解。这些因子我们可能可以计算完全证据,但问题是我们还需要计算配分函数来归一化它。这是难以处理的。这与变分自编码器的难以处理性类似。我们基本上需要对指数级数量的值进行求和或积分。所以马尔可夫网络对于这种非常基本的概率推理来说并不好。
让我们转向有向模型,如贝叶斯网络。贝叶斯网络仍然是因子化模型,但现在它们是归一化的,我们不需要计算配分函数,我们可以在与变量数量成线性关系的时间内计算完全证据。所以它们很好。让我们暂时坚持使用贝叶斯网络。
让我们转向我们想要回答的下一类查询。我们刚刚看到了这类查询:边缘查询。基本上,当我问类似“今天是星期一并且Elatha街发生交通堵塞的概率是多少”时,我没有考虑时间,也没有考虑所有其他街道的布尔变量,我边缘化了它们。所以,一般来说,我必须对所有剩余变量进行积分,或者如果它们是离散的,就对它们求和。这些就是边缘概率。假设我可以以一种有吸引力的方式计算边缘概率,那么我也可以做条件查询。条件查询例如:“给定今天是星期一,那么……”自然语言略有不同。这将归结为计算我的查询变量和证据变量的联合概率分布与一个边缘概率的比率。这就是为什么如果你能做边缘概率,你也可以做条件查询。


让我们回到我们的模型类。我们说过,哦,很酷,我们可以使用贝叶斯网络来回答条件查询。嗯,不完全是,因为边缘查询本身是困难的。要精确计算它们,我们遇到了麻烦,因为这是一个#P完全问题,即使是*似,如果我们真的想要保证,也是难以处理的。这是由于概率图模型的通用算法会查看模型的结构和称为树宽的属性。非正式地说,这就像我们可以定义我们的模型与树的相似程度。稍微更正式地说,它是我们模型任何可能的树分解的最小宽度。我们不需要深入细节,但你可以这样想:模型的结构越复杂,所有PGM的黑盒推理算法在计算边缘概率时基本上都会遇到困难。
但如果我们通过观察复杂性理论中人们的工作意识到,在最坏情况下,对于边缘和条件查询,我们可以用与变量数量成线性关系的时间来计算查询,但这是树宽的指数级。所以一个自然的问题是:如果我们把树宽固定在一个我们可以管理的值,比如一个小的常数值,那么推理就只与变量数量成线性关系了。这很酷。这正是大量研究的主题:通过限制PGM的树宽。所以我们可以通过只有一个父节点来拥有树,从而限制树宽;或者我们可以有多个父节点,但要求节点之间只有一条路径;我们也可以限制连接树中一个团中出现的随机变量的数量,这样我们就有了一个细的连接树。现在假设你限制了你的树宽,那么你基本上可以计算边缘概率和条件概率。所以很多有界树宽的PGM对我们来说很有吸引力。
让我们深入了解其中一个模型。让我们深入了解树,因为它们非常流行,在社区中被大量使用。树就是像贝叶斯网络一样,其中任何节点只有一个父节点。它们仍然是这种因子分解。这类树很酷的部分是,我们可以在与输入大小成线性关系的时间内计算证据、边缘概率和条件概率。此外,我们还可以通过Chow-Liu算法从数据中精确学习。我们将在学习部分大量利用这一点。
所以我们可以有树,但我们现在要问你:好吧,我们知道我们限制了树宽,我们失去了一些东西,对吧?我们到底失去了什么?我们失去了表达所有可能概率分布的能力。所以,假设你的数据、你的真实分布不是一棵树,而是一个完整的贝叶斯网络。如果你限制自己用Chow-Liu算法学习一棵树,你永远得不到那个真实分布。你会失去一些东西。所以这是我们可能愿意付出的代价。但在某个时刻,我们可能也想利用其他技巧来增加我们的表达能力,以尝试表示更复杂的分布。我们怎么做呢?一种方法是使用混合模型。
混合模型是另一种流行的、老式但非常酷的增加模型表达能力的方法。看看这个两个高斯的混合。每个高斯都是单峰的,但把它们混合在一起,我们也可以建模双峰分布。所以我们得到了更具表达力的东西。我们可以增加这种表达能力,并且仍然可以在分量数量上线性地计算证据、边缘概率和条件概率。这很酷。这是一个有用的工具,我们稍后会大量使用。
但另一个我们可能想问的问题是:我们失去了什么?仅仅通过增加混合模型的分量数量,我们真的能表示任何东西吗?在回答这个问题之前,让我们先做另一个观察。混合模型编码了一个隐变量,它基本上告诉你从混合中选择哪个分量。这是混合模型的一个非常强的属性,稍后Andy会讲到。但它也将是效率低下的来源之一。
回到我们的问题:混合模型有那么强的表达能力吗?嗯,众所周知,高斯混合模型渐*地能够以任意精度表示任何分布,但那是渐*的,意味着我们需要很多分量。而在实践中,渐*地我们都死了。所以这可能不是最好的做法。所以让我们换个定义,从表达效率(有时在谈论贝叶斯网络或电路时也称为简洁性)的角度来看。
基本上,我们想看看我们的分布的大小是否与其表达能力相关。这归结为问一个问题:我需要多少个高斯分量来拟合一个非常复杂的分布?这就像一幅漫画,让你感受一下。
在左边,你有一些简单的二维分布,它们有点花哨,比如同心环、正弦曲线、漏斗和香蕉分布。我不是说你会在现实生活中找到它们,但你可能想在这些分布上拟合你的分布。所以你限制自己使用高斯混合模型。你需要多少个高斯分量才能很好地拟合这些分布?在每一列中,我都在增加分量的数量,并且我用这些红色的椭圆突出显示了哪些高斯分量满足该二维空间的区域。仅仅使用两个分量,拟合效果很差。我需要10个分量,拟合仍然很差。我需要100个分量才能得到类似的东西。所以我们可能会说:渐*地,我们可以表达任何分布,但它的表达效率并不高。我们需要很多分量才能做到这一点。
所以现在,假设我们坚持使用混合模型,这是更简单模型的混合,也许是树的混合。这是我们目前拥有的最好的模型。让我们转向我们可能想要计算的下一个查询类:MAP(最大后验),在社区中有时也称为MPE(最可能解释或证据)。这类查询的一个例子是回答这个问题:星期一上午9点,哪条道路的组合最有可能堵塞?要做到这一点,我们必须进行条件化,但我们也必须计算这个 argmax,遍历所有可能的指示变量。
那么我们能用一个混合模型做到这一点吗?这是通用的形式化,但对于混合模型,我们必须认识到我们必须处理混合模型隐式编码的隐变量。如果我们必须处理隐变量,每当我们必须在其中计算最大化问题时,我们还必须先解决一个求和问题。不幸的是,我们不能交换它们。正如我们稍后将更详细地看到的,每当我们有隐变量时,我们就无法精确计算最大后验查询。所以我们必须摆脱混合模型,或者得到更好的东西。
你可能认为MAP是一个复杂的查询,但对于隐变量的情况,它基本上就像先边缘化然后计算MAP解。作为一个查询,它会是这样的:问你自己,在上午9点,哪条道路的组合最有可能堵塞,边缘化所有可能的日子。这是一个更通用的查询类,不幸的是,它非常困难。计算它是NP^PP完全的。更糟糕的是,即使对于树,它也是NP难的。甚至更糟的是,即使对于朴素贝叶斯分类器,它也是NP难的。
所以看起来我们只剩下基本的概率查询,我们想回答,但我们没有有趣的模型来回答它们。但在陷入这种悲伤之前,我真的想推动你,说如果我们真的想做概率推理,我们想做比这些玩具查询、婴儿查询更多的事情。所以我们想回答一些更高级的问题。
一个例子来自我们最初看到的一个:计算边缘概率、执行MAP推理,并涉及某种形式的逻辑推理。我们可以有不同的东西,比如涉及组间比较。例如:“看到Java比Marina发生更多交通堵塞的概率是多少?”我们需要计数,还需要比较不同的实例集。从自然语言的角度来看,这并不复杂,作为一个决策者,你会想问这个问题并得到答案。但对于我们的模型来说,这相当复杂。稍后我们会看到,给定一些结构属性,你将能够解决这类高级查询。
所以现在,我们陷入了这种悲伤。是的,后面还有更多更复杂的查询。但有一个模型来拯救我们了:完全因子化模型。如果我们假设一切都是独立的,那就超级简单,我们可以非常容易地回答所有这类查询。为什么?因为我们可以并行解决所有这类问题。这是一种分而治之的策略,我们稍后会通过打好我们的牌来利用它。
这就是到目前为止的故事。我们有一系列查询族,我们看到了一系列模型。让我们试着用一幅漫画来总结一下。让我们画一些坐标轴。在水*X轴上,让我们放置表达能力较弱或表达效率较低的模型在左边,表达能力较强或表达效率较高的模型在右边。在垂直Y轴上,让我们尝试放置对于某些查询族更可处理的模型在顶部,对于某些查询族更不可处理的模型在底部。这并不完全合理,这只是可处理性与表达能力之间关系的一种艺术印象。但基本上,在Y轴上越高,模型能计算的查询族类别就越大。
这里的底线是,我们有一系列表达能力很强的模型,但它们并不真正可处理。我们有马尔可夫网络、贝叶斯网络,当然还有GAN和VAE。我们还有更花哨的贝叶斯网络版本,如NADE、MADE和自回归模型。另一方面,我们看到一些可处理的模型,但它们的表达能力不强。这些是所有有界树宽的PGM和其他PGM,以及混合模型。它们可以做些事情,有一定的表达能力,但表达效率不高。所以我们可以把它们放在那里。所以如果我们必须选择一个模型或设计我们自己的框架,我们实际上希望在这里,这是我们瞄准的最佳点。这就是我们稍后将在概率电路框架中尝试构建的东西。
第二部分:概率电路:可处理模型的构建模块
好了,现在你已经确信一切都非常困难和难以处理,我的角色将是说服你,只有少数非常简单的想法可以使一切变得非常可处理。所以换一个视角。
无论我们接下来15分钟做什么,我将尝试介绍可处理模型的基本构建模块。我们将构建一个看起来像计算图的东西,一个电路,一个概率电路,它将为我们完成大部分工作。然后我们将尝试分析这些概率电路对于哪些查询是可处理的,以及我们需要它们具有哪些属性才能回答Antonio提到的所有这些非常复杂的问题。之后,我们将再次深入这锅“字母汤”,并解释所有可处理的概率模型如何基本上都是同一个东西,它们都是这个基本思想的不同变体。
最简单的可处理概率模型是什么?Antonio提到,如果一切都是因子化的,如果你只需要看一个随机变量,那么事情就很容易。所以这是这些概率电路的基础情况:它们是单变量分布。所以我们有一个随机变量 x,我们为 x 插入某个值,它可以是高斯分布的值或伯努利分布的值,然后输出该状态的概率或概率密度。
这很容易,因为我们可以计算证据的概率,这只是评估一个高斯分布。我们也可以边缘化,我们可以很容易地积分这些一维分布。我们还可以计算这些分布的众数,因为它们非常简单。这将是基础情况。通常它甚至更简单,所以当我们处理离散数据时,这些基础情况只会说某个变量具有100%的概率,比如天气晴朗是100%的概率,还会有另一个基础情况说天气下雨是100%的概率。所以我们甚至只会看这些极端的单变量分布,它们只将所有概率分配给一个值。
这就是它的工作原理:你输入温度值,输出概率密度。
好吧,让我们尝试更有野心一点。单变量分布没那么令人兴奋,那么我们如何组合它们呢?组合一堆分布最简单的方法是将它们视为独立的随机变量,这就是你在这里看到的。我们有三个随机变量,我们假设它们完全独立,完全因子化。现在我们可以将这三个变量的联合分布定义为各个概率的乘积。这个节点用这个乘积节点表示。例如,如果你有一个具有对角协方差矩阵的多元高斯分布,你基本上就是在做这个。
你只是将这些独立的高斯分布相乘。如何评估这样一个小的概率电路?这里你有你的单变量分布。它们说你观察到的所有变量都有一定的概率,例如0.8、0.5、0.9。现在它们同时处于这些状态的概率就是这三者的乘积,例如0.36。我不会告诉你任何火箭科学,这一切都只是非常基本的概率,但它将累积成非常强大的东西。
这些是因子化。不幸的是,如果我们只做因子化,那么我们真的没有太多的表达能力,因为一切总是必须相互独立。解决这个问题的方法是,将混合模型的另一个想法应用到这些概率电路中。我们要做的是构建这些基本的计算单元,我们取两个分布(这里的两条蓝线),只是用加权*均将它们组合成一个分布。
这就是它作为概率电路的样子。我们在这里有一些更简单的分布,它们可能是变量 x 上的两个不同的高斯分布,我们将取它们的加权和来得到 x 上的新分布,这个新分布现在可以是多峰的。所以我们在某种程度上获得了表达能力。
再次,我们评估这些东西的方式是,我们得到这些分量的概率,混合的概率就是两者的加权和。
所以这些确实是构成概率电路的所有基本构建模块。我们有单变量分布,我们有分布的混合,我们还有分布的乘积,然后我们可以用混合来组合它们。我们可以为很多很多层做这个。我们可以创建一个深度可处理模型,我们也可以重用一些计算。这是一个有向无环图。它所做的只是使用求和与乘积来组合所有这些单变量分布。仅此而已,没有更多了。
那么这些概率电路是什么?嗯,作为一个参加UAI的人,你可能会想把它们称为概率图模型。它们肯定是概率的,也是图模型。但它们确实有一种非常不同的风格。在标准模型中,节点是随机变量,边是它们之间的依赖关系。然后你有一系列推理算法,以许多不同的方式获取这种声明性表示并为你计算概率。在这些概率电路中,情况有点不同。节点实际上是计算单元,边给出了执行顺序。所以你有一个前向传播,通常还有一个后向传播。因此,你的图模型的结构在某种意义上已经告诉了你如何计算东西。这就是关键的区别因素。这就是为什么它们更像计算图,更像神经网络。
这种表示有什么好处?如果你有一个通用的有向无环图,你可以做的是重用一堆计算。你可以计算一次小的概率电路,然后在你的更大电路中的许多其他地方重用它。这意味着你可以分摊推理。你可以共享某些参数,可以共享大量结构。这确实是它与概率图模型的不同之处,也是为什么这些东西可以非常高效,而概率图模型却不行。
它们有这些清晰的操作语义。通过只看如何计算,你可以立即知道计算需要多少成本。你只需要看需要做多少次求和与乘积。它们是可微的,你可以做基于梯度的优化。稍后当我们从数据中学习这些电路时,我们会讨论这一点。
关于它们真正好的是,你现在可以查看电路的附加属性,以判断你是否能高效地回答某些查询。
嗯,实际上比那要困难一点。到目前为止,我假装你可以像在神经网络中一样任意嵌套求和与乘积。但你需要确保一些额外的东西,有一些基本的结构约束,你需要这些约束才能可处理。所以我将快速解释这些。我们需要从电路中得到什么?在构建它时,我们需要如何小心,以便我们能够高效地回答问题?
现在,从某种意义上说,最重要的属性可以追溯到20年前,那就是可分解性属性。这实际上是概率分布中独立性的思想,应用于这些概率电路。它的思想是,每当你乘以一堆分布时,你有这个乘法节点,所有的子节点必须谈论不同的随机变量集合。例如,这里我们谈论 x1、x2 和 x3。这些都是不同的分布。所以你可以说,哦,我们假设这三个分布是独立的乘积。这里我们有一个不可分解的电路,因为我们用一个变量 x1 上的分布乘以另一个变量 x1 上的分布。当然,说 x1 独立于 x1 并直接相乘是没有意义的。所以这是不允许的。
然后我们需要确保的第二个属性称为*滑性,在部分文献中有时也称为完备性。这个属性是说,每当你有一个两个分布的混合时,比如这里,我们有一个 X1 上的分布和另一个 X1 上的分布的混合,那么这些分布必须覆盖相同的随机变量。如果你想一想,这是有道理的,对吧?我不能创建一个关于天气和星期几的混合模型,因为混合模型总是需要混合两个具有完全相同随机变量的分布。否则,在某种程度上,这里你没有考虑星期几,而那里你没有考虑天气。所以这没有意义。因此,我们要求*滑性属性:只混合具有相同随机变量的分布。如果你的电路没有*滑性,没问题,你总是可以通过在这里和那里添加一堆节点来使事情变得*滑。
好了,这些是我们总是需要的基本属性。现在突然间,事情变得可处理了。突然间,我们可以做可处理的边缘概率。我们可以对随机变量求和,我们可以做条件概率,因为我们可以做边缘概率。这大致上是如何工作的。
如果我有一个分布是两个分布的乘积,意味着我有这个可分解性属性,并且我需要边缘化,意味着我需要积分掉 X 和 Y。那么,P(X, Y) 变成 P(X) 乘以 P(Y) 的乘积。所以现在我真的可以分别积分 P(X) 和 P(Y)。再次强调,这里没有火箭科学。这只是独立性的一个非常基本的属性。现在,好的是,因为我们有这个计算图,我们真的可以在整个电路的每一个乘积节点上做这个操作,以简化我们的边缘化任务。
顺便说一下,随时可以提问,那里有麦克风。我看到人们更困惑了。随时可以打断。
边缘化通过可分解性。这告诉你在有乘积节点时该怎么做。如果有求和节点呢?如果你有一个求和节点,那么我们有这个*滑性属性,它说我们真的有一堆其他分布的加权和,这个混合模型。现在,如果我需要从这个分布中积分掉一些变量,那么我可以把它重写为从这些不同分量的加权和中积分掉这些变量。然后我可以改变积分和求和的顺序,我可以在每个分量中分别积分。这是另一个技巧,它允许我接受这个边缘化任务,并从我的电路的根开始,一直推到电路的叶子。通过用可分解性分解,并将这些积分推入求和。
最后,你得到的是一个只谈论单个随机变量的积分问题,而这总是容易的。然后我们就完成了,对吧?现在我们有了一个用于电路边缘化的递归算法。有道理吗?
这大致上是如何工作的。这里我们进行边缘化。这里我们有一个变量 x1。所以 x1 是我们想要从分布中边缘化掉的变量之一。这已经告诉我们,这里的这个节点将只是1,因为如果我们从一个只谈论 x 的分布中积分掉 x,概率将是1,这是一个归一化的分布。在这里,我们有另一个数字。这是 X2 的值。所以 X2 不是我们边缘化的变量。X2 有一个状态。例如,X2 设为真。现在这是这个特定状态的概率。你可以为你的分布中的每一个单变量叶子节点做这个:要么积分掉它,它变成1;要么用你观察到的证据的概率替换它。然后你剩下的就是你需要做求和与乘积。现在,如果你做求和与乘积,你得到的是你插入叶子的状态的概率将是49%。这是一个前向传播,与你的电路大小成线性关系,它计算边缘化任务。有了两个这样的前向传播,你就可以做条件化任务。


所以现在我们有了一个相当强大的可处理模型,可以解决边缘化这种最简单的查询。但我们想做更多。如果我们想做更多,那么我们需要一些额外的属性。其中一个额外的属性称为确定性。这又是一个非常基本的属性,在部分文献中有时也称为选择性。
其思想是,每当你取一个混合时,不是任意混合,你只允许这些求和节点混合两个支持集不相交的分布。这是什么意思?这里我们有两个分布的混合,我构造电路时使得这里 x1 上的分布只在 X1 的值小于 θ 时具有非零概率。假设这是一个截断高斯分布。这里我有另一个分布,它说 X1 只在大于 θ 时具有非零概率,另一个截断高斯分布。现在我知道,在这两个分布之间,如果我插入 x1 的任何值,那么最多其中一个会有大于0的概率。因为,再次强调,它们的支持集是不相交的。这就是我们要求每个求和节点、每个混合都具有的属性:两个分布永远不会在任何可能世界中同时具有任何概率质量。
这是一个没有确定性的例子。这里我们有两个分布的混合,它们只是两个变量 x1 和 x2 上任意高斯分布的乘积。但现在如果我插入 x1 和 x2 的值,那么这两个分布都可能有一些非零的密度。我的混合可能会将这两个密度求和成另一个值。如果你想要确定性,这是不允许的。
为什么我们关心确定性?嗯,确定性允许我们高效地计算MAP推理。MAP是Antonio谈到的那个灾难性的查询,没有什么是可处理的。有了这个属性,你可以高效地计算。大致的工作原理是,对于这些可分解的乘积,如果你想找到MAP状态,即最可能的世界状态,那么,与其找到同时谈论 x 和 y 变量的状态,你可以先取 x 变量,你乘积的第一部分,最大化那些,然后分别最大化 y 变量的状态,因为 x 和 y 变量是分离的,我们这里有一个可分解的乘积。所以,每当我们有这种因子分解时,我们并不需要联合优化整个联合分布,我们可以分解,我们可以分别优化两个分布的状态。这使事情变得容易得多。
然后对于求和节点,我们需要确定性。确实,确定性将是允许我们解决这个MAP问题的严格条件。这大致是如何工作的。再次,我需要找到这些变量的一个状态,以最大化这个分布中的概率。现在的问题是我们有一个混合。所以现在我们正在最大化我的混合的这些加权分量的和。一般来说,这是困难的。然而,由于确定性,我们知道对于任何世界,对于任何我们可能找到的解,这些变量的任何状态,实际上只有一个分量具有非零概率。这意味着什么?如果在我们的解中,只有一个分量具有非零概率,那么将所有分量的概率相加就没有意义,因为你只是将一个数字与一堆零相加。这允许我们基本上在所有分量上取最大值,而不是求和。现在我们在取最大值,事情变得容易了。我们再次将问题推入电路,并将其分解成更小的部分。然后当我们到达叶子时,我们有一个容易的问题。
关于训练,因为现在你需要训练来确保确定性,对吧?有额外的参数吗?当学习这个时……哦,是的,你可以用那里的麦克风。问题是是否有额外的参数数据。我没有在这里看到数据出现,但这里的权重是添加到我们分布中的唯一参数。但每当我们有一个混合时,我们需要权衡两个混合分量。这是存在的,无论你有一个确定性还是非确定性电路,那个加权混合总是存在的。所以这些参数,你将不得不学习。所以Nico将谈论如何训练这些参数。
我不确定这是否回答了你的问题。
我们可以做可处理的MAP。它的工作方式是我们取那些求和节点。由于我刚才告诉你的确定性,你可以取求和节点并把它们变成最大值。你只关心最大化。现在你向叶子插入你当前观察的概率。例如,今天是星期一。然后对于所有其他叶子,你只需将它们设置为其分布的众数。例如,这里 X1 可能有一些众数。这个 X1 也是同一个随机变量上的分布。它可能有另一个众数,但我们将所有东西实例化为其众数,因为我们试图找到最可能的世界。然后剩下要做的只是乘法和取最大值,我们在输出端得到最可能世界的概率。
如果你不关心概率,而是真的想知道那个世界是什么,那也很容易。你必须做一个向下传递,你必须弄清楚,嗯,这里的最大值真的选择了这个数字而不是那个数字,因为它发现在混合中,这个混合分量没有那个那么高的概率状态。所以它选择了这个数字。你递归地做这个。现在你可以解码所有构成你的MAP查询解的单变量分布的状态。
如果你没有确定性,而文献中人们使用的许多表示实际上是非确定性的,你该怎么办?你有这些隐变量,它们混合在两个支持集可能重叠的分布之间,对吧?现在的问题是,这个最大化问题,你需要对这个告诉你选择哪个混合分量的隐变量求和,这变得难以处理。那么人们在实践中做什么呢?他们仍然假装这个求和是一个最大化。他们将隐变量添加到分布中,现在他们也开始最大化隐变量的状态。所以这是你可以做的事情,当你无法得到精确值时,它通常是MAP的一个有用的*似。所以你经常会看到在实践中这样做。
让我们添加更多属性。现在我们有了可分解性、*滑性和确定性。下一个属性称为结构可分解性。结构可分解性将是一个非常惊人的属性,因为我很快会给你看一张幻灯片,上面有大约15个不同的查询,仅仅因为这个属性,它们突然变得可处理了。
这个属性是什么?一般来说,每当我们有这些乘积时,这些乘积必须是可分解的,但它们不一定总是以相同的方式分解。意思是它们可以以任何方式分割变量集合。它们可以以任何方式划分变量集合,只要没有重叠,但不同的乘积可能选择以不同的方式这样做。现在,结构可分解性是说,每当你在这里的第一层有乘积节点时,它总是必须创建一个因子分解,一个 x1 上的分布与一个 x3 上的联合分布之间的乘法,或者一个 x1 和 x2 上的联合分布之间的乘法。所以所有这些节点,它们都必须走 X1 然后其余部分,X1 和其余部分,你不能以其他方式做事。类似地,在第二层,每当你具有可分解性时,它总是必须恰好以这种方式。这是底层,所以没有其他方法。但这是一般原则。
这是一个结构可分解电路。这是一个非结构可分解的电路。原因是这里的这个节点确实同意它必须将 X3 从其余部分中分离出来。它在这里就是这么做的。它有一个 x3 上的分布和其余部分。然而,这个乘积节点仍然是可分解的,但它分割方式不同。它分割出 X2 与 x3 和 X1。所以这不是结构可分解的。
由于我没有两个小时的时间深入探讨的原因,如果你有这个属性,你可以构建许多非常优雅的递归算法,这些算法推理你的电路的结构。这些东西表现得非常好。你能做的是所有这些事情。如果你有一个概率电路,它是可分解的、确定性的,并且进一步是结构可分解的,你可以高效地计算该分布、该概率电路的熵。你可以问一大堆Antonio提到的困难查询。你可以问:特拉维夫恰好有25条道路堵塞的概率是多少?奇数条道路堵塞的概率是多少?一个区比另一个区有更多道路堵塞的概率是多少?所有这些类型的查询,它们极其困难,变得可处理了。这对于任何 v3,对于你选择做这种结构可分解的任何方式都成立。
现在,如果你选择正确的分解方式,如果你强制执行 v3 的样子,那么你可以做更多。你可以计算概率电路中任何逻辑事件的概率。你可以在二次时间内将两个概率电路相乘。你可以计算两个具有相同 v3 的概率电路之间的Kullback-Leibler散度。所有这些事情,对于UAI人来说,应该听起来像疯狂地难以处理,但你可以用这些可处理概率模型精确地完成所有这些。
还有更多关于各种查询的论文,我不会深入,关于决策制定、主动感知、关于如何决定修剪哪些特征、关于分布上的特征选择、关于如何计算分类器相对于分布的预期预测、关于如何做甚至边缘MAP。这只是告诉你,好的属性给你好的可处理行为。
第三部分:与其他表示的联系
好了,接下来的10分钟。你可以再次醒来了。我们有了可处理模型的语言,我们想非常快速地描述它们如何与你以前可能见过的其他类型的表示相关联。例如,逻辑电路,例如,SDD、算术电路等等,以及它们如何与我们之前讨论的这些低树宽概率图模型相关联。
这里的目标是说服你,它们都只是这个简单语言的不同句法变体,具有这些简单的属性。之后,我们将讨论如何从数据中获取这些电路,这将是Nico演示的部分。
到目前为止,我告诉你的一切并不真正取决于你处理的是概率。我只是在做求和与乘积。这意味着我可以在不同的半环中以不同的方式做求和与乘积。这本质上就是如果你把这些电路变成逻辑电路会发生的事情。所以你要做的是,取这些求和,把它们变成析取,取这些乘积,把它们变成合取。现在你有了用于逻辑问题的可处理语言,而不是概率问题。
这些东西已经存在了几十年。这里有一堆。有所谓的结构可分解否定范式电路。这些在逻辑推理中非常流行。有OBDD,甚至更老的二元决策图。大约10年前,这篇论文可能是整个计算机科学中被引用最多的论文。所以这确实是许多形式化方法、验证、计算机科学中逻辑推理的主力。Sentential决策图是另一种最*加入的类型。
所以这些真的和这些概率电路一样,只是它们没有概率。它们具有所有相同的可分解性、确定性、*滑性属性。事实上,这就是可处理概率模型的起源故事:这些逻辑表示,我们只是在上面撒一些概率,现在我们得到了一个可处理的概率模型。
根据你再次获得可处理性的属性。例如,如果你有一个可分解的逻辑句子,那么我可以在线性时间内解决SAT问题。而通常,SAT解决是NP完全的。所以我可以做另一个关于逻辑推理的演示,在那里我告诉你完全相同的故事,只是不同类型的查询。
这如何连接?嗯,人们从逻辑电路到概率电路的方式是通过加权模型计数的概念。加权模型计数已经被UAI社区使用了大约20年,用于概率推理。事实上,我认为在最*所有的UAI推理竞赛中,这种方法基本上赢了一半的比赛,我认为Fi求解器赢了另一半。所以一般想法是,你取你的概率模型,以某种方式将其编码到逻辑中,你将其编码到逻辑中的方式是,你取它的所有参数,条件概率表中的所有数字,你为它们引入一个新变量,这是一个逻辑变量。那个逻辑变量将以某种方式作为一个占位符,表示这个参数适用于一个特定的可能世界,它将被乘入可能世界的概率。
然后加权模型计数就是说生成所有可能的世界。这有点像求和,求和。这就像边缘化。而这个乘积在这里是查看所有变量,在某种意义上,查看你的逻辑公式中必须为真的所有变量,意味着这些是你需要相乘以获得可能世界概率的所有参数。
再次,这是很多手 waving,因为我没有时间。但这个公式允许你在逻辑推理和概率推理之间架起桥梁。所以一般框架是,你取你的贝叶斯网络,比如说,把它变成这个加权模型计数问题,它有一个逻辑部分和一堆与这些参数相关的数字。你将其编译成一个可处理电路。一旦你有了这个可处理电路,你评估它,在线性时间内,你得到边缘化任务的概率。根据你如何做,你甚至可能解决MAP问题。
现在,这里的重要收获是,如果你采用这个流程进行概率推理,它实际上等同于构建一个概率电路。对于喜欢逻辑符号的人来说,它更友好,但除此之外,它完全是同一个东西。你需要做的就是从一种转换到另一种,取你的逻辑电路,例如这个。现在你用求和替换你的或,用乘积替换你的与。然后你取所有这些参数,把它们撒在你的图的边上。你得到了完全相同的概率分布。
所以这是如何连接逻辑和概率电路的一分钟版本。不幸的是,我无法深入更多细节。
另一个联系是什么?我们之前讨论过具有低树宽、非常稀疏因此可处理的那些可处理模型。嗯,事实证明,这些可处理模型有一个非常简单、高效的转换,可以转换成具有所有正确属性的概率电路。

让我试着快速说服你这一点。
022:用神经网络组合图模型

概述
在本教程中,我们将探讨如何将概率图模型与深度神经网络相结合。我们将从图模型和指数族的基础知识开始,然后讨论如何利用自动微分技术,构建能够处理复杂数据(如视频)的复合模型。最后,我们将看到这种结合如何应用于实际问题,例如从小鼠行为视频中自动发现行为单元。
动机:为什么结合图模型与神经网络?


上一节我们介绍了教程的主题。本节中我们来看看为什么需要将概率图模型与深度神经网络结合起来。
概率图模型擅长以规定的方式组织和约束信息,便于我们编码先验知识和不确定性。然而,其严格的假设常常导致模型与复杂数据(如图像)不匹配。
另一方面,深度神经网络极其灵活,能够建模图像等高维复杂数据。但其内部表示通常是难以解释的“黑箱”,我们很难为其注入结构化的先验知识。
这两种方法的优缺点似乎是互补的。因此,将它们结合起来,就像巧克力和花生酱一样,可能创造出更强大的工具。例如,在无监督学习中,我们希望学习一个数据变换,使得变换后的特征空间能够被简单的图模型(如高斯混合模型)很好地拟合。
图模型基础
上一节我们讨论了结合的动机。本节中我们来回顾一下概率图模型的基础知识。
图模型的核心思想是使用图(一种组合对象)来描述随机变量集合中的概率结构。这主要通过两种方式实现:
- 条件独立性语义:图描述了随机变量之间的条件独立关系。
- 密度分解:图描述了联合概率密度的代数分解结构。
无向图模型
一个无向图 G 由顶点集 V 和边集 E 组成,其中边是无序的顶点对。
条件独立性:我们说一组随机变量 X 在无向图 G 上是马尔可夫的,如果对于任意三个互不相交的顶点子集 A, B, C,当 C 分离了 A 和 B(即移除 C 后 A 和 B 之间没有路径相连),则有 X_A 独立于 X_B 给定 X_C。
密度分解:我们说一组随机变量的密度在无向图 G 上分解,如果其概率密度可以写成仅依赖于图中团(完全连接的子图)上变量的因子的乘积。例如,对于一个链式图 X1 - X2 - X3,其密度可分解为:
p(x) ∝ ψ_12(x1, x2) * ψ_23(x2, x3)
有向图模型
一个有向图同样由顶点集和边集组成,但边是有序的顶点对。
条件独立性(D-分离):D-分离的规则与无向分离类似,但有一个关键例外:对于“碰撞”结构 X1 -> X2 <- X3,当不观测 X2 时,X1 和 X3 是独立的;但当观测 X2 时,X1 和 X3 可能变得相关。
密度分解:有向图模型的密度可以自然地分解为每个节点给定其父节点的条件概率的乘积:
p(x) = ∏_v p(x_v | x_{pa(v)})
这使其非常适合于生成式建模和 ancestral sampling。
条件随机场
条件随机场是一种特殊的图模型,其中势函数依赖于外部观测数据。这提供了一种将神经网络与图模型结合的早期方式:使用神经网络根据输入数据生成图模型的势函数。
指数族分布
上一节我们介绍了图模型的基本语义。本节中我们来看看与图模型紧密相关的数学工具——指数族分布。
一个指数族分布由以下要素定义:
- 充分统计量函数:
T(x): X -> R^m,这是一个将样本映射到有限维实向量的函数。 - 自然参数:
η ∈ R^m。 - 对数配分函数:
A(η) = log ∫ exp(η^T T(x)) dx,用于确保密度归一化。 - 概率密度:
p(x; η) = exp(η^T T(x) - A(η))
指数族有许多优良性质:
A(η)是凸函数。- 对数配分函数的梯度给出充分统计量的期望:
∇A(η) = E_{p(x;η)}[T(x)]。 - 高阶导数给出累积量。
- 两个指数族成员之间的KL散度可以简洁地用
A(η)表示。
与图模型的联系:许多图模型(如隐马尔可夫模型)都属于指数族。例如,一个二值链式HMM的联合分布可以写成指数族形式,其充分统计量为 T(x) = [x1, x2, x3, x1x2, x2x3],自然参数矩阵具有三对角稀疏模式,对应链式图结构。
关键观点:如果我们能高效计算某个指数族的对数配分函数 A(η),那么通过自动微分,我们可以免费获得该分布的期望统计量等各种量。这为构建算法库提供了强大基础。
组合与自动微分
上一节我们看到了指数族的威力。本节中我们来看看如何组合简单的、可处理的指数族来构建更复杂的模型,并利用自动微分实现通用算法。
组合模型
考虑一个切换线性动态系统作为例子:
- 一个离散的隐马尔可夫链表示行为状态(如“奔跑”、“停顿”)。
- 每个状态对应一个线性动态系统,用于在低维潜空间产生轨迹。
- 最终,通过一个神经网络解码器将潜变量映射到观测图像。
这种组合模型的联合密度通常具有多元线性多项式的形式:
log p(x) ∝ G(T1(x1), T2(x2), ...) = ∑_β θ_β ∏_{i in β} T_i(x_i)
其中每个 T_i 对应一个可处理指数族的充分统计量。
通用算法
一旦模型被表述为上述形式,我们可以推导出通用的推理算法:
吉布斯采样:要采样变量块 X_m 给定其他块,其条件分布正比于 exp(η_m^T T_m(x_m)),其中自然参数 η_m = ∇_{T_m} G(...)。这可以通过对 G 函数自动微分得到。因此,只要我们为每个基本指数族提供了采样器,就能实现通用的块吉布斯采样。
结构化*均场变分推断:我们使用一个因子化的变分分布 q(x) = ∏_m q_m(x_m),其中每个 q_m 属于一个可处理的指数族。优化变分下界可以通过坐标上升进行。更新第 m 个因子的自然参数同样涉及计算 ∇_{T_m} G(...),然后利用基本指数族的对数配分函数 A_m 的导数来计算矩。
以下是实现结构化*均场扫描的伪代码思路:
def meanfield_sweep(G, A_list, eta_list):
# eta_list: 当前变分自然参数
# 1. 将自然参数转换为矩参数(通过微分A)
mu_list = [grad(A)(eta) for A, eta in zip(A_list, eta_list)]
# 2. 对每个因子m进行更新
for m in range(M):
# 计算新的自然参数
eta_m_new = grad_Tm(G)(mu_list) # G对第m个统计量的梯度
# 计算新的矩参数
mu_list[m] = grad(A_list[m])(eta_m_new)
# 3. 将更新后的矩参数转换回自然参数(可选)
return mu_list
核心优势:通过将模型表示为多元线性多项式 G,并依赖自动微分,我们可以为一大类组合模型生成通用的采样和变分推理算法,而无需为每个新模型重新推导。
与神经网络的结合:结构化变分自编码器
上一节我们讨论了组合模型的通用算法。本节中我们来看看当解码器是复杂的神经网络时,如何将这些思想应用于实际。
挑战
当观测模型是简单的线性高斯模型时,我们可以使用高效的随机变分推断,利用自然梯度进行快速学习。然而,当解码器是神经网络时,观测似然 p(y|x) 变得复杂,导致:
- 变分下界无法精确计算,只能通过蒙特卡洛估计。
- 无法解析地得到局部变分因子的最优解。
- 难以应用SVI和自然梯度。
解决方案:摊销推断与结构化先验
变分自编码器的核心思想是引入一个识别网络(推理网络),将观测数据 y 直接映射到潜变量 z 的变分参数,从而摊销推理成本。
我们的工作(结构化VAE)旨在最大限度地保留图模型的结构化推理优势。关键思想是:神经网络只需要学习处理模型中“困难”的部分——即由复杂解码器产生的、难以处理的似然项。对于模型中已有的、可处理的图模型部分(如潜变量之间的马尔可夫链、线性动态关系),我们仍然使用精确或高效的*似推理算法。
具体来说:
- 识别网络:输入观测序列
y,输出一组“证据势”φ(y),这些势函数用于*似复杂的真实似然p(y|x),但形式简单(如高斯势)。 - 结构化推理:将识别网络输出的势函数注入到原始的图模型(如SLDS)中。现在,我们面对的是一个势函数已知的、熟悉的图模型。
- 高效算法:在这个增强的图模型上,运行之前讨论的高效推理算法(如基于消息传递的*滑算法)来计算潜变量的后验*似。
- 联合训练:同时优化生成模型(解码器、图模型参数)和识别网络的参数,以最大化变分下界。
这种方法结合了双方的优势:
- 神经网络:提供了处理高维复杂观测(如图像)的灵活性。
- 图模型:在潜变量空间提供了可解释的结构、先验和高效推理。
应用示例:小鼠行为分析
回到最初的问题:从小鼠深度视频中自动发现行为单元。
- 模型:使用一个切换线性动态系统作为潜变量模型,描述离散行为状态和连续的姿态动态。使用神经网络解码器从潜变量生成视频帧。
- 推理:使用结构化VAE框架。识别网络观看视频片段,为每一帧输出关于潜状态的证据势。然后,在SLDS图模型上进行快速推理,得到行为状态序列和连续姿态的*滑轨迹。
- 结果:模型成功地从无标注视频中发现了诸如“ rearing”(站立探索)、“grooming”(理毛)、“darting”(疾跑)等可解释的行为单元。科学家可以利用这些发现的状态进行进一步分析,例如研究光遗传学刺激或药物如何影响行为转换统计。
总结

在本教程中,我们一起学习了:
- 动机:概率图模型与深度神经网络在可解释性、灵活性和推理能力上优势互补,它们的结合具有巨大潜力。
- 基础:回顾了有向/无向图模型的条件独立性和因子分解语义,以及指数族分布的定义与性质。
- 核心机制:展示了如何通过组合可处理的指数族来构建复杂模型,并利用多元线性多项式
G和自动微分,实现通用的吉布斯采样和结构化变分推理算法。 - 实际结合:介绍了结构化变分自编码器的框架,它通过识别网络处理复杂观测,同时在潜空间保留并利用图模型的结构进行高效推理。
- 应用:以小鼠行为分析为例,展示了这种结合如何从原始视频中自动发现有意义、可解释的行为结构。



希望本教程能让您看到,将图模型的严谨结构与神经网络的强大表示能力相结合,不仅可行,而且能催生解决复杂实际问题的新方法。这个领域仍然充满机遇,等待大家去探索和构建更强大的工具与模型。
023:走向因果强化学习 👨🏫

概述
在本节课中,我们将探讨因果推断与强化学习之间的深刻联系。我们将看到,将因果推理的视角引入强化学习,不仅能帮助我们更深刻地理解智能体与环境的交互,还能揭示出传统方法所忽视的新挑战与机遇。我们将从基础概念出发,逐步构建一个整合的“因果强化学习”框架。
第一部分:强化学习与因果推断简介 📚
上一节我们概述了课程目标,本节中我们来看看强化学习和因果推断各自的核心思想。
强化学习(RL)的视角
强化学习是一种目标导向的学习范式,智能体通过与外部环境交互来最大化其获得的累积数值奖励信号。其核心在于适应性学习:智能体根据不断演化的特征集和自身行动历史来调整其行为。
一个简化的RL模型可以描述如下:
- 环境 由参数
θ描述。 - 智能体 观察某个状态或上下文。
- 智能体基于其策略选择一个行动
a作用于环境。 - 环境返回一个奖励
r作为反馈。 - 智能体的目标是学习一个策略,以最大化其获得的期望奖励。
因果推断的视角
因果推断采用一种基于过程的方法来建模世界。其核心是结构因果模型,它将现实分解为一系列底层因果机制。
例如,考虑研究药物(X)对头痛(Y)的影响,同时考虑年龄(Z)因素。我们可以用两个方程描述这个过程:
X = f_X(Z, U_X):服药决策是年龄和其他未观测因素U_X的函数。Y = f_Y(X, Z, U_Y):头痛结果是服药、年龄和其他未观测因素U_Y的函数。
其中,函数 f_X 和 f_Y 代表了底层的因果机制。我们通常不知道这些函数的具体形式(非参数化),但我们可以用因果图来编码变量间的依赖关系:如果变量 A 是变量 B 的因果机制(函数 f_B)的输入,则在因果图中就有一条从 A 指向 B 的箭头。
在因果推断中,我们关心的是干预的效果,而非单纯的关联。干预操作(记为 do(X=x))意味着我们“用手”将变量 X 固定为某个值 x,从而打破其原有的因果机制。这会产生一个与观测分布 P(Y|X) 不同的干预分布 P(Y | do(X=x)),后者才真正反映了 X 对 Y 的因果效应。
因果层级
结构因果模型诱导出一个三层级的推理阶梯:
- 关联层:处理“看到”什么的问题,例如
P(Y|X)。传统的机器学习(分类、回归)主要在此层面操作。 - 干预层:处理“行动”或“干预”的效果,例如
P(Y | do(X))。这是强化学习能够触及的层面。 - 反事实层:处理“想象”与反思,例如“假如我当时做了不同的选择,结果会怎样?”。这涉及更复杂的反事实推理
P(Y_X | X', Y')。
拥有一个结构因果模型意味着可以在所有三个层面进行推理。
第二部分:通过因果透镜看学习 🔍
上一节我们分别介绍了RL和因果推断,本节中我们来看看如何将它们统一在一个框架下审视学习问题。
决策制定的统一目标
无论是因果推断还是强化学习,在决策制定中的核心目标都是学习一个策略 π,该策略产生一系列行动 X_1, X_2, ..., X_n,以最大化某个期望结果 Y(例如奖励),即最大化 E_π[Y | do(X)]。
根据数据来源和学习方式的不同,我们可以区分三种主要的学习模式:
以下是三种主要的学习模式:
- 在线学习:智能体自己进行实验(干预),输入是实验数据对
(do(X_i), Y_i),目标是学习干预分布P(Y | do(X))。其优点是对未观测混杂因子稳健;缺点是实验可能成本高昂或不可行。 - 离策略学习:智能体从其他智能体的行动中学习,输入是其他智能体在策略
π下产生的数据(do(X_i), Y_i),目标是评估新策略π'下的效果。其优点是无需自行实验;缺点是严重依赖两个关键假设(A1:干预变量相同;A2:上下文/环境相同)。 - 无干预学习:智能体仅被动观察其他智能体的行为,输入是观测数据
(X_i, Y_i)(无do运算符),目标仍然是推断干预效果P(Y | do(X))。其优点是仅需观测数据;缺点是严重依赖对底层因果图G的了解,且在许多情况下因果效应可能不可识别。
传统范式的局限
到2014年左右,上述框架似乎为理解因果与RL的关系提供了一个清晰的图谱。但一个关键问题是:这些策略总是有效吗?将因果推断和强化学习分开研究,我们是否遗漏了什么?
答案是否定的。现实世界常常违反这些理想化的假设(例如存在未观测混杂因子、行动空间不匹配、上下文不同等),导致传统方法失效甚至产生有害结果。这引出了对更通用、更整合框架的需求。
第三部分:挑战与机遇 🚀
上一节我们指出了传统方法的局限,本节中我们将探讨因果强化学习面临的新挑战与机遇,这主要体现为四类新兴任务。
任务一:广义策略学习
现实中的学习场景往往是上述三种模式的混合,且理想假设常被违反。广义策略学习旨在整合不同学习模式,利用各自的优点,缓解各自的缺点。
案例:从有偏的观测数据中学习
假设我们想评估一种新药的效果。我们拥有大量来自医生的观测数据 P(X, Y),但由于未观测的混杂因素(如社会经济状况),医生开药的方式存在系统性偏差,导致 P(Y|X) 高估了药效。如果我们将这些有偏数据直接作为先验用于在线学习(如汤普森采样),智能体可能会被误导,其表现甚至可能比完全不用这些数据、从头开始学习还要差。
解决方案:
- 边界分析:不天真地假设
P(Y|X) = P(Y|do(X)),而是利用因果图结构,从观测数据中推导出P(Y|do(X))可能取值的边界。 - 边界感知的采样:在在线学习过程中,利用这些边界来约束或拒绝不合理的样本,从而更安全、更高效地利用观测数据。这种方法可以证明比完全忽略观测数据收敛得更快。
任务二:何时与何处干预
传统RL通常预先固定要干预的变量,并假设干预总是有益的。但有时不干预、让系统自然演化可能是最优的。即使决定干预,选择哪个变量作为干预目标也至关重要。
案例:选择干预目标
假设我们想优化结果变量 Y,系统中有两个可操纵变量:Z(较远因)和 X(较*因)。直觉上,干预更接* Y 的 X 可能控制力更强。但通过构造一个简单的因果模型(如 Z = U, X = Z XOR U, Y = X XOR U),我们可以发现,干预 Z 有时能达到比干预 X 更高的 Y 值。这挑战了“越*越好”的直觉。
核心问题:给定一个因果图,如何系统地确定干预哪个(或哪组)变量,以及在什么条件下进行干预,才能最优化目标?
任务三:反事实决策制定
传统RL智能体基于干预分布 P(Y|do(X))(群体层面)做决策,而不反思自身行为的原因。这可能导致其在特定环境下被利用而无法察觉。
案例:贪婪赌场
赌场通过研究顾客心理(如醉酒程度 D、机器闪烁 B),设置了一个“陷阱”:当顾客遵循其自然倾向(醉汉选闪烁机器,清醒者选安静机器)时, payout 很低(15%);但当随机分配机器时,*均 payout 符合法规(30%)。一个传统的RL智能体(使用汤普森采样等)在赌场中学习,最终只能达到15%的胜率,因为它学习的是 P(Y|do(X)),而两种机器的这个值相同。
解决方案:反事实准则
智能体需要具备反事实推理能力。在决策时,它不应只问“如果我做 X,期望结果如何?”,而应问“**鉴于我当前正倾向于做 X0**,如果我违背这个倾向去做 X1,结果会更好吗?”。这对应的是反事实量 E[Y_{X=1} | X=0]`(处理对处理者的效应)。通过将这种反事实思考纳入决策准则,智能体可以识别并避免上述陷阱,最终收敛到更优的策略。
任务四:稳健性与可迁移性
智能体在一个环境中学习到的因果知识,如何能迁移到另一个不同但相关的环境中,从而最小化在新环境中的实验成本?这涉及到利用不同环境间共享的结构不变性。
总结 🎯
本节课中我们一起学习了因果推断与强化学习的深度融合。
- 我们首先回顾了强化学习的目标导向本质和因果推断的结构化世界观。
- 接着,我们通过“因果层级”和“学习模式”的框架,将两者统一起来,并指出了传统分离研究方式的局限。
- 最后,我们深入探讨了因果强化学习带来的四大挑战与机遇:广义策略学习(整合多种数据模式)、何时与何处干预(超越固定行动空间)、反事实决策制定(赋予智能体自我反思能力)以及稳健可迁移性(跨环境共享因果知识)。

核心结论是:因果推断与强化学习本质上是交织在一起的。充分认识并整合两者的独特优势,不仅能避免实践中因忽视因果结构而导致的决策失败,还能为设计具有可解释性、理性且适应性强的人工智能系统提供一个 principled 的框架。这条道路刚刚开启,充满机遇,需要大家的共同努力。
024:深度学习理论概述

在本教程中,我们将探讨深度学习背后的理论发展。我们将了解为什么神经网络能取得如此卓越的成果,并深入研究几个核心理论概念,包括泛化误差、对抗攻击的鲁棒性,以及如何利用神经网络解决优化问题。
第1.1节:引言与动机
大家好,我是Ra Jureus,是Viv大学的一名高级讲师,领导一个专注于深度学习和信号处理的研究小组。今天,我将为大家简要介绍深度学习领域*期的理论发展。

我知道这个领域的研究成果浩如烟海,我的介绍可能无法涵盖所有工作。如果遗漏了您的研究,请勿介意。我将尽力提供一个全面的概述,但正如大家所知,深度学习领域发展迅速,难以追踪所有进展。
众所周知,深度学习在过去七年产生了巨大影响。例如,在ImageNet数据集上,错误率从25%降至5%以下。在语音识别领域,2000年前有所发展,2010年前后进入*台期,而深度学习的引入带来了巨大改进。如今,越来越多的领域正享受着深度学习带来的实证进展。
一个核心问题是,为什么神经网络能取得如此好的效果?神经网络并非新事物,我们在60年代有感知机,90年代有与今天非常相似的神经网络。许多人给出了三个主要原因来解释其成功:我们拥有更多数据、更强的硬件以及更好的正则化技术(如批归一化、Dropout等)。

然而,这三个原因只解释了为什么神经网络在今天而非90年代取得成功,但并未回答为什么是神经网络,而不是其他同样受益于大数据、强计算和更好正则化的技术,在众多基准测试中取得了最佳结果。我认为,回答“为什么是神经网络”这个问题更为重要,这也是本教程将重点探讨的内容。
第1.2节:深度学习的实证成功案例
神经网络在许多应用领域取得了突破性成果。以下是我们研究小组的一些工作实例,以提供一些实践背景。
- 图像去噪:我们设计了一种方法,将分类器与去噪器结合。首先将图像输入分类器确定类别,然后使用为该类别设计的特定去噪器进行处理。这种方法能很好地恢复图像细节,且无需使用生成对抗网络即可获得优异效果。
- 单镜头3D成像:我们设计了一种可附加在镜头上的面罩,使得仅用单个镜头即可获取3D信息。有趣的是,我们使用神经网络同时设计了重建网络和光学元件本身。
- 光场成像:传统光场成像需要多个镜头或时间调制。我们通过添加一个编码不同角度的掩模,并利用网络自动学习这个掩模,从而从编码测量中重建所有视角和深度信息。
- 系外行星探测:我们与Childuker教授合作,利用深度学习探测系外行星。通过分析恒星亮度的周期性微弱下降,神经网络可以帮助探测遥远行星。
- 手机图像信号处理器替代:我们设计了一个端到端的神经网络,以替代手机中复杂的图像信号处理管线,并在视觉质量等方面取得了更好效果。
- 不规则数据上的深度学习:我们研究了如何将神经网络应用于非网格数据。例如,在部分形状对齐任务中,我们训练网络将部分扫描的飞机模型与完整模板进行匹配。另一项工作中,我们训练网络在网格上进行简化,根据任务(如检测手柄或颈部)保留相关结构。
以上只是我们小组的部分工作,全球许多研究小组都在利用神经网络取得出色的成果。一个共同点是,神经网络的结果通常远优于传统方法。例如,在网格分类和形状对齐任务中,神经网络的准确率显著高于传统技术。

然而,作为研究者,令人失望的一点是,我们虽然取得了好结果,并有一些直觉和经验法则,但并不真正理解其深层原理。我们通常通过堆叠层、添加跳跃连接、调整归一化或学习率等方式进行试错,最终由研究生通过大量实验获得好结果。问题是,我们能否找到更系统的方法来设计网络?理解深度学习背后的理论至关重要。
第1.3节:神经网络架构搜索与理论需求
一些人可能认为我们不需要理论,因为现在有了神经架构搜索。例如,我们与阿里巴巴合作的一项工作表明,计算机可以自动学习最佳的网络结构,而无需人工设计。这确实能快速设计出比人工设计错误率更低的网络。
尽管深度学习的实证发展非常迅速,但我认为理解其根本原理仍然重要。作为研究者,以更基础的方式设计系统、理解其内在机制是必要的。例如,在自动驾驶等安全关键领域,我们需要信任并理解神经网络的行为。
神经网络的基本组件非常简单:线性操作后接非线性激活函数。我们不断堆叠这种简单结构,使用卷积、循环连接或跳跃连接等变体,并使用ReLU、Sigmoid等简单非线性函数或池化操作。然而,正是这种简单的结构组合,产生了我们尚不完全理解的强大能力。
在剩余时间里,我将尝试介绍深度学习现有理论的一个样本。首先概述一些现有成果,然后重点介绍我们小组的两项工作。
第1.4节:深度学习的核心理论问题
关于神经网络,我们可以提出许多问题:
- 网络结构的特殊性:深度神经网络结构有何特别之处?
- 网络能力:深度神经网络的表达能力如何?是否存在其无法解决的问题?
- 所需训练样本量:训练一个网络需要多少样本?这在工业界尤为重要,因为数据标注成本高昂。
- 激活函数的作用:为什么ReLU比其他函数更常用?我们是否不知道如何使用其他函数?
- 数据在层间的变化:数据在通过各层时发生了什么?我们能否利用中间层的信息?
- 网络深度的作用:我们知道更深通常更好,但原因是什么?
- 池化的作用:池化操作扮演什么角色?
回答这些问题对网络设计、数据标注和架构选择具有重要意义。
我们有一篇名为《深度学习数学》的综述论文,虽然已有一年半历史,但它对神经网络的主要理论和问题进行了很好的概述。如果您感兴趣,可以在arXiv上找到它。
第1.5节:现有理论成果样本
以下是一些重要的现有理论成果:
- 通用*似定理:表明神经网络可以*似任何可测的Borel函数。这意味着理论上可以用神经网络逼*任何函数。但该定理没有说明网络需要多大、参数多少以及如何训练。
- 深度效率:研究表明,与浅层网络相比,深层网络在参数数量上更高效。*似深层网络所需的浅层网络参数可能呈指数级增长。
- 泛化误差:许多工作研究了神经网络的泛化误差。早期结果(如Barron的界)表明,*似误差与函数*滑度和神经元数量有关,而泛化误差与神经元数量除以训练样本数有关。然而,现代过参数化网络的表现对这些理论提出了挑战。
- 局部最小值与深度:一些工作研究了局部最小值与网络深度的关系。
- 信息瓶颈:研究了神经网络与信息论中信息瓶颈的联系。
- 不变性与任务:研究了表示的不变性与神经网络旨在解决的任务之间的关系。
- 散射变换:Brunna和Mala研究了散射变换,它类似于神经网络,是卷积与小波变换的级联。研究表明,更深的级联能产生更复杂和不变的特征,这为我们理解普通神经网络提供了思路。
还有许多其他工作研究了神经网络的最小化、全局最优性等。例如,一些*期工作表明,过参数化神经网络能达到全局最小值,但这并不意味着良好的泛化,因为可能发生过拟合。

我们小组在神经网络理论方面也有一些成果。例如,我们研究了深度神经网络分类如何受数据角度的影响,以及泛化误差与不变性之间的关系。如果时间允许,我还会介绍关于“学习型ISTA”的工作,即如何用神经网络解决优化问题。
第1.6节:泛化误差深入探讨
现在,我将更深入地探讨泛化误差。为此,我推荐一篇我们与UCL的Miguel Rodriguez合写的关于深度学习泛化误差的综述论文。这篇论文总结了该领域的最新进展,并在文末列出了一些我们认为有趣的开放性问题。
为了理解神经网络为何表现良好,我使用以下示意图。考虑一个两类分类问题,有蓝色和红色数据点。神经网络通常在线性操作和非线性激活后,在末端使用Softmax或Sigmoid等线性分类器。在两类情况下,这相当于在特征空间中使用一个超*面进行分离。
有趣的是,这个特征空间中的线性分离*面对应于输入空间中的非线性分离曲线。因此,可以将神经网络的过程理解为:将数据转换到一个线性可分的特征空间,然后应用线性分类器。
与传统机器学习相比,第一部分对应于手工设计的特征,第二部分对应于应用SVM等分类器。传统方法的缺点在于两部分是分开设计的,可能导致最终解决方案不是全局最优。而神经网络的优势在于以端到端的方式同时设计两部分,尽管优化是非凸的,但针对整个问题的次优解可能优于两个分别最优但组合后非最优的子问题解。
我认为这是神经网络强大的原因之一。
第1.7节:泛化误差的形式化定义与重要性
在监督分类中,我们有一个带标签的训练集,目标是最小化训练集上的误差。但我们真正感兴趣的是在未见过的测试集上的误差。测试误差(期望风险)与训练误差(经验风险)之间的差异称为泛化误差。
仅仅减少泛化误差是不够的,因为随机分类器的泛化误差可能为零,但性能很差。同样,仅将训练误差降至零(如使用最*邻分类器)也可能导致泛化能力差。因此,我们需要同时最小化训练误差和泛化误差,以使测试误差尽可能小。
我希望这能说服您泛化误差的重要性。许多研究关注泛化误差,并开发了许多正则化技术来减少它。
第1.8节:泛化误差的理论界限与挑战
许多理论结果给出了神经网络泛化误差的界限。例如,Shaftz和Ben David的界表明,泛化误差与参数数量的*方根乘以log(L)/L成正比。这意味着更多的训练样本会降低泛化误差,但更多的参数会增加误差。然而,现代过参数化网络泛化良好,这与该理论相悖。
另一个基于Rademacher复杂度的界表明,泛化误差与权重Frobenius范数的乘积有关,但包含一个2的深度次方的因子。对于100层的ResNet,这个界会变得极大,不切实际。
Goictel等人改进了这个界,使其与网络深度无关,而依赖于权重的谱范数和Frobenius范数。然而,这些基于复杂度度量的界通常对数据不敏感。
Zhang等人的开创性工作表明,相同的网络架构在真实数据上泛化良好,但在随机标签数据上会过拟合。这意味着泛化必须考虑数据的结构。忽略数据结构的泛化界遗漏了重要信息。
Iha Bo等人表明,在真实数据上训练后,网络权重通常非常冗余。可以对网络进行剪枝,剪枝后的参数数量更少,此时依赖于参数数量的泛化界再次变得合理。而在随机数据上训练的网络则难以剪枝。
其他工作表明,随机梯度下降本身作为一种正则化器,可以提高泛化能力。Brukuus等人证明,在某些假设下,两层神经网络能收敛到全局最小值并泛化良好,这连接了优化和泛化。Daniel Sori等人表明,使用Softmax损失可以增大网络间隔,而大间隔有助于泛化。
第1.9节:我们的泛化误差界与雅可比正则化
在我们的工作中,我们研究了泛化误差与网络输入间隔之间的关系。我们证明,泛化误差的界与数据覆盖数除以某个因子有关。覆盖数是指覆盖某个集合所需半径为γ的球的数量。集合越复杂,所需覆盖数越大;球半径γ越大,所需覆盖数越小。

这里的参数γ就是网络的输入间隔。输入间隔越大,泛化误差越小。然而,计算网络的输入间隔是一个NP难问题。幸运的是,我们可以为其推导一个下界。
我们推导的下界将输入间隔与输出间隔联系起来:输入间隔 ≥ 输出间隔 / 网络雅可比矩阵的谱范数 ≥ 输出间隔 / 权重的谱范数乘积,再乘以与权重Frobenius范数相关的项。
在泛化误差界中,我们希望输入间隔尽可能大。由于无法直接控制输入间隔,我们转而尝试增大其下界。下界中的输出间隔可以通过标准训练(如使用SVM的合页损失或Softmax损失)来最大化。因此,为了增加正则化效果,我们需要减小分母。
在最弱的下界中,分母是权重Frobenius范数的乘积。减小Frobenius范数正是L2正则化(权重衰减)所做的。但有趣的是,我们发现一个更好的下界与网络的雅可比矩阵有关。
我们的界表明,与其减少权重的Frobenius范数,不如在训练网络时减少网络的雅可比矩阵,因为雅可比矩阵能为输入间隔提供更紧的*似。
我们通过实验验证了这一想法,比较了权重衰减和我们的新方法——雅可比正则化。在多个数据集(如MNIST、CIFAR、ImageNet)上的实验表明,使用雅可比正则化总能获得比权重衰减更好的结果。这一理论结果与实证观察相符。
我认为,作为研究社区,我们应该致力于发展更多能提供实用工具的理论成果。这个结果表明,提高泛化误差的一种方法是增大间隔。显然,雅可比正则化不是唯一方法。Google的Sam Bengio小组最*发表了一篇论文,提出了其他增大网络间隔的技术,也能改善训练。
第1.10节:不变性与泛化误差


在后续工作中,我们研究了数据不变性与网络不变性之间的关系。我们提出了一个问题:如果数据对于给定任务的某些变换具有不变性(例如,猫的分类对猫在图像中的位置不变),那么设计一个对这些变换具有固有不变性的分类器是否会改善泛化?
我们证明,如果一个分类器在构造上对T种变换具有不变性,那么其泛化误差将比另一个不具备这种不变性的分类器好√T倍。这意味着,如果我们对数据有先验信息,可以设计出固有不变的分类器,从而改善结果。
如今,许多人使用数据增强来帮助分类器学习不变性。但我们的理论和实验表明,如果使分类器固有不变,可以进一步改善结果。例如,使用不变滑动窗口、在特征层面强制不变性,或使用部分Transformer等方法,都能显著提高性能。

第1.11节:对抗攻击的鲁棒性
接下来,我将讨论神经网络对对抗攻击的鲁棒性。对抗样本是指对输入进行微小扰动(人眼难以察觉),导致神经网络做出错误分类的现象。例如,改变气球图像的少量像素,网络可能将其分类为红酒。
这种现象在各类神经网络中普遍存在,并且具有可迁移性:欺骗一个网络的扰动往往也能欺骗其他网络。甚至可以在不了解网络结构的情况下进行黑盒攻击。还有毒化攻击,通过改变训练数据中的少量标签来影响整个训练过程。
理解对抗攻击至关重要,因为在未来,如果自动驾驶汽车等系统被对抗样本欺骗,可能导致严重后果。
第1.12节:对抗攻击的解释与防御方法
对于对抗攻击存在多种解释。有人认为对抗样本就像实数中的有理数,无法完全避免。其他工作表明,正曲率的决策边界更容易受到通用扰动的影响。
防御方法旨在提高网络的鲁棒性或检测攻击是否发生。我将重点讨论提高鲁棒性的方法。
有许多攻击方法试图欺骗网络,如快速梯度符号法、雅可比显著图、DeepFool或Carlini-Wagner攻击。大多数攻击试图以最小的输入变化(在L2、L1或稀疏像素上)来改变网络输出。
防御方法包括对抗训练(使用真实样本和对抗样本一起训练)、蒸馏( surprisingly有效)、输入梯度正则化等。我们将介绍雅可比正则化,这种方法与我们之前提到的泛化误差工作相关。
第1.13节:雅可比正则化用于鲁棒性
我们采用的方法是正则化网络雅可比矩阵的Frobenius范数。我们将此作为后处理步骤应用于已训练的网络,以减少计算开销并允许使用预训练网络。

这种方法有效的原理是,我们分析了一种流行的攻击方法——DeepFool。DeepFool试图最大化网络输出对于扰动样本与原始样本之间的距离,同时最小化输入层面的扰动距离。我们证明,这个比率的上界与网络各输出雅可比矩阵之和有关,进而受网络雅可比矩阵Frobenius范数的约束。
因此,如果减少雅可比矩阵的范数,就能降低攻击成功的概率。我们通过实验验证了这一技术,并与对抗训练、输入梯度正则化等方法进行了比较。结果表明,在大多数情况下,雅可比正则化能取得更好的效果。
同样,更好的理论理解帮助我们开发了更好的防御技术。虽然这不是今天最好的技术,但在计算复杂度相似的方法中,我们获得了更好的结果。
我们还证明了攻击所需距离的上界与网络雅可比矩阵的倒数有关,因此减少雅可比范数会增加攻击所需距离。此外,网络决策边界的高曲率与对抗攻击的脆弱性相关,而曲率的一个*似正是雅可比矩阵的转置乘以雅可比矩阵。因此,减少雅可比Frobenius范数(即雅可比矩阵的迹)也能降低曲率,从而提高鲁棒性。
第1.14节:使用神经网络解决优化问题
最后,我将讨论如何使用深度神经网络解决优化问题,并加速某些逆问题的求解。这对于嵌入式系统或小型系统尤为重要。
我将从一些通用的数学公式开始,然后讨论如何使用迭代方法求解,最后展示这些迭代方法与神经网络的关系。
考虑一个测量模型:x = Az + noise,其中z是未知变量,A是测量矩阵。例如,z可以是图像,A可以是下采样操作,x是低分辨率图像。目标是从x中恢复高分辨率图像z。

在经典技术中,标准恢复方法通常具有以下形式:最小化 ||x - Az||₂²,并使得z属于某个子空间,或者无约束形式:最小化 ||x - Az||₂² + λf(z),其中f(z)是正则化项。



一种流行的惩罚函数是L1范数,与稀疏性和压缩感知相关。求解该最小化问题的流行技术是*端梯度法,也称为迭代收缩阈值算法。

ISTA的更新步骤为:z_{t+1} = S_{λμ}(z_t - μAᵀ(Az_t - x)),其中S是软阈值算子。这相当于一个梯度步长后接一个简单的逐点操作(类似于ReLU)。该算法需要很多次迭代才能收敛。
为了实时或更快地获得解,人们提出了许多加速技术,如FISTA。在本教程中,我将重点介绍深度学习的解决方案。

第1.15节:从ISTA到学习型ISTA
我们可以将ISTA重写为:z_{t+1} = S_{λ}(W₁z_t + W₂x)。Gregor和LeCun在2010年提出,可以用两个可学习的矩阵替换这里的线性操作。他们通过“展开”ISTA迭代来学习这些矩阵:运行ISTA 1000次迭代,获得输入-输出对,然后训练这个展开结构的参数。这样,我们就得到了一个神经网络。
神奇的是,当在新的样本上运行这个学习到的网络(LISTA)时,仅用20层就能达到与ISTA数百次迭代相*的误差,而20层LISTA的计算复杂度仅相当于20次ISTA迭代。这似乎令人惊讶,而且这种方法不仅适用于L1模型,几乎可以用于任何模型。
问题是,为什么这能奏效?我们可以将LISTA视为一个神经网络,其中包含线性操作、类似ReLU的软阈值非线性以及反馈(类似于循环神经网络)。为了理解其工作原理,我们将其与另一种结构进行比较。
第1.16节:理论解释:不精确*端梯度下降
我们提出了对LISTA的解释。我们比较了ISTA和投影梯度下降。PGD算法在每次迭代中应用线性操作和投影。Oymak等人为PGD算法提供了理论,表明其收敛速度与一个参数ρ有关,而ρ与集合C_f的高斯*均宽度相关。如果数据复杂(高斯*均宽度大),则收敛慢;如果数据简单(高斯*均宽度小),则收敛快。
我们的思路是:为了使收敛更快,可以使用一个具有更小高斯*均宽度的集合进行投影。但原始信号所在的集合可能很复杂,投影操作本身也很复杂。因此,我们可以使用对该集合的*似投影,这会引入误差ε。
这样,我们就有了一个权衡:使用更简单的投影(更快收敛)但会引入*似误差。最终误差界包含收敛项和误差项ε。理论上,我们可以使用这种不精确PGD算法。
这个理论可以解释为什么神经网络能获得加速:网络可以学习这种不精确的投影。在最初几次迭代中,我们可以容忍较大的不精确性以获得快速收敛;当接*解时,可以减少不精确性以消除误差。

我们在树状结构稀疏模型上测试了这种算法。使用精确的树投影PGD收敛快但投影复杂;使用仅投影到叶子节点的不精确PGD收敛快但误差大;使用更多层级的不精确PGD收敛快且误差较小;而使用变化层级的不精确PGD(开始时用简单投影,随后增加复杂度)能实现快速收敛和低误差。
我们认为,这种机制可以解释为什么神经网络能获得加速:它可以学习这种不精确的投影。如果你只想在5次迭代内得到解,你并不关心是否添加了一些不精确性,只要它能带来更快的收敛。因此,我们在投影的不精确性和由于投影集合带来的收敛速度之间存在权衡。
我们还将这种学习到的IPGD应用于超分辨率等问题,取得了更好的重建结果和更快的收敛速度。这种理解还引导我们提出了LISTA混合模型,使用多个投影以实现更快的收敛。

还有其他工作为LISTA的有效性提供了解释。例如,Bruna等人认为学习可能源于对A的更好的预条件处理;Sinai等人展示了与限制等距性质的关系;我们的工作则考虑了更一般的情况。

第1.17节:总结

本教程的主要要点是:
- 深度神经网络取得了巨大成功。
- 我们迫切需要更好地理解其成功背后的原因。
- 理论成果不应仅停留在理论层面,更好的理论理解可以帮助我们开发新的实用工具。
- 在泛化误差方面,我们利用理论界推导了新的基于雅可比的正则化技术,提高了网络输入间隔并获得了更好结果。
- 在理解神经网络如何解决优化问题方面,理论为我们提供了设计新网络结构以获得更快收敛速度的工具。
- 在对抗攻击鲁棒性方面,理论理解帮助我们设计了新的正则化技术以改善鲁棒性。


总之,本教程展示了理论如何指导实践,并强调了在深度学习领域进行理论探索的重要性。

浙公网安备 33010602011771号