Day 6: 概率图模型——不确定性世界的导航图

写在前面:世界是充满不确定性的。传统的机器学习往往给出确定的预测(分类或回归),但在许多复杂场景(如语音识别、自然语言处理、医疗诊断)中,我们需要对变量之间的依赖关系进行建模。概率图模型(Probabilistic Graphical Models, PGM)正是结合了概率论(处理不确定性)和图论(处理复杂关系)的强大工具。虽然在深度学习时代,端到端模型掩盖了许多PGM的光芒,但HMM、CRF等思想依然是理解序列建模(如Transformer位置编码、RLHF)的基石。


目录

  1. 概率图模型概览
  2. 贝叶斯网络:有向图的因果
  3. 马尔可夫随机场:无向图的相关
  4. 隐马尔可夫模型 (HMM):时间序列的基石
  5. 条件随机场 (CRF):序列标注的神器
  6. 总结与实战代码

1. 概率图模型概览

概率图模型的核心是将概率分布 P(X1,X2,...,Xn)P(X_1, X_2, ..., X_n)P(X1,X2,...,Xn) 表示为图结构 G=(V,E)G=(V, E)G=(V,E)

  • 节点 (Node):表示随机变量。
  • 边 (Edge):表示变量之间的概率依赖关系。

根据边的方向,分为两大类:

  1. 有向图 (Directed Graphical Models):即贝叶斯网络,表达"因果关系"(A导致B)。
  2. 无向图 (Undirected Graphical Models):即马尔可夫随机场,表达"相关关系"(A和B相互影响)。

2. 贝叶斯网络 (Bayesian Networks)

贝叶斯网络使用有向无环图 (DAG) 来分解联合概率分布。

2.1 核心公式

P(X1,...,Xn)=∏i=1nP(Xi∣Pa(Xi))P(X_1, ..., X_n) = \prod_{i=1}^n P(X_i | Pa(X_i))P(X1,...,Xn)=i=1nP(XiPa(Xi))
其中 Pa(Xi)Pa(X_i)Pa(Xi) 是节点 XiX_iXi 的父节点集合。

2.2 典型案例:警报系统

  • 变量:地震 (E)、入室盗窃 (B)、警报响 (A)、约翰打电话 (J)、玛丽打电话 (M)。
  • 结构E→AE \to AEA, B→AB \to ABA, A→JA \to JAJ, A→MA \to MAM
  • 直觉:地震和盗窃都会触发警报;警报响了,约翰和玛丽可能会给你打电话。但地震和盗窃之间没有直接联系(除非警报响了,观测到警报后,二者会产生"解释消除"效应)。

3. 马尔可夫随机场 (Markov Random Fields, MRF)

当变量之间没有明确的方向(因果)时,使用无向图。例如图像中相邻像素的关系。

3.1 团与势函数

  • 团 (Clique):图中任意两个节点都有边连接的子图。
  • 联合概率:基于最大团 (Maximal Clique) 的势函数 (Potential Function) 的乘积。
    P(X)=1Z∏CψC(XC)P(X) = \frac{1}{Z} \prod_{C} \psi_C(X_C)P(X)=Z1CψC(XC)
    其中 ZZZ 是归一化因子(Partition Function),ψC\psi_CψC 是非负函数(通常取指数形式)。

4. 隐马尔可夫模型 (HMM)

HMM 是最简单的动态贝叶斯网络,用于处理时序数据。

4.1 两个序列

  1. 状态序列 (Hidden States)Z1,Z2,...,ZTZ_1, Z_2, ..., Z_TZ1,Z2,...,ZT(不可见,如"今天的天气":晴/雨)。
  2. 观测序列 (Observations)X1,X2,...,XTX_1, X_2, ..., X_TX1,X2,...,XT(可见,如"今天的活动":散步/宅家)。

4.2 三要素

  1. 初始状态概率 π\piπ:第一天是晴天的概率。
  2. 状态转移矩阵 AAA:晴天变雨天的概率。
  3. 发射概率矩阵 BBB:晴天去散步的概率。

4.3 三个基本问题

  1. 概率计算(Forward-Backward算法):已知模型,求某个观测序列出现的概率。
  2. 解码问题(Viterbi算法):已知观测序列,求最可能的隐藏状态序列(如语音识别中,听到的声音 -> 对应的文字)。
  3. 学习问题(Baum-Welch算法/EM):已知观测序列,反推模型参数。

5. 条件随机场 (CRF)

在NLP序列标注(如分词、NER)任务中,CRF 曾长期霸榜。它解决了 HMM "观测独立性假设"过于严格的问题。

5.1 Linear-Chain CRF

只考虑相邻状态之间的依赖。

  • 判别式模型:直接建模 P(Y∣X)P(Y|X)P(YX),而不是像 HMM 那样建模 P(X,Y)P(X, Y)P(X,Y)
  • 特征函数:可以利用整个观测序列 XXX 的信息(例如标注第 iii 个词时,可以看上下文),不仅仅是当前词。

5.2 对比 HMM vs MEMM vs CRF

  • HMM:生成式,假设太强(观测只依赖当前状态)。
  • MEMM (最大熵马尔可夫):判别式,但也存在"标注偏置"问题(倾向于选择后继状态少的路径)。
  • CRF:全局归一化,解决了上述问题,是序列标注的完全体

6. 总结与实战代码

Python 实战:使用 HMM 进行股市波动预测(简化版)

虽然 hmmlearn 库不是 sklearn 的一部分,但它兼容 sklearn 接口。

import numpy as np
import matplotlib.pyplot as plt
from hmmlearn.hmm import GaussianHMM

# 1. 模拟数据
# 假设股市有3种隐藏状态:[熊市, 震荡, 牛市]
# 观测值是每日收益率
np.random.seed(42)

# 生成模拟收益率
# 状态0(熊市): 均值-0.02, 方差0.01
# 状态1(震荡): 均值0.00, 方差0.005
# 状态2(牛市): 均值0.02, 方差0.01
means = np.array([[-0.02], [0.00], [0.02]])
covars = np.array([[0.005], [0.002], [0.005]]) 

model_true = GaussianHMM(n_components=3, covariance_type="diag")
model_true.startprob_ = np.array([0.1, 0.8, 0.1])
model_true.transmat_ = np.array([
    [0.9, 0.1, 0.0],
    [0.1, 0.8, 0.1],
    [0.0, 0.1, 0.9]
])
model_true.means_ = means
model_true.covars_ = covars

# 采样 500 天数据
X, Z = model_true.sample(500)

# 2. 训练 HMM 模型
# 在实际场景中,我们只知道 X (收益率),不知道 Z (市场状态)
model = GaussianHMM(n_components=3, covariance_type="diag", n_iter=100)
model.fit(X)

# 3. 预测隐藏状态
Z_pred = model.predict(X)

# 4. 可视化
plt.figure(figsize=(15, 8))
plt.subplot(2, 1, 1)
plt.plot(X, label='Daily Returns', alpha=0.6)
plt.title('Simulated Daily Returns')

plt.subplot(2, 1, 2)
plt.plot(Z_pred, label='Predicted Hidden State', color='orange')
plt.yticks([0, 1, 2], ['State 0', 'State 1', 'State 2'])
plt.title('Inferred Market Regimes')
plt.tight_layout()
plt.show()

print(f"Learned Means:\n{model.means_}")
print(f"Learned TransMat:\n{model.transmat_}")

核心总结

  1. HMM 是序列建模的鼻祖,核心是状态转移和发射概率。
  2. CRF 曾是 NLP 实体识别(NER)的王者,核心是全局归一化的条件概率。
  3. 深度学习时代:虽然 LSTM/Transformer 取代了 HMM/CRF 作为特征提取器,但在输出层,BiLSTM-CRF 依然是许多高精度序列标注任务的首选架构,因为 CRF 能显式学习标签约束(如 B-Person 后面不能接 I-Org)。
Logo

更多推荐