Skip to content

思路与直觉

本章目标

  1. 用直观方式理解 HMM 的核心思路——"一个看不见的状态序列生成了一串看得见的观察"。
  2. 理解三个基本问题:评估(Forward)、解码(Viterbi)、学习(Baum-Welch)。
  3. 通过与 EM(GMM)的对比,建立 HMM 在概率模型谱系中的定位——序列隐变量模型。

重点方法与概念速览

名称类型作用
隐状态序列核心概念一个看不见的马尔可夫链——每一步的状态只依赖于上一步
观测序列可见数据你在现实中观察到的离散符号——由当前隐状态按概率"发射"
Forward 算法评估问题给定参数,计算这条观测序列出现的概率
Viterbi 算法解码问题给定观测序列,找出最可能的隐状态路径
Baum-Welch学习问题仅从观测序列,学习 HMM 的参数(转移矩阵 + 发射矩阵)
马尔可夫性核心假设未来只取决于现在——P(sts1,,st1)=P(stst1)

1. 为什么需要 HMM

大多数模型假设数据是独立同分布(i.i.d.)的。但很多现实数据是序列——一句话中的字、股票价格的变化、DNA 的碱基序列——相邻时间的观测高度相关。

HMM 用两层结构来建模这种序列依赖:

底下是一层看不见的状态链——它按马尔可夫规则迁移(喜欢待在一个状态,偶尔跳到其他状态) 上面是一层看得见的观测链——每个时刻的状态按概率"发出"一个观测符号

理解重点

  • 与 GMM 的关键区别:GMM 中样本之间独立,HMM 中样本按时间序列相关。
  • "隐藏"是 HMM 的精髓——现实中的很多东西你直接看不到(人的意图、市场的情绪、DNA 的模块),只能通过间接信号推断。

2. 用"天气预报"理解 HMM

假设你在一个没有窗户的房间里,只能看到同事每天拿不拿伞,但不知道外面天气如何:

  • 隐状态:晴、多云、雨——你看不到
  • 观测:带伞、没带伞——你能看到
  • 状态转移:晴天大概率继续晴,但也会变阴(A 矩阵描述)
  • 观测发射:晴天大概率不带伞,雨天大概率带伞(B 矩阵描述)

HMM 要做的三件事:

  1. 评估:已知天气模型参数,同事连续一周带伞/没带伞的序列,这个序列"多可能"?
  2. 解码:同事连续一周的带伞记录,那一周最可能的天气序列是什么?
  3. 学习:只看同事一年的带伞记录,自动猜出天气模型(几个状态、怎么转移、怎么发射)

理解重点

  • 当前源码的数据就是这种场景——3 个隐状态、3 种观测符号,你自己设好了"真实天气"和"真实发射概率",然后让 HMM 从观测序列猜回来。
  • 这就像给 HMM 一套带伞记录,让它自己学出"天气模型"——然后跟真实的天气参数对比。

3. 三个算法的直觉对比

算法问题直觉输出
Forward这个观测序列多可能?沿着时间累积所有路径的概率一个标量 P(Oλ)
Viterbi最可能的隐状态路径?沿着时间选最优的上一步 → 递推到终点 → 回溯一个状态序列 S^
Baum-Welch模型参数是什么?EM 的 HMM 版——用当前参数估计状态概率,再反推新参数新的 A^B^π^

理解重点

  • Forward 是"求和的动态规划"——把所有可能的隐状态路径概率加起来。
  • Viterbi 是"求最大值的动态规划"——找一条概率最大的隐状态路径。
  • Baum-Welch 是"EM for HMM"——类似 GMM 的 EM,但 E 步用的是 Forward-Backward 算法(考虑整个序列的上下文)。

4. 马尔可夫性的直觉

"明天的天气取决于今天,但与昨天、前天无关"

马尔可夫性使 HMM 可行——如果没有这个假设,转移矩阵的规模将随序列长度指数增长。

理解重点

  • 当前数据的转移矩阵体现了"惯性"——对角线元素大(0.80, 0.60, 0.70),状态倾向于维持。
  • 这是 HMM 的"平滑性"来源——隐状态不会每步都剧烈跳变。

5. 与 EM(GMM)的直觉对比

维度EM (GMM)HMM
数据结构独立样本(二维点集)序列(时间步依赖)
隐变量zik——每个点属于哪个分量st——每个时间步的隐状态
独立性假设i.i.d.马尔可夫依赖
E 步计算后验 γ(zik)Forward-Backward 算法
M 步加权更新 μΣπ重新估计 AB
解码argmaxkγik(逐点)Viterbi 算法(全局最优路径)
输出聚类标签 + 归属概率隐状态序列 + 准确率

理解重点

  • HMM 的 Baum-Welch 在概念上是 GMM 的 EM 的因果推广——区别在于样本间有序列依赖。
  • HMM 的 Viterbi 解码是"全局一致性推断"——考虑整个序列后选择最优路径,而不是逐步 argmax。
  • HMM 的评估不是聚类图而是准确率——对比预测状态序列与真实状态序列。

可视化

HMM 当前流水线无可视化输出——纯终端文本评估(隐状态准确率 + 学习到的转移矩阵)。这是因为序列数据不适合用散点图或矩阵图来展示。

常见坑

  1. 把 HMM 当成独立样本模型——忽略序列依赖会使隐状态的连续性丢失。
  2. 以为 Viterbi 解码等价于逐点最大后验——逐点 argmax 可能产生概率为零的状态转移(非法路径),Viterbi 保证路径合法。
  3. 在短序列上训练 HMM——Baum-Welch 需要足够长的序列才能稳定估计转移概率。
  4. 忽略 lengths 参数的含义——它允许多个不等长序列,每个序列的末尾被单独处理。

小结

  • HMM 的直觉核心是"看不见的马尔可夫链驱动了看得见的观测"——状态序列有惯性、观测与状态相关。
  • 三个算法解决三个问题:Forward 算概率、Viterbi 解路径、Baum-Welch 学参数。
  • HMM 与 GMM(EM)共享概率生成模型的哲学——但多了序列依赖和马尔可夫性假设。