ReactiveBayes/RxInfer.jl

Julia package for automated Bayesian inference on a factor graph with reactive message passing

RxInfer.jl – Julia 的反应式贝叶斯推断

是什么RxInfer.jl 是一个 Julia 包,通过将概率模型转换为因子图并运行 反应式消息传递 算法,实现 自动贝叶斯推断。它基于 ReactiveMP.jl 推断引擎和 GraphPPL.jl 模型定义 DSL 构建。

为何重要 – 通过利用共轭先验-似然对,RxInfer 可以解析地计算精确的后验分布,对于许多模型而言,相比 Turing.jl 中的 HMC 等通用采样器,能提供 更快、更节省内存、更准确的结果。它还支持非共轭推断,并可扩展至大规模实时工作负载。

主要特性

  • 因子图编译@model 宏(来自 GraphPPL)将普通 Julia 代码转换为因子图表示。
  • 反应式消息传递:推断通过局部更新进行,能自动响应新数据,支持实时或流式场景。
  • 共轭感知优化:在可能的情况下使用解析更新,显著加速推断。
  • 混合推断:非共轭部分使用变分/消息传递方法处理,该库持续扩展支持的模型类别。
  • 基准测试与准确性:仓库包含基准脚本,显示在线性高斯状态空间模型上相比 Turing.jl 具有更优的速度/准确性。
  • 服务器模式RxInferServer 可将模型暴露为 RESTful API,提供官方 Python、TypeScript 和 Julia SDK 用于远程推断。
  • 遥测与可选会话共享:匿名使用指标有助于指导开发;共享功能可开启或关闭。

典型应用场景

  • 实时参数估计(如传感器融合、控制系统)。
  • 使用状态空间或自回归模型进行时间序列预测。
  • 隐马尔可夫模型、贝叶斯线性回归及其他希望使用精确更新的共轭模型。
  • 通过 RxInferServer 将贝叶斯模型部署为微服务。

安装

] add RxInfer   # Julia 包管理器

运行 ] test RxInfer 以验证安装。

快速示例 – 估计一个有偏硬币

using RxInfer, Random

# 模拟数据
n = 500; p = 0.75
y = rand(Bernoulli(p), n)

# 模型定义(GraphPPL 语法)
@model function coin_model(y, a, b)
    θ ~ Beta(a, b)          # 先验
    y .~ Bernoulli(θ)       # 每个观测的似然
end

# 运行推断(静态数据)
result = infer(
    model = coin_model(a = 2.0, b = 7.0),
    data  = (y = y, )
)

println(result)   # θ 的后验分布

infer 调用会自动构建因子图,识别 Beta-Bernoulli 共轭性,并返回精确的后验 Beta 分布。

生态系统与相关包

  • ReactiveMP.jl – 核心消息传递引擎。
  • GraphPPL.jl – 模型定义的 DSL。
  • ExponentialFamily.jl – 推断算法使用的指数族分布定义。
  • Rocket.jl – 支撑 RxInfer "反应式" 特性的反应式扩展。

文档与学习资源

许可证 – MIT 许可证(© 2021–2024 BIASlab,2024–至今 ReactiveBayes)

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目