1. 基础:马尔可夫链(Markov Chain)
- 是什么? 一个马尔可夫链描述一个系统在时间(或序列) 上的演变,其中系统在任何时刻只可能处于有限个状态中的某一个。
- 核心假设(马尔可夫性): 系统在下一个时刻处于哪个状态只取决于当前时刻的状态,而与之前更早的历史状态无关。这就是著名的“无记忆性”。
- 可见性: 在一个标准的马尔可夫链中,系统的状态在每个时刻都是直接可见的。
- 关键要素: 状态集合、状态转移概率矩阵(描述了从一个状态转移到另一个状态的概率)。
- 例子: 天气预报。假设只有“晴天”和“雨天”两种状态。今天的天气状态是“晴天”。马尔可夫链会告诉我们明天是晴天的概率有多大(比如 70%),转成雨天的概率有多大(比如 30%)。你每天都能直接观察到天气状态(晴或雨)。
2. 关键升级:为什么叫“隐”?HMM 来了
- 核心问题: 在现实中,很多时候我们无法直接观测到系统的真实状态,我们只能观测到一些与这些状态相关的、或由这些状态产生的现象或数据。
- “隐”的含义: 在 HMM 中,系统仍然在一系列隐藏(或潜在)状态之间按照马尔可夫链的规则转移,但这些状态本身我们是看不到的!
- 可观测的是什么? 在每个时刻,当系统处于某个隐藏状态时,它会以一定的概率产生(或发射)一个我们可以观察到的符号(或观测值)。
- 需要模型化的额外要素: 除了状态转移概率,我们还需要知道每个隐藏状态下产生各个观测值的概率分布(称为“观测(发射)概率矩阵”)。
3. HMM 的关键组成要素(五元组)
一个标准的 HMM 由以下五个部分定义:
- 隐藏状态集合: 系统真正存在的、但不可见的状态的集合。例如:在天气预测中,隐藏状态可能是{晴天, 雨天}(但你可能看不到真实天气)。
- 可观测符号集合: 系统在每个时刻产生的、我们可以实际看到或测量到的符号或值的集合。例如:你只能看到朋友的行为{打伞, 戴墨镜}。
- 状态转移概率矩阵 (A): 描述在当前隐藏状态下,下一个时刻转移到各个其他隐藏状态的概率。这是一个 N x N 的矩阵(N 是隐藏状态数)。它体现了马尔可夫性。
- 观测概率矩阵 (B): 描述在某个给定的隐藏状态下,产生某个特定观测符号的概率。这是一个 N x M 的矩阵(N 是隐藏状态数,M 是可观测符号数)。
- 初始状态概率分布 (π): 描述在序列开始时(时间 t=0),系统处于各个隐藏状态的概率。是一个长度为 N 的向量。
4. 经典的 HMM 例子(也是最容易理解的)
场景: 你有一个住得很远的朋友,每天只能通过电话知道他的行为:他是打伞还是戴墨镜。你不知道他那边的真实天气(晴天还是雨天)。
- 隐藏状态 (States): 晴天, 雨天(这是你不知道但想知道的)。
- 可观测符号 (Observations): 打伞, 戴墨镜(这是你唯一能知道的)。
- 状态转移概率 (A):
- 晴天 -> 晴天的概率:0.7
- 晴天 -> 雨天的概率:0.3
- 雨天 -> 晴天的概率:0.4
- 雨天 -> 雨天的概率:0.6
- 观测概率 (B):
- 在晴天:
- 戴墨镜的概率:0.8
- 打伞的概率:0.2 (例如,防晒)
- 在雨天:
- 戴墨镜的概率:0.1 (很反常的情况)
- 打伞的概率:0.9
- 在晴天:
- 初始状态概率 (π): 第一天是晴天的概率是 0.6,是雨天的概率是 0.4。
5. HMM 能解决的三大基本问题
- 评估问题: 给定一个 HMM 模型参数 (A, B, π) 和一个观测序列 O(比如朋友一周的行为序列:戴墨镜、戴墨镜、打伞、打伞、戴墨镜),计算这个观测序列 O 由该模型生成的概率 P(O | λ)。这能帮助你判断哪个模型(可能参数不同)更可能产生了你观测到的数据。
- 算法: 前向算法或后向算法(都是高效的动态规划方法)。
- 解码问题: 给定一个 HMM 模型参数 (A, B, π) 和一个观测序列 O,找到最有可能产生这个观测序列 O 的隐藏状态序列。这就是尝试“揭开谜底”——最有可能的真实天气序列是什么?
- 算法: 维特比算法(同样是高效的动态规划算法,能找到全局最优路径)。
- 学习问题: 给定一个或多个观测序列 O,但不知道模型参数 (A, B, π),如何调整这些参数,使得模型最好地“解释”观察到的数据(即最大化 P(O | λ))。这相当于从数据中“学习”出模型。
- 算法: Baum-Welch 算法(是 EM 算法在 HMM 中的具体实现)。
6. HMM 的应用领域
HMM 非常适合处理时间序列数据或序列数据,其中真实状态未知,需要通过观测值序列进行推断。经典应用包括:
- 语音识别: 隐藏状态是音素(如 “a”, “b”, “c”),观测值是麦克风捕捉到的声学信号(频谱特征)。通过观测信号推断最可能的音素序列(也就是说什么单词)。
- 自然语言处理:
- 词性标注: 隐藏状态是词性(名词、动词等),观测值是单词序列。通过单词序列推断每个单词的词性。
- 命名实体识别: 隐藏状态是实体类型(人名、地名、机构名等),观测值是单词序列。
- 生物信息学:
- 基因序列分析: 例如预测DNA序列中的编码区(外显子)和非编码区(内含子) - 隐藏状态。
- 蛋白质结构预测: 隐藏状态是二级结构(α螺旋、β折叠等),观测值是氨基酸序列。
- 金融时间序列分析: 隐藏状态可能是市场机制(牛市、熊市),观测值是股价、交易量等。
- 手写识别: 隐藏状态是字母或笔画,观测值是笔的坐标轨迹点序列。
- 动作识别: 隐藏状态是动作类别(走路、跑步、跳跃),观测值是传感器数据(如加速度计、陀螺仪)。
总结
- HMM 核心: 是一个双重随机过程。
- 第一层:一个不可见的(隐藏的)状态序列,按照马尔可夫链(状态转移概率 A)在时间上演进。
- 第二层:一个可见的(可观测的)符号序列,每个符号由其对应的隐藏状态根据观测概率 B “产生”。
- 目的: 当只能看到观测值序列时,通过建立 HMM 模型,来解决评估序列概率、找出最可能的隐藏状态序列、或者学习模型参数本身的问题。
- 与马尔可夫链的关键区别: 马尔可夫链的状态是可见的,重点在状态转移本身。HMM 的状态是不可见(隐藏)的,重点在于如何通过观测值序列来理解和推断隐藏的状态序列及其转移规律。
简单来说,马尔可夫链告诉你“看得见的状态怎么变”,而隐马尔可夫模型解决的是“看不见的状态怎么变,以及它们和看得见的东西有什么关系”。它是在处理状态不确定的序列问题时非常强大和基础的建模工具。
