因子图与和积算法(Sum-Product Algorithm)的原理与消息传递过程
题目描述
因子图是一种用于表示多变量函数因子分解的二分图,由变量节点和因子节点组成。和积算法(又称置信传播算法)通过在因子图上传递消息,高效计算边缘概率分布。该算法广泛应用于编码理论、概率图模型推断等领域。
解题过程
1. 因子图构建
-
步骤1:定义因子图结构
因子图包含两类节点:- 变量节点(圆形):表示随机变量或未知量
- 因子节点(方形):表示变量间的局部函数关系
边仅存在于变量节点与因子节点之间,表示变量参与该因子函数计算。
-
步骤2:分解联合概率分布
若多变量函数可分解为局部函数的乘积:
\(p(x_1, x_2, ..., x_n) = \prod_{j} f_j(X_j)\)
其中 \(X_j\) 是变量子集,每个 \(f_j\) 对应一个因子节点,连接的变量节点为 \(X_j\) 中的变量。
2. 消息传递规则
-
步骤3:定义消息类型
消息分为两类:- 变量到因子的消息 \(\mu_{x \to f}(x)\):变量节点 \(x\) 向因子节点 \(f\) 传递的信念
- 因子到变量的消息 \(\mu_{f \to x}(x)\):因子节点 \(f\) 向变量节点 \(x\) 传递的信念
-
步骤4:计算变量到因子的消息
变量节点 \(x\) 向相邻因子节点 \(f\) 发送的消息:
\(\mu_{x \to f}(x) = \prod_{g \in N(x) \setminus \{f\}} \mu_{g \to x}(x)\)
其中 \(N(x)\) 是 \(x\) 的相邻因子节点集合。该消息是其他相邻因子向 \(x\) 传递消息的乘积。 -
步骤5:计算因子到变量的消息
因子节点 \(f\) 向相邻变量节点 \(x\) 发送的消息:
\(\mu_{f \to x}(x) = \sum_{\mathbf{x}' \setminus x} \left[ f(\mathbf{x}') \prod_{y \in N(f) \setminus \{x\}} \mu_{y \to f}(y) \right]\)
其中:- \(\mathbf{x}'\) 是因子 \(f\) 连接的所有变量
- 对除 \(x\) 外所有变量求和(若连续变量则替换为积分)
- 乘积项为其他相邻变量向 \(f\) 传递的消息
3. 算法执行流程
-
步骤6:初始化消息
所有消息初始化为1(或均匀分布),表示无先验信息。 -
步骤7:迭代传递消息
按以下顺序重复直至收敛:- 每个变量节点接收相邻因子节点的消息,按步骤4更新输出消息
- 每个因子节点接收相邻变量节点的消息,按步骤5更新输出消息
对于树状结构,可从叶节点开始向根节点传递,再反向传递。
-
步骤8:计算边缘分布
变量 \(x\) 的边缘分布(置信度)为:
\(b(x) = \prod_{f \in N(x)} \mu_{f \to x}(x)\)
需对 \(b(x)\) 归一化使其和为1。
4. 特殊情况处理
-
步骤9:处理观测变量
若某变量 \(x\) 被观测到取值 \(x_0\),在计算消息时:- 将 \(x\) 固定为 \(x_0\)
- 传递消息时仅考虑与观测值一致的情况
-
步骤10:树状结构的精确性
在无环的树状因子图中,和积算法经一次正向传递和一次反向传递即可得到精确边缘分布。若存在环,需多次迭代(此时称为循环置信传播),结果可能为近似解。
总结
和积算法通过局部消息传递高效计算复杂函数的边缘分布,其核心在于将全局计算分解为局部操作的乘积与求和。该算法为许多概率推断任务提供了可扩展的解决方案。