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)
相關
- 專案
- 專案
- 專案
- 專案
- 專案