概率编程(例如 pyro 和信念网络)之间有什么区别?

数据挖掘 深度学习 贝叶斯网络 概率规划
2022-02-16 21:44:27

我听说了 ubers pyro 并偶然发现了这篇Wikipedia 文章。

据我了解,根据这篇文章,贝叶斯网络与信念网络相同。

有人知道这些是如何相关的吗?

1个回答

概率程序和贝叶斯网络都是指定概率模型的方法。任何可以指定为贝叶斯网络的模型也可以由概率程序指定,实际上是由没有控制流的概率程序指定。大致

Bayes Nets == Straight line Probabilistic Programs

例如考虑贝叶斯网络在此处输入图像描述

这个贝叶斯网络等价于概率程序(在 Pyro 中)

def model():
    p_rain = pyro.param("p_rain", torch.tensor(0.2), constraint=unit_interval)
    p_sprinkler = pyro.param("p_sprinkler", torch.tensor([0.4, 0.01]),
                             constraint=unit_interval)
    p_wet = pyro.param("p_wet", torch.tensor([[0.0, 0.9], [0.8, 0.99]]),
                       constraint=unit_interval)

    rain = pyro.sample("rain", Bernoulli(p_rain))
    sprinkler = pyro.sample("sprinkler",
                            Bernoulli(p_sprinkler[rain.long()]))
    wet = pyro.sample("wet", Bernoulli(p_wet[rain.long(), sprinkler.long()]))

更一般地说,概率程序可以包含控制流(if, for, while)和递归。这些额外特征中的一些以贝叶斯网络的扩展表示,例如,一些for循环可以表示为贝叶斯网络中的板。