前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >斯坦福 CS228 概率图模型中文讲义 六、变量消除

斯坦福 CS228 概率图模型中文讲义 六、变量消除

作者头像
ApacheCN_飞龙
发布2022-12-01 19:50:31
5270
发布2022-12-01 19:50:31
举报
文章被收录于专栏:信数据得永生

六、变量消除

原文:Variable elimination 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译

接下来,我们将注意力转向图模型中的推断问题。 给定概率模型(如贝叶斯网络或 MRF),我们有兴趣使用它来回答有用的问题,例如确定给定电子邮件是垃圾邮件的概率。 更正式地说,我们将关注两类问题:

边缘推断:在我们总结其他所有东西(例如垃圾邮件与非垃圾邮件的概率)之后,我们模型中给定变量的概率是多少?

最大后验(MAP)推断:模型中变量最可能的赋值是什么(可能以证据为条件)。

事实证明,推断是一项具有挑战性的任务。 对于很多感兴趣的概率来说,回答这些问题将是非常难的。 至关重要的是,推断是否易于处理,将取决于描述该概率的图的结构。 如果问题棘手,我们仍然可以通过近似推断方法获得有用的答案。

本章涵盖了第一个确切的推断算法,即变量消除。 我们将在后面的章节中讨论近似推理。

示例

首先考虑边缘推断的问题。 假设为了简单起见,我们有链式贝叶斯网络,即这种形式的概率:

我们有兴趣计算边际概率p(xn)。 我们将在本章的其余部分假定xi是离散变量,每个变量都有d个可能的值 [1]:

[1] 变量消除背后的原理也可以扩展到许多连续分布(例如高斯),但我们在这里不会讨论这些扩展。

最朴素的方法就是将

d^(n-1)个赋值相加。

但是,通过利用概率分布的分解,我们可以做得更好。 我们可以用一种方式将和式重写,将某些变量“推入”乘积的更深位置。

我们通过首先将内部项求和,从x1开始并以xn-1结尾。 更具体地说,我们首先通过求和x1来计算中间因子

。 这需要O(d^2)的时间,因为我们必须累加x1的每个赋值来求x2。 得到的因子τ(x2)可以被看作是一个值表(尽管不一定是概率),x2的每个赋值是一个条目(就像因子p(x1)可以表示为一个表),然后我们可以使用τ重写边际概率为:

请注意,这与初始表达式形式相同,不同之处在于我们正在求和的变量较少 [2]。因此,我们可以计算另一个因子

,并重复这个过程,直到我们只剩下xn。 由于每个步骤需要O(d^2)的时间,并且我们执行O(n)个步骤,所以推断现在需要O(nd^2)的时间,这比我们的初始O(d^n)解决方案好得多。

[2] 这种技术是动态规划的一个特例,它是一种通用的算法设计方法,我们将较大的问题分解为一系列较小的问题。

另外,每次我们都要消除一个变量,它给出了算法的名字。

消除变量

建立了一些直觉之后,使用一个特例,我们现在以最一般的形式介绍变量消除算法。

因子

我们将假设我们有一个图模型,它是因子的乘积:

回想一下,我们可以将一个因子视为一个多维表格,将一个值赋给一组变量xc的每个赋值。 在贝叶斯网络的情况下,这些因子对应条件概率分布; 然而,这个定义也使得我们的算法同样适用于马尔科夫随机场。 在后一种情况下,这些因子编码了一个非正态分布;为了计算边缘值,我们首先计算分布函数(也使用变量消除),然后我们使用非标准化分布计算边缘值,最后我们用分区常数除以结果,以构建有效的边缘概率。

因子运算

变量消除算法重复执行两个因子运算:乘法和边缘化。 在我们的链式示例中,我们一直隐式执行这些操作。

因子的乘法运算,将两个因子ϕ1, ϕ2的乘积ϕ3:=ϕ1×ϕ2定义为:

ϕ3的范围定义为ϕ1, ϕ2范围内变量的并集; 同样,

表示ϕi范围内的变量赋值,通过将xc限制在该范围定义。 例如,我们定义ϕ3(a,b,c):=ϕ1(a,b)×ϕ2(b,c)

接下来,边缘化操作从一个因子中“局部”消除了一组变量。 如果我们在两组变量X, Y上有一个因子ϕ(X,Y),则边际化Y产生一个新的因子

其中求和对变量Y的所有联合赋值进行运算。

这里我们对因子ϕ(A,B,C)边缘化变量B

我们用τ来表示边缘化因子。 即使ϕ是 CPD,重要的是要明白这个因子并不符合概率分布。

顺序

最后,变量消除算法需要变量上的顺序,根据它来“消除”变量。 在我们的链式示例中,我们采用了 DAG 所暗示的顺序。 需要注意的是:

  • 不同的顺序会显着延长变量消除算法的运行时间。
  • 找到最好的顺序是 NP 难的。

我们稍后再回到这些复杂情况,但现在假设顺序是固定的。

变量消除算法

我们现在准备好正式定义变量消除(VE)算法。 本质上,我们按照O的顺序遍历变量,并按照该顺序消除它们。 直观地说,这相当于选择一个总和,并将其“推入”因子的成绩中,尽可能远,就像我们在链式示例中所做的那样。

更正式地说,对于每个变量Xi(按照O来排序),

  • 将包含Xi的所有因子Φi相乘
  • 边缘化Xi以获得新的因子τ
  • Φi中的因子替换为τ

一名之前的 CS228 学生创建了交互式网络模拟,用于可视化变量消除算法。 随意使用它,如果用了,请通过 Web 应用程序上的反馈按钮提交任何反馈或错误。

示例

让我们尝试理解,这些步骤在我们的链式示例中对应什么。 在那种情况下,所选顺序是x1, x2, ..., xn-1。 从x1开始,我们收集了所有涉及x1的因子,分别是p(x1)p(x2 | x1)。 然后我们用它们构造一个新的因子

。 这可以看作是 VE 算法步骤 2 和 3 的结果:首先我们形成一个大因子σ(x2,x1)=p(x2|x1)p(x1);然后我们从该因子中消除x1来产生τ。 然后,我们对x2重复相同的过程,除了因子现在是p(x3|x2),τ(x2)

对于一个稍微复杂的例子,回想一下我们之前介绍的学生成绩的图模型。

一次考试中的学生成绩g的贝叶斯网络模型。除了g之外,我们还建模了学生成绩的几个层面,例如考试的难度d,学生的智力i,他的 SAT 分数s; 它也会影响教授课程的教授的推荐信的质量l。 每个变量都是二元的,除了g,它取 3 个可能的值。

由模型规定的概率是这种形式:

假设我们正在计算p(l)并且按照图中的拓扑序消除变量。 首先,我们消除d,这相当于创建一个新因子

。 接下来,我们消除i并产生一个因子

;之后我们消除s产生

,以此类推。 请注意,这些操作相当于汇总了因式化的概率分布,像这样:

请注意,这个例子每步最多需要计算d^3个操作,因为每个因子最多三个变量,并且每个步骤中将一个变量求和(在此示例中的维度d是 2 或 3)。

证据简介

一个密切相关且同样重要的问题是,计算这种形式的条件概率:

其中P(X, Y, E)是概率分布,它在查询变量Y,观察到的证据变量E,和未观察到的变量X上。

通过在P(Y,E=e)上执行一次变量消除,然后再在P(E=e)上执行一次,我们可以计算这个概率。

为了计算P(Y,E=e),我们简单地取每个因子ϕ(X′,Y′,E′),它们的范围在变量E′⊆E上,所以也可以在E中找到,并且我们使它们的值由e指定。 然后我们对X进行标准变量消除以获得仅含有Y的因子。

变量消除的运行时间

重要的是要理解,变量消除的运行时间在很大程度上取决于图的结构。

在前面的例子中,假设我们首先消除了g。 那么,我们不得不将因子p(g|i,d),ϕ(l|g)变换成 3 个变量的大因子τ(d,i,l),这需要O(d^4)的时间来计算。 如果我们有因子S→G,那么我们也必须消除p(g|s),产生O(d^5)时间的巨大因子τ(d,i,l,s)。 然后,从这个因子中消除任何变量,将需要几乎一样多的工作,就像我们以原始分布开始那样,因为所有变量都是耦合的。

显然,有些顺序比其他顺序更有效率。 实际上,变量消除的运行时间将等于O(md^M),其中M是消除过程中任何因子的最大值,m是变量的数量。

选择变量消除顺序

不幸的是,选择 VE 的最佳顺序是 NP 难问题。 但是,在实践中,我们可能会采取以下启发式方法:

  • 最小邻居:选择依赖变量最少的变量。
  • 最小权重:选择变量来最小化其依赖变量基数的乘积。
  • 最小填充:选择节点来最小化要添加到图形中的因子数量。

实际上,这些方法在许多有趣的设定中,通常会产生相当好的性能。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 六、变量消除
    • 示例
      • 消除变量
        • 因子
        • 因子运算
        • 顺序
        • 变量消除算法
        • 示例
      • 证据简介
        • 变量消除的运行时间
          • 选择变量消除顺序
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档