因子图与消息传递算法
1 引言
因子图(Factor Graph)是概率图模型中一种重要的表示形式,它将联合分布分解为多个局部函数的乘积,并通过消息传递算法进行高效推断。本章系统介绍因子图的基础理论、核心算法及其与深度学习的联系。
2 因子图基础
2.1 定义与表示
定义:因子图是一个二部图 ,包含:
- 变量节点集合
- 因子节点集合
- 边集合 ,表示变量与因子的连接关系
因子函数的分解:
设 表示与因子 相连的变量集合,联合分布可以分解为:
其中 是归一化常数(配分函数)。
2.2 例子:图像去噪
考虑一个简单的图像去噪问题。设观测图像为 ,真实图像为 (二值像素)。
因子分解:
其中:
- 是似然因子(数据保真)
- 是平滑因子(鼓励相邻像素相似)
3 和-积算法
3.1 边缘分布计算
和-积算法(Sum-Product Algorithm)的目标是高效计算边缘分布:
3.2 消息传递规则
从变量到因子:
从因子到变量:
其中 表示变量 的邻居因子集合。
3.3 边缘分布计算
当所有消息传递完成后,边缘分布为:
4 变分消息传递
4.1 变分推断框架
当精确推断困难时,使用变分消息传递进行近似:
其中 是变分分布。
4.2 平均场近似
平均场假设:变分分布可以被分解为:
目标:最小化 ,等价于最大化ELBO。
4.3 变分消息更新
变量消息:
因子消息:
5 与神经网络的联系
5.1 消息传递作为神经网络层
消息传递规则可以重新解释为神经网络操作:
- 聚合操作 ≈ 注意力机制
- 消息函数 ≈ MLP层
- 更新操作 ≈ 残差连接
5.2 可微分消息传递
class DifferentiableSumProduct(nn.Module):
"""可微分的和-积算法"""
def __init__(self, dim):
super().__init__()
self.msg_net = nn.Sequential(
nn.Linear(dim, dim),
nn.ReLU(),
nn.Linear(dim, dim)
)
def forward(self, node_features, factor_msg):
# 消息聚合
aggregated = node_features.sum(dim=0, keepdim=True)
# 消息函数
return self.msg_net(aggregated)6 总结
因子图和消息传递算法为概率推断提供了高效的计算框架,同时也是理解图神经网络和注意力机制的重要理论基础。