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 参照。
- コミュニティ: 議論、Q&A、公開ミーティング、NumFocus 所属。
ライセンス – MIT License (© 2021–2024 BIASlab, 2024–現在 ReactiveBayes)。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト