Files
PPCA-AIPacMan-2024/docs/bayes.md

3.0 KiB
Raw Blame History

贝叶斯网络

介绍

贝叶斯网络是一种概率图式模型,通过对随机变量构建有向无环图捕捉其概率分布。更具体地,你的任务为通过条件概率表来完成指定的查询,即给定先验概率 P(Q) 和条件概率 P(E|Q), 求解后验概率 P(Q|e). 为了解决这一问题,我们可以构建联合分布

P(EQ) = P(E|Q) P(Q)

再计算

P(Q|e) = \frac{P(Qe)}{P(e)} = \frac{P(Qe)}{\sum_{q} P(qe)}

这样就可以通过联合概率分布来计算后验概率。这一实现存在两个很大的问题:

  1. 完整的联合分布概率表的大小与事件个数呈指数关系(为什么?),导致存储与计算开销太大。
  2. 先验地估计所有信息是困难的。

为此我们考察使用条件概率分布进行推理,即使用贝叶斯公式:

P(Q|e) = \frac{P(e|Q) P(Q)}{\sum_{q} P(e|q) P(q)}

这是贝叶斯网络背后的动机:一种使用简单的局部分布(条件概率)描述复杂联合分布(模型)的技术。我们描述变量如何在局部相互作用,并将这些作用组合建模全局的间接相互作用。

栗子

在使用 Google 搜索时当你不小心输入一个不存在的单词时搜索引擎会提示你是不是要输入某一个正确的单词。Google的拼写检查基于贝叶斯方法。下面我们就来看看怎么利用贝叶斯方法实现"拼写检查"的功能。

用户输入一个单词时可能拼写正确也可能拼写错误。如果把拼写正确的情况记做c代表correct拼写错误的情况记做 w代表wrong那么“拼写检查”要做的事情就是在发生 w 的情况下,试图推断出 c。换言之已知w然后在若干个备选方案中找出可能性最大的那个 c, 也就是求 P(c|w)=P(w|c)P(c)/P(w) 的最大值,故只需考察 \operatorname{argmax}_{c} P(w|c)P(c) 即可。

上面是一个实际的贝叶斯网络的例子,其中每个节点代表一个事件,节点对应的表即为贝叶斯网络中存储的信息,若我们想要计算 $ P(+w \mid +s, -g) $,则有:

P(+w \mid +s, -g) = \frac{P(+w, +s, -g)}{P(+s, -g)}

(链式规则)

P(+w, +s, -g) = \sum_h P(h, +w, +s, -g)

(边缘化)

\sum_{h, w} P(h, w, +s, -g) = \sum_h P(h)P(+w \mid h)P(+s \mid +w)P(-g \mid +w)

(联合概率分布 = 边缘概率分布的乘积)


\begin{aligned}
P(+w \mid +s, -g) &= \frac{P(+w, +s, -g)}{P(+s, -g)} \quad (\text{条件概率}) \\
&= \frac{\sum_h P(h, +w, +s, -g)}{\sum_{h, w} P(h, w, +s, -g)} \quad (\text{联合分布转边缘分布}) \\
&= \frac{\sum_h P(h)P(+w \mid h)P(+s \mid +w)P(-g \mid +w)}{\sum_{h,w} P(h)P(w
\mid h)P(+s \mid w)P(-g \mid w)} \quad (\text{转为条件概率的乘积}) \\
&= \frac{0.1 \times 0.667 \times 0.4 \times 0.75 + 0.9 \times 0.25 \times 0.4 \times 0.75}{0.1 \times 0.667 \times 0.4 \times 0.75 + 0.9 \times 0.25 \times 0.4 \times 0.75 + 0.1 \times 0.333 \times 0.2 \times 0.5 + 0.9 \times 0.75 \times 0.2 \times 0.5} \\
&= 0.553
\end{aligned}