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)

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案