9 隐 Markov 模型

1 基本概念

1.1 定义

隐 Markov 模型 (Hidden Markov Model, HMM)

这是一个关于时间序列的概率模型, 描述由一个隐藏的 Markov 链随机生成不可观测的状态随机序列, 再由各个状态生成一个观测从而产生观测随机序列的过程. 隐藏 Markov 链随机生成了状态序列; 每个状态产生的一个观测生成的随机序列为观测序列.

因此隐 Markov 模型由 λ=(A,B,π) 决定, 其中 π,A 决定状态序列, B 决定观测序列.

隐 Markov 模型的两个基本假设:

  1. 齐次 Markov 性假设: P(it|it1,ot1,,i1,o1)=P(it|it1),t.
  2. 观测独立性假设: P(ot|i1tT,ott)=P(ot|it).

1.2 观测序列的生成过程

观测序列的生成

输入 隐 Markov 模型 λ=(A,B,π), 观测序列长度 T
输出 观测序列 O=(o1,,oT)

  1. π 分布生成 i1, t=1.
  2. it 的观测概率分布 bit(k) 生成 ot.
  3. it 的状态转移概率分布 {aitit+1} 生成 it+1.
  4. t=t+1; 若 t<T, 转到 2; 否则终止.

1.3 个基本问题

2 概率计算算法

2.1 直接计算

直接计算各个概率: 对 I=(i1,,iT), O=(o1,,oT), P(I|λ)=πi1ai1i2aiT1iT, P(O|I,λ)=bi1(o1)biT(oT), 从而 P(O,I|λ)=P(O|I,λ)P(I|λ), 最后对 I 求和: P(O|λ)=IP(O|I,λ)P(I|λ)=i1,,iTπi1j=1T1bij(oj)aijij+1biT(oT). 这个公式是 O(TNT) 阶的, 计算量过大.

2.2 前向算法

前向概率

给定模型 λ, 定义前向概率 (2.1)αt(i)=P(o1,,ot,it=qi|λ). (也即给定模型下, t 时刻的观测序列和状态的概率)

观测序列概率的前向算法

输入 λ,O
输出 P(O|λ)

  1. 初值 α1(i)=πibi(o1),1iN.
  2. 递推: αt+1(i)=[j=1Nαt(j)aji]bi(ot+1),1iN.
  3. 终止: P(O|λ)=i=1NαT(i).

关于第二步, 根据定义 j=1Nαt(j)aij=P(o1,,ot,it+1=qi|λ), 然后再乘上 bi(ot+1) 就是 αt+1(i). 第三步由定义容易得到.
Pasted image 20250604220520.png|250

在每个时刻 t=1,,T1, 都计算 αt+1(i)N 个值, 可以直接利用之前的 αt(j), 避免重复计算, 这样计算量从 O(TNT) 下降到了 O(N2T).

2.3 后向算法

后向概率

定义 (2.2)βt(i)=P(ot+1,,oT|it=qi,λ).

观测序列概率的后向算法

输入 λ,O
输出 P(O|λ)

  1. βT(i)=1
  2. t=T1,,1: βt(i)=j=1Naijbj(ot+1)βt+1(j),1iN.
  3. P(O|λ)=i=1Nπibi(o1)β1(i).

Pasted image 20250604222653.png|250
根据前向和后向概率, 可以统一 P(O|λ)=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j),1tT1.

2.4 一些概率与期望的计算

  1. γt(i)=P(it=qi|O,λ). 事实上 γt(i)=P(it=qi,O|λ)P(O|λ)=αt(i)βt(i)P(O|λ)=αt(i)βt(i)j=1Nαt(j)βt(j).

  2. ξt(i,j)=P(it=qi,it+1=qj,O|λ)P(O|λ), 则 ξt(i,j)=αt(i)aijbj(ot+1)βt+1(j)i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j).

  3. 基于 γt(i),ξt(i,j) 得到的期望值:

    1. Oi 出现的期望: t=1Tγt(i).
    2. Oi 转移的期望: t=1T1γt(i).
    3. Oi 转移到 j 的期望: t=1T1ξt(i,j).

3 学习算法

3.1 监督学习算法

假设知道 S 个长度相同的序列: {(O1,I1),,(OS,IS)}. 可以用极大似然估计来估计模型的参数.

  1. 转移概率 aij:
    假设 t 下状态为 i, t+1 下状态为 j 的频数为 Aij, 则 a^ij=Aijj=1NAij,1i,jN.
  2. 观测概率 bj(k):
    设状态为 j 且观测为 k 的频数为 Bjk, 则 b^j(k)=Bjkk=1MBjk,1jN,1kM.
  3. π^i: 初始状态下 qi 的频率.

3.2 Baum-Welch 算法

人工标注数据的代价很高, 因此采用无监督学习的算法.
现在只给定 {O1,,OS}. 将观测序列看作 O, 状态序列看作不可观测的 I, 则隐 Markov 模型为 P(O|λ)=IP(O|I,λ)P(I|λ). 可以用 EM算法 实现.

  1. E 步: 计算 Q(λ,λ): Q(λ,λ)=IlogP(O,I|λ)P(O,I|λ). 带入 P(O,I|λ)=πi1bi1(o1)ai1i2bi2(o2)aiT1iTbiT(oT),Q(λ,λ)=Ilogπi1P(O,I|λ)+I(t=1T1logaitit+1)P(O,I|λ)+I(t=1Tlogbit(ot))P(O,I|λ).
  2. M 步: 极大化 Q(λ,λ), 求参数 A,B,π. 注意到 π,A,B 分别出现在上面的三项中, 因此可以分别极大化. 对第一项, 结合 i=1Nπi=1, 写出 Lagrange 函数 i=1NlogπiP(O,i1=i|λ)+γ(i=1Nπi1).πi 求偏导让结果为 0, 得 πi=P(O,i1=i|λ)P(O|λ).
    类似地, 第二项可以写为 i=1Nj=1Nt=1T1logaijP(O,it=i,it+1=j|λ). 结合约束条件 j=1Naij=1, 类似得 aij=t=1T1P(O,it=i,it+1=j|λ)t=1T1P(O,it=i|λ).
    最后对第三项 j=1Nt=1Tlogbj(ot)P(O,it=j|λ), 结合 k=1Mbj(k)=1, 注意要添加限定条件 ot=vk, 则 bj(k)=t=1TP(O,it=j|λ)1{ot=vk}t=1TP(O,it=j|λ).
    结合 gammaxi, 有 (3.1)aij=t=1T1ξt(i,j)t=1T1γt(i),bj(k)=t=1,ot=vkTγt(j)t=1Tγt(j),πi=γ1(i).
Baum-Welch 算法

输入 O=(o1,,oT)
输出 λ=(π,A,B)

  1. 初始化: n=0, 选取 aij(0),bj(k)(0),πi(0), 得到模型 λ(0)=(A(0),B(0),π(0)).
  2. 递推: 见 (3.1).
  3. 终止: λ(n+1)=(A(n+1),B(n+1),π(n+1)).

预测算法


  1. 注意这里同时出现了两个 i 一个是下标一个是状态序列 ↩︎