QUICK REVIEW
[论文解读] Pyro: Deep Universal Probabilistic Programming
Eli Bingham, Jonathan P. Chen|arXiv (Cornell University)|Oct 18, 2018
Gaussian Processes and Bayesian Inference参考文献 9被引用 589
一句话总结
Pyro 是一个基于 Python 的概率编程语言,构建在 PyTorch 之上,通过随机变分推断和模块化效果处理器(Poutine)实现对复杂 AI 模型的可扩展、灵活推断。
ABSTRACT
Pyro is a probabilistic programming language built on Python as a platform for developing advanced probabilistic models in AI research. To scale to large datasets and high-dimensional models, Pyro uses stochastic variational inference algorithms and probability distributions built on top of PyTorch, a modern GPU-accelerated deep learning framework. To accommodate complex or model-specific algorithmic behavior, Pyro leverages Poutine, a library of composable building blocks for modifying the behavior of probabilistic programs.
研究动机与目标
- 激励一个 PPL 设计在 AI 研究中具有表达性、可扩展性、灵活性和最小复杂性的方向。
- 将 Pyro 作为一个嵌入 Python 的 PPL,建立在 PyTorch 之上,以支持大型数据集和高维模型。
- 引入 Poutine,用于可组合的程序变换,将模型、推理与运行时关注点分离。
- 通过 VAE 与 Deep Markov Model 实验展示实际的可扩展性和灵活性。
- 突出开放性与生态系统协作,包括 PyTorch distributions 的集成。
提出的方法
- 将 Pyro 嵌入 Python,提供两个原语:pyro.sample 用于随机性,pyro.param 用于可学习参数。
- 使用随机变分推断(SVI)及基于梯度的优化来近似后验。
- 用 PyTorch 来实现 GPU 加速的张量运算和反向模式自动微分。
- 使用 Poutine 提供修改程序行为的效果处理器,将推理代码与语言语义分离。
- 支持模型中的任意 Python 控制流,包括通过 sample 的 obs 实现数据相关结构和未归一化的模型。
- 提供依赖于模型且使用与模型相同输入的近似后验指南。
实验结果
研究问题
- RQ1如何在 AI 研究中让概率编程语言在表达性、可扩展性、灵活性和简约性之间取得平衡?
- RQ2一个以 PyTorch 为后盾的 PPL 能否支持复杂的、高维、非共轭的模型并实现可扩展的推断?
- RQ3哪些抽象(如 Poutine)能够在不限制表达性的情况下实现灵活的、模型特定的推断?
- RQ4在具有代表性的深度生成模型(例如 VAE、DMM)上,Pyro 在正确性与效率方面的表现如何?
- RQ5将 Pyro 与现有生态系统(如 PyTorch distributions)整合对可用性和性能有哪些影响?
主要发现
- Pyro 使得模型具备数据相关控制流和未归一化模型的表达性,同时通过 GPU 加速计算与小批量 SVI 保持可扩展性。
- 使用基于梯度的优化的 SVI 是主要的推断引擎,由 PyTorch 自动微分和 GPU 加速支持。
- Poutine 提供一组模块化的 effect handlers,将模型、推断和运行时关注点分离,从而实现模型特定的推断策略。
- Pyro 的 VAE 与 DMM 实验展示出与参考实现的可比结果,并且可扩展到高维模型。
- 自回归流(IAFs)可以最小的代码整合,提升近似后验的表达性,而不会带来显著的计算开销。
- Pyro 与 PyTorch Distributions 的集成提升了实用性并为更广泛的生态系统做出贡献。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。