五分钟看懂因子图和消息传递算法

五分钟看懂因子图和消息传递算法

文章目录

本文将系统带你理解因子图,以及信息是如何在因子图上传播的(消息传递),其实已经有博客讲了这个问题,但是自己当时在看的时候还是有一些点不明所以,因此继续深入探究了一下, 并把自己的理解列出如下:

为什么要有因子图?

有向图的表示描述


其实在因子图出来之前,还有一个东西叫有向图(用箭头来代表因果关系),可以看成上面这么个玩意1,其实它已经能很好地表示概率的依赖关系了,比如我们可以将其写作:
P ( x ) = P ( x 1 ) P ( x 2 ) P ( x 3 ) P ( x 4 ∣ x 1 , x 2 , x 3 ) P ( x 5 ∣ x 1 , x 3 ) P ( x 6 ∣ x 4 ) P ( x 7 ∣ x 4 , x 5 ) P(x) = P(x_1)P(x_2)P(x_3)P(x_4 \mid x_1,x_2,x_3)P(x_5 \mid x_1,x_3)P(x_6 \mid x_4)P(x_7 \mid x_4,x_5) P(x)=P(x1​)P(x2​)P(x3​)P(x4​∣x1​,x2​,x3​)P(x5​∣x1​,x3​)P(x6​∣x4​)P(x7​∣x4​,x5​)
但是如果用因子图的方式写,就是下面这样子:
P ( x ) = P ( x 1 ) P ( x 2 ) P ( x 3 ) P ( x 4 ∣ x 1 , x 2 , x 3 ) P ( x 5 ∣ x 1 , x 3 ) P ( x 6 ∣ x 4 ) P ( x 7 ∣ x 4 , x 5 ) = f ( x 1 ) f ( x 2 ) f ( x 3 ) f ( x 1 , x 2 , x 3 , x 4 ) f ( x 1 , x 3 , x 5 ) f ( x 4 , x 6 ) f ( x 4 , x 5 , x 7 ) \begin{align*} P(x) &= P(x_1)P(x_2)P(x_3)P(x_4 \mid x_1,x_2,x_3)P(x_5 \mid x_1,x_3)P(x_6 \mid x_4)P(x_7 \mid x_4,x_5)\\ &= f(x_1)f(x_2)f(x_3)f(x_1,x_2,x_3,x_4)f(x_1,x_3,x_5)f(x_4,x_6)f(x_4,x_5,x_7) \end{align*} P(x)​=P(x1​)P(x2​)P(x3​)P(x4​∣x1​,x2​,x3​)P(x5​∣x1​,x3​)P(x6​∣x4​)P(x7​∣x4​,x5​)=f(x1​)f(x2​)f(x3​)f(x1​,x2​,x3​,x4​)f(x1​,x3​,x5​)f(x4​,x6​)f(x4​,x5​,x7​)​
那问题就来了,为什么有向图可以表示因果关系,还要引出因子图这种写法,最后变成了一个联合分布,也看不出因果对应关系呢?其实“无条件概率”其实是条件概率的一种特殊情况。这里: p ( x 1 ) p(x_1) p(x1​), p ( x 2 ) p(x_2) p(x2​), p ( x 3 ) p(x_3) p(x3​)看似不是条件概率,其实是: p ( x 1 ) = p ( x 1 ∣ P a ( x 1 ) = ∅ ) p(x_1) = p(x_1 | Pa(x_1) = \emptyset) p(x1​)=p(x1​∣Pa(x1​)=∅),即“没有父节点的节点”,其条件概率就是它本身,我们需要注意以下两点:

【1】BN(贝叶斯网络)的因子有向图必须是合法的条件概率分布。条件概率分布必须满足:

  1. 必须归一化: ∑ x i p ( x i ∣ p a r e n t s ) = 1 \sum_{x_i} p(x_i | parents) = 1 ∑xi​​p(xi​∣parents)=1
  2. 必须是概率值,取值范围是 [ 0 , 1 ] [0,1] [0,1]
  3. 必须表达“父变量→子变量”的因果方向

【2】因子图(Factor Graph)的因子是任意非负函数,完全没有这些限制。因子 f ( x 1 , x 2 , x 3 ) f(x_1,x_2,x_3) f(x1​,x2​,x3​)可以是:

  1. 不归一化
  2. 值可以是任意正数(10,0.3, e − 3 e^{-3} e−3,99999都行)
  3. 可以表示能量 e − E e^{-E} e−E
  4. 完全没有因果含义

它们只需要满足: f ( x ) ≥ 0 f(x) \geq 0

Read more

ubuntu 22 安装 ros2 humble + Gazebo

ubuntu 22 安装 ros2 humble + Gazebo

ubuntu 22 安装 ros2 humble + Gazebo * 1 ROS2 Humble 介绍 * 2 Gazebo 介绍 * 2.1 概述 * 2.2 发展历程 * 2.3 Gazebo 开发遵循的核心原则 * 2.4 版本对应关系 * 3 ubuntu 22 安装 ros2 humble * 设置locale * 设置源 * 添加ROS2密钥 * 添加软件源 * 安装ROS * 安装其他ROS工具 * 配置rosdep * 配置环境 * 测试 * 4 ubuntu 22 安装 Gazebo * 更新源+安装基础工具 * 安装 * 安装单独运行gz指令工具

By Ne0inhk
【Linux指南】进程控制系列(二)进程终止 —— 退出场景、方法与退出码详解

【Linux指南】进程控制系列(二)进程终止 —— 退出场景、方法与退出码详解

文章目录 * 一、先想明白:进程终止不是 “消失”,而是 “释放资源” * 二、进程退出的三大场景:正常与异常的边界 * 场景 1:正常退出(代码执行完毕,结果正确) * 场景 2:正常退出(代码执行完毕,结果不正确) * 场景 3:异常退出(代码崩溃,被迫终止) * 三、三种进程退出方法:return、exit、_exit 的核心差异 * 3.1 方法 1:return—— 仅在 main 函数中有效 * 核心逻辑: * 3.2 方法 2:exit 函数 —— 带清理操作的库函数退出 * 核心逻辑与清理操作: * 函数原型: * 3.

By Ne0inhk
Flutter 三方库 system_settings 的鸿蒙化适配指南 - 实现应用内直达系统深度配置、支持通知权限、显示、声音与开发者选项一键跳转

Flutter 三方库 system_settings 的鸿蒙化适配指南 - 实现应用内直达系统深度配置、支持通知权限、显示、声音与开发者选项一键跳转

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 system_settings 的鸿蒙化适配指南 - 实现应用内直达系统深度配置、支持通知权限、显示、声音与开发者选项一键跳转 前言 在进行 Flutter for OpenHarmony 的精细化应用开发中,引导用户去开启必要的系统权限(如允许通知、修改屏幕自动旋转)是保障应用功能完整性的重要环。system_settings 是一个专注于将复杂的系统跳转 URI 语义化的库。它能让你的代码更具可读性,快速触达鸿蒙系统的各类深度设置页面。本文将指导大家如何在鸿蒙真机上实现高效率的跳转逻辑。 一、原理解析 / 概念介绍 1.1 基础原理 system_settings 的核心是利用鸿蒙系统的 Want 启动机制。它预置了大量标准化的设置页面标识符,通过简单的 MethodChannel 调用,请求鸿蒙的 AbilityContext

By Ne0inhk