Pyro 概率编程语言【001】--- 开始使用 Pyro
开始使用 Pyro
【摘要】Pyro 是 Uber 公司开源的一种概率建模语言,由剑桥大学 zoubin 教授作为首席科学家主持开发,可以使用 Pytorch 深度学习框架、贝叶斯概率统计等技术来估计类型广泛的概率模型。
【原文】https://nbviewer.org/github/QuantEcon/QuantEcon.notebooks/blob/master/IntroToStan_basics_workflow.ipynb
【时间】 2016
【作者】Jim Savage, Lendable Inc.
1 开始使用 Pyro
1.1 零基础的用户
如果您不熟悉概率编程或变分推断,可以从阅读 系列介绍性教程 开始。如果您是 PyTorch 的新手,还可以从阅读 使用 PyTorch 进行深度学习 中受益。
之后,您就可以开始使用 Pyro 了!
按照首页的说明安装 Pyro 并仔细阅读 Practical Pyro 和 PyTorch 系列 教程,尤其是第一个贝叶斯回归教程 。该教程通过使用 Pyro 一步步解决一个简单的贝叶斯机器学习问题,在可运行的代码中组织和展示了 系列介绍性教程 中的主要概念。另外,对使用 C++ 训练模型提供预测感兴趣的行业用户还应该阅读 PyroModule 教程。
大多数达到这一步的用户还会在 张量形状指南 中获得一些必要知识。 Pyro 广泛使用了 数组广播(Array Broadcasting) 机制来并行化模型和推断算法。最初你可能难以理解这种行为,但使用一段时间后,你会体验到这是一种流畅而且避免形状错误的好方法。
1.2 核心能力 — 深度学习、离散隐变量和自定义变分推断
熟悉了本介绍性材料后,您就可以直接深入利用 Pyro 的两个最大优势了:一是与深度学习的集成;二是对离散隐变量的自动推断。
前者在 深度生成模型系列 中有大量案例描述。所有案例都是对变分自编码器( VAE )
基本思想的说明和应用, 变分自编码器将在 本系列第一个教程 中详细介绍。
Pyro 的离散隐变量模型(如隐马尔可夫模型)能力在 离散隐变量系列 中有总结。在您自己的工作中使用它时,需要仔细阅读我们的概述和编程指南 。
Pyro 的另一个特点是可编程性,这也是 自定义推断系列教程 的主题。 使用大型模型但其中只有一部分需要特别指定的用户可能对 本系列的第一个教程 中介绍的 pyro.contrib.easyguide 感兴趣。同时,对开发变分推断算法感兴趣的机器学习研究人员可能希望仔细阅读 实现自定义变分目标的指南 ,以及一个实现 Boosting BBVI 的完整配套示例。
特别热情的用户和潜在的贡献者,尤其是那些有兴趣为 Pyro 核心组件做出贡献的人,甚至可能对 Pyro 本身的工作原理感兴趣,在 了解 Pyro 的内部结构系列 中有部分描述。 mini-pyro 示例仅用几百行代码就包含了 Pyro 语言的一个小版本的完整且包含大量注释的实现,可以作为更易于理解的介绍。
1.3 面向特定问题的建模工具包
Pyro 是一款 “自带电池” 的成熟开源软件。除了用于建模和推断的核心机制外,它还包括一个面向专业领域或特定问题的大型建模工具包。
Pyro 的一个优势领域是通过 pyro.contrib.forecasting 工具包 进行时间序列建模。这是一个能够将多元时间序列的多尺度分层、完全贝叶斯等模型扩展到数千或数百万个序列和数据点的库。关于此部分的详解,见 时间序列应用教程 。
Pyro 的另一个优势领域是通过 pyro.contrib.gp 工具包 做 高斯过程的概率机器学习。该工具包用于实现与 Pyro 推断引擎兼容的各种精确或近似高斯过程模型。关于此部分的详情,见 高斯过程应用系列 。 Pyro 还与 GPyTorch 完全兼容,GPyTorch 是用于可扩展高斯过程的一个专用库,详情见 Pyro 示例系列 。
2 教程列表 ¶
2.1 介绍性教程 ¶
2.2 Pyro 和 PyTorch实践 ¶
- 贝叶斯回归 I - 概述
- 贝叶斯回归 II - 推断算法
- Pyro 中的张量形状
- Pyro 中的主要软件模块
- 在 Pyro 中使用 PyTorch 的 JIT 编译器
- 案例: 通过 Horovod 做分布式训练
2.3 深度生成模型 ¶
- 变分自编码器( VAE )
- 半监督变分自编码器
- 条件变分自编码器
- 标准化流 I — 概述
- 深度马尔科夫模型
- Attend Infer Repeat
- 案例: 使用变分自编码器进行单细胞 RNA 测序分析
- 案例: 因果效应变分自编码器
- 案例: 稀疏伽马深度指数分布族
- 概率主题建模
2.4 离散隐变量 ¶
- 离散隐变量的推断
- 高斯混合模型
- 狄利克雷过程混合模型
- 案例: 具有离散枚举变量的玩具混合模型
- 案例: 隐马尔科夫模型
- 案例: “捕获-重捕获” 模型 (CJS 模型)
- 案例: 分层混合效应隐马尔科夫模型
- 案例: 离散因子图推断
- 案例: 摊派的隐狄利克雷分配
2.5 自定义推断算法 ¶
- 最大似然发和最大后验估计
- 使用 EasyGuide 写出变分函数
- 自定义随机变分推断的目标函数
- 提升黑盒变分推断
- 案例: 使用 NeuTraReparam 做神经 MCMC
- 案例: 稀疏贝叶斯线性回归
- 案例:使用
pyro.contrib.autoname
减少模板
2.6 应用: 时间序列建模 ¶
2.7 应用: 高斯过程建模 ¶
2.8 应用:流行病学¶
2.9 应用:生物学序列 ¶
2.10 应用:实验设计 ¶
2.11 应用:目标跟踪 ¶
2.12 其他推断算法
- 案例:使用 MCMC 分析棒球数据
- 案例:MCMC 推理
- 案例:具有 LKJ 先验的协方差的 MCMC
- 编译后的顺序重要性抽样
- 案例:顺序蒙特卡罗滤波
- 案例:重要性采样
- RSA 框架( The Rational Speech Act framework )
- 使用 RSA 理解超文本
- 案例:利用 MCMC 和 SVI 的预测性和确定性