本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!
一、核心概念:双重随机过程
隐马尔可夫模型(Hidden Markov Model, HMM) 是一种通过可观测序列推断隐含状态序列的概率图模型,包含两个核心随机过程:
- 隐含状态链:不可观测的马尔可夫过程 $ {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(qt∣qt−1,qt−2,…,q1)=P(qt∣qt−1) - 观测输出链:每个状态生成的可见输出 $ {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(ot∣qt,qt−1,…,ot−1,…)=P(ot∣qt)
经典比喻:
- 隐含状态 = 天气(晴/雨)
- 观测输出 = 路人携带的物品(伞/墨镜)
通过物品序列推测天气变化
往期文章推荐:
- 20.条件概率:不确定性决策的基石
- 19.深度解读概率与证据权重 -Probability and the Weighing of Evidence
- 18.WOE值:风险建模中的“证据权重”量化术——从似然比理论到FICO评分卡实践
- 17.KS值:风控模型的“风险照妖镜”
- 16.如何量化违约风险?信用评分卡的开发全流程拆解
- 15.CatBoost:征服类别型特征的梯度提升王者
- 14.XGBoost:梯度提升的终极进化——统治Kaggle的算法之王
- 13.LightGBM:极速梯度提升机——结构化数据建模的终极武器
- 12.PAC 学习框架:机器学习的可靠性工程
- 11.Boosting:从理论到实践——集成学习中的偏差征服者
- 10.GBDT:梯度提升决策树——集成学习中的预测利器
- 9.集成学习基础:Bagging 原理与应用
- 8.随机森林详解:原理、优势与应用实践
- 7.经济学神图:洛伦兹曲线
- 6.双生“基尼”:跨越世纪的术语撞车与学科分野
- 5.CART算法全解析:分类回归双修的决策树之王
- 4.C4.5算法深度解析:决策树进化的里程碑
- 3.决策树:化繁为简的智能决策利器
- 2.深入解析ID3算法:信息熵驱动的决策树构建基石
- 1.类图:软件世界的“建筑蓝图”
二、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=sj∣qt=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=vk∣qt=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=1∑Nα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=1∑Nα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,…,qt−1maxP(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)=1≤i≤Nmax[δt−1(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=sj∣O,λ)
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=1T−1∑k=1Nξt(i,k)∑t=1T−1ξ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 的局限性及扩展
局限性
- 马尔可夫假设过强:状态仅依赖前一时刻
- 观测独立性假设:当前观测仅依赖当前状态
- 离散观测限制:需离散化连续信号(高斯HMM可缓解)
扩展模型
模型 | 改进点 | 应用场景 |
---|---|---|
高斯HMM | 观测概率为高斯分布 | 连续信号处理 |
层次HMM | 状态本身是HMM | 复杂行为识别 |
输入输出HMM | 加入外部控制信号 | 机器人控制 |
隐半马尔可夫模型 | 状态持续时间显式建模 | 基因结构分析 |
七、HMM 与相关模型对比
特征 | HMM | 马尔可夫随机场 | 循环神经网络 |
---|---|---|---|
状态类型 | 离散隐状态 | 图节点状态 | 连续隐向量 |
序列依赖性 | 一阶马尔可夫 | 任意邻域依赖 | 长程依赖 |
训练方式 | EM算法 | 最大似然/MCMC | 梯度下降 |
可解释性 | 强 | 中等 | 弱 |
结语:HMM 的时代意义
“HMM 是时间序列建模的瑞士军刀——在深度学习崛起前,它统治了语音识别、生物信息等领域数十年。其优雅的概率框架,仍是理解序列决策的黄金标准。”
尽管面临RNN/Transformer的竞争,HMM凭借可解释性和小数据优势,仍在以下场景不可替代:
- 资源受限的嵌入式设备(智能家居语音控制)
- 需要状态可解释的领域(医疗诊断、金融监管)
- 标注数据稀缺的场景(濒危语言保护)
掌握HMM,就是掌握了一把解码时间序列隐秘规律的钥匙。
本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!