1. 问题背景与定位
在机器学习中,我们经常需要处理序列数据。比如,一段文字、一段语音、一段时间内的股票价格,或者一段基因序列。对于这些序列,我们常常希望能够做一些事情:
- 标注 (Tagging): 给序列中的每一个元素打上一个标签。例如,给一句话中的每个词标注其词性(名词、动词、形容词等)。
- 识别 (Recognition): 根据一段序列,判断其整体代表什么。例如,根据一段语音信号,识别出是哪句话。
- 预测 (Prediction): 根据已有的序列,预测下一个元素可能是什么。例如,根据过去几天的天气,预测明天的天气。
一个直接的想法是,序列中的当前元素可能与它之前的元素存在某种关联。比如,一个“动词”后面很可能会跟一个“名词”。这种关联性,我们可以用马尔可夫链 (Markov Chain) 来建模。
马尔可夫链描述了一个系统在一系列状态之间转换的过程,其核心思想是“未来只依赖于现在”。也就是说,系统下一个时刻的状态,仅仅取决于它当前的状态,而与过去的状态无关。
举个例子:天气变化 假设我们所在城市的天气只有三种状态:{晴天, 多云, 下雨}。我们可以观察到每天的天气变化,这就是一个可观测的马尔可夫链。
- 如果今天“下雨”,明天有 60% 的概率继续“下雨”,有 25% 的概率转为“多云”,有 15% 的概率转为“晴天”。
- 这种状态转移是可见的、可直接观测的。
现在,我们让问题变得复杂一点: 想象一下,你有一个朋友住在很远的城市,你无法直接获取他所在城市的天气预报。但是,你每天和他通电话,他会告诉你他今天做了什么活动,比如:{散步, 购物, 宅家}。
现在,你的任务是:通过他每天的活动序列,来推断他所在城市的天气变化序列。
在这个问题中:
- 天气状态序列 ({晴天, 多云, 下雨}, …),是你无法直接观测的,它是“隐藏 (Hidden)”的。
- 活动状态序列 ({散步, 购物, 宅家}, …),是你可以观测到的。
我们有理由相信,天气会影响他的活动。比如,“晴天”他更可能去“散步”,“下雨”他更可能“宅家”。同时,天气本身的变化也遵循着某种规律(比如,晴天之后大概率还是晴天)。
为了对这类“隐藏状态序列”产生“观测序列”的问题进行数学建模,隐马尔可夫模型 (Hidden Markov Model, HMM) 应运而生。它正是为了解决这类问题而设计的强大工具,广泛应用于语音识别、自然语言处理、生物信息学等领域。
2. 核心概念
HMM 的核心思想可以想象成一个 “幕后玩家” 的游戏。
想象一个房间里有一位你看不见的“幕后玩家”。他面前有几个不同的罐子(比如3个),每个罐子里都装有不同颜色和比例的彩球。
这个游戏按以下步骤进行:
- 初始选择: 游戏开始时,“幕后玩家”根据一个初始的概率分布,选择其中一个罐子。比如,他有 50% 的概率选择1号罐,30% 选择2号罐,20% 选择3号罐。
- 抽球并展示: 他从选中的罐子里随机摸出一个球,把球的颜色展示给你看,然后把球放回原罐。你只能看到球的颜色,但不知道是从哪个罐子里抽出来的。
- 切换罐子: “幕后玩家”根据一套固定的“切换规则”,决定下一个要用的罐子。这个规则是概率性的。例如,如果他这次用的是1号罐,那他下一次有70%的概率继续用1号罐,有20%的概率换到2号罐,有10%的概率换到3号罐。
- 重复: 不断重复第2步和第3步(抽球并展示、切换罐子)。
经过一段时间后,你手里会得到一个颜色的序列,比如:{红, 蓝, 蓝, 红, 黄, …}。
在这个比喻中:
- 隐藏状态 (Hidden State): “幕后玩家”选择的罐子。你无法直接看到他每次用的是哪个罐子。罐子的序列 {罐1, 罐1, 罐2, …} 就是一个隐藏的马尔可夫链。
- 观测结果 (Observation): 你看到的球的颜色。这是你能直接获取到的信息。颜色的序列 {红, 蓝, 蓝, …} 就是观测序列。
HMM 的精髓在于它有两条并行的线索和一个关键的联系:
- 隐藏的状态链: 一条你看不到的、符合马尔可夫性质的状态转移链(罐子的切换)。
- 可观测的输出链: 一条你能看到的、由隐藏状态“生成”的观测结果链(球的颜色)。
- 生成关系: 每一个隐藏状态都对应着一个产生不同观测结果的概率分布(每个罐子里不同颜色球的比例)。
HMM 模型就是对这个过程的数学化描述。
3. 数学基础与模型定义
为了精确地描述 HMM,我们需要引入一些数学符号和定义。
一个 HMM 模型可以由两组集合和三组参数来完全定义。
两组集合:
- 状态集合 (Set of States) : 所有可能的隐藏状态的集合。
- 是可能的状态总数。
- 在天气例子中,,。
- 在罐子例子中,,。
- 观测集合 (Set of Observations) : 所有可能的观测结果的集合。
- 是可能的观测结果总数。
- 在天气例子中,,。
- 在罐子例子中,,。
模型的核心假设:
在定义参数之前,我们必须明确 HMM 依赖于两个非常重要的基本假设。这两个假设极大地简化了模型的数学处理。
1. 齐次马尔可夫性假设 (Homogeneous Markov Assumption) 这个假设作用于隐藏状态链。它指出,任意时刻 的隐藏状态,只受其前一时刻 的隐藏状态影响,与更早之前的状态和观测都无关。
用数学语言表达就是:
2. 观测独立性假设 (Observation Independence Assumption) 这个假设作用于观测结果。它指出,任意时刻 的观测结果,只受当前时刻 的隐藏状态影响,与其他任何时刻的状态或观测都无关。
用数学语言表达就是:
这两个假设是 HMM 的基石。虽然在现实世界中它们可能是过于简化的近似,但正是这种简化使得 HMM 成为一个强大且可计算的模型。
HMM 的三要素:模型参数
有了以上定义和假设,一个具体的 HMM 模型就可以由下面三个参数来描述,我们通常将它们打包成一个元组 。
1. 初始状态概率分布 (Initial State Probability Distribution) 这是一个向量,表示在序列开始时(时刻 ),系统处于各个隐藏状态的概率。
- 是初始时刻处于状态 的概率。
- 所有 的和必须为 1: 。
- 在罐子例子中,,表示开始时有50%概率选1号罐,30%概率选2号罐,20%概率选3号罐。
2. 状态转移概率矩阵 (State Transition Probability Matrix) 这是一个 的矩阵,描述了隐藏状态之间转移的概率。
- 表示在当前时刻 处于状态 的条件下,在下一时刻 转移到状态 的概率。
- 矩阵的每一行之和必须为 1: 。
- 在天气例子中,如果今天(状态)是“下雨”,明天(状态)是“晴天”的概率就是 。
3. 观测概率矩阵 (Observation Probability Matrix) 这是一个 的矩阵,也称为发射概率矩阵 (Emission Probability Matrix)。它描述了在某个隐藏状态下,生成特定观测结果的概率。
- 表示在当前时刻 处于隐藏状态 的条件下,观测到结果 的概率。
- 矩阵的每一行(对应一个隐藏状态)之和必须为 1: 。
- 在天气例子中, 表示在“晴天”这个隐藏状态下,朋友去“散步”的概率。
一旦这三个参数 确定了,一个隐马尔可夫模型就完全确定了。它可以用来生成观测序列,或者解释一个已有的观测序列。
4. 经典实例解析
理论是抽象的,让我们通过两个例子,把上面所有的符号和定义对应到具体问题里去。
4.1 实例一:三硬币模型
这是一个非常直观的例子,这个例子我们之前在初识EM算法也提到了一个很类似的。这个例子能清晰地展示 HMM 的建模过程。
问题描述: 假设有三枚硬币:一枚特殊的偏置硬币 (Biased Coin) 和两枚正常的公平硬币 (Fair Coins),我们称它们为硬币A和硬币B。
游戏规则如下:
- 先抛掷这枚特殊的偏置硬币。如果结果为正面 (Heads),则选择硬币A;如果结果为反面 (Tails),则选择硬币B。
- 然后,抛掷被选中的那枚硬币(硬币A或硬币B),并记录其结果(正面或反面)。
- 重复以上过程,你将得到一串由“正面”和“反面”组成的观测序列。
在这个游戏中,你无法看到每次是哪枚硬币(A或B)被选中,你只能看到每次抛掷的结果。
用 HMM 的语言来建模:
-
隐藏状态 : 被选中的硬币。
- ,所以 。
-
观测结果 : 抛掷硬币的结果。
- ,所以 。
现在,我们来确定 HMM 的三要素 。
-
初始状态概率分布 : 这个模型没有明确的“初始”,因为每次选择都依赖于偏置硬币。但我们可以认为,在任何一次抛掷前,选择硬币A或硬币B的概率是由偏置硬币决定的。假设这枚偏置硬币出现正面的概率为 ,出现反面的概率为 。那么,选择硬币A的概率就是 ,选择硬币B的概率就是 。我们可以将其视为每次选择的“初始”概率。如果假设偏置硬币也是公平的,即 ,那么:
-
状态转移概率矩阵 : 这个模型的特殊之处在于,下一次选择哪个硬币,与这一次选择的硬币完全无关,而是重新由偏置硬币决定。
- 无论当前是硬币A还是硬币B,下一次选择硬币A的概率都是 。
- 无论当前是硬币A还是硬币B,下一次选择硬币B的概率都是 。 假设 ,状态转移矩阵 就是:
-
观测概率矩阵 : 这描述了在选定某枚硬币后,抛出正面或反面的概率。假设硬币A是完全公平的,而硬币B有些不公平。
- 硬币A:
- 硬币B: (例如) 于是,观测概率矩阵 就是:
通过这个例子,我们把一个看似复杂的游戏,清晰地解构成了 HMM 的三个核心参数。
4.2 实例二:盒子和球模型
这是 HMM 最经典的教科书例子,与我们最初的“幕后玩家”比喻完全一致。
问题描述: 假设有4个盒子,每个盒子里都装有红色和白色两种颜色的球,具体数量如下表所示(总数均为10):
| 盒子编号 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 红球数 | 5 | 3 | 6 | 8 |
| 白球数 | 5 | 7 | 4 | 2 |
抽样过程如下:
- 初始: 从4个盒子中以等概率(1/4)随机选一个盒子。
- 抽球: 从这个盒子里随机抽一个球,记录其颜色,然后放回。
- 转移: 然后,从当前盒子转移到下一个盒子。转移规则如下:
- 如果当前在盒子1,下次必定转移到盒子2。
- 如果当前在盒子2或3,下次各有0.4的概率转移到左边的盒子,0.6的概率转移到右边的盒子。
- 如果当前在盒子4,下次各有0.5的概率停留在盒子4或转移到盒子3。
- 重复: 重复第2和第3步,直到获得一个观测序列,例如:O = (红, 白, 红, 红, 白)。
用 HMM 的语言来建模:
-
隐藏状态 : 盒子的编号。
- ,所以 。
-
观测结果 : 球的颜色。
- ,所以 。
现在,我们来确定 HMM 的三要素 。
-
初始状态概率分布 : 根据规则1,开始时等概率选择4个盒子中的一个。
-
状态转移概率矩阵 : 这是一个 矩阵,根据规则3来构建。 是从盒子 转移到盒子 的概率。
- 从盒子1: 100%到盒子2。
- 从盒子2: 40%到盒子1,60%到盒子3。
- 从盒子3: 40%到盒子2,60%到盒子4。
- 从盒子4: 50%到盒子3,50%留在盒子4。 所以,状态转移矩阵 为:
-
观测概率矩阵 : 这是一个 矩阵,表示在每个盒子(隐藏状态)中,摸出红球或白球(观测结果)的概率。
- 盒子1: 5红5白 →
- 盒子2: 3红7白 →
- 盒子3: 6红4白 →
- 盒子4: 8红2白 → 所以,观测概率矩阵 为:
通过这个例子,我们可以看到,任何一个遵循了 HMM 两个核心假设的序列生成过程,都可以被精确地编码为 这三组参数。