因子图与消息传递算法

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 总结

因子图和消息传递算法为概率推断提供了高效的计算框架,同时也是理解图神经网络和注意力机制的重要理论基础。


参考文献