09 概率图模型:用结构化方法驾驭不确定性

欢迎来到第9讲

概率图模型 (Probabilistic Graphical Model) A 观测变量 (Observed) B 观测变量 (Observed) C 隐变量 (Latent) D 目标变量 (Target) E 观测变量 (Observed) F 隐变量 (Latent) G 目标变量 (Target) H 目标变量 (Target)

本讲座的议程

讲座议程路线图 (Lecture Agenda Roadmap) 1. 动机 为何传统方法 会失效? 2. 核心思想 用“图”语言 简化复杂性 3. 两大流派 有向图 (Directed) vs. 无向图 (Undirected) 4. 实战应用 Python建模 与经济周期识别 5. 统一框架 因子图 (Factor Graphs) 与通用推理

学习目标

完成本章后,你将能够:

  • 解释 “维度灾难”以及概率图模型为何是有效的解决方案。
  • 区分 贝叶斯网络和马尔可夫网络的结构与应用场景。
  • 解读 图结构中所蕴含的条件独立性假设 (D-分离)。
  • 构建 一个简单的贝叶斯网络并使用 pgmpy 库进行概率推理。
  • 描述 隐马尔可夫模型 (HMM) 的基本原理及其在时间序列分析中的作用。

核心问题:如何为复杂经济系统建模?

想象一下预测GDP的增长。这是一个由众多相互关联的变量组成的复杂系统。

影响GDP增长的关键经济变量 (Key Economic Variables Affecting GDP Growth) GDP增长 (GDP Growth) 利率 (Interest Rate) 通货膨胀 (Inflation) 失业率 (Unemployment) 消费者信心 (Confidence) (Consumer Confidence)

我们如何才能清晰地表示并推理这些变量之间的复杂依赖关系?

传统方法的局限性:联合概率分布

理论上,要完整描述一个系统,我们需要知道所有变量的 联合概率分布 \(P(x_1, x_2, \dots, x_d)\)

但这是一个几乎不可能完成的任务。

指数级增长的“维度灾难”

想象我们有 d 个二元经济指标 (例如:加息/不加息)。

要存储它们的联合概率分布,我们需要一个参数表。

变量数量 (d) 参数数量 (2d) 类比
2 4 一张小纸条
10 1,024 一页A4纸
20 1,048,576 一本厚书
30 ~10亿 一个小型图书馆
50 ~\(10^{15}\) 美国国会图书馆所有藏书(数字化后)

这在计算上是完全不可行的。

维度灾难的直观理解

维度灾难:参数数量的指数增长 (Curse of Dimensionality: Exponential Growth in Parameters) 参数数量 (对数尺度) 10³ (1k) 10⁶ (1M) 10⁹ (1G) 变量数量 (d) 10 20 30 2¹⁰ ≈ 1千 2²⁰ ≈ 1百万 2³⁰ ≈ 10亿 计算上不可持续 (Computationally Unsustainable)

解决方案:利用“条件独立”来分解复杂性

传统方法:完全连接 (维度灾难) PGM:稀疏结构 (计算可行) A B C D

大部分变量之间并不是“万物互联”的。一个变量通常只与少数几个其他变量直接相关。

从“完全连接”到“稀疏连接”

与其存储一个巨大的、完全连接的表格,我们不如将联合概率分解成许多 局部概率 的乘积。

\[ \large{P(x_1, \dots, x_d) = \prod_i P(\text{局部变量子集}_i)} \]

而“图”结构,正是用来直观地表示哪些变量是“局部”相关的,哪些是条件独立的。

概率图模型:两大主要流派

我们将主要学习两大类概率图模型,它们处理依赖关系的方式不同。

模型类型 图结构 边的含义 核心应用领域
贝叶斯网络 有向无环图 (DAG) 表示因果影响关系 基因网络、专家系统、时序分析
马尔可夫网络 无向图 表示变量间的相关对称关系 图像处理、社交网络分析、物理系统

我们今天的旅程

今天,我们将从有向图——贝叶斯网络——开始我们的探索之旅。

我们将学习它的:

  1. 表示 (如何用图来编码独立性)
  2. 推理 (如何在给定证据的情况下回答问题)
  3. 学习 (如何从数据中估计模型)

第9.1节:联合概率的表示方法

回顾:表示联合概率的三种方式

三种表示 \(d\) 维随机向量 \(\mathbf{x} = (x_1, \dots, x_d)\) 联合概率 \(P(\mathbf{x})\) 的方法:

  1. 完全独立假设
  2. 链式法则
  3. 概率图模型(PGM)

方法1:完全独立假设

假设所有变量相互独立。

\(P(x_1, \dots, x_d) = P(x_1)P(x_2)\dots P(x_d)\)

  • 优点:极度简化,计算成本最低。
  • 缺点:过于简单,完全忽略了变量间的相互作用,现实中几乎不存在。

方法2:链式法则 (Chain Rule)

利用条件概率的定义,可以精确地分解任何联合概率。

\(P(x_1, \dots, x_d) = P(x_1)P(x_2|x_1)\dots P(x_d|x_1, \dots, x_{d-1})\)

  • 优点:完全通用,没有任何假设,是精确的。
  • 缺点:没有简化任何东西。最后一项 \(P(x_d|x_1, \dots, x_{d-1})\) 的参数数量与原始联合概率一样多,同样面临维度灾难。

方法3:概率图模型 (PGM) 的中间道路

PGM 在简化与表达能力之间取得了完美的平衡。

概率图模型 (PGM) 的中间道路 方法1: 完全独立 (Completely Independent) 优点: 计算成本低 缺点: 过于简化 方法2: 链式法则 (Chain Rule) 优点: 完全精确 缺点: 过于复杂 PGM 完美平衡 (简化与表达能力的权衡)

PGM的本质:链式法则的“智能”简化版

概率图模型:链式法则简化 1. 图结构 (Graph Structure) X₁ X₂ X₃ 模型假设:X₃ 在给定 X₂ 的条件下与 X₁ 条件独立。 (X₃ ⊥ X₁ | X₂) 2. 数学简化 (Simplification) P(X₃ | X₁, X₂) = P(X₃ | X₂)

这就是概率图模型降低计算复杂度的秘密。

图的基本语言:节点与边

概率图模型 G = (V, E) Probabilistic Graphical Model: G = (Vertices, Edges) 智商 (I) 难度 (D) 成绩 (G) 节点 V (Vertices) 代表随机变量 边 E (Edges) 代表概率依赖

第9.2节:概率有向图 (贝叶斯网络)

什么是贝叶斯网络 (BN)?

贝叶斯网络 (Bayesian Networks, BN),也称为概率有向图模型 (PDGM),使用 有向无环图 (Directed Acyclic Graph, DAG) 来编码变量间的依赖关系。

它由两部分组成:

  1. 图结构 (Qualitative): 一个DAG,描述变量间的条件独立关系。
  2. 参数 (Quantitative): 一系列局部条件概率分布(CPDs),量化这些依赖关系的强度。

核心结构:有向无环图 (DAG)

  • 有向 (Directed): 边有箭头,表示影响的方向,通常可以理解为“因果”关系。例如,\(A \rightarrow B\) 表示 A 是 B 的“原因”或“父节点”。
  • 无环 (Acyclic): 从任何一个节点出发,沿着箭头的方向走,你永远无法回到起点。这保证了模型不会出现“自己是自己原因”的逻辑悖论。

DAG 示例:合法的 vs. 非法的

图结构对比:有向无环 vs. 循环 合法的有向无环图 (DAG) A B C 非法的循环图 (Cycle) X Y Z

案例引入:一个简化的学生模型

让我们用图结构来构建一个关于学生表现的简化模型。

有向无环图 (Directed Acyclic Graph) X₁ X₂ X₃ X₄ X₅ X₆

解读图的语言:家族关系

在有向图中,我们使用家族关系来描述节点间的关系:

  • 父节点 (Parents): 一个节点的父节点是指所有直接指向该节点的节点集合。
    • parents(X3){X1, X2}
    • parents(X6){X4, X5}
  • 子节点 (Children): 一个节点的子节点是指所有被该节点直接指向的节点集合。
    • children(X1){X3, X5}
  • 一个没有父节点的节点(如 X1, X2)代表了系统中的“根源”或“外生变量”。

贝叶斯网络的基石:局部马尔可夫性质

DAG的结构直接定义了一个核心的条件独立假设: 局部马尔可夫性质

一个节点在给定其父节点的情况下,条件独立于其所有的非后代节点。

局部马尔可夫性质 (Local Markov Property) X₁ X₂ X₃ X₄ X₅ X₆ 父节点 (Parents) 非后代 (Non-Desc.) 给定其父节点,节点 X₃ 与其非后代条件独立。
Figure 1

案例分析:从图中读取条件独立性

让我们再次审视图 Figure 1

  • 节点 X3:
    • 父节点: {X1, X2}
    • 后代: {X4, X6}
    • 非后代: {X5} (注意X1,X2是它的祖先,也算非后代)
  • 应用性质: 根据局部马尔可夫性质,我们可以断言:在给定 X1X2 的条件下,X3X5 是条件独立的。
  • 数学表达: \(P(X_3 | X_1, X_2, X_5) = P(X_3 | X_1, X_2)\)

联合概率的因子分解:BN的魔力所在

基于局部马尔可夫性质,任何一个符合DAG的联合概率分布都可以被分解为所有节点关于其父节点的条件概率的乘积。

\[ \large{P(x_1, \dots, x_d) = \prod_{i=1}^d P(x_i | \text{parents}(x_i))} \qquad(1)\]

这个公式是整个贝叶斯网络的核心。它将一个庞大、复杂的联合概率分布,分解成了一系列小规模、易于处理的 局部概率模型 (也称作条件概率分布, CPD)。

案例计算:分解图9.1的联合概率

应用 Equation 1 公式到 Figure 1 的图结构上:

\[ \large{ \begin{aligned} & P(X_1, X_2, X_3, X_4, X_5, X_6) \\ & = P(X_1) \cdot P(X_2) \cdot P(X_3|X_1, X_2) \cdot P(X_4|X_3) \\ & \quad \cdot P(X_5|X_1) \cdot P(X_6|X_4, X_5) \end{aligned} } \]

  • 对比: 如果使用标准的链式法则,最后一项会是 \(P(X_6|X_1, X_2, X_3, X_4, X_5)\),计算它需要巨大的参数空间。
  • 优势: 因子分解大大减少了我们需要估计的参数数量,使模型学习成为可能。

参数化:用条件概率表(CPT)填充模型

现在我们有了结构,还需要为每个局部概率模型提供具体的参数。对于离散变量,这通常通过 条件概率表 (Conditional Probability Table, CPT) 来完成。

  • 一个CPT列出了在一个节点的所有父节点取值的每一种组合下,该节点取不同值的概率。
  • 对于根节点 (如 \(X_1\)),CPT就是一个简单的先验概率分布 \(P(X_1)\)
  • 对于有父节点的节点 (如 \(X_3\)),CPT就是 \(P(X_3 | X_1, X_2)\)

9.2.2 有向分离 (D-Separation)

我们为何需要一套通用规则?

局部马尔可夫性质告诉我们一个节点与其“非后代”的独立性。但我们经常需要回答更一般性的问题:

任意两个不相干的节点集合 AB,在给定第三个集合 E 的条件下,是否独立?

D-分离 (Directed Separation) 就是一套完整的、通用的规则,让我们能从图结构中直接“读取”任意条件独立性。

D-分离的核心思想

D-分离的核心思想是检查两组节点之间的所有路径是否被“阻断 (blocked)”。

  • 如果 AB所有 路径都被观测变量集合 E 所阻断,那么 AB 就是条件独立的。

  • 反之,只要有 一条 路径是通的 (unblocked),AB 就不是条件独立的。

D-分离的三种基本结构

任何复杂的DAG中的路径都可以被分解为三种基本连接结构。理解这三种结构是掌握D-分离的关键。

D-分离的三种基本结构 (D-Separation Structures) 1. 共同原因 (Fork) A B C 观察 A, 路径阻断 2. 链式结构 (Chain) A B C 观察 A, 路径阻断 3. V型结构 (Collider) A B C 观察 A, 路径打通

结构1: Tail-to-Tail (共同原因)

b <- a -> c

  • 路径: bc 通过它们的共同父节点 a 连接。
  • 规则: 当 a 被观测到 (给定) 时,从 bc 的路径被 阻断
  • 例子: 冰淇淋销量 \(\leftarrow\) 天气炎热 \(\rightarrow\) 中暑人数
  • 解释: 如果我们已经知道了今天天气炎热,那么观察到冰淇淋销量很高并不会让我们对中暑人数的判断产生任何新的改变。天气信息已经“解释”了两者之间的关联。反之,如果天气未知,那么冰淇淋销量高确实会增加我们对中暑人数多的判断。

结构2: Head-to-Tail (链式结构)

b -> a -> c

  • 路径: b 通过中间节点 a 影响 c
  • 规则: 当 a 被观测到 (给定) 时,从 bc 的路径被 阻断
  • 例子: 美联储政策 \(\rightarrow\) 市场利率 \(\rightarrow\) 房地产价格
  • 解释: 一旦我们直接观测到了市场利率,那么美联储的具体政策是如何导致这个利率的就不再重要了。市场利率本身已经包含了所有预测房地产价格所需的信息。

结构3: Head-to-Head (V型结构)

b -> a <- c

  • 路径: bc 都是 a 的父节点。a 是它们的共同效应。
  • 规则 (注意! 这是反的!):
    • a (或a的任何后代) 未被观测到 时,路径是 阻断 的。
    • a (或a的任何后代) 被观测到 时,路径被 打通
  • 例子: 学术才华 \(\rightarrow\) 获得终身教职 \(\leftarrow\) 学术政治手腕
  • 解释: 这个现象被称为 “解释得通 (explaining away)”。知道一个教授有才华并不能告诉我们任何关于他政治手腕的信息(两者先验独立)。但是,如果我们知道他获得了终身教职,然后又发现他其实没什么才华,这就强烈暗示他一定非常有政治手腕。

D-分离总结:路径是否被阻断?

一条从节点集合 AB 的路径被一个节点集合 E (我们观测到的变量) 阻断,如果路径上存在一个节点 v 满足以下任一条件:

  1. vtail-to-tailhead-to-tail 结构,并且 v 观测集 E 中。
  2. vhead-to-head 结构,并且 v 以及它的所有后代不在 观测集 E 中。

如果 AB所有路径 都被 E 阻断,那么我们就说 AB 在给定 E 的条件下是 D-分离 的,即条件独立: A \(\perp\) B | E

9.2.3 案例研究:一个更完整的学生模型

现在,我们把这些概念应用到教材第8页的经典“学生”贝叶斯网络中。这个网络模拟了影响学生最终获得推荐信(Letter)的各个因素。

  • 变量:
    • D (Difficulty): 课程难度 (0=低, 1=高)
    • I (Intelligence): 学生智商 (0=不高, 1=高)
    • G (Grade): 学生成绩 (0=C, 1=B, 2=A)
    • S (SAT): SAT分数 (0=低, 1=高)
    • L (Letter): 推荐信质量 (0=差, 1=好)

学生模型之图结构

这个图的结构编码了我们关于学生表现的先验信念。

学生贝叶斯网络 (Student Bayesian Network) I 智商 (Intelligence) D 难度 (Difficulty) S SAT G 成绩 (Grade) L 推荐信 (Letter)

学生模型之因子分解

根据上页的图结构和 Equation 1,我们可以立即写出联合概率的分解形式:

\[ \large{P(I, D, G, S, L) = P(I) \cdot P(D) \cdot P(S|I) \cdot P(G|I, D) \cdot P(L|G)} \]

请注意,我们大大简化了问题!例如,我们只需要 \(P(L|G)\),而不是 \(P(L|I, D, G, S)\)

学生模型之参数化 (CPTs)

现在我们需要为每个因子填充CPT。这些概率通常从领域专家或历史数据中估计得到。

1. 根节点 (先验概率)

  • \(P(I)\): P(I=0) = 0.7, P(I=1) = 0.3
  • \(P(D)\): P(D=0) = 0.6, P(D=1) = 0.4

2. 条件概率

  • \(P(S|I)\): 智商如何影响SAT分数
  • \(P(G|I,D)\): 智商和课程难度如何共同影响成绩
  • \(P(L|G)\): 成绩如何影响推荐信质量

CPT 示例: P(G | I, D)

这张表展示了在不同智商和课程难度组合下,学生取得A/B/C三种成绩的概率。

I (智商) D (难度) P(G=A) P(G=B) P(G=C)
0 (不高) 0 (低) 0.30 0.40 0.30
0 (不高) 1 (高) 0.05 0.25 0.70
1 (高) 0 (低) 0.90 0.08 0.02
1 (高) 1 (高) 0.50 0.30 0.20

贝叶斯网络推理:回答“What if”问题

拥有一个完整的贝叶斯网络后,我们就可以进行 推理(Inference)。这意味着,在观测到某些变量(证据, Evidence)后,我们可以计算其他未观测变量的后验概率分布。

核心问题: 计算 \(P(\text{查询变量} | \text{证据变量})\)

推理问题示例

  • 一个学生拿到了一封很好的推荐信(L=1),那么他很聪明的概率是多少?
    • \(P(I=1 | L=1) = ?\)
  • 一个很聪明的学生(I=1)在一门很难的课(D=1)上,他拿到A的概率是多少?
    • \(P(G=A | I=1, D=1) = ?\) (这个可以直接查CPT)
  • 一个学生SAT成绩很高(S=1),但他成绩很差(G=C),那么课程很难的概率是多少?
    • \(P(D=1 | S=1, G=C) = ?\)

实战:用 Python pgmpy 库构建并查询学生模型

理论讲完了,让我们用代码把它变成现实。我们将使用一个强大的Python库 pgmpy 来实现学生模型。

步骤:

  1. 定义模型结构 (添加节点和边)
  2. 定义CPTs
  3. 将CPTs与结构关联,形成完整模型
  4. 创建推理引擎
  5. 进行查询

pgmpy 实战:构建并验证模型

首先,我们用一个完整的代码块来构建学生模型。

# 导入所需的库
from pgmpy.models import DiscreteBayesianNetwork
from pgmpy.factors.discrete import TabularCPD

# 1. 定义模型结构 (边)
student_model = DiscreteBayesianNetwork([('D', 'G'), ('I', 'G'), ('I', 'S'), ('G', 'L')]) 

# 2. 定义CPDs
# 根节点
cpd_d = TabularCPD('D', 2, [[0.6], [0.4]])
cpd_i = TabularCPD('I', 2, [[0.7], [0.3]])

# 条件节点
cpd_s = TabularCPD('S', 2, 
                   values=[[0.95, 0.2], [0.05, 0.8]], 
                   evidence=['I'], evidence_card=[2])

# 注意: evidence列的顺序是 (D=0,I=0), (D=1,I=0), (D=0,I=1), (D=1,I=1)
cpd_g = TabularCPD('G', 3, 
                   values=[[0.30, 0.05, 0.90, 0.50],   # G=A (g_0)
                           [0.40, 0.25, 0.08, 0.30],   # G=B (g_1)
                           [0.30, 0.70, 0.02, 0.20]],  # G=C (g_2)
                   evidence=['D', 'I'], evidence_card=[2, 2])

# 注意:pgmpy的CPT中,变量状态默认从0开始。
# G=A (g_0), G=B (g_1), G=C (g_2)
cpd_l = TabularCPD('L', 2, 
                   values=[[0.9, 0.4, 0.01], [0.1, 0.6, 0.99]], # L=0, L=1
                   evidence=['G'], evidence_card=[3])

# 3. 添加CPDs到模型中
student_model.add_cpds(cpd_d, cpd_i, cpd_s, cpd_g, cpd_l)

# 4. 验证模型是否有效
assert student_model.check_model()
print('模型构建成功并通过验证!')
模型构建成功并通过验证!

pgmpy 实战:创建推理引擎并查询

最激动人心的部分来了!我们创建一个推理引擎(这里使用变量消除法),然后提出我们的问题。

问题: 假设我们观察到一个学生智商很高 (I=1),并且拿到了一封很好的推荐信 (L=1)。那么,这门课程很难 (D=1) 的概率是多少?即计算 \(P(D=1 | I=1, L=1)\)

# 这是一个完整的、可运行的代码块 (接上页)
from pgmpy.inference import VariableElimination
# (模型构建代码已在上页运行,这里不再重复)

# 5. 创建推理引擎
inference = VariableElimination(student_model)

# 6. 进行查询
query_result = inference.query(variables=['D'], evidence={'I': 1, 'L': 1})
print(query_result)
+------+----------+
| D    |   phi(D) |
+======+==========+
| D(0) |   0.7482 |
+------+----------+
| D(1) |   0.2518 |
+------+----------+

结果解读与经济直觉

查询结果显示 \(P(D=1 | I=1, L=1) \approx 0.39\)

  • 先验概率: 在没有任何信息的情况下,课程很难的概率是 \(P(D=1)=0.4\)
  • 后验概率: 当我们得知这个聪明的学生拿到了一封好信,我们对课程很难的信念轻微下降了,从40%降到了39%。
  • 直觉: 为什么?因为一个聪明的学生,即使在难的课上也有可能取得好成绩(进而拿到好信)。但是,他在简单的课上更容易取得好成绩。所以“好信”这个证据,略微增加了我们对“课程简单”的相信程度。这就是贝叶斯推理的力量:它以一种符合逻辑的方式,量化地更新我们的信念。

9.2.4 动态贝叶斯网络:当BN遇到时间

如果我们将贝叶斯网络在时间维度上“展开”,就得到了 动态贝叶斯网络 (Dynamic Bayesian Network, DBN)

最简单也最著名的DBN就是 隐马尔可夫模型 (Hidden Markov Model, HMM)

HMM的直观理解:洞穴中的天气预报

想象你被困在一个洞穴里,无法看到外面的天气。但洞穴里每天都会渗水。

  • 你的观测 (可见): 今天洞穴里是 “干燥”、“潮湿” 还是 “滴水”。
  • 真实状态 (隐): 外面的天气是 “晴天”、“多云” 还是 “雨天”。

你的任务是,根据连续几天的渗水情况,推断出外面最可能的天气变化序列。

HMM的核心应用

对时间序列数据建模,其中系统的真实状态是不可见的 (隐),我们只能通过一些可见的观测来推断它。

  • 经济学应用:
    • 真实状态 (隐): 经济处于“扩张期”还是“衰退期”。
    • 观测 (可见): 每季度的GDP增长率、失业率数据。

HMM 的两个核心假设

HMM建立在两个关键的简化假设之上,这使得模型变得 tractable。

  1. 马尔可夫假设 (状态转移)
  2. 观测独立性假设 (发射概率)

假设1:马尔可夫假设 (状态转移)

当前的真实状态 \(z_t\) 取决于前一个时刻的真实状态 \(z_{t-1}\)

\[ \large{P(z_t | z_{t-1}, z_{t-2}, \dots, z_1) = P(z_t | z_{t-1})} \]

  • 经济学解释: 经济是处于衰退还是扩张,主要取决于上一个季度是衰退还是扩张,而与更早之前的历史无关(在一阶模型中)。

假设2:观测独立性假设 (发射概率)

当前的观测值 \(x_t\) 取决于当前的真实状态 \(z_t\)

\[ \large{P(x_t | z_t, x_{t-1}, z_{t-1}, \dots) = P(x_t | z_t)} \]

  • 经济学解释: 本季度的GDP增长率,只取决于本季度经济是处于衰退还是扩张,而与之前的状态和观测都无关。

HMM 的图结构

这两个假设共同定义了一个非常简洁的链式图结构。

隐马尔可夫模型 (Hidden Markov Model) 隐状态序列Z (Hidden States) 观测序列X (Observations) Z₁ Z₂ ... Zₜ X₁ X₂ ... Xₜ

HMM 的三要素

要完全定义一个HMM,我们需要三个参数,通常记为 \(\lambda = (A, B, \pi)\)

  1. 状态转移矩阵 A: \(A_{ij} = P(z_t = j | z_{t-1} = i)\)
    • 描述了从一个隐状态转移到另一个隐状态的概率。
  2. 观测发射矩阵 B: \(B_{jk} = P(x_t = k | z_t = j)\)
    • 描述了在某个隐状态下,生成特定观测值的概率。
  3. 初始状态分布 \(\pi\): \(\pi_i = P(z_1 = i)\)
    • 描述了系统在第一个时刻处于各个隐状态的概率。

经济学案例:用HMM识别商业周期

让我们用一个简化的模型来识别经济是处于 扩张(Expansion) 还是 衰退(Recession)

  • 隐状态 Z: {0: 扩张, 1: 衰退}
  • 观测 X: 我们观察每个季度的GDP增长率,并将其简化为三个等级:{0: 负增长, 1: 低增长(0-2%), 2: 高增长(>2%)}

我们的任务是: 根据观测到的GDP增长序列,推断出最可能的经济状态(扩张/衰退)序列。

HMM 参数设置: 转移矩阵 A

矩阵 A 代表了经济周期的“惯性”。

\[ \large{A = \begin{pmatrix} P(\text{扩}|\text{扩}) & P(\text{衰}|\text{扩}) \\ P(\text{扩}|\text{衰}) & P(\text{衰}|\text{衰}) \end{pmatrix} = \begin{pmatrix} 0.9 & 0.1 \\ 0.3 & 0.7 \end{pmatrix}} \]

  • 解读:
    • 如果本季度是扩张,那么下个季度有90%的概率继续扩张。
    • 如果本季度是衰退,那么下个季度有70%的概率继续衰退(衰退比扩张更“不稳定”)。

HMM 参数设置: 发射矩阵 B

矩阵 B 代表了不同经济状态下的典型产出表现。

\[ \large{B = \begin{pmatrix} P(\text{负增}|\text{扩}) & P(\text{低增}|\text{扩}) & P(\text{高增}|\text{扩}) \\ P(\text{负增}|\text{衰}) & P(\text{低增}|\text{衰}) & P(\text{高增}|\text{衰}) \end{pmatrix} = \begin{pmatrix} 0.05 & 0.45 & 0.50 \\ 0.60 & 0.35 & 0.05 \end{pmatrix}} \]

  • 解读:
    • 在扩张期,最可能出现高增长(50%);在衰退期,最可能出现负增长(60%)。

HMM 参数设置: 初始分布 \(\pi\)

\(\pi\) 代表我们对 t=1 时刻经济状态的先验信念。

\[ \large{\pi = \begin{pmatrix} P(z_1=\text{扩}) \\ P(z_1=\text{衰}) \end{pmatrix} = \begin{pmatrix} 0.8 \\ 0.2 \end{pmatrix}} \]

  • 解读: 我们认为在序列开始时,经济有80%的可能处于扩张期。

HMM 要解决的三个核心问题

有了模型 \(\lambda = (A, B, \pi)\) 后,HMM理论主要解决三个问题。

隐马尔可夫模型 (HMM) 的三个核心问题 给定: 模型 λ=(A,B,π) & 观测序列 X 1. 评估 (Evaluation) 模型与数据有多匹配? 计算 P(X|λ) 前向算法 (Forward Algorithm) 2. 解码 (Decoding) 发生了什么? 寻找最可能的隐状态序列 Z 维特比算法 (Viterbi Algorithm) 3. 学习 (Learning) 如何构建最好的模型? 调整 λ 以最大化 P(X|λ) Baum-Welch (EM) 算法

HMM 总结

  • HMM是分析时间序列的强大工具,是DBN的一个重要特例。
  • 它通过区分“隐状态”和“观测”来对复杂系统建模。
  • 其核心是三个参数 \((A, B, \pi)\) 和解决三个核心问题(评估、解码、学习)的经典算法。
  • 在经济学中,它被广泛用于识别商业周期、金融市场状态切换(牛市/熊市)等。

第9.3节:概率无向图 (马尔可夫网络)

从“因果”到“相关”:为何需要无向图?

贝叶斯网络中的有向边非常适合表示因果关系 (\(A \rightarrow B\))。但在很多场景下,变量之间的关系是对称的、相互的,没有明确的因果方向。

  • 社交网络: 我是你的朋友,你也是我的朋友。
  • 图像像素: 一个像素的颜色和它周围的像素颜色高度相关,但谁也不是谁的“原因”。
  • 空间经济学: 一个地区的房价与邻近地区的房价相互影响。

什么是马尔可夫随机场 (MRF)?

对于这类问题,马尔可夫随机场 (Markov Random Field, MRF) 或称为 概率无向图模型 (PUGM) 是更自然的选择。

一个MRF由两部分定义:

  1. 一个 无向图 \(G=(\mathcal{V}, \mathcal{E})\),节点代表随机变量,边代表它们之间的直接依赖关系。
  2. 一组 势函数 (Potential Functions) \(\phi_C(\mathbf{x}_C)\),定义在图的“团 (clique)”上,用于量化变量间的“相容性”。

无向图中的条件独立性:简单得多!

与D-分离的复杂规则不同,无向图中的条件独立性非常直观:

如果从节点集合 A 到节点集合 B 的所有路径都必须经过节点集合 C,那么 A 和 B 在给定 C 的条件下是条件独立的。

换句话说,C 分隔 (separates) 了 A 和 B

案例:从无向图中读取独立性

马尔可夫随机场中的分离 (Separation in MRFs) 给定观测节点B (绿色),节点A与节点{C, D}之间的路径被阻断。 结论: A ⊥ {C, D} | B A B C D

MRF 条件独立性:三种等价的马尔可夫性质

  1. 全局马尔可夫性:
    • \(A \perp B | C\) 如果 C 分隔了 A 和 B。 (刚才讲的)
  2. 局部马尔可夫性:
    • 一个节点在给定其所有 邻居 的条件下,与其所有其他节点条件独立。
    • 邻居 (Neighbors) 或 马尔可夫毯 (Markov Blanket) 是指直接与该节点有边相连的节点集合。
  3. 成对马尔可夫性:
    • 任何两个 不直接相连 的节点,在给定所有其他节点的条件下,是条件独立的。

这三种性质是等价的。

联合概率的分解:团 (Clique) 与势函数

无向图的联合概率如何分解?答案是通过 团 (Clique)

  • 团 (Clique): 图中的一个节点子集,其中任意两个节点之间都有一条边。它们是图中的“全连接”子图。
  • 极大团 (Maximal Clique): 一个团,如果再加入任何一个节点,它就不再是团了。

MRF的联合概率分布可以被分解为定义在 极大团 上的势函数的乘积。

案例:识别极大团

无向图中的极大团 (Maximal Cliques) A B C D E 极大团 {A, B, E} {B, C} {D, E}

势函数 (Potential Function)

  • 对于图中的每个极大团 \(C\),我们定义一个 势函数 \(\psi_C(\mathbf{x}_C)\)
  • 这个函数输入该团中所有变量的一种特定取值组合 \(\mathbf{x}_C\),输出一个 非负的实数
  • 直观意义: 这个数值代表了该团内的变量处于这种特定状态的“相容性”或“偏好度”。数值越大,意味着这种状态组合越“和谐”,其出现的概率也越高。
  • 重要: 它不是概率!它只是一个分数。

Hammersley-Clifford 定理

这个重要的定理建立了MRF的联合概率分布与势函数之间的桥梁:

对于一个严格为正的概率分布 \(P(\mathbf{x}) > 0\),如果它满足一个无向图 \(G\) 的条件独立性,那么它的联合概率可以被分解为图 \(G\) 中所有 极大团 \(C\) 上的势函数 \(\psi_C\) 的乘积形式:

\[ \large{P(\mathbf{x}) = \frac{1}{Z} \prod_{C \in \mathcal{C}} \psi_C(\mathbf{x}_C)} \]

其中 \(\mathcal{C}\) 是所有极大团的集合。

归一化常数 (Partition Function) Z

公式中的 \(Z\) 被称为 配分函数 (Partition Function) 或归一化常数。

\[ \large{Z = \sum_{\mathbf{x}} \prod_{C \in \mathcal{C}} \psi_C(\mathbf{x}_C)} \]

  • 它的作用: 保证所有可能状态的概率之和为1。因为势函数的乘积本身不保证这一点,所以需要除以所有可能状态的势函数乘积之和,进行归一化。
  • 计算的挑战: 计算 \(Z\) 通常是MRF中最困难的部分。因为它需要对所有变量的所有可能取值组合进行求和,这是一个指数级的计算量。这是MRF推理和学习的主要障碍。

BN vs. MRF 总结

特征 贝叶斯网络 (有向) 马尔可夫网络 (无向)
图结构 有向无环图 (DAG) 无向图
核心思想 条件概率因子分解 势函数/能量函数因子分解
参数化 条件概率分布 (CPDs) 极大团上的势函数
归一化 自动满足 (局部归一化) 需要全局的配分函数 Z
适用场景 因果关系, 生成模型 对称关系, 判别模型
可解释性 强,易于理解 较弱,势函数不直观

9.3.3 条件随机场 (CRF)

生成模型 vs. 判别模型

  • 生成模型 (Generative): 对联合概率 \(P(X, Z)\) 建模。它学习数据是如何“生成”的。
    • 例子: HMM, 贝叶斯网络。
    • 能力: 可以用来生成新的样本数据。
  • 判别模型 (Discriminative): 直接对我们更关心的条件概率 \(P(Z|X)\) 建模。它学习如何“区分”不同的Z。
    • 例子: 逻辑回归, CRF
    • 能力: 通常在分类和预测任务上表现更好。

CRF 的核心优势

条件随机场 (Conditional Random Field, CRF) 是一种特殊的MRF,它是一个判别模型。

  • 与HMM的比较: CRF可以放宽HMM的观测独立性假设。在CRF中,当前状态 \(z_t\) 的概率可以依赖于整个观测序列 \(X\) 中的任何特征,这使得模型更加强大和灵活。

线性链CRF (Linear-Chain CRF)

最常见的CRF是线性链CRF,专门用于处理序列数据。

它的条件概率 \(P(Z|X)\) 的形式为:

\[ \large{P(Z|X) = \frac{1}{Z(X)} \exp\left( \sum_{t,k} \lambda_k f_k(z_{t-1}, z_t, X, t) \right)} \]

  • \(f_k\) 称为 特征函数,它可以是关于状态和观测的任何函数 (例如,“如果当前词是’银行’,且前一个词是’国家’”)。
  • \(\lambda_k\) 是每个特征的权重,需要从数据中学习。
  • \(Z(X)\) 是依赖于观测序列 \(X\) 的配分函数。

第9.4节:统一框架 - 因子图与和积算法

为何需要一个统一的框架?

我们已经学习了有向图和无向图,它们都表示了联合概率的因子分解,但方式不同。

  • 有向图: \(P(\mathbf{x}) = \prod_i P(x_i | \text{parents}(x_i))\)
  • 无向图: \(P(\mathbf{x}) = \frac{1}{Z} \prod_C \psi_C(\mathbf{x}_C)\)

有没有一种更通用的表示法,能够统一这两种模型,并为通用推理算法提供基础?

答案是 因子图 (Factor Graph)

因子图:一种更精细的表示

因子图是一种二部图,它显式地表示了全局函数(如联合概率)是如何分解成一系列局部函数(因子)的乘积的。

  • 两类节点:
    1. 变量节点 (Variable Nodes): 通常画成圆形,代表随机变量。
    2. 因子节点 (Factor Nodes): 通常画成方形,代表全局函数中的一个因子。
  • : 一条边只存在于变量节点和因子节点之间。一个变量节点与一个因子节点相连,当且仅当该变量出现在该因子中。

案例:将贝叶斯网络转换为因子图

回顾学生BN的分解:\(P(\cdot) = P(I) P(D) P(S|I) P(G|I,D) P(L|G)\)

贝叶斯网络到因子图的转换 (BN to Factor Graph) I D S G L P(S|I) P(G|I,D) P(L|G) P(I) P(D)

案例:将马尔可夫网络转换为因子图

回顾MRF的分解:\(P(\mathbf{x}) \propto \psi_1(A,B,E) \psi_2(B,C) \psi_3(E,D)\)

马尔可夫网络到因子图的转换 (MRF to Factor Graph) P(x) ∝ ψ₁(A,B,E) ψ₂(B,C) ψ₃(E,D) A B E C D ψ₁ ψ₂ ψ₃

因子图的优势

  • 消除歧义: 不同的图(有向或无向)可能对应相同的因子分解,而因子图是唯一的。
  • 通用算法: 许多重要的推理算法,如 置信传播,在因子图上定义最为清晰和通用。

通用推理算法:置信传播 (Belief Propagation)

置信传播 (Belief Propagation, BP),也称为 和积算法 (Sum-Product Algorithm),是一种在图模型上进行高效精确推理的通用算法。

  • 目标: 计算每个单变量的 边际概率 (Marginal Probability) \(P(x_i)\)
  • 核心思想: 算法通过在因子图的边上传递“消息 (messages)”来工作。这可以看作是节点之间相互“告知”它们对变量状态的“信念”。
  • 收敛: 在没有环的图(即树结构)上,该算法传递有限次消息后会收敛,并得到精确的边际概率。在有环的图上(Loopy BP),算法不保证收敛或得到精确解,但常常在实践中效果很好。

和积算法的直觉:分配律的应用

为什么这个算法高效?因为它巧妙地利用了分配律来避免重复计算。

考虑计算边际概率 \(P(x_1) = \sum_{x_2, x_3, x_4} P(x_1,x_2,x_3,x_4)\) 假设 \(P(\mathbf{x}) \propto f_1(x_1,x_2) f_2(x_2,x_3) f_3(x_3,x_4)\)

暴力计算: 对每个 \(x_1\) 的取值,遍历所有 \(x_2, x_3, x_4\) 的组合。

和积算法 (智能计算):

\[ \large{P(x_1) \propto \sum_{x_2} f_1(x_1, x_2) \left( \sum_{x_3} f_2(x_2, x_3) \left( \sum_{x_4} f_3(x_3, x_4) \right) \right)} \]

我们把求和符号尽可能地向内推,先对最里面的变量求和,然后将结果作为一个“消息”传递出去。这正是和积算法消息传递的数学本质。

课程总结

  • 维度灾难 促使我们寻找简化联合概率分布的方法。
  • 概率图模型 利用 条件独立性 将复杂分布分解为局部函数的乘积,用图来表示独立性假设。
  • 贝叶斯网络 (有向图) 使用条件概率,适合建模因果关系,其联合概率通过链式法则的简化形式给出。
  • 马尔可夫网络 (无向图) 使用势函数,适合建模对称关系,其联合概率由极大团上的势函数乘积给出(Hammersley-Clifford定理)。
  • 因子图 为两种模型提供了统一的、更精细的表示,是通用推理算法的基础。
  • 置信传播 (和积算法) 是在图模型上进行高效推理的核心算法,其本质是利用分配律避免重复计算。

本章关键要点

  1. 结构就是假设:图中的每一个节点和每一条边(或缺失的边)都是一个关于世界如何运作的假设。
  2. 分解是关键:将一个大的、棘手的问题分解成许多小的、可管理的问题。
  3. 推理是核心:模型建立后,其价值在于回答关于“what if”的问题,即进行概率推理。

谢谢!

问题与讨论