Skip to main content Link Menu Expand (external link) Document Search Copy Copied

6.3 贝叶斯网络表示 (Bayesian Network Representation)

虽然通过枚举进行推理可以计算我们可能想要的任何查询的概率,但在计算机内存中表示整个联合分布对于实际问题来说是不切实际的——如果我们希望表示的 \(n\) 个变量中的每一个都可以取 \(d\) 个可能的值(它有一个大小为 \(d\) 的定义域 (domain)),那么我们的联合分布表将有 \(d^n\) 个条目,这是变量数量的指数级,存储起来非常不切实际!

贝叶斯网络通过利用条件概率的思想避免了这个问题。概率不是存储在一个巨大的表中,而是分布在许多较小的条件概率表以及一个捕获变量之间关系的有向无环图 (directed acyclic graph, DAG) 中。局部概率表和 DAG 一起编码了足够的信息,可以计算我们在给定整个大型联合分布的情况下可以计算的任何概率分布。我们将在下一节中看到这是如何工作的。

我们正式定义贝叶斯网络由以下部分组成:

  1. 一个节点的有向无环图,每个变量 \(X\) 一个节点。

  1. 每个节点的条件分布 $$P(X A1 … An)\(,其中\)Ai\(是\)X\(的第\)i\(个父节点,存储为**条件概率表 (conditional probability table)** 或 CPT。每个 CPT 有\)n+2\(列:一列用于\)n\(个父变量\)A1 … An\(中每一个的值,一列用于\)X\(的值,一列用于给定父节点时\)X$$ 的条件概率。

贝叶斯网络图的结构编码了不同节点之间的条件独立关系。这些条件独立性允许我们存储多个小表而不是一个大表。

重要的是要记住,贝叶斯网络节点之间的边并不意味着这些节点之间具体存在_因果_关系,或者变量必然相互依赖。它只是意味着节点之间可能存在_某种_关系。

作为贝叶斯网络的一个例子,考虑一个模型,其中我们有如下描述的五个二元随机变量:

  • B: 发生盗窃 (Burglary occurs)。
  • A: 警报响起 (Alarm goes off)。
  • E: 发生地震 (Earthquake occurs)。
  • J: 约翰打电话 (John calls)。
  • M: 玛丽打电话 (Mary calls)。

假设如果发生盗窃或地震,警报就会响起,并且如果玛丽和约翰听到警报,他们就会打电话。我们可以用下图表示这些依赖关系。

Basic Bayes Nets Example

在这个贝叶斯网络中,我们将存储概率表 \(P(B)\)、\(P(E)\)、\(P(A | B, E)\)、\(P(J | A)\) 和 \(P(M | A)\)。

给定图的所有 CPT,我们可以使用以下规则计算给定赋值的概率:

\[P(X1, X2, ..., Xn) = \prod_{i=1}^n{P(X_i | parents(X_i))}\]

对于上面的警报模型,我们实际上可以如下计算联合概率的概率:

\[P(-b, -e, +a, +j, -m) = P(-b) \cdot P(-e) \cdot P(+a | -b, -e) \cdot P(+j | +a) \cdot P(-m | +a)\]

我们将在下一节中看到这个关系是如何成立的。

作为现实检查,重要的是要内化贝叶斯网络只是一种模型。模型试图捕捉世界运作的方式,但因为它们总是简化,所以它们总是错误的。然而,通过良好的建模选择,它们仍然可以是足够好的近似值,从而对解决现实世界中的实际问题有用。

一般来说,一个好的模型可能无法解释每个变量甚至变量之间的每个相互作用。但是通过在图的结构中做出建模假设,我们可以产生极其高效的推理技术,这些技术通常比像枚举推理这样的简单过程更有实际用途。