Skip to content

第八章 隐马尔可夫模型

作者:Nikhil Sharma

编辑:Saathvik Selvan、Pranav Muralikrishnan、Wesley Zheng

部分内容改编自《人工智能:一种现代方法》(Artificial Intelligence: A Modern Approach)。

最后更新:2024 年 11 月

8.1 马尔可夫模型

前面讨论过贝叶斯网络:它是一种用紧凑方式表示随机变量关系的优秀结构。本章介绍一种内在相关的结构——马尔可夫模型。

在本课程中,可以把马尔可夫模型理解成链状、无限长度的贝叶斯网络。贯穿本节的例子是每天变化的天气模式。天气模型依赖时间:每一天的天气都有一个单独的随机变量。令 Wi 表示第 i 天的天气,则天气马尔可夫模型如下:

天气马尔可夫模型

图 1:天气马尔可夫模型。

马尔可夫模型中需要存储哪些信息?为了跟踪天气随时间的变化,需要知道时间 t=0 的初始分布,以及描述时间步之间如何从一个状态移动到另一个状态的转移模型。

初始分布由 P(W0) 的概率表给出;从时间 i 转移到时间 i+1 的转移模型由 P(Wi+1Wi) 给出。

这个转移模型意味着 Wi+1 只条件依赖于 Wi。换句话说,时间 t=i+1 的天气满足马尔可夫性质或无记忆性质,与 t=i 以外的其他时间的天气独立。

使用链式法则构造 W0,W1,W2 的联合分布,原本会得到

P(W0,W1,W2)=P(W0)P(W1W0)P(W2W1,W0)

但根据马尔可夫性质 W0W2W1,联合分布简化为

P(W0,W1,W2)=P(W0)P(W1W0)P(W2W1)

马尔可夫模型中的这些信息已经足以计算它。

更一般地,每个时间步都作出以下独立性假设:

Wi+1{W0,,Wi1}Wi

因此,可以用链式法则重建前 n+1 个变量的联合分布:

P(W0,W1,,Wn)=P(W0)P(W1W0)P(W2W1)P(WnWn1)=P(W0)i=0n1P(Wi+1Wi)

马尔可夫模型通常还作出一个假设:转移模型是平稳的。也就是对所有 i、所有时间步,P(Wi+1Wi) 都相同。因此,马尔可夫模型只需要两张表:P(W0)P(Wi+1Wi)

8.1.1 小型前向算法

现在已经知道如何计算马尔可夫模型跨时间步的联合分布,但这还不能直接回答“第 t 天的天气分布是什么”。当然,可以先计算联合分布,再对其他变量求和,但这通常非常低效:如果有 j 个变量,每个变量有 d 个可能值,联合分布大小就是 O(dj)

更高效的技术是小型前向算法(mini-forward algorithm)。

根据边缘化性质:

P(Wi+1)=wiP(wi,Wi+1)

利用链式法则,可以写成

P(Wi+1)=wiP(Wi+1wi)P(wi)

这条式子很直观:要计算时间步 i+1 的天气分布,就把时间步 i 的分布 P(Wi) 通过转移模型 P(Wi+1Wi) 向前推进一步。

因此,可以从初始分布 P(W0) 出发计算 P(W1),再用 P(W1) 计算 P(W2),如此反复计算任意时间步的天气分布。

考虑以下初始分布和转移模型:

W0P(W0)
sun0.8
rain0.2
Wi+1WiP(Wi+1Wi)
sunsun0.6
rainsun0.4
sunrain0.1
rainrain0.9

用小型前向算法计算 P(W1)

P(W1=sun)=w0P(W1=sunw0)P(w0)=P(W1=sunW0=sun)P(W0=sun)+P(W1=sunW0=rain)P(W0=rain)=0.60.8+0.10.2=0.5P(W1=rain)=w0P(W1=rainw0)P(w0)=0.40.8+0.90.2=0.5

所以

W1P(W1)
sun0.5
rain0.5

t=0 的 80% 晴天概率,到 t=1 降为 50%,是转移模型偏好转移到雨天的直接结果。

自然会产生一个后续问题:给定时间步的状态概率是否最终会收敛?下一节回答这个问题。

8.1.2 平稳分布

要解决上述问题,需要计算天气的平稳分布。顾名思义,平稳分布经过时间推移仍保持不变:

P(Wt+1)=P(Wt)

把这个等式与小型前向算法使用的公式结合,就能求出收敛后的状态概率:

P(Wt+1)=P(Wt)=wtP(Wt+1wt)P(wt)

在天气示例中,有两个方程:

P(Wt=sun)=P(Wt+1=sunWt=sun)P(Wt=sun)+P(Wt+1=sunWt=rain)P(Wt=rain)=0.6P(Wt=sun)+0.1P(Wt=rain),P(Wt=rain)=0.4P(Wt=sun)+0.9P(Wt=rain)

概率总和必须为 1:

P(Wt=sun)+P(Wt=rain)=1

x=P(Wt=sun)y=P(Wt=rain),得到方程组:

  1. x+y=1
  2. 0.6x+0.1y=x
  3. 0.4x+0.9y=y

y=1x 代入第二个方程,得到

0.6x+0.1(1x)=x

解得 x=1/5,再由第一个方程得 y=4/5。因此平稳分布为

WP(W)
sun0.2
rain0.8

这说明,当小型前向算法继续运行、时间趋于无穷时,下雨概率会收敛到 80%。这同样是转移模型偏好转移到雨天的结果。

8.2 隐马尔可夫模型

在马尔可夫模型中,可以通过初始分布 P(W0) 和转移模型计算第 10 天的 P(W10)。但在 t=0t=10 之间,可能会收到新的气象证据,改变对任意时间步天气分布的信念。

例如,天气预报说第 10 天下雨概率为 80%,但第 9 天晚上天空晴朗,那么这 80% 的概率可能会显著下降。这正是隐马尔可夫模型(Hidden Markov Model,HMM)解决的问题:允许在每个时间步观测证据,从而影响对各状态的信念分布。

天气模型的 HMM 可以用下面的贝叶斯网络表示:

天气隐马尔可夫模型

图 1:天气 HMM。

与普通马尔可夫模型不同,HMM 有两类节点:

  • Wi:状态变量,表示第 i 天的天气。
  • Fi:证据变量,表示第 i 天收到的天气预报。

由于 Wi 编码了第 i 天天气的概率分布,因此第 i 天的天气预报自然条件依赖于它。

HMM 具有与普通马尔可夫模型相似的条件独立关系,并为证据变量增加了以下关系:

F1W0W1

对于 i=2,,n

Wi{W0,,Wi2,F1,,Fi1}Wi1Fi{W0,,Wi1,F1,,Fi1}Wi

和马尔可夫模型一样,HMM 假设转移模型 P(Wi+1Wi) 平稳;此外,还假设传感器模型 P(FiWi) 平稳。因此,任意 HMM 都可以用三张表紧凑表示:初始分布、转移模型和传感器模型。

定义到时间 i 为止已经观测到 F1,,Fi 时的信念分布:

B(Wi)=P(Wif1,,fi)

定义只观测到 f1,,fi1 时的信念分布:

B(Wi)=P(Wif1,,fi1)

ei 表示时间步 i 观测到的证据。有时会把时间步 1it 的聚合证据写成

e1:t=e1,,et

在这种记号下,P(Wif1,,fi1) 可以写成 P(Wif1:(i1))。后面讨论如何把新证据逐步加入天气模型时会使用这个记号。

8.2.1 前向算法

利用前面给出的条件概率假设以及条件概率表的边缘化性质,可以推导 B(Wi)B(Wi+1) 的关系;它与小型前向算法的更新规则形式相同。

先边缘化:

B(Wi+1)=P(Wi+1f1,,fi)=wiP(Wi+1,wif1,,fi)

用链式法则展开:

B(Wi+1)=wiP(Wi+1wi,f1,,fi)P(wif1,,fi)

注意 P(wif1,,fi)=B(wi),并且

Wi+1{f1,,fi}Wi

因此

B(Wi+1)=wiP(Wi+1wi)B(wi)

接下来推导 B(Wi+1)B(Wi+1) 的关系。根据带额外条件的条件概率定义,

B(Wi+1)=P(Wi+1f1,,fi+1)=P(Wi+1,fi+1f1,,fi)P(fi+1f1,,fi)

条件概率中有一个常用技巧:延迟归一化,直到真正需要归一化概率时再做。上式分母对 B(Wi+1) 概率表中的每一项都相同,因此可以暂时不除以它,只记作

B(Wi+1)P(Wi+1,fi+1f1,,fi)

当需要恢复归一化的 B(Wi+1) 时,再把每一项除以这个比例常数。

利用链式法则:

B(Wi+1)P(fi+1Wi+1,f1,,fi)P(Wi+1f1,,fi)=P(fi+1Wi+1)B(Wi+1)

第一步等式使用 HMM 的条件独立性,第二项正是 B(Wi+1) 的定义。

把两条关系合起来,得到 HMM 的前向算法:

B(Wi+1)P(fi+1Wi+1)wiP(Wi+1wi)B(wi)

前向算法包含两个步骤:

  • 时间流逝更新: 根据 B(Wi) 计算 B(Wi+1)
  • 观测更新: 根据 B(Wi+1) 计算 B(Wi+1)

因此,要把信念分布向前推进一个时间步,必须先用时间流逝更新推进状态,再用观测更新加入该时间步的新证据。

考虑以下初始分布、转移模型和传感器模型:

W0B(W0)
sun0.8
rain0.2
Wi+1WiP(Wi+1Wi)
sunsun0.6
rainsun0.4
sunrain0.1
rainrain0.9
FiWiP(FiWi)
goodsun0.8
badsun0.2
goodrain0.3
badrain0.7

计算 B(W1) 时,先进行时间更新,得到 B(W1)

B(W1=sun)=0.60.8+0.10.2=0.5B(W1=rain)=0.40.8+0.90.2=0.5
W1B(W1)
sun0.5
rain0.5

假设第 1 天的天气预报是 good,即 F1=good,执行观测更新:

B(W1=sun)P(F1=goodW1=sun)B(W1=sun)=0.80.5=0.4B(W1=rain)P(F1=goodW1=rain)B(W1=rain)=0.30.5=0.15

最后归一化。B(W1) 表中的项总和为 0.4+0.15=0.55

B(W1=sun)=0.40.55=811B(W1=rain)=0.150.55=311

因此

W1B(W1)
sun8/11
rain3/11

观测天气预报的效果很明显:时间更新后晴天信念为 1/2,观测到“好天气”后增加到 8/11

最后,前面讨论的延迟归一化技巧可以显著简化 HMM 计算。如果从初始分布开始,想计算时间 t 的信念分布,可以使用前向算法依次计算 B(W1),,B(Wt),最后只归一化一次:用 B(Wt) 表中所有项的总和除每一项。

8.3 Viterbi 算法

前向算法使用递归求解给定已观测证据后系统状态的概率分布:P(XNe1:N)。关于 HMM 还有一个重要问题:给定目前观测到的证据,系统最可能经历了哪一串隐藏状态?也就是求

argmaxx1:NP(x1:Ne1:N)=argmaxx1:NP(x1:N,e1:N)

可以用动态规划的 Viterbi 算法求出这条轨迹。

算法分两次遍历:

  1. 第一次沿时间正向进行,计算给定当前证据时,到达每个“状态—时间”节点的最佳路径概率。
  2. 第二次沿时间反向进行:先找到位于最高概率路径上的终止状态,再沿着通向该状态的最佳路径向后追踪。

用状态格(state trellis)表示这个算法。状态格是随时间展开的状态和转移图:

状态格

图 1:状态格。

在有两个隐藏状态 sun、rain 的 HMM 中,我们希望从 X1XN 找到概率最高的路径,也就是为每个时间步赋一个状态。

Xt1Xt 的边权为

P(XtXt1)P(EtXt)

一条路径的概率等于其所有边权的乘积。第一项表示特定转移的可能性,第二项表示观测证据与结果状态的匹配程度。

回忆

P(X1:N,e1:N)=P(X1)P(e1X1)t=2NP(XtXt1)P(etXt)

前向算法计算的是(忽略归一化常数)

P(XN,e1:N)=x1,,xN1P(XN,x1:N1,e1:N)

Viterbi 算法则要计算

argmaxx1,,xNP(x1:N,e1:N)

乘积中的每一项正好是状态格中相邻两层之间的边权,因此路径上的边权乘积就是给定证据时这条路径的概率。

可以构造所有可能隐藏状态的联合概率表,但它的空间成本是指数级的。即使有这张表,也可以用动态规划在多项式时间内求最佳路径;然而,既然动态规划本身能求最佳路径,就不必在任一时刻保存完整表。

定义

mt[xt]=maxx1:t1P(x1:t,e1:t)

表示在时间 t 到达 xt 的路径中,看到截至当前的证据后,路径概率的最大值。它也是状态格从第 1 步到第 t 步的最大权重路径。

展开这个定义:

mt[xt]=maxx1:t1P(etxt)P(xtxt1)P(x1:t1,e1:t1)=P(etxt)maxxt1P(xtxt1)maxx1:t2P(x1:t1,e1:t1)=P(etxt)maxxt1P(xtxt1)mt1[xt1]

因此可以用动态规划递归计算所有 tmt。这样可以确定最高概率路径的最后状态 xN,但还需要回溯信息重建完整路径。

定义

at[xt]=argmaxxt1P(xtxt1)mt1[xt1]

记录到达 xt 的最佳路径中最后一条转移。完成正向遍历后,数组 a 为每个终止状态定义了一条最可能序列;比较这些序列的概率,选择最佳的一条,再在反向遍历中重建它。

这样,我们就能在多项式时间和空间内,为当前证据计算最可能的解释。

8.4 粒子滤波

回顾贝叶斯网络:精确推断计算量过大时,可以使用采样技术近似目标概率分布。HMM 也有同样的问题:前向算法的运行时间随随机变量域中可能值的数量增长。

天气模型中 Wi{sun,rain},只有两个状态,精确推断还可以接受。但如果要推断某一天的实际温度,精确到 0.1 度,那么可能状态数量就会非常大。

HMM 中对应贝叶斯网络采样的方法叫粒子滤波(particle filtering)。它模拟一组粒子在状态图中的移动,以近似目标随机变量的概率或信念分布。

它回答的问题与前向算法相同:给定证据,近似计算

P(XNe1:N)

粒子滤波不保存从每个状态到信念概率的完整表,而是保存 n 个粒子组成的列表,每个粒子处于时间相关随机变量的 d 个可能状态之一。

通常 nd,但 n 仍然足够大,能产生有意义的近似;否则粒子滤波的性能优势会消失。粒子只是算法中样本的名称。

某个时间步某个状态的粒子信念,完全取决于模拟中该时间步处于该状态的粒子数量。

例如,想模拟某天的温度 Ti,假设温度只能取区间 [10,20] 内的整数,共 d=11 个状态。再假设有 n=10 个粒子,在时间步 i 的取值为

[15,12,12,10,18,14,12,11,11,10]

统计列表中各温度出现的次数,并除以粒子总数,就得到温度的经验分布:

Ti1011121314151617181920
B(Ti)0.20.20.300.10.1000.100

现在只剩下一个问题:如何生成指定时间步的粒子列表。

8.4.1 粒子滤波模拟

粒子滤波模拟从粒子初始化开始。初始化方式很灵活:可以随机采样、均匀采样,或从某个初始分布采样。得到初始粒子列表后,模拟过程与前向算法类似:每个时间步先执行时间流逝更新,再执行观测更新。

时间流逝更新

根据转移模型更新每个粒子的值。若粒子当前处于状态 ti,就从 P(Ti+1ti) 给出的概率分布中采样新的值。

这与贝叶斯网络中的先验采样相似,因为任意状态中粒子的频率反映了转移概率。

观测更新

使用传感器模型 P(FiTi),根据观测证据和粒子状态给每个粒子加权。若粒子处于 ti,传感器读数为 fi,则权重为

P(fiti)

观测更新算法如下:

  1. 按照上面的规则计算所有粒子的权重。
  2. 计算每个状态的总权重。
  3. 如果所有状态的权重总和为 0,则重新初始化全部粒子。
  4. 否则,归一化各状态总权重的分布,并从这个分布重新采样粒子列表。

观测更新与似然加权很相似:都根据证据降低样本权重。

下面继续用温度作为随时间变化的随机变量。定义天气场景中的转移模型:对于某个温度状态,粒子可以留在原状态,也可以在区间 [10,20] 内转移到相差 1 度的状态。

在所有可能后继状态中,最接近 15 度的状态获得 80% 的转移概率,其余后继状态均分剩下的 20%。初始粒子列表为

[15,12,12,10,18,14,12,11,11,10]

对列表中的第一个粒子执行时间流逝更新。它处于 Ti=15,对应转移模型为

Ti+1141516
P(Ti+1Ti=15)0.10.80.1

实践中,为 Ti+1 的每个取值分配一个不重叠的区间,使这些区间共同覆盖 [0,1)

  1. Ti+1=140r<0.1
  2. Ti+1=150.1r<0.9
  3. Ti+1=160.9r<1

要重新采样处于 Ti=15 的粒子,只需生成一个 [0,1) 中的随机数,查看它落在哪个区间。例如 r=0.467 时,因为 0.1r<0.9,粒子仍处于 Ti+1=15

对于 10 个粒子使用以下随机数:

[0.467,0.452,0.583,0.604,0.748,0.932,0.609,0.372,0.402,0.026]

完整执行时间流逝更新后,新的粒子列表为

[15,13,13,11,17,15,13,12,12,10]

更新后的信念分布为

Ti+11011121314151617181920
B(Ti+1)0.10.10.20.300.200.1000

与初始分布相比,粒子整体趋向温度 T=15

现在执行观测更新。假设传感器模型 P(FiTi) 表示正确预测 fi=ti 的概率为 80%,预测其他 10 个状态中的任意一个的概率均为 2%。假设观测到 Fi+1=13,时间流逝更新后的 10 个粒子及其权重为:

粒子p1p2p3p4p5p6p7p8p9p10
状态15131311171513121210
权重0.020.80.80.020.020.020.80.020.020.02

按状态聚合权重:

状态101112131517
权重0.020.020.042.40.040.02

权重总和为 2.54。用这个总和除每个权重,得到归一化分布:

状态101112131517
权重0.020.020.042.40.040.02
归一化权重0.00790.00790.01570.94490.01570.0079

最后,使用时间流逝更新相同的重采样方法,从该概率分布重新采样。假设生成以下 10 个 [0,1) 中的随机数:

[0.315,0.829,0.304,0.368,0.459,0.891,0.282,0.980,0.898,0.341]

得到新的粒子列表:

[13,13,13,13,13,13,13,15,13,13]

相应的最终信念分布为

Ti+11011121314151617181920
B(Ti+1)0000.900.100000

传感器模型表示天气预报有 80% 的准确率,新的粒子列表也符合这个事实:大多数粒子都被重采样为 Ti+1=13

8.5 本章小结

马尔可夫模型可以看成链状、无限长度的贝叶斯网络。它满足马尔可夫性质:所建模变量的分布只取决于上一时间步该变量的值。

可以使用小型前向算法计算任意时间步的分布;当时间趋于无穷时,该分布最终会收敛到平稳分布。

本章还介绍了两种模型:

  • 马尔可夫模型: 表示具有马尔可夫性质的时间相关随机变量。可以使用概率推断和小型前向算法,计算任意时间步的信念分布。
  • 隐马尔可夫模型: 在马尔可夫模型基础上,允许每个时间步观测会影响信念分布的新证据。可以使用前向算法计算任意时间步的信念分布。

如果对这些模型执行精确推断的计算成本太高,可以使用粒子滤波进行近似推断。

Licensed under CC BY-NC-SA 4.0.