概率编程与概率机器学习之间有什么区别?

时间:2019-08-01 01:57:10

标签: machine-learning bayesian probabilistic-programming

我试图把注意力集中在概率编程的概念上,但是我读的越多,我就越感到困惑。

我目前的理解是,概率编程类似于贝叶斯网络,只是被翻译成用于创建自动推理模型的编程语言?

我在机器学习方面有一定的背景,我记得一些机器学习模型也可以输出概率,然后我遇到了概率机器学习一词...

两者之间有区别吗?还是类似的东西?

感谢任何可以帮助澄清的人。

2 个答案:

答案 0 :(得分:2)

我猜这两个词之间有些含糊,但我对它们的看法如下:

概率编程将概率模型表示为生成数据的计算机程序(即模拟器)。

概率模型+编程=概率编程

没有任何关于组成概率模型的信息(它很可能是某种神经网络)。因此,我将此术语视为:

  1. 更多通用
  2. 在应用上下文中(与编程有关)更常用

概率机器学习 是ML的另一种形式,它处理预测的概率方面,例如该模型不会将输入/输出值视为某些和/或点值,而是将它们(或其中的一些)视为random variables。这种方法的突出示例是Gaussian Process

答案 1 :(得分:0)

  

我目前的理解是,概率编程类似于贝叶斯网络,只是被翻译成用于创建自动推理模型的编程语言?

是正确的。概率程序可以看作等效于贝叶斯网络,但是用更丰富的语言表示。 概率编程作为一个领域提出了这样的表示形式,以及利用这些表示形式的算法,因为有时更丰富的表示会使问题变得更容易。

例如考虑一个概率模型,该模型模拟了一种更可能折磨男人的疾病:

N = 1000000;
for i = 1:N {
    male[i] ~ Bernoulli(0.5);
    disease[i] ~ if male[i] then Bernoulli(0.8) else Bernoulli(0.3)
}

此概率程序等效于以下贝叶斯网络以及相应的条件概率表:

Bayesian network equivalent to probabilistic program

对于诸如此类的高度重复的网络,作者经常使用标牌符号使它们的描述更加简洁:

enter image description here

但是,标牌符号是用于人类可读出版物的设备,而不是与编程语言相同的形式语言。此外,对于更复杂的模型,标牌符号可能会变得更难以理解和维护。最后,编程语言还带来了其他好处,例如原始操作使表达条件概率更容易。

那么,这仅仅是一个方便的表示形式吗?不,因为更抽象的表示形式包含了更多可用于改善推理的高级信息。

假定我们要计算N个患病个体中人数的概率分布。一种简单而通用的贝叶斯网络算法必须考虑对2^N变量进行大量disease分配的组合才能计算出答案。

然而,概率程序表示法明确表明disease[i]male[i]的条件概率对于所有i都是相同的。推理算法可以利用该算法来计算disease[i]的边际概率,该边际概率对于所有i都是相同的,它使用以下事实:患病人数将是二项分布B(N, P(disease[i])),并且在N中的恒定时间内提供所需的答案。它还可以提供此结论的解释,使用户更容易理解和理解。

一个人可能会说这种比较是不公平的,因为有知识的用户不会提出针对O(N)大小的贝叶斯网络的明确定义的查询,而是通过利用其简单的结构提前简化了问题。但是,用户可能没有足够的知识来进行这种简化,尤其是对于更复杂的情况,或者可能没有时间这样做,或者可能犯了错误,或者可能事先不知道模型是什么,所以她无法像这样手动简化它。概率编程可以自动 进行这种简化。

公平地说,大多数当前的概率编程工具(例如JAGS和Stan)不会执行此更为复杂的数学推理(通常称为提升概率推理),只需在贝叶斯网络上进行等效于概率程序的马尔可夫链蒙特卡洛(MCMC)采样即可(但通常无需事先构建整个网络,这也是另一个可能的收益)。在任何情况下,这种便利性都不能证明其用途合理。