Skip to content

ml11 隐马尔可夫模型 (HMM)

当观测背后隐藏着不可见的状态序列,如何从可见的"果"推断出隐藏的"因"?HMM 是时序概率建模的经典框架,三大问题贯穿始终:评估、解码、学习。


一、马尔可夫链基础

1.1 马尔可夫性质

一个随机过程 {St}t=1T 满足马尔可夫性质(一阶),如果:

P(St+1|St,St1,,S1)=P(St+1|St)

即:给定现在,未来与过去条件独立。当前状态 St 已经包含了预测未来的全部信息。

直觉:棋类游戏是马尔可夫性的完美体现——你只需要知道当前棋盘的状态,不需要记住之前 50 步的走法历史,就能决定下一步最优策略。

1.2 转移矩阵与平稳分布

马尔可夫链由状态空间 {1,2,,N}转移矩阵 A 定义:

Aij=P(St+1=j|St=i)

转移矩阵满足行和为 1(每一行是一个概率分布):jAij=1

平稳分布(Stationary Distribution) π 满足:

π=πA,iπi=1,πi0

直观理解:如果当前状态服从 π,那么无论经过多少步转移,状态分布仍然是 π——就像一个"平衡点"。

1.3 细致平衡(Detailed Balance)

一个更强的条件是细致平衡

πiAij=πjAjii,j

细致平衡意味着:从状态 ij 的质量流等于从 ji 的质量流。细致平衡是平稳分布存在的充分条件(MCMC 的设计正是利用了这一点)。


二、隐马尔可夫模型结构

2.1 模型定义

HMM 是一个双重随机过程

  • 隐藏层:一个不可观测的一阶马尔可夫链 {Zt}(状态序列),Zt{1,,N}
  • 观测层:在每个时刻 t,隐藏状态 Zt 生成一个观测 Xt

HMM 由三个参数完全确定:

参数符号含义
初始状态分布π=(πi)πi=P(Z1=i),链的起始状态分布
状态转移矩阵A=(aij)aij=P(Zt+1=jZt=i)
发射概率B=(bi(o))bi(o)=P(Xt=oZt=i)

记完整的 HMM 为 λ=(A,B,π)

HMM 的图形化表示(格子图/trellis diagram):上方一行圆圈表示隐藏状态序列 Z₁→Z₂→Z₃→…→Z_T,箭头表示转移 a_ij;下方一行方块表示观测序列 X₁, X₂, …, X_T,从每个 Z_t 向下指向 X_t 的箭头标注 b_i(o)。初始分布 π 从左侧箭头指向 Z₁

2.2 HMM 的三个基本问题

HMM 理论框架的三个核心问题(Rabiner, 1989):

问题输入输出算法
评估(Evaluation)观测序列 X + 模型 λP(Xλ)前向算法(Forward Algorithm)
解码(Decoding)观测序列 X + 模型 λ最可能的状态序列 Z维特比算法(Viterbi Algorithm)
学习(Learning)观测序列 X(+ 初始模型)最优参数 λBaum-Welch 算法(EM for HMM)

三、前向算法(Forward Algorithm)——评估问题

3.1 问题

给定观测序列 X=(x1,,xT) 和模型 λ,计算 P(Xλ)

3.2 朴素方法的指数爆炸

朴素计算需要枚举所有可能的状态序列:

P(Xλ)=ZP(X,Zλ)=z1,,zTπz1bz1(x1)t=2Tazt1ztbzt(xt)

状态序列有 NT 种可能——N=5,T=100 时就是 51007.9×1069,完全不可行。

3.3 前向算法的动态规划

前向算法利用 HMM 的马尔可夫结构,通过动态规划将复杂度降为 O(N2T)

定义前向概率 αt(i)

αt(i)=P(x1,x2,,xt,Zt=iλ)

即在时刻 t 处于状态 i 且观测到序列 x1:t 的联合概率。

递推公式

初始化(t=1):

α1(i)=πibi(x1)

递推(t=2,,T):

αt(j)=[i=1Nαt1(i)aij]bj(xt)

终止:

P(Xλ)=i=1NαT(i)

前向算法递推图示:格子图(trellis)显示 t-1 时刻所有状态 i 以权重 α_{t-1}(i) 指向 t 时刻状态 j,每条边标注转移概率 a_{ij},t 时刻节点 j 标注 α_t(j) = [Σ_i α_{t-1}(i)·a_{ij}] · b_j(x_t)

3.4 前向-后向算法

后向概率 βt(i) 对称地定义:

βt(i)=P(xt+1,,xTZt=i,λ)

即在时刻 t 处于状态 i 的条件下,观测到未来序列 xt+1:T 的概率。

递推(从后往前,t=T1,,1):

βt(i)=j=1Naijbj(xt+1)βt+1(j)

初始:βT(i)=1(没有未来观测时概率为 1)

前向-后向算法联合使用时可以计算"在时刻 t 处于状态 i"的后验概率(这是 Baum-Welch 学习算法的基础):

γt(i)=P(Zt=iX,λ)=αt(i)βt(i)j=1Nαt(j)βt(j)

四、维特比算法(Viterbi Algorithm)——解码问题

4.1 问题

找到最有可能生成观测序列 X 的隐藏状态序列:

Z=argmaxZP(ZX,λ)=argmaxZP(X,Zλ)

4.2 Viterbi 算法

与前向算法结构相似,但用最大化替换了求和

定义 δt(i) 为"到时刻 t 为止,以状态 i 结尾的最优路径的概率":

δt(i)=maxz1,,zt1P(x1,,xt,z1,,zt1,Zt=iλ)

递推

初始化:

δ1(i)=πibi(x1)

递推(t=2,,T):

δt(j)=maxi=1N[δt1(i)aij]bj(xt)

同时记录"回溯指针"(backpointer):

ψt(j)=argmaxi[δt1(i)aij]

终止:最优路径概率为 maxiδT(i),从对应状态出发通过 ψt 回溯得到完整最优路径。

前向 vs Viterbi 对比:前向算法用 sumi,边际化所有可能的过去路径),Viterbi 用 maxmaxi,只保留一条最优路径)。两者的递推结构完全相同,只是操作符从 sum 变为 max。

Viterbi 算法格子图:展示 δ_t(j) 的递推——t-1 时刻两个状态(红色标注 δ_{t-1}(1) 和 δ_{t-1}(2)),分别以概率 a_{1j} 和 a_{2j} 指向 t 时刻状态 j,加粗的箭头标注取 max 操作。底部展示完整回溯路径(红色加粗线条从右到左逆序连接)


五、Baum-Welch 算法——学习问题

5.1 EM 框架

Baum-Welch 算法是 EM 算法在 HMM 中的特例。隐变量是状态序列 Z,观测是 X

5.2 E 步:计算期望充分统计量

用当前参数 λold 计算两个关键量:

状态占用概率 γt(i)(前向-后向联合):

γt(i)=αt(i)βt(i)jαt(j)βt(j)

状态转移概率 ξt(i,j)

ξt(i,j)=P(Zt=i,Zt+1=jX,λ)=αt(i)aijbj(xt+1)βt+1(j)p,qαt(p)apqbq(xt+1)βt+1(q)

5.3 M 步:更新参数

πinew=γ1(i)aijnew=t=1T1ξt(i,j)t=1T1γt(i)

对于离散观测:

bi(vk)new=t=1Tγt(i)I[xt=vk]t=1Tγt(i)

直觉:γt(i) 是"软计数"——不是简单地统计"状态 i 出现了几次",而是每个时刻以一定概率 γt(i) 算作"部分出现"。这比硬分配更加精细。


六、HMM 在词性标注(POS Tagging)中的应用

6.1 POS Tagging 作为 HMM

词性标注(Part-of-Speech Tagging)是 HMM 的经典应用:

  • 隐藏状态:词性标签(名词、动词、形容词...)
  • 观测:具体的词汇
  • 转移概率 aij:一个词性后面跟另一个词性的概率(如 "形容词 → 名词" 比 "形容词 → 形容词" 更常见)
  • 发射概率 bi(w):给定词性 i,产生词 w 的概率(如 "run" 作为动词比作为名词更常见)

6.2 Viterbi 解码 POS

给定一个句子(观测序列),Viterbi 算法可以找到最可能的词性标注:

Obs:    The    cat    sat    on    the    mat
        ↓      ↓      ↓      ↓      ↓      ↓
State:  DET   NOUN   VERB   PREP  DET    NOUN

模型参数 AB 可以通过标注语料库学习(Baum-Welch),也可以直接从标注数据中估计(最大似然)。


七、HMM 的实用考量

7.1 数值下溢

前向/后向算法中涉及大量概率连乘(每个 0<a<1),当 T 很大时概率值会下溢到 0。解决方案:使用 log 空间缩放(scaling)

缩放版本的前向算法:

α~t(j)=αt(j)iαt(i)=(iα~t1(i)aij)bj(xt)ct

其中 ct=iαt(i) 是归一化常数。最终 logP(Xλ)=t=1Tlogct

7.2 状态数量选择

HMM 的状态数 N 是超参数,通常通过以下方式选择:

  • 领域知识:如 POS tagging 中词性标签的数量是已知的
  • 交叉验证:在留出集上评估困惑度(perplexity)
  • 信息准则:如 BIC(贝叶斯信息准则)

7.3 HMM 的局限性

局限说明
一阶马尔可夫假设当前状态只依赖前一个状态,可能不足以捕捉长期依赖
观测条件独立Xt 只依赖 Zt,与 Xt1 独立(在 NLP 中句子上下文很重要)
离散状态标准 HMM 的状态是离散的,连续状态需用卡尔曼滤波
指数长度分布HMM 隐含的状态持续时间的分布是几何分布,可能不符合实际

本章总结

概念一句话
马尔可夫性质P(St+1|St,)=P(St+1|St)——未来仅依赖现在
HMM 三元组(A,B,π):转移 + 发射 + 初始分布
前向算法αt(j)=[iαt1(i)aij]bj(xt),动态规划 O(N2T)
后向算法βt(i)=jaijbj(xt+1)βt+1(j)
Viterbi 算法用 max 替换 sum 的前向算法 + 回溯指针
Baum-WelchEM for HMM:E 步计算 γt(i)ξt(i,j),M 步更新参数
数值下溢用缩放或 log 空间防止概率连乘的下溢
POS TaggingHMM 经典应用:隐藏状态 = 词性,观测 = 词汇
格子图(Trellis)HMM 的"展开图",展示所有可能状态路径的时间网格

📥 Code

FileViewDownload
demo.pyOpenDownload
exercise.pyOpenDownload

参考

  1. Rabiner, L. R. (1989). A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition. Proceedings of the IEEE, 77(2), 257-286. [doi:10.1109/5.18626]
  2. Baum, L. E., Petrie, T., Soules, G., & Weiss, N. (1970). A Maximization Technique Occurring in the Statistical Analysis of Probabilistic Functions of Markov Chains. The Annals of Mathematical Statistics, 41(1), 164-171. [doi:10.1214/aoms/1177697196]
  3. Viterbi, A. J. (1967). Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm. IEEE Transactions on Information Theory, 13(2), 260-269. [doi:10.1109/TIT.1967.1054010]
  4. Jurafsky, D. & Martin, J. H. (2024). Speech and Language Processing (3rd ed.). Chapter 8: Sequence Labeling for Parts of Speech and Named Entities. [web]
  5. Dempster, A. P., Laird, N. M., & Rubin, D. B. (1977). Maximum Likelihood from Incomplete Data via the EM Algorithm. Journal of the Royal Statistical Society: Series B, 39(1), 1-38. [doi:10.1111/j.2517-6161.1977.tb01600.x]