Skip to content

HMM 隐马尔可夫模型 (Hidden Markov Model)

核心思想

HMM 是一种描述由隐状态序列生成观测序列的概率图模型。隐状态之间通过马尔可夫链连接,观测值由当前隐状态生成。

模型定义

HMM 由五元组 λ=(S,O,A,B,π) 定义:

符号含义
S={s1,,sN}N 个隐状态集合
O={o1,,oM}M 个观测符号集合
A=[aij]N×N状态转移概率矩阵
B=[bj(k)]N×M发射概率矩阵
π=[πi]N初始状态概率

两个基本假设

  1. 一阶马尔可夫假设P(qtqt1,qt2,)=P(qtqt1)
  2. 观测独立假设P(otq1,,qT,o1,,oT)=P(otqt)

三大基本问题

问题一:评估 (Evaluation)

给定模型 λ 和观测序列 O=(o1,,oT),计算 P(Oλ)

前向算法

定义前向变量:

αt(i)=P(o1,o2,,ot,qt=siλ)

初始化

α1(i)=πibi(o1),i=1,,N

递推

αt+1(j)=[i=1Nαt(i)aij]bj(ot+1)

终止

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

时间复杂度从暴力的 O(NT) 降至 O(N2T)

问题二:解码 (Decoding)

给定模型和观测,找最可能的隐状态序列 Q=argmaxQP(QO,λ)

Viterbi 算法

定义:

δt(i)=maxq1,,qt1P(q1,,qt=si,o1,,otλ)

初始化

δ1(i)=πibi(o1),ψ1(i)=0

递推

δt(j)=max1iN[δt1(i)aij]bj(ot)ψt(j)=argmax1iN[δt1(i)aij]

终止

P=max1iNδT(i),qT=argmaxiδT(i)

回溯

qt=ψt+1(qt+1),t=T1,,1

问题三:学习 (Learning)

给定观测序列,估计模型参数 λ。使用 Baum-Welch 算法(EM 算法的特殊形式)。

后向变量

βt(i)=P(ot+1,,oTqt=si,λ)

E 步

ξt(i,j)=αt(i)aijbj(ot+1)βt+1(j)P(Oλ)γt(i)=j=1Nξt(i,j)

M 步

π^i=γ1(i)a^ij=t=1T1ξt(i,j)t=1T1γt(i)b^j(k)=t=1Tγt(j)1(ot=k)t=1Tγt(j)

代码对应

bash
python -m pipelines.probabilistic.hmm