思路与直觉
本章目标
- 用直观方式理解 HMM 的核心思路——"一个看不见的状态序列生成了一串看得见的观察"。
- 理解三个基本问题:评估(Forward)、解码(Viterbi)、学习(Baum-Welch)。
- 通过与 EM(GMM)的对比,建立 HMM 在概率模型谱系中的定位——序列隐变量模型。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
| 隐状态序列 | 核心概念 | 一个看不见的马尔可夫链——每一步的状态只依赖于上一步 |
| 观测序列 | 可见数据 | 你在现实中观察到的离散符号——由当前隐状态按概率"发射" |
| Forward 算法 | 评估问题 | 给定参数,计算这条观测序列出现的概率 |
| Viterbi 算法 | 解码问题 | 给定观测序列,找出最可能的隐状态路径 |
| Baum-Welch | 学习问题 | 仅从观测序列,学习 HMM 的参数(转移矩阵 + 发射矩阵) |
| 马尔可夫性 | 核心假设 | 未来只取决于现在—— |
1. 为什么需要 HMM
大多数模型假设数据是独立同分布(i.i.d.)的。但很多现实数据是序列——一句话中的字、股票价格的变化、DNA 的碱基序列——相邻时间的观测高度相关。
HMM 用两层结构来建模这种序列依赖:
底下是一层看不见的状态链——它按马尔可夫规则迁移(喜欢待在一个状态,偶尔跳到其他状态) 上面是一层看得见的观测链——每个时刻的状态按概率"发出"一个观测符号
理解重点
- 与 GMM 的关键区别:GMM 中样本之间独立,HMM 中样本按时间序列相关。
- "隐藏"是 HMM 的精髓——现实中的很多东西你直接看不到(人的意图、市场的情绪、DNA 的模块),只能通过间接信号推断。
2. 用"天气预报"理解 HMM
假设你在一个没有窗户的房间里,只能看到同事每天拿不拿伞,但不知道外面天气如何:
- 隐状态:晴、多云、雨——你看不到
- 观测:带伞、没带伞——你能看到
- 状态转移:晴天大概率继续晴,但也会变阴(
矩阵描述) - 观测发射:晴天大概率不带伞,雨天大概率带伞(
矩阵描述)
HMM 要做的三件事:
- 评估:已知天气模型参数,同事连续一周带伞/没带伞的序列,这个序列"多可能"?
- 解码:同事连续一周的带伞记录,那一周最可能的天气序列是什么?
- 学习:只看同事一年的带伞记录,自动猜出天气模型(几个状态、怎么转移、怎么发射)
理解重点
- 当前源码的数据就是这种场景——3 个隐状态、3 种观测符号,你自己设好了"真实天气"和"真实发射概率",然后让 HMM 从观测序列猜回来。
- 这就像给 HMM 一套带伞记录,让它自己学出"天气模型"——然后跟真实的天气参数对比。
3. 三个算法的直觉对比
| 算法 | 问题 | 直觉 | 输出 |
|---|---|---|---|
| Forward | 这个观测序列多可能? | 沿着时间累积所有路径的概率 | 一个标量 |
| Viterbi | 最可能的隐状态路径? | 沿着时间选最优的上一步 → 递推到终点 → 回溯 | 一个状态序列 |
| Baum-Welch | 模型参数是什么? | EM 的 HMM 版——用当前参数估计状态概率,再反推新参数 | 新的 |
理解重点
- 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 |
|---|---|---|
| 数据结构 | 独立样本(二维点集) | 序列(时间步依赖) |
| 隐变量 | ||
| 独立性假设 | i.i.d. | 马尔可夫依赖 |
| E 步 | 计算后验 | Forward-Backward 算法 |
| M 步 | 加权更新 | 重新估计 |
| 解码 | Viterbi 算法(全局最优路径) | |
| 输出 | 聚类标签 + 归属概率 | 隐状态序列 + 准确率 |
理解重点
- HMM 的 Baum-Welch 在概念上是 GMM 的 EM 的因果推广——区别在于样本间有序列依赖。
- HMM 的 Viterbi 解码是"全局一致性推断"——考虑整个序列后选择最优路径,而不是逐步 argmax。
- HMM 的评估不是聚类图而是准确率——对比预测状态序列与真实状态序列。
可视化
HMM 当前流水线无可视化输出——纯终端文本评估(隐状态准确率 + 学习到的转移矩阵)。这是因为序列数据不适合用散点图或矩阵图来展示。
常见坑
- 把 HMM 当成独立样本模型——忽略序列依赖会使隐状态的连续性丢失。
- 以为 Viterbi 解码等价于逐点最大后验——逐点 argmax 可能产生概率为零的状态转移(非法路径),Viterbi 保证路径合法。
- 在短序列上训练 HMM——Baum-Welch 需要足够长的序列才能稳定估计转移概率。
- 忽略
lengths参数的含义——它允许多个不等长序列,每个序列的末尾被单独处理。
小结
- HMM 的直觉核心是"看不见的马尔可夫链驱动了看得见的观测"——状态序列有惯性、观测与状态相关。
- 三个算法解决三个问题:Forward 算概率、Viterbi 解路径、Baum-Welch 学参数。
- HMM 与 GMM(EM)共享概率生成模型的哲学——但多了序列依赖和马尔可夫性假设。