【07】概率图推断之信念传播

news2025/1/8 18:11:05

概率图推断之信念传播

在这里插入图片描述

文章目录

    • 将变量消除视为信息传递
    • 信息传递算法
    • 加总乘积信息传递
    • 因子树上的加总乘积信息传递
    • 最大乘积信息传递
    • 总结

在《概率图推断之变量消除算法》中,我们讲了变量消除算法如何对有向图和无向图求 P ( Y ∣ E = e ) P(Y \mid E = e) P(YE=e)的边缘概率。

然而变量消除算法有个致命的缺陷:如果我们问模型另一个请求,比如 P ( Y 2 ∣ E 2 = e 2 ) P(Y_2 \mid E_2 = e_2) P(Y2E2=e2),我们需要从头开始重新启动算法。这样会非常浪费资源,并且在计算上很麻烦。

幸运的是,事实证明,这个问题也很容易避免。当计算边缘概率时,变量消除算法会产生许多中间因子 τ \tau τ;事实证明,这些因子与计算其他边缘概率所需的因子相同。通过在第一次运行变量消除算法后缓存这些因子,我们可以轻松地计算新的边缘概率查询,基本上不需要额外的成本。

从本文开始,我会用两篇文章来介绍该算法的两种变体:信念传播(BP)和全联结树算法。信念传播适用于树结构图,而联结树算法适用于一般网络。

让我们先从信念传播算法开始。

将变量消除视为信息传递

首先,思考一下在树上执行变量消除算法计算边缘概率 p ( x i ) p(x_i) p(xi)都发生了什么?不难发现将 x i x_i xi作为根节点然后遍历后续节点是解决此问题的最优排序。

我们说这个排序最优是因为变量消除过程中形成的最大团的大小为2。每一步,我们消除 x j x_j xj。这会引发计算因子 τ k ( x k ) = ∑ x j ϕ ( x k , x j ) τ j ( x j ) \tau_k(x_k) = \sum_{x_j} \phi(x_k, x_j) \tau_j(x_j) τk(xk)=xjϕ(xk,xj)τj(xj) ,其中 x k x_k xk x j x_j xj 的父节点。紧跟着下一步, x k x_k xk 会被消除, τ k ( x k ) \tau_k(x_k) τk(xk)会被传递给 x k x_k xk 的父节点 x l x_l xl 用以在边缘化之前与因子 ϕ ( x l , x k ) \phi(x_l, x_k) ϕ(xl,xk)相乘。因子 τ j ( x j ) \tau_j(x_j) τj(xj)可以认为是 x j x_j xj传给 x k x_k xk的消息,其汇总了以 x j x_j xj为根节点的子树下的所有信息。

在变量消除的最后, x i x_i xi收到其所有直接子节点的信息,然后对这些信息边缘化,我们就得到最终的边缘概率。

现在假设计算完 p ( x i ) p(x_i) p(xi),我们还想计算 p ( x k ) p(x_k) p(xk),我们需要将 x k x_k xk作为跟节点重新执行变量消除算法,直到 x k x_k xk收到所有子节点的信息。这里的核心洞察是:无论 x k x_k xk为跟节点还是 x i x_i xi为根节点, x k x_k xk x j x_j xj收到的信息是一样的。

信息传递算法

这里的关键问题是:如何精确计算出所有需要的信息?

答案很简单:每当 x i x_i xi收到除邻居 x j x_j xj外所有节点的信息时, x i x_i xi传递消息给邻居 x j x_j xj。有趣的是在树上总有节点要传递信息,直到所有信息都传递出去。这个过程需要 2 ∣ E ∣ 2|E| 2∣E步,因为每条边只会接收信息2次:一次 x i → x j x_i \rarr x_j xixj,一次反方向 x i ← x j x_i \larr x_j xixj

最后,这个算法之所以正确是因为这些信息在变量消除算法中被定义为中间因子。

下面我们给信念传播算法下个正式的定义,该算法2个变种,分别适用于不同的任务:

  • 加总乘积信息传递:用于边缘推断,例如计算 p ( x i ) p(x_i) p(xi)
  • 最大乘积信息传递:用于最大后验推断,例如计算 max ⁡ x 1 , … , x n p ( x 1 , … , x n ) \max_{x_1, \dotsc, x_n} p(x_1, \dotsc, x_n) maxx1,,xnp(x1,,xn)

加总乘积信息传递

加总乘积信息传递算法定义如下:若节点 x i x_i xi可以传递到 x j x_j xj,传递信息
m i → j ( x j ) = ∑ x i ϕ ( x i ) ϕ ( x i , x j ) ∏ ℓ ∈ N ( i ) ∖ j m ℓ → i ( x i ) m_{i\to j}(x_j) = \sum_{x_i} \phi(x_i) \phi(x_i,x_j) \prod_{\ell \in N(i) \setminus j} m_{\ell \to i}(x_i) mij(xj)=xiϕ(xi)ϕ(xi,xj)N(i)jmi(xi)
这里 N ( i ) ∖ j N(i) \setminus j N(i)j表示除 j j j以外 i i i的所有邻居的集合。观察上面公式可以发现,为了计算 p ( x j ) p(x_j) p(xj)所做的一轮变量消除中 x i x_i xi传递给 x j x_j xj的信息就是因子 τ \tau τ

基于此观察,计算出所有信息后,我们可以通过下面公式在常数时间内给出 x i x_i xi上所有边缘查询
p ( x i ) ∝ ϕ ( x i ) ∏ ℓ ∈ N ( i ) m ℓ → i ( x i ) . p(x_i) \propto \phi(x_i) \prod_{\ell \in N(i)} m_{\ell \to i}(x_i). p(xi)ϕ(xi)N(i)mi(xi).

因子树上的加总乘积信息传递

加总乘积信息传递稍作修改也可以适用于因子树。因子图是一个二分图,由边连接变量和因子,表示某因子依赖某变量。

在因子图上有两类信息:变量到因子信息 ν \nu ν和因子到变量信息 μ \mu μ。二者都需要计算乘积,但只有因子到变量信息 μ \mu μ需要加总。
ν v a r ( i ) → f a c ( s ) ( x i ) = ∏ t ∈ N ( i ) ∖ s μ f a c ( t ) → v a r ( i ) ( x i ) μ f a c ( s ) → v a r ( i ) ( x i ) = ∑ x N ( s ) ∖ i f s ( x N ( s ) ) ∏ j ∈ N ( s ) ∖ i ν v a r ( j ) → f a c ( s ) ( x j ) \nu_{var(i)\to fac(s)}(x_i) = \prod_{t\in N(i)\setminus s}\mu_{fac(t)\to var(i)}(x_i) \\ \mu_{fac(s)\to var(i)}(x_i) = \sum_{x_{N(s)\setminus i}}f_s(x_{N(s)})\prod_{j\in N(s)\setminus i}\nu_{var(j)\to fac(s)}(x_j) νvar(i)fac(s)(xi)=tN(i)sμfac(t)var(i)(xi)μfac(s)var(i)(xi)=xN(s)ifs(xN(s))jN(s)iνvar(j)fac(s)(xj)
该算法过程与无向图上的算法过程相同:只要有因子(或变量)可以传递信息给变量(或因子),那就以上面公式的形式传递相应因子到变量(或者变量到因子)信息。

最大乘积信息传递

信念传播算法的第二个变种是最大乘积信息传递,用于最大后验推断 max ⁡ x 1 , … , x n p ( x 1 , … , x n ) \max_{x_1, \dotsc, x_n} p(x_1, \dotsc, x_n) maxx1,,xnp(x1,,xn)

上面介绍的边缘推断框架也可以让我们轻松进行最大后验推断。关键点在于求和和求最大值运算都作用于乘积上,因此将边缘推断中的求和替换为求最大值,即可解决最大后验推断问题。

例如,我们可以通过下面公式计算马尔科夫随机场链的配分函数:
Z = ∑ x 1 ⋯ ∑ x n ϕ ( x 1 ) ∏ i = 2 n ϕ ( x i , x i − 1 ) = ∑ x n ∑ x n − 1 ϕ ( x n , x n − 1 ) ∑ x n − 2 ϕ ( x n − 1 , x n − 2 ) ⋯ ∑ x 1 ϕ ( x 2 , x 1 ) ϕ ( x 1 ) . \begin{align*} Z &= \sum_{x_1} \cdots \sum_{x_n} \phi(x_1) \prod_{i=2}^n \phi(x_i, x_{i-1}) \\ &= \sum_{x_n} \sum_{x_{n-1}} \phi(x_n, x_{n-1}) \sum_{x_{n-2}} \phi(x_{n-1}, x_{n-2}) \cdots \sum_{x_1} \phi(x_2 , x_1) \phi(x_1). \end{align*} Z=x1xnϕ(x1)i=2nϕ(xi,xi1)=xnxn1ϕ(xn,xn1)xn2ϕ(xn1,xn2)x1ϕ(x2,x1)ϕ(x1).
要计算 p ( x 1 , … , x n ) p(x_1, \dotsc, x_n) p(x1,,xn)上的最大值 p ∗ p^* p,只需要将求和替换为求最大值即可:
p ∗ = max ⁡ x 1 ⋯ max ⁡ x n ϕ ( x 1 ) ∏ i = 2 n ϕ ( x i , x i − 1 ) = max ⁡ x n max ⁡ x n − 1 ϕ ( x n , x n − 1 ) max ⁡ x n − 2 ϕ ( x n − 1 , x n − 2 ) ⋯ max ⁡ x 1 ϕ ( x 2 , x 1 ) ϕ ( x 1 ) . \begin{align*} p^* &= \max_{x_1} \cdots \max_{x_n} \phi(x_1) \prod_{i=2}^n \phi(x_i, x_{i-1}) \\ &= \max_{x_n} \max_{x_{n-1}} \phi(x_n, x_{n-1}) \max_{x_{n-2}} \phi(x_{n-1}, x_{n-2}) \cdots \max_{x_1} \phi(x_2 , x_1) \phi(x_1). \end{align*} p=x1maxxnmaxϕ(x1)i=2nϕ(xi,xi1)=xnmaxxn1maxϕ(xn,xn1)xn2maxϕ(xn1,xn2)x1maxϕ(x2,x1)ϕ(x1).
因为二者采用相同方式分解,我们可以直接复用边缘推断的机制到最大后验推断。注意,这个思路同样适用于因子树。

这里有一小点需要注意,我们通常需要的不只最大分布,例如 max ⁡ x p ( x ) \max_x p(x) maxxp(x),还需要其最可能赋值,例如 arg ⁡ max ⁡ x p ( x ) \arg\max_x p(x) argmaxxp(x)。这个问题可以通过在优化过程中保存反向指针来轻松解决。例如,上面例子中,对每一个 x 2 x_2 x2的赋值,我们可以保存 x 1 x_1 x1最优赋值的反向指针,同理对每一个 x 3 x_3 x3赋值,我们可以保存 x 2 x_2 x2最优赋值的反向指针,以此类推。

总结

以上就是信念传播算法的介绍。信念传播算法适用于树形结构,而我们的问题往往是更一般的图。在图上做推断会更加困难,但我们可以尝试将图分解为近似树型结构,然后执行信息传递算法。根据此思想发展出了联结树算法。下一章我会重点介绍联结树算法,敬请期待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 微服务之MQ 异步通信

初识MQ 同步调用存在的问题 异步调用常见实现就是事件驱动模式 事件驱动模式优势: 优势1:服务解耦 一旦有新业务只需要订阅或者减少事件就行了 优势2:性能提升,吞吐量提高 优势3:服务没有强依赖,不用担…

【自学C++】C++注释

C注释 C注释教程 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。同时,注释也是一个程序员必须要具有的良好编程习惯。我们应该首先将自己的思想通过注释先整理出来,再用代码去体现。 在 C 中,一旦程序中某部分内…

数据结构和算法-计数排序

1.算法描述 技术排序是一个基于比较的排序算法,该算法于1954由Harold H. Seward 提出。它的优势在于对 一定范围内的整数排序时,它的复杂度为O(nk)(其中k是整数的范围),快于任何比较排序算 法…

JavaEE高阶---Spring事务和事务传播机制

一:什么是事务? 事务定义:将⼀组操作封装成⼀个执⾏单元(封装到⼀起),要么全部成功,要么全部失败。 二:Spring中事务的实现 编程式事务(⼿动写代码操作事务&#xff09…

使用 Flink CDC 实现 MySQL 数据实时入 Apache Doris

简介 主要内容如下: MySQL 安装和开启binogFlink环境准备Apache Doris 环境准备启动Flink CDC作业 1. MySQL 安装和开启binog 参考文章:Ubuntu 安装 Mysql server, 这篇文章介绍了MySQL的安装,用户创建,Binlog开启等内容。 M…

Linux基础入门和常用命令

Linux基础入门和常用命令一. Linux介绍1.1 Linux的发行版本二. Linux环境搭建三. Linux的常用指令3.1 Linux下的目录结构3.2 ls命令3.3 pwd命令3.4 cd指令3.5 touch指令3.6 mkdir指令3.7 rmdir指令和 rm 指令3.8 man指令3.9 mv指令3.10 cp指令3.11 cat3.12 more指令3.13 less指…

基于机器学习组合模型的个人信用评估

《基于机器学习组合模型的个人信用评估》课程报告 摘要 个人信用评估在信用经济市场发挥着及其重要的基础作用,促进信用经济的发展,稳定经济市场。个人信用信息主要有个人基本信息、还款能力和还款意愿;个人基本信息主要由年龄、性别、地区等特征构成&…

C语言灵魂核心——指针深度修炼

🐒个人主页:平凡的小苏📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、…

【读论文】TCPMFNet

【读论文】TCPMFNet简单介绍网络结构编码器图像融合网络Vision Transformer特征融合网络网格连接解码器损失函数总结参考论文:https://www.sciencedirect.com/science/article/pii/S1350449522003863 如有侵权请联系博主 简单介绍 今天要介绍的是TCPMFNet&#xf…

六大排序算法

1. 插入排序步骤:1.从第一个元素开始,该元素可以认为已经被排序2.取下一个元素tem,从已排序的元素序列从后往前扫描3.如果该元素大于tem,则将该元素移到下一位4.重复步骤3,直到找到已排序元素中小于等于tem的元素5.tem…

如何使用 Pandas 清洗二手房数据并存储文件

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据清洗 三、菜鸟实战 清洗前的文件 读取源文件 对二手房数据进行清洗 清洗完成后保存到文件 运行结果 运行截图 结果文件 一、实战场景 如何使用 Pandas 清洗的二手房数据并存储文件 二…

初识结构体(详细版)

目录 一、结构体的声明 1、结构的基础知识 2、结构的声明 3、结构成员的类型 4、结构体变量的定义和初始化 二、结构体成员的访问 1、点操作符访问 2、->操作符访问 3、解引用访问 三、结构体嵌套 四、结构体传参 1、传值调用 2、传址调用 一、结构体的声明 1、结构的基…

Vue2前端路由(vue-router的使用)

一、vue2axiosExpressMySQL实现前后端交互1、后台:(1)确定MySQL的表格:明确数据库 (mvc) —- 数据表(ssm_book)(2)创建Express项目:mysql2、cors、Sequelize(ORM)、nodem…

imx6ull Linux sdk下载验证

本文章是基于整点原子的imx6ull alpha开发板一.Linux SDK源码以及image1.环境准备其他的工具我们就不做介绍了,比如ubuntu ftp,ssh等等,我们主要来介绍下编译链1.1 交叉编译链背景:因为在原子的教程中有强调最新的Linaro gcc编译完uboot后无法…

备受认可!中睿天下荣登“2022创业邦100未来独角兽”年度榜单

近日,由创业邦、复旦大学管理学院主办的2022创业邦100未来独角兽峰会暨创业邦年会在上海举办。在峰会现场,2022创业邦100未来独角兽榜单正式揭晓,中睿天下凭借出众的综合实力荣登榜单。作为一家以“实战对抗”为特点的能力价值型网络安全厂商…

Java版设计模式/设计模式的作用是什么/类之间有哪些关系?又怎么表示

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 1. 设计模式概述 1.1 设计模式创始“4人组” ErichGamma–艾瑞克伽马Richard Helm—理查德赫尔码Ralph Johnson----拉尔夫约翰逊John Vlissides—约翰威力斯蒂斯…

【Linux】Linux编译器-gcc/g++的使用和程序执行的基础底层原理

Linux编译器1.gcc/g 的使用2. 程序的基本翻译过程3.预处理3.1验证预处理的功能(gcc -E)4.编译(变成汇编语言)4.1验证编译过程(gcc -S)5.汇编(生成机器可识别代码)5.1验证汇编过程&am…

K_A11_002 基于STM32等单片机驱动DS18B20串口与OLED0.96双显示

K_A11_002 基于STM32等单片机驱动DS18B20 串口与OLED0.96双显示一、资源说明二、基本参数1.参数2.引脚说明三、驱动说明时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RCDHT11模块1.2、STM32F103C8T6DHT11模块五、基础知识学习与相关资料下载六、视频效果展示与程序资…

内核解读之内存管理(4)内存管理三级架构之page

我们前面介绍了linux内存管理的三级架构,node->zone->page。本节就来介绍page。 页是内核管理内存的基本单位,体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。大多数32位体系结构支持4KB的页…

【Python】爬取弹幕并保存到Excel中

hello,我是李华同学,最近开始学习爬虫,下面是我实现的一个得到弹幕的代码😏找一个URL👉想要得到一个网站的内容,首先要找到你想要内容的具体位置,首先你先找到一个有弹幕的地方,找到…