google/edward2

A simple probabilistic programming language.

What it solves

Edward2 是一种简单的概率编程语言(PPL),旨在与深度学习生态系统无缝集成。它让研究人员和开发者能够以 Python 函数(程序)的形式定义概率模型,并提供工具来操作这些模型,以实现灵活的训练和推理,例如计算 log‑joint 概率或进行后验预测。

How it works

库使用 RandomVariables 来定义概率模型的结构。这些变量携带概率分布,并且可以与标准张量操作互操作。模型以 Python 函数的形式表达,该函数实例化这些随机变量以表示生成过程。

为了支持灵活的推理,Edward2 采用一种称为 tracing 的机制。Tracer 可以拦截模型函数内部随机变量的实例化,允许用户将先验替换为后验均值,或将模型转换为其他表示(例如将生成程序转换为 log‑joint 概率函数,以供 MCMC 算法使用)。

Who it’s for

它主要面向需要在深度学习框架中使用概率模型和不确定性建模的 AI 研究者和实践者。

Highlights

  • Multi-backend support: 支持 TensorFlow(默认)、JAX 和 NumPy。
  • Tracing mechanism: 允许在不更改模型代码的情况下动态操作模型计算。
  • Program transformations: 包含内置工具如 make_log_joint_fn,可将生成模型转换为概率函数。
  • Deep learning integration: 设计上与 TensorFlow Distributions 以及其他基于张量的操作兼容。