机器学习中的统计编程:Pyro 和 TFP 的对比
已发表: 2021-01-29在机器学习中,统计或概率编程是使用两种编程语言完成的,如下所示。 简单介绍一下,简单来说,概率规划是一种统计建模的工具。 它基本上意味着使用我们可以制作和设计统计模型作为解决方案的语言来解决问题。
它是关于使用计算机编程语言应用统计学的概念。 使用概率模型,可以推断出我们对模型超参数的信念如何改变输出。
目录
著名的概率编程语言
1. 火焰兵
Pyro 是一种概率编程语言 (PPL),它是用 Python 编写的,并由后端的 Pytorch 支持。 借助 Pyro,我们可以使用深度概率建模、贝叶斯建模,并结合最好的现代深度学习算法。 它可以按如下方式安装:
pip3 安装 Pyro-ppl
或从源代码安装它,使用以下命令:
git 克隆 https://github.com/pyro-ppl/pyro.git

cd pyro
点安装。[附加]
使用简单的代码行导入 Pyro:
进口pyro
2.张量流概率(TFP)
TFP 是一个基于 TensorFlow 构建的 Python 库,它使得概率模型和深度学习模型在 GPU 和 TPU 上的组合成为可能。 任何希望结合领域知识来理解和做出相关预测的人都可以使用它。 要安装 TFP,请在命令或 anaconda 提示符下键入以下命令。
pip install –升级张量流概率
可以使用以下命令在代码中使用 TFP:
将 tensorflow_probability 导入为 tfp
加入来自世界顶级大学的在线人工智能课程——硕士、高管研究生课程和 ML 和 AI 高级证书课程,以加快您的职业生涯。
Pyro 和 TFP 的对比
1. 文档
Pyro 和 TFP 的文档非常出色且丰富,而从神经网络的前景对 TFP 的解释则较少。 在 pyro 中,模块 pyro.nn 提供了在深度概率编程环境中有用的神经网络模块的实现。 在 TFP 中,tfp.layers 代表神经网络层,它们代表的功能不确定,扩展了 TensorFlow 层。
2. 语言
TFP 和 Pyro 的用户都使用 python 编写。 但是,TFP 案例中涉及的 API 非常冗长。 我的意思是,有时我们必须编写更多行代码才能找到解决方案。 有时这可能很好,因为我们对整个程序有更多的控制权,而当它在 Pyro 中以更短的形式可用时,这会很糟糕。
3. 加速时间
使用 Pyro,代码执行速度更快、效率更高,您无需学习新概念。 另一方面,TFP 需要占位符、变量范围以及会话等概念,因此需要更多时间来执行。
4. 部署
TFP 和 Pyro 都可以轻松部署在小型服务器端。 对于移动和微型计算机或嵌入式部署,TensorFlow 工作效率高,与 Pytorch 不同。 与 Pytorch 相比,在 Android 和 IOS 中部署 TensorFlow 所需的工作量更少。
5. 图表
Tensorflow 具有更好的计算图形可视化,与 Torch 和 Theano 等其他库相比,这是本地的。 Edward 基于 TensorFlow 构建,支持计算图、分布式训练、CPU/GPU 集成、自动微分以及使用 TensorBoard 进行可视化等功能。 然而,Pyro 不提供任何演示或可视化功能。

Edward 对 TensorBoard 的干扰,来源:Edward
6. 马尔可夫链蒙特卡洛
TFP 实现了大量马尔可夫链蒙特卡罗(MCMC)算法(如 Metropolis、Gibbs、Hamiltonian),其用途是在 TensorFlow 中对概率分布和一些值迭代算法进行采样。 直到 2018 年,Pyro 才执行马尔可夫链蒙特卡洛。 它已更新并具有完整的 MCMC、HMC 和 NUTS 支持。
7. 优化器
就像 TFP 实现了 TensorFlow 的几个优化器,包括 Nelder-Mead、BFGS 和 L-BFGS(用于确定无约束的非线性优化问题),Pyro 实现了 PyTorch 中存在的优化器。模块 pyro.optim 为 Pyro 中的优化提供支持. 可以说,这两个 PPL 都依赖于它们的基本模块(TensorFlow 和 PyTorch)。
资源
8. 双射器
在 TFP 中,双射变量包括概率密度的变量变化。 当我们从一个空间映射到另一个空间时,我们也会影响从初始空间上的概率密度到目标空间上的密度的映射。
但是当我们映射到不同的空间时,我们需要跟踪这些映射,以便在计算后一个空间的概率密度时考虑它们。 因此,双射器用于平滑映射。 在 pyro 中,文档没有提到关于双射器的任何内容,所以我认为它们没有。
9.时间序列
pyro.contrib.timeseries 模块提供了一组对预测应用有用的贝叶斯时间序列模型。 这可以通过利用 Pyro 中现有的Forecaster对象来实现。 在我们将输入数据提供给模型后,我们只需告诉模型如何做出明智的预测。
就这么简单,只有数据和概率框架。 然而,TFP 使用了 CNN 和 RNN 等 Tensorflow 的时间序列模型以及其贝叶斯结构时间序列模型框架 (tfp.sts)。 贝叶斯结构时间序列是一个高级接口,用于拟合尚未发布的时间序列模型。
资源
10. 分配
它是用于构建和组织随机变量(例如,伯努利、高斯)的属性(例如,均值、方差)的基类。 一个例子可以是正态分布。 Pyro 中的大多数发行版都是 PyTorch 发行版的薄包装。 有关 PyTorch 分发接口的详细信息,您可以查看 torch.distributions.distribution.Distribution。 然而,TFP 有它的模块 tfp.distributions。
资源
资源
11. 广义线性模型(GLM)
在统计学中,广义线性模型是普通线性回归的灵活推广,它允许响应变量具有除正态分布之外的误差分布模型。 在 TFP 中,tfp.glm 模块包含一个用于拟合混合效应回归模型的高级接口。 然而,Pyro 没有这样的 GLM 模块。
资源
结论
使用这些因素,可以肯定地得出结论,Pyro 与 TFP 没有太大区别。 它们都基于 Python 编程语言。 Python API 有据可查。 然而,Pytorch 具有良好的加速时间,因此比 TensorFlow 快得多。 在这两个框架中做出决定将取决于您找到每个框架的学习方法的可访问性。 您的选择还取决于您组织的要求。

如果您有兴趣了解有关机器学习的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和 AI 执行 PG 计划,该计划专为工作专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和作业、IIIT -B 校友身份,5 个以上实用的实践顶点项目和顶级公司的工作协助。
参考
入门 – Pyro 文档
模块:tfp | TensorFlow 概率
机器学习如何与统计联系起来,反之亦然?
统计用于建立统计模型,以表示数据并从中得出结论或推论。 而机器学习利用这种统计模型来获得对数据的理解并做出准确的预测。 因此,统计数据用于构建统计模型,以帮助正确、轻松地进行机器学习。
没有统计学知识我能知道机器学习吗?
统计和机器学习是相互关联的。 如果你懂统计,你可以用统计模型的形式表示数据,然后用机器学习进行分析和预测。 因此,在机器学习之前了解统计数据将非常有帮助。 所以,如果你只知道统计的基础知识,你就可以开始了。 您不必成为统计学专家也能在机器学习方面表现出色。
TensorFlow 对初学者来说容易学习吗?
TensorFlow 是一个从头到尾运行的开源机器学习平台。 TensorFlow 让初学者和专业人士都能轻松创建机器学习模型。 如果你想从事机器学习工作,你需要花费 6 到 12 个月的时间来学习和完善你的 TensorFlow 能力。 但是,如果您了解 R 和 Python 等编程语言的基础知识,就不会遇到太多麻烦。