3. 概率图模型入门:贝叶斯网络与马尔可夫网络、条件独立性与图结构、概率图模型的表示

好,咱们今天聊聊概率图模型。说实话,这东西刚接触时容易懵——又是图又是概率的,到底想干嘛?

我个人的理解是:概率图模型就是给概率分布画了一张“关系图”。你想想看,一个高维的联合分布,动辄几十上百个变量,直接建模根本不可能。但如果我们能把这些变量之间的依赖关系画出来,事情就简单多了。

3.1 为什么需要概率图模型?

先问个问题:假设你有10个二值变量,完整的联合分布需要多少个参数?

答案是2^10 - 1 = 1023个。这还只是10个变量。真实业务场景里,变量成百上千很正常。直接建模?不现实。

概率图模型的核心思想就是:利用条件独立性,把高维联合分布拆解成多个低维分布的乘积。说白了,就是“分而治之”。

核心公式(有向图):

P(X₁, X₂, ..., Xₙ) = ∏ P(Xᵢ | Parents(Xᵢ))

每个节点只依赖它的父节点,而不是所有其他节点。这就是降维的关键。

我在项目中遇到过这样一个场景:用户行为预测模型,涉及年龄、性别、浏览历史、购买记录、点击率等20多个变量。如果用全连接模型,参数多到没法训练。后来改用贝叶斯网络,把变量间的因果关系梳理清楚,参数直接降了两个数量级。

3.2 贝叶斯网络 vs 马尔可夫网络

这两种网络,说白了就是“有向”和“无向”的区别。但背后的哲学完全不同。

3.2.1 贝叶斯网络(有向图)

贝叶斯网络用有向边表示因果关系。箭头从原因指向结果。

举个例子:

天气 → 是否带伞 → 是否淋湿
         ↓
      心情好坏

这个图告诉我们:

  • 天气影响带伞决策
  • 带伞影响淋湿概率
  • 淋湿影响心情

每个节点都有一个条件概率表(CPT),描述它在父节点不同取值下的概率分布。

我的经验:贝叶斯网络适合做因果推断。如果你能画出变量间的因果方向,用贝叶斯网络准没错。我曾经在电商推荐系统里用贝叶斯网络建模“用户点击→购买”的因果链,效果比纯统计模型好很多。

3.2.2 马尔可夫网络(无向图)

马尔可夫网络用无向边表示变量间的“相关性”或“约束关系”。没有方向,只有关联。

举个例子:图像去噪任务中,每个像素点与相邻像素点之间有约束——相邻像素的颜色应该相近。这就是一个典型的马尔可夫网络。

像素1 — 像素2 — 像素3
  |       |       |
像素4 — 像素5 — 像素6

马尔可夫网络的联合分布用“势函数”的乘积表示:

P(X) = (1/Z) * ∏ ψⱼ(Dⱼ)

其中ψⱼ是势函数,Dⱼ是团(clique),Z是归一化常数。

避坑指南:我曾经在自然语言处理任务里,把马尔可夫网络当贝叶斯网络用,结果模型训练不收敛。后来才意识到:马尔可夫网络没有方向,它的“条件独立性”是基于图分割的,跟贝叶斯网络的d-分离完全不同。千万别搞混。

3.3 条件独立性与图结构

这是概率图模型最核心的部分。图结构直接决定了哪些变量是条件独立的。

3.3.1 贝叶斯网络中的d-分离

d-分离(d-separation)是判断条件独立性的规则。说白了就是:给定某些节点,看两个节点之间是否还有“信息流”可以传递。

三种基本结构:

结构 图示 条件独立性
链式 A → B → C 给定B,A和C独立
分叉 A ← B → C 给定B,A和C独立
对撞 A → B ← C 给定B,A和C独立

嗯,这里要注意:对撞结构是反直觉的。两个独立的原因,一旦知道了结果,它们反而变得相关了。这就是著名的“解释消除”现象。

举个例子:假设“下雨”和“洒水车”都可能导致“地面湿”。如果不知道地面是否湿,下雨和洒水车是独立的。但一旦知道地面湿了,下雨和洒水车就变得相关——如果没下雨,那一定是洒水车干的。

3.3.2 马尔可夫网络中的条件独立性

马尔可夫网络的条件独立性更直观:给定一个节点集合S,如果两个节点之间的所有路径都被S中的节点“阻断”,那么这两个节点在给定S下条件独立。

这叫做“全局马尔可夫性”。

还有一个重要的概念:马尔可夫毯(Markov Blanket)。一个节点的马尔可夫毯包括它的父节点、子节点、以及子节点的其他父节点。给定马尔可夫毯,该节点与图中所有其他节点条件独立。

我建议:在实际建模时,先画出变量的马尔可夫毯,可以帮你快速判断哪些变量是冗余的。我在做特征选择时经常用这个技巧,能省不少时间。

3.4 概率图模型的表示

说了这么多理论,咱们看看实际怎么表示一个概率图模型。

3.4.1 图结构表示

图结构就是节点和边的集合。节点表示随机变量,边表示依赖关系。

# 一个简单的贝叶斯网络结构
节点: {天气, 带伞, 淋湿, 心情}
边: 
  天气 → 带伞
  天气 → 淋湿
  带伞 → 淋湿
  淋湿 → 心情

3.4.2 参数表示

参数就是每个节点的条件概率表(CPT)或势函数。

# 天气的CPT(无父节点)
P(天气=晴) = 0.7
P(天气=雨) = 0.3

# 带伞的CPT(父节点:天气)
P(带伞=是 | 天气=晴) = 0.1
P(带伞=是 | 天气=雨) = 0.9

# 淋湿的CPT(父节点:天气, 带伞)
P(淋湿=是 | 天气=雨, 带伞=否) = 0.95
P(淋湿=是 | 天气=雨, 带伞=是) = 0.1
P(淋湿=是 | 天气=晴, 带伞=否) = 0.05
P(淋湿=是 | 天气=晴, 带伞=是) = 0.01

3.4.3 知识体系结构图

下面我用一张SVG图来展示本章的知识体系:

概率图模型知识体系 概率图模型 贝叶斯网络(有向图) 马尔可夫网络(无向图) 条件概率表(CPT) P(X|Parents) d-分离规则 条件独立性判断 势函数 ψ(D) 团乘积 全局马尔可夫性 图分割独立性 联合分布分解:P(X) = ∏P(Xᵢ|Parents) 或 (1/Z)∏ψ(D) 应用:因果推断 · 图像去噪 · 推荐系统 · NLP

3.5 实际建模中的选择建议

说了这么多,到底什么时候用贝叶斯网络,什么时候用马尔可夫网络?

我个人的经验是:

  • 有明确的因果关系 → 用贝叶斯网络。比如“广告曝光→用户点击→购买转化”,方向很清楚。
  • 只有相关性或约束关系 → 用马尔可夫网络。比如图像像素之间的平滑约束、社交网络中朋友关系的相互影响。
  • 需要做因果推断 → 首选贝叶斯网络。马尔可夫网络没有方向,做不了因果。
  • 变量之间是双向影响 → 马尔可夫网络更合适。比如两个朋友互相影响对方的购买决策。

我曾经踩过的坑:有一次做用户流失预测,我一开始用了贝叶斯网络,但发现“用户满意度”和“使用时长”之间其实是互相影响的——满意度高导致使用时长增加,使用时长增加又反过来提升满意度。这种双向关系用有向图很难建模,后来换成马尔可夫网络才解决问题。

3.6 小结

概率图模型的核心就三件事:

  1. 图结构:用节点和边表示变量间的依赖关系
  2. 条件独立性:图结构决定了哪些变量在给定条件下独立
  3. 参数表示:用CPT或势函数量化依赖关系的强度

贝叶斯网络适合因果方向明确的场景,马尔可夫网络适合无向约束的场景。选对模型,事半功倍。

好了,这一章就到这里。记住:图结构就是你的假设,参数就是你的数据。两者结合,才能构建出靠谱的概率图模型。


公众号:蓝海资料掘金营,微信deep3321