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 "反应式" 特性的反应式扩展。
文档与学习资源
- 官方文档:https://docs.rxinfer.com(稳定版与开发版)。
- 示例仓库:https://examples.rxinfer.com(涵盖 HMM、时变 AR、销售预测等高级模型)。
- 论文:JOSS 文章、博士论文,以及 README 中列出的多个 arXiv/DOI 引用。
- 社区:讨论、问答、公开会议,以及 NumFocus 附属关系。
许可证 – MIT 许可证(© 2021–2024 BIASlab,2024–至今 ReactiveBayes)
相关
- 项目
- 项目
- 项目
- 项目
- 项目