开源最前线(ID:OpenSourceTop) 猿妹整编
综合自:机器之心、GitHub等
近日,Uber AI Lab 与斯坦福大学的研究团队开源了全新概率编程语言 Pyro。该语言基于 Python 与 PyTorch 之上,专注于变分推理,同时支持可组合推理算法。
概率编程语言 Pyro
授权协议:MIT
开发语言:Python
操作系统:跨平台
开发厂商:Uber
Github:https://github.com/uber/pyro
Pyro 简介
Pyro 是 Uber AI 实验室开源的一款深度概率编程语言(PPL),基于 Python 与 PyTorch 之上,专注于变分推理,同时支持可组合推理算法。
Pyro 能够实现灵活而富有表现力的深度概率建模,将现代深度学习和贝叶斯建模的优点结合起来。旨在加速上述技术的研究与应用,更大地惠及人工智能社区。
Pyro 设计目标
在 Pyro 的开发过程中,我们的目标是满足四个设计原则:
通用性:Pyro 可表征任何可计算的概率分布。
可扩展性:Pyro 可以很小的开销扩展到大型数据集。
最轻量:Pyro 由一个强大的、可组合的抽象化小核心构成,灵活且可维护。
灵活性:Pyro 的目标是在你想要的时候实现自动化,在你需要的时候进行控制。
这些原则经常使 Pyro 的实现走向互为相反的方向。例如,为了实现通用性,需要在 Pyro 的程序中允许任意的控制结构,但这种通用性会导致其很难扩展。类似地,使用最少量的抽象概念的目标函数的自动构建使其更容易构建新的原型模型,但这也会使目标计算被隐藏,给那些需要灵活修改目标的高级用户造成不便。
实现方式:
通用性:通过从一种通用性语言(任意的 Python 代码)开始迭代和递归,然后添加随机采样、观测和推理。
可扩展性:通过建立现代黑箱优化技术,其使用数据的小批量进行近似推理。
最轻量:Pyro 是由少量强大而可组合的抽象概念实现的。任何繁重的工作都会尽可能用 PyTorch 和其它的库完成。
灵活性:使用高级的抽象概念表达生成和推理模型,同时允许专家自定义推理。
为何选择 Pyro?
概率是推理不确定性的数学,正如微积分是推理变化率的数学。概率语言模型能够捕捉复杂的推理,发现未知,无需监督即可揭开数据的结构。并且,概率可使得专家通过先验信念的形式把知识注入到 AI 系统。
直接指定概率模型是笨重的,其执行也容易出错。概率编程语言(PPL)通过联合概率与编程语言的表征力量来解决上述问题。概率程序是一般确定性计算和随机采样值的混合,随机计算表征了数据的生成性。这一表征中隐含着概率——没有必要去推导公式——但这一规范也是通用的:通过这种方式可以编写任意的可计算概率模型。Pyro 全部使用 Python 作为基础语言,清晰而令人熟悉。
通过观察概率程序的结果,我们可以描述推断问题,大致为:如果随机选择有个特定观测值,那么什么为真?概率编程系统提供了通用的推断算法,只需用户很少的介入即可执行推断。试着把这看作 PPL 的编译器:它允许我们在建模器和推断专家之间分工。
然而推断是概率建模的关键挑战,不可扩展的推理是 PPL 的主要失败模式。借助深度学习的力量,研究者最近为概率推断和 PPL 执行引入了一种新方法,其核心思想是通过第二个模型(被称作推断模型,或者 Pyro 指导/guide in Pyro)描述模型中的推断,实际上这一思想最早可追溯到 Helmholtz machine。正如模型表征了数据的生成性,指导表征了把数据转化为潜在选择的生成性。
当然,我们不能简单地写下正确的指导(这就是为什么推断如此艰难)。相反,我们使用变分法,指定一组参数化的指导,接着解决一个优化问题从而把指导推进到模型的后验分布。这一优化可通过自动微分技术实现自动化,该技术能够有效计算程序的梯度,并提供评估期望值梯度的若干技巧。
Pyro 构建在优秀的 PyTorch 库之上,后者包括使用非常快速、GPU 加速的张量数学的自动微分。PyTorch 动态构建梯度,使得 Pyro 程序包含随机控制结构,即 Pyro 程序中的随机选择能够控制其他随机选择的出现。随机控制结构是 PPL 通用的关键。因此,Pyro 能够表征任意概率模型,同时提供灵活、可扩展到大型数据集的自动优化推断。
在 Pyro 中,生成模型和推断指导都可包括深度神经网络组件。最终的深度概率模型在最近工作中表现优异,尤其是对于无监督和半监督机器学习问题。
安装
先安装 PyTorch:http://pytorch.org/
再通过 pip:
Python 2.7.*:

Python 3.5:
Install from source:
附:新开源报道汇总


●本文编号78,以后想阅读这篇文章直接输入78即可
●输入m获取文章目录
↓↓↓ 点击"阅读原文" 进入GitHub详情页  
继续阅读
阅读原文