概率编程(例如 pyro 和信念网络)之间有什么区别?
数据挖掘
深度学习
贝叶斯网络
概率规划
2022-02-16 21:44:27
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循环可以表示为贝叶斯网络中的板。
