【人工智能:原理与技术】概率图模型的推断:变量消元、采样与滤波

1 枚举法卡在哪一步

上一讲把推断归结成一个动作:给定证据,挑出与之相符的行,把各张条件表乘成联合分布,再把不关心的变量加掉,最后归一化。这个做法没有错,问题在开销。

代价集中在乘法那一步。查询变量、证据变量、隐藏变量要一起乘,中间表的规模是参与变量的组合数,随隐藏变量与查询变量的个数指数增长。保险网络那种二三十个变量的图,这张表根本造不出来。

想让推断跑得动,只有两条路。或者换算法,把乘法与求和交错着做,不要一次造出大表;或者放弃精确解,用采样逼近。前半段讲前者,后半段讲后者。

2 变量消元

2.1 把求和提前

三个节点的链最容易看清差别。下雨 RRR 引起堵车 TTT,堵车引起迟到 LLL,要算 P(L)P(L)P(L)。

枚举的做法是把 RRR、TTT、LLL 三张表乘成八行的联合分布,再对 RRR、TTT 求和,全程都要同时拿着三个变量。

三张表里的数是:P(+r)=0.1P(+r)=0.1P(+r)=0.1,P(+t∣+r)=0.8P(+t\mid +r)=0.8P(+t∣+r)=0.8、P(+t∣−r)=0.1P(+t\mid -r)=0.1P(+t∣−r)=0.1,P(+l∣+t)=0.3P(+l\mid +t)=0.3P(+l∣+t)=0.3、P(+l∣−t)=0.1P(+l\mid -t)=0.1P(+l∣−t)=0.1。枚举把两层求和一次写完:

P(l)=∑t∑rP(l∣t)P(r)P(t∣r)(1)P(l)=\sum_{t}\sum_{r}P(l\mid t)P(r)P(t\mid r)\tag{1}P(l)=t∑r∑P(l∣t)P(r)P(t∣r)(1)

变量消元把里层先算掉,得到一个只含 ttt 的因子 f(t)f(t)f(t),再算外层:

P(l)=∑tP(l∣t)∑rP(r)P(t∣r)(2)P(l)=\sum_{t}P(l\mid t)\Big\\sum_{r}P(r)P(t\\mid r)\\Big\tag{2}P(l)=t∑P(l∣t)r∑P(r)P(t∣r)(2)

方括号里就是 f(t)f(t)f(t):f(+t)=0.1×0.8+0.9×0.1=0.17f(+t)=0.1\times0.8+0.9\times0.1=0.17f(+t)=0.1×0.8+0.9×0.1=0.17,f(−t)=0.1×0.2+0.9×0.9=0.83f(-t)=0.1\times0.2+0.9\times0.9=0.83f(−t)=0.1×0.2+0.9×0.9=0.83。两层求和没少,变的是先后顺序,以及中间那张表有多宽。代回去得 P(l)=0.3×0.17+0.1×0.83=0.134P(l)=0.3\times0.17+0.1\times0.83=0.134P(l)=0.3×0.17+0.1×0.83=0.134。任何时刻最多只有两个变量在场。nnn 个节点的链上,枚举要 2n2^{n}2n 量级,消元是 O(n)O(n)O(n)。

这就是「提前边缘化」:不等所有表乘完再求和,而是先把提到某个变量的表乘起来、当场把它加掉,把结果当成一张新表放回去。

图 1 提前边缘化:合并 RRR 后对 RRR 求和得 P(T)P(T)P(T),再合并 TTT、对 TTT 求和得 P(L)P(L)P(L)(CS188 fa26 lec15 p24)

2.2 一般形式

这里说的因子就是一张表。合并两个因子,把公共变量对齐、逐行相乘、变量取并集;消去一个变量,就是把它的各行加起来。变量消元全程只做这两件事。

写成算法只有两步循环。只要还有隐藏变量,挑一个 hhh,把提到 hhh 的因子全部找出来相乘,对 hhh 求和,得到一个不含 hhh 的新因子;隐藏变量清空后,把剩下的因子相乘,对查询变量归一化。

报警器网络可以走一遍。查询是 P(B∣j,m)P(B\mid j,m)P(B∣j,m),AAA 与 EEE 是隐藏变量。先挑 AAA:与它有关的因子有三个,P(A∣B,E)P(A\mid B,E)P(A∣B,E)、P(j∣A)P(j\mid A)P(j∣A)、P(m∣A)P(m\mid A)P(m∣A),乘起来对 AAA 求和,得到一个新因子;再挑 EEE,把提到 EEE 的因子合并求和;最后只剩 BBB 与证据,乘起来归一化。

把这一步写成式子看得更清楚。三张表乘起来得到 P(J,M,A∣B,E)P(J,M,A\mid B,E)P(J,M,A∣B,E),对 AAA 求和得到 P(J,M∣B,E)P(J,M\mid B,E)P(J,M∣B,E):边缘分布本来就是联合分布求和出来的,消元只是把这个求和提前做、并且只对用得到的那几张表做。

2.3 顺序决定开销

同一张图,换个消元顺序,代价能差出指数级。设 ZZZ 是根,向下分出 X1,...,XnX_1,\dots,X_nX1,...,Xn,每个 XiX_iXi 各产生一个观测 YiY_iYi,要算某个 XkX_kXk 的后验。

先消 ZZZ:与 ZZZ 有关的因子是 P(Z)P(Z)P(Z) 和 nnn 个 P(Xi∣Z)P(X_i\mid Z)P(Xi∣Z),一乘就得到含 n+1n+1n+1 个变量的因子,复杂度 2n+12^{n+1}2n+1。

先消 X1X_1X1:与它有关的只有 P(X1∣Z)P(X_1\mid Z)P(X1∣Z) 与 P(Y1∣X1)P(Y_1\mid X_1)P(Y1∣X1),乘起来涉及三个变量,对 X1X_1X1 求和后得到 P(Y1∣Z)P(Y_1\mid Z)P(Y1∣Z),变量数回落到两个。每个 XiX_iXi 照做,每一步都只有三个变量。最后消 ZZZ 时各 YiY_iYi 都是观测,只有一个取值,仍然只有三个变量。

两个顺序,一个 2n+12^{n+1}2n+1,一个 232^{3}23。差别不在公式,在每一步合并出来的因子有多宽:消元法的代价由最宽的那张中间表决定。顺序不是细节。

可惜没有通用的好顺序可找。给定图问最优消元顺序,可以归约到 3-SAT:若能高效求解,就等于高效判定 3-SAT 的可满足性。多数人相信 P≠NPP\neq NPP=NP,所以一般图上不存在多项式时间的精确推断,变量消元在最坏情况下仍是指数的。

有一类图是例外,叫多树:有向图去掉方向后没有环。多树上可以做到线性时间的精确推断,后面的隐马尔可夫模型就属于这一类。

3 用采样逼近

精确推断既然最坏是指数的,剩下的路是采样:从分布里抽一批样本,用样本频率估计概率。样本足够多时,估计会收敛到真值。

3.1 先验采样

按拓扑序走一遍图,每个节点按父节点已取的值查表,抽出本节点的值,得到一个完整样本;重复 NNN 次,数一数满足查询的样本占多少。

图 2 先验采样(CS188 fa26 lec16 p8)

写成极限就是它成立的理由:NNN 次采样得到的频率 P^(x1,...,xn)\hat{P}(x_{1},\dots,x_{n})P^(x1,...,xn) 依概率收敛到真实的联合分布。代价在于它对证据不敏感。证据概率很小时,绝大多数样本落在证据之外,白抽。

3.2 拒绝采样

改进只有一句:某个证据变量抽出的值与观测不符,立刻中止这一轮。省下的是后续变量的抽样,省不掉已经抽错的那部分。

图 3 拒绝采样(CS188 fa26 lec16 p13)

它同样一致,但没解决根本问题。证据越多,单个样本与证据一致的概率越低,浪费随证据个数指数增长。

3.3 似然加权

换个角度:证据既然已知,就别再抽它,把它固定住,只抽其余变量。这样每个样本都与证据一致,不再浪费。

新问题随之而来:样本分布不再是后验。颜色为蓝是证据时,抽到「金字塔」这种几乎不可能为蓝的形状也会被留下,与「球」同等对待,估计就偏了。

补救是给样本加权。每遇到一个证据变量,查出它在父节点取当前值时的概率,把所有证据变量的这个概率乘起来,作为该样本的权重:

w=∏e∈EP(e∣parents(e))(3)w=\prod_{e\in E}P(e\mid parents(e))\tag{3}w=e∈E∏P(e∣parents(e))(3)

权重大的样本更可信,权重小的少算一点。全部样本都用上了,估计仍然一致:样本按先验抽,权重补上证据的似然,乘积正比于联合分布。

图 4 似然加权(CS188 fa26 lec16 p17)

毛病还在。证据之前的那些变量抽样时看不到证据,仍然是盲抽;证据一多,权重被压得极小,有效样本数骤降。

3.4 Gibbs 采样

再往前一步:抽每个变量时,把其余变量都当成已知,包括证据。

做法是维护一个与证据相容的完整赋值,每次挑一个非证据变量,固定其他所有变量,按条件分布重抽它;转足够多轮之后,最终的赋值就是从后验分布里抽出的样本。这是马尔可夫链蒙特卡洛的一支,收敛性课上没证,只说了它在复杂图上往往是唯一还能用的办法。

图 5 Gibbs 采样(CS188 fa26 lec16 p24)

它的好处是每个变量都能看到证据,不像似然加权那样前半段盲抽;代价是样本之间相关,要跑够轮数。

单变量重抽并不贵。给定其余变量后,只有与该变量直接相连的那几张条件表还留在式子里,其余全部约掉:父节点、子节点、子节点的其他父节点,就是它的马尔可夫毯。

4 时间上的推断

前面的图节点数固定。很多应用不是这样:语音识别是一串帧,机器人定位是一串观测,节点随时间增长。

4.1 马尔可夫模型

把每个时刻的世界状态记作 XtX_tXt,相邻时刻连一条边。模型只需要两部分:初始分布 P(X1)P(X_1)P(X1),转移概率 P(Xt∣Xt−1)P(X_t\mid X_{t-1})P(Xt∣Xt−1)。

P(x1,...,xT)=P(x1)∏t=2TP(xt∣xt−1)(4)P(x_{1},\dots,x_{T})=P(x_{1})\prod_{t=2}^{T}P(x_{t}\mid x_{t-1})\tag{4}P(x1,...,xT)=P(x1)t=2∏TP(xt∣xt−1)(4)

通常再假设转移概率与具体时刻无关,同一张表用到底,这叫平稳假设。

图 6 马尔可夫模型(CS188 fa26 lec18 p4)

节点数随观测增长,图是可生长的,这是它与前面那些固定结构的图最直观的差别。链的结构本身极简,条件独立关系可以直接读出来。用上一讲的 d-分离看三个相邻节点:过去、现在、未来构成一条链,给定现在之后,过去与未来被切断。这条性质叫马尔可夫性,通俗的说法是「现在是过去的总结」:知道现在,就不必再追问过去。

只看状态不看观测时,一步推进写作

P(Xt)=∑xt−1P(Xt∣xt−1)P(xt−1)(5)P(X_{t})=\sum_{x_{t-1}}P(X_{t}\mid x_{t-1})P(x_{t-1})\tag{5}P(Xt)=xt−1∑P(Xt∣xt−1)P(xt−1)(5)

反复迭代就是所谓的 mini-forward。

天气是标准例子。今天晴,明天晴的概率 0.9、转雨 0.1;今天雨,明天晴 0.5、继续雨 0.5。若今天是晴天,问第 ttt 天的天气,就把这条链一步步推过去。

推得足够远会出现一个现象:不管从晴天还是雨天出发,分布都收敛到同一个值,晴天约 0.75、雨天约 0.25。这个极限叫平稳分布。令 t→∞t\to\inftyt→∞,式(5)变成不动点方程 P∞(X)=∑xP(X∣x)P∞(x)P_{\infty}(X)=\sum_{x}P(X\mid x)P_{\infty}(x)P∞(X)=∑xP(X∣x)P∞(x),解这个线性方程组即得 0.75 与 0.25,与初始分布无关。

搜索引擎早期用的 PageRank 就是这件事。把网页当节点、链接当转移:以很小的概率跳到随机页面,其余概率沿当前页的链接走。平稳分布给出每个页面被访问的时间占比,按它排序就是网页的重要性。链接多的页面占比高,个别页面的异常也不会让它剧变。

4.2 隐马尔可夫模型

马尔可夫模型要求状态可观测,这在多数场景里不成立。天气看不到,能看到的是有没有人带伞;机器人的位置不知道,知道的是激光测距。状态被藏起来,观测带噪声。

隐马尔可夫模型在马尔可夫链上加一层:每个时刻的状态 XtX_tXt 按发射概率 P(Et∣Xt)P(E_t\mid X_t)P(Et∣Xt) 产生一个观测 EtE_tEt,发射概率同样不随时刻变。

P(x1,...,xT,e1,...,eT)=P(x1)∏t=2TP(xt∣xt−1)∏t=1TP(et∣xt)(6)P(x_{1},\dots,x_{T},e_{1},\dots,e_{T})=P(x_{1})\prod_{t=2}^{T}P(x_{t}\mid x_{t-1})\prod_{t=1}^{T}P(e_{t}\mid x_{t})\tag{6}P(x1,...,xT,e1,...,eT)=P(x1)t=2∏TP(xt∣xt−1)t=1∏TP(et∣xt)(6)

参数只有三块:初始分布 ∣X∣|X|∣X∣ 个数,转移表 ∣X∣×∣X∣|X|\times|X|∣X∣×∣X∣,发射表 ∣X∣×∣E∣|X|\times|E|∣X∣×∣E∣。时间步再多,参数量也不增加,这是平稳假设带来的好处。

图 7 隐马尔可夫模型(CS188 fa26 lec18 p20)

两个场景可以对上号。机器人定位里,状态是地图上的格子,观测是四周的测距:上下左右各有没有墙。传感器不可靠,但可以假设它最多错一处;运动也不可靠,向前一步有小概率没执行。语音识别里,状态是正在说的词,观测是每一帧的声学特征,同一个词在不同帧上测出来也不一样。

它仍然是贝叶斯网络,两条独立性质由此读出。其一,未来只依赖现在,不依赖更早的过去,这是马尔可夫性。其二,当前观测在给定当前状态的条件下与其他一切独立:从 E3E_3E3 出发的路径只有两条,一条经 X3X_3X3 到 X2X_2X2,一条经 X3X_3X3 到 X4X_4X4,两段都因为 X3X_3X3 被观测而阻断。

第二条不意味着观测之间独立。观测若无损,观测与状态等价,相邻时刻的观测自然高度相关。

从结构上看,隐马尔可夫模型是一棵多树:去掉方向之后没有环。上一节说多树上可以做线性时间的精确推断,滤波正是这样的算法,下一节给出递推。

5 滤波与前向算法

时序模型上最常见的问题是滤波:给定截至当前的观测,求当前状态的后验,记作 bt=P(Xt∣e1:t)b_t=P(X_t\mid e_{1:t})bt=P(Xt∣e1:t)。btb_tbt 是一个向量,长度等于状态数。

基例用一次贝叶斯公式就够:b1(x)∝P(x1=x)P(e1∣x1)b_1(x)\propto P(x_1=x)P(e_1\mid x_1)b1(x)∝P(x1=x)P(e1∣x1),先验乘似然,归一化。

递推分两步。

第一步是时间推进,不看新观测,只按转移把上一刻的信念推过去。做法是先把 xtx_txt 加进来再求和:

bt+1′(x)=∑xtP(xt+1=x,xt∣e1:t)=∑xtP(xt+1=x∣xt,e1:t)bt(xt)=∑xtP(xt+1=x∣xt)bt(xt)(7)b_{t+1}'(x)=\sum_{x_{t}}P(x_{t+1}=x,x_{t}\mid e_{1:t})=\sum_{x_{t}}P(x_{t+1}=x\mid x_{t},e_{1:t})b_{t}(x_{t})=\sum_{x_{t}}P(x_{t+1}=x\mid x_{t})b_{t}(x_{t})\tag{7}bt+1′(x)=xt∑P(xt+1=x,xt∣e1:t)=xt∑P(xt+1=x∣xt,e1:t)bt(xt)=xt∑P(xt+1=x∣xt)bt(xt)(7)

三个等号各有依据:第一个是把 xtx_txt 的所有取值补齐,联合对 xtx_txt 求和得边缘;第二个是乘积规则,把联合拆成条件乘边缘;第三个用了马尔可夫性,给定 xtx_txt 之后,xt+1x_{t+1}xt+1 与更早的证据无关,条件里的 e1:te_{1:t}e1:t 可以划掉。这一步的结果记作 b′b'b′,读作「预测」。

第二步是观测更新,用新观测的似然给每个状态加权。同样从定义出发,用一次贝叶斯公式:

bt+1(x)=P(et+1∣x,e1:t)bt+1′(x)P(et+1∣e1:t)=P(et+1∣x)bt+1′(x)Z(8)b_{t+1}(x)=\frac{P(e_{t+1}\mid x,e_{1:t})b_{t+1}'(x)}{P(e_{t+1}\mid e_{1:t})}=\frac{P(e_{t+1}\mid x)b_{t+1}'(x)}{Z}\tag{8}bt+1(x)=P(et+1∣e1:t)P(et+1∣x,e1:t)bt+1′(x)=ZP(et+1∣x)bt+1′(x)(8)

分子上的第一个等号是乘积规则,分母是与 xxx 无关的归一化常数,记作 ZZZ;第二个等号又一次用了条件独立,当前观测只依赖当前状态。分母可以最后再算,先把分子算出来,除以它自己的和即可。

图 8 前向算法(CS188 fa26 lec18 p39)

两步合起来就是前向算法。它其实是变量消元在链上的特例,只是把中间结果留了下来:每一步只用上一刻的信念,不必回看历史。这也是它能在线跑的原因,来一条观测更新一次,内存只存一个分布。

连续状态、线性高斯的特殊情形有闭式解,就是卡尔曼滤波;一般情形只能靠离散化和上面的递推。

代价在两处。状态多时,一个分布本身存不下,比如百万级位置的栅格地图;式(7)要对所有状态两两求和,一步是 O(∣X∣2)O(|X|^{2})O(∣X∣2),状态数一万时就到了一亿次。时间上是线性的:走 TTT 步就是 TTT 次同样的更新,历史已经被 btb_tbt 吸收,不必回看。

6 粒子滤波

粒子滤波是前向算法的采样版本,思路与似然加权一脉相承:不存分布,存一批样本。

信念不再是向量,而是一组带权的粒子 (xi,wi)\left(x_i,w_i\right)(xi,wi),i=1,...,Ni=1,\dots,Ni=1,...,N,初始权重都取 1/N1/N1/N。每一步做三件事。

预测:每个粒子按转移分布抽一个新状态,xi′∼P(X′∣xi)x_i'\sim P(X'\mid x_i)xi′∼P(X′∣xi),权重不变。这一步相当于式(7),只是把求和换成抽样。

加权:用当前观测的似然乘上去,wi′∝wiP(e∣xi′)w_i'\propto w_i P(e\mid x_i')wi′∝wiP(e∣xi′),再归一化到和为 1。这一步对应式(8)。

重采样:按 wi′w_i'wi′ 有放回地抽 NNN 个粒子,权重一律归为 1/N1/N1/N。权重大的位置被抽中多次,权重小的自然消失。

三步走完,后验用粒子云逼近:

P(x∣e1:t)≈∑i=1Nwiδ(x−xi)(9)P(x\mid e_{1:t})\approx\sum_{i=1}^{N}w_i\delta(x-x_i)\tag{9}P(x∣e1:t)≈i=1∑Nwiδ(x−xi)(9)

图 9 粒子滤波的预测步(CS188 sp24 lec15 p41)

重采样是关键的一步近似。不可能的位置压根没有粒子,也就不花计算;一步的开销是 O(N)O(N)O(N),与状态数无关,这是它相对前向算法的全部优势。代价有两重:精度受粒子数限制,误差大致按 1/N1/\sqrt{N}1/N 下降;粒子被量化到有限个位置上,连续状态只能近似。

还有一种失效方式叫粒子退化:观测很尖锐时,少数粒子的权重会吃掉几乎全部质量,其余粒子形同废弃,有效样本数骤降。缓解办法是观测到来时多测一次权重、必要时提前重采样,或者换用更好的提议分布。

全局定位是它的经典用法。机器人不知道自己在哪,先在地图上均匀撒粒子;随着移动与激光观测,粒子逐步收敛到真实位置附近。环境里有对称的门或走廊时,粒子会在几处之间摇摆,走得更远才分得开。

这条线到这里走完:精确的变量消元,近似的四种采样,时序上的前向算法与粒子滤波。

文中截图取自 UC Berkeley CS188《Introduction to AI》的讲义,作者 Dan Klein 与 Pieter Abbeel,讲次与页码标在图注里。

相关推荐
GlobalInfo1 小时前
2026机器人关节谐波减速器研究报告:市场规模与十五五风向
大数据·人工智能·机器人
阿里云大数据AI技术1 小时前
云栖实录|DataWorks全新发布:Agentic AI时代企业级数据智能体平台
人工智能
沉下心来学鲁班1 小时前
具身智能实战:让机器鸭爬梯子——双策略交接与接触力控制的深度解读
开发语言·人工智能·python·机器人
oscar9991 小时前
EMIB 与桥接路线——在“不铺满硅”的前提下逼近 2.5D 的互连密度
人工智能·芯片·封装·emib
数字融合1 小时前
透明化数字孪生:以空间计算赋能全域智能决策
人工智能·数码相机·pygame
赛博守夜人1 小时前
AI安全攻防与治理之十:模型输出中的敏感信息从哪里来,记忆、检索、日志与上下文泄露的区别
人工智能·安全
fengyangaiGEO1 小时前
外贸B2B GEO优化:为何是平台成功的关键?
大数据·人工智能·python
poiu12346571 小时前
学生课程汇报PPT怎么准备?AI辅助工具使用观察
人工智能
解决问题no解决代码问题1 小时前
Java金融后端转LLM应用开发 Day9:AGI认知、负责任AI与全课程知识体系收官全指南
人工智能