要实现优步为每个人带来可靠交通的目标,需要在每一个转弯都毫不费力地进行预测和优化。机会包括匹配乘客和司机,建议最佳路线,找到合理的池组合,甚至创造下一代智能汽车。为了解决这些挑战,我们将最先进的人工智能(AI)技术与数据科学家、工程师和其他用户的丰富专业知识相结合。我们正在探索一种工具优先的方法,这将使我们和其他人能够制定下一代人工智能解决方案。
作为这项倡议的一部分,超级人工智能实验室很兴奋地宣布我们的Pyro概率编程语言!!Pyro是一个深层概率建模的工具,统一最佳的现代深度学习和贝叶斯建模。Pyro的目标是加速这些技术的研究和应用,并使它们更容易被更广泛的人雷竞技是骗人的工智能社区使用。
优步AI实验室在我们探索的应用方面多样化,我们使用的技术。我们将多个AI部落汇集在一起,深入学习专家,贝叶斯方法,进化计算和加强学习。Pyro本身汇集了最佳的现代深度学习,贝叶斯建模和软件抽象:它是一种现代,普遍,概率的概率编程语言。
我们相信,解决人工智能的关键思想将来自世界各地追求不同方法的人们的共同努力。通过开放Pyro的源代码,我们希望鼓励科学界合作,使人工智能工具更加灵活、开放和易于使用。我们希望当前(alpha!)版本的Pyro对那些想要利用大数据集和深度网络的概率建模者最有兴趣,Pytorch.想要易于使用的贝叶斯计算的用户,以及准备探索新技术的粗糙边缘的数据科学家。
下面我们将描述创建Pyro的动机,概述其设计原则和一些实现见解,并指出进一步开发该框架的下一步步骤。
为什么烟花?
概率是在不确定性下推理的数学,因为微积分是数学,了解改变率的数学。模型内置的概率语言可以捕捉复杂的推理,知道他们不知道的内容,并在没有监督的情况下揭示数据中的结构。此外,概率为人类专家提供了一种方式,以以形式向AI系统提供知识先天的信仰。
直接指定概率模型会很麻烦,实现它们也很容易出错。概率编程语言(ppl)通过将概率与编程语言的表示能力相结合来解决这些问题。概率程序是普通确定性计算和随机采样值的混合;这种随机计算代表了一个关于数据的生成故事。概率在这个表示中是隐含的-没有必要推导公式——但这个规范也是通用的:任何可计算的概率模型都可以这样写。Pyro建立在full之上Python作为基本语言,使许多人明确而熟悉。
通过观察概率程序的结果,我们可以描述一个推理问题,大致可以翻译为:“如果这个随机选择有某个观察值,那么什么是正确的?”概率编程系统提供了通用推理算法,可以在用户很少干预的情况下进行推理。可以把它看作PPL的编译器:它允许我们在建模者和推理专家之间划分工作。
然而推断是概率建模的关键挑战,并且不可扩展的推理是PPLS的主要故障模式。利用深度学习的力量,最近的进步已经引入了一种新的概率推理和PPL实施方法。关键的想法是通过称为推理模型的第二模型描述模型中的推断,或者指南用pro。(这实际上是一个重要的想法,尽可能远亥姆霍兹机。)正如模型是数据的生成故事,指导是一个用于将数据转化为潜在选择的生成故事。
当然,我们不能简单地写下正确的指南(这就是为什么推断是困难的)。相反,我们使用变分方法,确定一个参数化的导轨族,然后解决一个优化问题,使导轨向模型的后验分布方向移动。这种优化可以自动化,这要归功于自动分化,这是一种有效计算程序梯度的技术,以及一些估算期望梯度的技巧。
Pyro构建于优秀的PyTorch库之上,该库包含使用非常快速的gpu加速张量数学的自动微分。PyTorch动态构造梯度,这使Pyro程序能够包含梯度随机控制结构也就是说,Pyro程序中的随机选择可以控制程序中其他随机选择的存在。随机控制结构是制造PPL普遍性的至关重要。因此,Pyro可以代表任何概率模型,同时提供基于自动优化的推断,该推断是灵活的和可扩展到大数据集。
在Pyro中,生成模型和推理指南都可以包含深度神经网络作为组件。由此产生的深度概率模型在最近的工作中显示了很大的前景,特别是对于无监督和半监督机器学习问题。
总而言之:
- 为什么概率建模?为无监督和半监督学习正确捕获模型和预测中的不确定性,并为人工智能系统提供声明性先验知识。
- 为什么(普遍的)概率程序?为指定复杂模型提供一种清晰、高层次但完整的语言。
- 为什么要深入概率模型?从数据中学习生成知识,并具体化如何进行推理的知识。
- 为什么通过优化推断?为了使缩放到大数据并利用现代优化和变分推理的进步。
Pyro设计原则和见解
在开发Pyro时,我们的目标是满足四个设计原则。建造Pyro的目的是:
- 通用: Pyro是一个通用的ppl,它可以表示任何可计算的概率分布。如何?从一种通用语言开始,使用迭代和递归(任意Python代码),然后添加随机抽样、观察和推断。
- 可伸缩的: Pyro可扩展到大数据集,比手写代码开销小。如何?通过构建现代黑盒优化技术,使用小批量数据来近似推理。
- 最小的:Pyro是敏捷和可维护的。如何?用强大,可协议抽象的小核心实现。尽可能地,沉重的提升被委派给Pytorch和其他库。
- 灵活:当您需要时,Pyro瞄准自动化,当您需要时控制。如何?Pyro使用高级抽象来表达生成和推理模型,同时允许专家轻松定制推理。
这些原则通常将Pyro的实现推向相反的方向。例如,要实现通用性,就需要在Pyro程序中允许任意的控制结构,但是这种通用性使其难以扩展。类似地,使用最小抽象的目标函数的自动构造使创建新模型更容易,但这也倾向于对希望灵活地修改目标的高级用户隐藏目标计算。
在我们的研究期间,我们雷竞技是骗人的通过借用其他PPL努力的许多技术来解决这些紧张局势(特别是WebPPL和爱德华。)发现一些新的想法。例如,我们发现可协商效果处理单独的单独控制流量操作,从计算目标函数。PPL中的基本操作是从分布,观察采样值的采样,并在执行后推断出导致的后续。但是,采样语句所需的行为取决于它们发生的推断上下文。例如,在计算标准证据下限的目标时,指南中的采样语句实际上应该采样新值,而模型中的采样语句应仅重用这些值。Pyro实现将这些上下文的效果构成了一组p对象(Pyro协程的绝妙组合),例如Trace、Replay和Condition。每个Poutine都提供了对Pyro构造(采样、参数构造等)处理的一个小修改;将Poutines分层在一起可以让我们构建不同推理算法所需的操作。使用这个由Poutines处理的程序逻辑,主要的推理代码集中于构造目标和估计梯度。
下一个步骤
Pyro在alpha状态的研究已经很有雷竞技是骗人的用了,在接下来的几个月里,随着我们进一步参与概率编程和深度学习社区,Pyro将继续迅速改变。
延伸和改善Pyro的可能方向是歧管,反映了Pyro的许多应用领域以及在深层概率建模和推理的工作中的繁荣研究界。雷竞技是骗人的我们的一些最优先的技术方向包括:
- 改进快速建模的抽象(例如,通过提供自动默认指南)和高级用法(例如,通过精炼Poutine对象的组合契约)。
- 添加其他目标(例如,α散度那infoVAE,GAN-based损失)和估算梯度预期的额外技术。
- 添加马尔可夫链蒙特卡洛(密度)和序贯蒙特卡罗(SMC)推理,特别是哈密顿蒙特卡罗(HMC),并在变分推理目标中使用这些。
- 探索成语高斯过程和贝叶斯优化等应用。
从长远来看,我们希望Pyro的主要发展方向将由应用程序和新兴Pyro社区的优先级来驱动(正如itsGithub的问题)。
Noah Goodman是斯坦福大学雷竞技是骗人的的Uber Ai Labs以及一名心理学与计算机科学副教授的研究员。
Uber开发团队为Pyro提供Eli Bingham,Jonathan P. Chen,Martin Jankowiak,Theofanis Karaletsos,Fritz Obermeyer,Neeraj Pradhan,Rohit Singh,Paul Szerlip和Noah Goodman。
优步也感谢Paul Horsfall,Dustin Tran,Robert Hawkins和Andreas Stuhlmueller的贡献和反馈。






