隐马尔可夫模型(HMM):观测背后的状态解码艺术

发布于:2025-07-06 ⋅ 阅读:(18) ⋅ 点赞:(0)

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!

一、核心概念:双重随机过程

隐马尔可夫模型(Hidden Markov Model, HMM) 是一种通过可观测序列推断隐含状态序列的概率图模型,包含两个核心随机过程:

  1. 隐含状态链:不可观测的马尔可夫过程 $ {q_t} $
    P ( q t ∣ q t − 1 , q t − 2 , … , q 1 ) = P ( q t ∣ q t − 1 ) P(q_t | q_{t-1}, q_{t-2}, \dots, q_1) = P(q_t | q_{t-1}) P(qtqt1,qt2,,q1)=P(qtqt1)
  2. 观测输出链:每个状态生成的可见输出 $ {o_t} $
    P ( o t ∣ q t , q t − 1 , … , o t − 1 , …   ) = P ( o t ∣ q t ) P(o_t | q_t, q_{t-1}, \dots, o_{t-1}, \dots) = P(o_t | q_t) P(otqt,qt1,,ot1,)=P(otqt)

经典比喻

  • 隐含状态 = 天气(晴/雨)
  • 观测输出 = 路人携带的物品(伞/墨镜)
    通过物品序列推测天气变化

往期文章推荐:

二、HMM 的五元组参数

一个完整HMM由以下参数定义:
λ = ( S , V , A , B , π ) \lambda = (S, V, A, B, \pi) λ=(S,V,A,B,π)

符号 含义 数学描述 示例
S S S 隐含状态集合 { s 1 , s 2 , … , s N } \{s_1, s_2, \dots, s_N\} {s1,s2,,sN} { 晴 , 雨 } \{\text{晴}, \text{雨}\} {,}
V V V 观测符号集合 { v 1 , v 2 , … , v M } \{v_1, v_2, \dots, v_M\} {v1,v2,,vM} { 伞 , 墨镜 } \{\text{伞}, \text{墨镜}\} {,墨镜}
A A A 状态转移矩阵 a i j = P ( q t + 1 = s j ∣ q t = s i ) a_{ij} = P(q_{t+1}=s_j | q_t=s_i) aij=P(qt+1=sjqt=si) a 晴→雨 = 0.3 a_{\text{晴→雨}} = 0.3 a=0.3
B B B 观测概率矩阵 b j ( k ) = P ( o t = v k ∣ q t = s j ) b_j(k) = P(o_t=v_k | q_t=s_j) bj(k)=P(ot=vkqt=sj) b 雨 ( 伞 ) = 0.9 b_{\text{雨}}(\text{伞}) = 0.9 b()=0.9
π \pi π 初始状态分布 π i = P ( q 1 = s i ) \pi_i = P(q_1 = s_i) πi=P(q1=si) π 晴 = 0.6 \pi_{\text{晴}} = 0.6 π=0.6

三、HMM 的三大核心问题

1. 评估问题(Evaluation)
  • 目标:计算观测序列 $ O = (o_1, o_2, \dots, o_T) $ 的概率 $ P(O|\lambda) $
  • 算法:前向算法(动态规划避免指数爆炸)
    前向概率
    α t ( i ) = P ( o 1 , o 2 , … , o t , q t = s i ∣ λ ) \alpha_t(i) = P(o_1, o_2, \dots, o_t, q_t = s_i | \lambda) αt(i)=P(o1,o2,,ot,qt=siλ)
    递推公式
    α t + 1 ( j ) = [ ∑ i = 1 N α t ( i ) a i j ] b j ( o t + 1 ) \alpha_{t+1}(j) = \left[ \sum_{i=1}^N \alpha_t(i) a_{ij} \right] b_j(o_{t+1}) αt+1(j)=[i=1Nαt(i)aij]bj(ot+1)
    终止
    P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda) = \sum_{i=1}^N \alpha_T(i) P(Oλ)=i=1NαT(i)
2. 解码问题(Decoding)
  • 目标:寻找最可能的隐含状态序列 $ Q^* = \arg\max_Q P(Q|O,\lambda) $
  • 算法:维特比算法(动态规划最优路径)
    路径概率
    δ t ( i ) = max ⁡ q 1 , … , q t − 1 P ( q 1 , … , q t = s i , o 1 , … , o t ∣ λ ) \delta_t(i) = \max_{q_1,\dots,q_{t-1}} P(q_1,\dots,q_t=s_i, o_1,\dots,o_t|\lambda) δt(i)=q1,,qt1maxP(q1,,qt=si,o1,,otλ)
    递推公式
    δ t ( j ) = max ⁡ 1 ≤ i ≤ N [ δ t − 1 ( i ) a i j ] b j ( o t ) \delta_{t}(j) = \max_{1 \leq i \leq N} [\delta_{t-1}(i) a_{ij}] b_j(o_t) δt(j)=1iNmax[δt1(i)aij]bj(ot)
    回溯:记录每一步最优状态 $ \psi_t(j) $
3. 学习问题(Learning)
  • 目标:从观测序列 $ O $ 学习参数 $ \lambda = (A,B,\pi) $
  • 算法:Baum-Welch(EM算法特例)
    E步:计算后验概率
    ξ t ( i , j ) = P ( q t = s i , q t + 1 = s j ∣ O , λ ) \xi_t(i,j) = P(q_t=s_i, q_{t+1}=s_j | O, \lambda) ξt(i,j)=P(qt=si,qt+1=sjO,λ)
    M步:更新参数
    a ^ i j = ∑ t = 1 T − 1 ξ t ( i , j ) ∑ t = 1 T − 1 ∑ k = 1 N ξ t ( i , k ) \hat{a}_{ij} = \frac{\sum_{t=1}^{T-1} \xi_t(i,j)}{\sum_{t=1}^{T-1} \sum_{k=1}^N \xi_t(i,k)} a^ij=t=1T1k=1Nξt(i,k)t=1T1ξt(i,j)

四、HMM 的四大经典应用

1. 语音识别
  • 状态:音素(如 /a/, /b/)
  • 观测:声学特征(MFCC系数)
  • 解码:将声音信号转为文字序列
2. 生物序列分析
  • DNA序列标注
    • 状态:外显子/内含子/启动子
    • 观测:核苷酸(A/T/C/G)
      工具:GENSCAN
3. 自然语言处理
  • 词性标注
    • 状态:名词/动词/形容词
    • 观测:单词序列
      P ( 标签序列 ∣ 单词序列 ) ∝ P ( 标签 ) ∏ P ( 单词 ∣ 标签 ) P ( 标签 ∣ 前标签 ) P(\text{标签序列} | \text{单词序列}) \propto P(\text{标签}) \prod P(\text{单词}|\text{标签}) P(\text{标签}|\text{前标签}) P(标签序列单词序列)P(标签)P(单词标签)P(标签前标签)
4. 金融时间序列
  • 市场状态预测
    • 状态:牛市/熊市/震荡市
    • 观测:股价收益率序列

五、Python 实战:天气预测 HMM

import numpy as np
from hmmlearn import hmm

# 定义参数
states = ["晴", "雨"]; observations = ["伞", "墨镜"]
pi = np.array([0.6, 0.4])  # 初始分布
A = np.array([[0.7, 0.3],  # 转移矩阵
              [0.4, 0.6]])
B = np.array([[0.1, 0.9],  # 观测矩阵 (行:状态, 列:观测)
              [0.8, 0.2]])

# 创建模型
model = hmm.CategoricalHMM(n_components=2)
model.startprob_ = pi
model.transmat_ = A
model.emissionprob_ = B

# 问题1:评估观测序列概率
obs_seq = [0, 0, 1]  # [伞, 伞, 墨镜]
log_prob = model.score(np.array([obs_seq]).T)
print(f"P(观测序列) = {np.exp(log_prob):.4f}")  # 0.0612

# 问题2:解码最优状态序列
states_seq = model.predict(np.array([obs_seq]).T)
print("隐含状态:", [states[i] for i in states_seq])  # [雨, 雨, 晴]

# 问题3:学习参数 (Baum-Welch)
model.fit(np.random.randint(0,2,(100,1)))  # 随机观测序列训练
print("学习后的转移矩阵:\n", model.transmat_)

六、HMM 的局限性及扩展

局限性
  1. 马尔可夫假设过强:状态仅依赖前一时刻
  2. 观测独立性假设:当前观测仅依赖当前状态
  3. 离散观测限制:需离散化连续信号(高斯HMM可缓解)
扩展模型
模型 改进点 应用场景
高斯HMM 观测概率为高斯分布 连续信号处理
层次HMM 状态本身是HMM 复杂行为识别
输入输出HMM 加入外部控制信号 机器人控制
隐半马尔可夫模型 状态持续时间显式建模 基因结构分析

七、HMM 与相关模型对比

特征 HMM 马尔可夫随机场 循环神经网络
状态类型 离散隐状态 图节点状态 连续隐向量
序列依赖性 一阶马尔可夫 任意邻域依赖 长程依赖
训练方式 EM算法 最大似然/MCMC 梯度下降
可解释性 中等

结语:HMM 的时代意义

“HMM 是时间序列建模的瑞士军刀——在深度学习崛起前,它统治了语音识别、生物信息等领域数十年。其优雅的概率框架,仍是理解序列决策的黄金标准。”

尽管面临RNN/Transformer的竞争,HMM凭借可解释性小数据优势,仍在以下场景不可替代:

  • 资源受限的嵌入式设备(智能家居语音控制)
  • 需要状态可解释的领域(医疗诊断、金融监管)
  • 标注数据稀缺的场景(濒危语言保护)

掌握HMM,就是掌握了一把解码时间序列隐秘规律的钥匙

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!