概率语言和编程包比较

2023-11-30 13:21:58 浏览数 (2)

免责声明:

  1. 这种比较并不详尽,反映了作者使用这些软件包的实际经验。有些可能比其他的经过了更严格的测试。如果您是其中一个软件包的作者,并且认为比较不公正,请联系我们,我们非常愿意纠正。
  2. 考虑到为不断发展的软件包维护基准测试代码的复杂性,这种比较更多是定性的而不是定量的。
  • :具有全部功能或特性。
  • ~:存在部分功能或特性。
  • :没有能力或特征。

注意事项:

  • 通用性:表示描述大量概率模型的能力。
  • 效率:强调计算能力。在这种情况下,“-”表示感知到的缓慢。
  • 表现力:评估简洁地制定复杂概率模型的能力。
  • 调试和可视化:评估用于模型调试和可视化的工具套件。
  • 模块化:反映了通过集成较小模型来创建模型的潜力。
  • 推理引擎:确定工具箱采用的主要推理策略。
  • 语言:标识工具箱中不可或缺的编程语言。
  • 社区和生态系统:标志着生态系统的活力,包括工具、库和社区支持。

RxInfer.jl breakdown

  • 通用性:RxInfer.jl在制定从指数族分布派生的复杂模型方面表现出色。该软件包不仅包含常用的分布(例如高斯分布或伯努利分布),还包含代表流行概率模型(例如自回归模型、伽马混合模型等)的专用随机节点。此外,RxInfer.jl熟练地管理指数族变量的确定性变换,请参阅Delta 节点。然而,对于指数族之外的模型,RxInfer.jl可能不是一个好的选择。此类模型需要创建新颖的节点和相应的规则,如图所示。
  • 效率:RxInfer.jl以其植根于反应式消息传递的推理引擎而著称。这种方法非常高效,有助于跨系统实时传播更新,支持并行化、可中断性等。然而,当前版本RxInfer.jl尚未充分利用所有这些潜力。
  • 模块化:从广义上讲,表中的工具箱并不是真正意义上的模块化。他们不通过集成较小的模型来提供模型融合。虽然RxInfer.jl目前不支持这一点,但解决方案即将出现:
  • 表现力:RxInfer.jl借助 Julia 的宏观功能,用户能够优雅、简洁地制作模型,紧密反映概率符号。为了说明这一点,让我们考虑以下模型:
  • Debugging & Visualization: While RxInfer.jl struggles with Julia's early-stage debugging system, it does provide a mechanism to debug the inference procedure, even though not as seamlessly as some other packages.

Toolbox

Universality

Efficiency

Expressiveness

Debugging & Visualization

Modularity

Inference Engine

Language

Community & Ecosystem

RxInfer.jl

~

~

Message-passing

Julia

ForneyLab.jl

~

~

Message-passing

Julia

Infer.net

~

Message-passing

C#

PGMax

Message-passing

Python

Turing.jl

~

Sampling

Julia

PyMC

Sampling

Python

NumPyro

~

Sampling

Python

TensorFlow Probability

~

Sampling

Python

Stan

Sampling

Stan

(Date of creation: 20/10/2023)

0 人点赞