1. 问题背景与定位

初识隐马尔可夫模型中,我们已经知道一个完整的隐马尔可夫模型 (HMM) 由三要素 定义。现在,我们面临 HMM 的第一个核心问题:评估 (Evaluation)

评估问题描述:给定一个 HMM 模型 和一个观测序列 ,我们如何计算这个模型产生出该特定观测序列的概率

例如,在语音识别中,我们有两个 HMM 模型:。当系统接收到一段语音(观测序列 )时,我们可以分别计算 。哪个概率更高,就说明这段语音更可能对应哪个词语。因此,高效计算 是许多 HMM 应用的基础。

接下来,我们将探索解决这个问题的三种方法:从最直观但最笨拙的“直接计算法”,到作为标准解决方案的“前向算法”与“后向算法”。

2. 直接计算法

2.1 直观理解

最符合直觉的方法是什么?就是把所有可能发生的情况都列出来,计算每一种情况的概率,然后把它们全部加起来。

具体来说,一个观测序列 是由一个我们看不见的隐藏状态序列 生成的。我们不知道真实的隐藏状态序列是什么,但我们可以枚举所有可能的隐藏状态序列。

对于任何一条特定的隐藏状态序列,例如 ,计算它和观测序列 同时发生的联合概率 是很直接的:

让我们把这两项拆开:

  1. : 隐藏状态序列自身的概率。根据马尔可夫链的性质,它等于:

    用我们的模型参数表示就是:

  2. : 在这个特定的隐藏状态序列下,生成观测序列 的概率。根据观测独立性假设,它等于:

    用我们的模型参数表示就是:

将两者相乘,就得到了一条特定路径的概率。

2.2 最终计算与问题

为了得到最终的 ,我们需要将所有可能的隐藏状态序列 的概率加起来:

问题出在哪里? 这个方法的计算量是灾难性的。

  • 隐藏状态共有 种。
  • 序列长度为
  • 那么,所有可能的隐藏状态序列 的总数是
  • 计算每一条序列的概率,需要进行 次乘法。
  • 总的计算复杂度大约是

这是一个指数级别的复杂度。假设一个简单的词性标注任务,有 个词性,一句话长度为 。那么 是一个天文数字,即使用最快的计算机也无法完成计算。因此,直接计算法在实践中是不可行的,它只是一种理论思想。

3. 前向算法

为了解决直接计算法的指数爆炸问题,我们需要一种更聪明的方法。前向算法利用动态规划 (Dynamic Programming) 的思想,通过存储和复用中间计算结果,将复杂度从指数级降到了多项式级。

3.1 直观理解与核心定义

直接计算法的问题在于,它进行了大量的重复计算。例如,在计算很多不同的长路径时,它们的前缀部分(比如从时刻1到时刻3的路径)被反复计算了无数次。

前向算法的核心思想是:在时刻 到达某个状态 的概率,可以由在时刻 到达所有可能状态的概率之和来递推得到。我们不需要关心 之前具体的路径是什么,只需要一个“总的概率”即可。

为此,我们定义一个关键变量——前向概率 (Forward Probability)

定义: 前向概率 是指,在 HMM 模型 下,观测序列为 且在时刻 处于隐藏状态 的联合概率。

请仔细理解这个定义:它包含了到时刻 为止的两个条件

  1. 已经看到了观测子序列
  2. 在时刻 ,系统正好处于状态

这个 已经将所有能够“在时刻 到达状态 并产生观测子序列 ”的路径概率全部加在一起了。

3.2 算法推导与步骤

前向算法的推导过程分为三步:

1. 初始化 我们来计算初始时刻的前向概率 。 根据定义:

根据概率的链式法则,上式可以分解为:

含义:在时刻1,处于状态 并观测到 的概率,就是“初始时选择状态 的概率”乘以“状态 生成观测 的概率”。

2. 递推 for 这是算法的核心。假设我们已经计算出了时刻 的所有前向概率 (对于所有 ),我们如何计算时刻 的前向概率

根据定义:

我们可以通过对时刻 的所有可能状态 进行边缘化 (Marginalization) 来展开它:

现在,我们利用 HMM 的两个核心假设来简化第二项:

  • 齐次马尔可夫性: 只依赖于 。所以
  • 观测独立性: 只依赖于 。所以

将这些简化代入,第二项变为 。 而第一项 正是我们定义的

所以,我们得到了递推公式:

含义: 要计算在时刻 到达状态 的总概率,我们首先要汇总所有从时刻 的任意状态 转移到 的概率(方括号内的部分),然后再乘以 生成观测 的概率。

**3. 终止 当我们递推到最后一步,计算完所有 后,我们如何得到最终的 ? 根据定义,。 我们要求的 ,只需要对最后一个时刻的所有可能状态 进行边缘化即可:

含义: 观测序列 出现的总概率,等于在最后时刻,系统处于任何一个可能状态 并完成观测 的概率之和。

算法复杂度:

  • 初始化需要
  • 每一步递推,计算一个 需要 次计算。要计算所有 个状态,需要
  • 总共有 步递推。
  • 总复杂度为 ,这是一个多项式级别的复杂度,相比 是巨大的飞跃。

3.3 盒子和球模型

模型参数 :

  • 状态 ,
  • 观测 ,
  • 初始概率
  • 状态转移矩阵
  • 观测概率矩阵 (第1列是红,第2列是白)

观测序列 ,

1. 初始化 (t=1), 观测

2. 递推 (t=2), 观测

  • 计算 :

  • 计算 :

  • 计算 :

3. 递推 (t=3), 观测

  • 计算 :

  • 计算 :

  • 计算 :

4. 终止

4. 后向算法

后向算法是解决评估问题的另一种动态规划方法。它与前向算法对称,从序列的末尾开始,向前递推。

4.1 直观理解与核心定义

我们定义一个后向概率 (Backward Probability)

定义: 后向概率 是指,在 HMM 模型 下,并且在时刻 处于隐藏状态 条件下,观测到未来观测序列 的条件概率。

请注意它与前向概率的区别

  • 是一个联合概率,包含了
  • 是一个条件概率,条件是 ,计算的是未来观测序列的概率。

4.2 算法推导与步骤

1. 初始化 按照惯例,我们定义序列末尾的后向概率为一个基准值。

含义: 在时刻 已经处于状态 的条件下,未来的观测序列(空序列)发生的概率自然是1。这是一个递归的起点。

2. 递推 for 假设我们已经计算出了时刻 的所有后向概率 ,我们来计算时刻 的后向概率

根据定义,。 我们通过对时刻 的所有状态 进行边缘化来展开:

再次利用HMM假设简化:

将它们代入,得到递推公式:

3. 终止 后向算法也可以用来计算总概率 。我们可以在任意时刻 将前向和后向概率结合起来。最简单的是在 时:

我们将 分解为 。 这三项正好是 , , 和 。 所以:

这个结果必须与前向算法得到的结果完全相同。

5. 补充概率概念

5.1 单个状态的概率:

定义: 给定模型 整个 观测序列 ,在时刻 处于状态 的概率。

这个概率回答了“在看到了所有证据之后,我们回头看,在时刻 系统处于状态 的可能性有多大?”

推导: 根据条件概率的定义

我们来分析分子 。它可以被看作是“过去”、“现在”和“未来”的结合:

  • “过去”:观测到 并且在时刻 处于状态 。这正是前向概率
  • “未来”:在时刻 处于状态 的条件下,观测到 。这正是后向概率

因此, 。 代入可得:

意义: 在模型训练中,可以被看作是在时刻 访问状态 期望次数。对所有时刻求和 就是在整个序列中访问状态 的总期望次数。

5.2 两个状态的转移概率:

定义: 给定模型 整个 观测序列 ,在时刻 处于状态 且在时刻 处于状态 的概率。

这个概率回答了“在看到了所有证据之后,在时刻 之间,发生一次从 转移的可能性有多大?”

推导: 同样地,。 分子可以被分解为:

将所有部分组合起来,得到:

意义: 可以被看作是在时刻 从状态 转移到状态 期望次数。对时间求和 是在整个序列中从 转移到 的总期望次数。

这两个量,,是鲍姆-韦尔奇 (Baum-Welch) 学习算法的核心,它们被用来在给定观测数据的情况下,迭代地更新模型参数

6. 总结一下

本次我们深入探讨了 HMM 的概率评估问题。

  • 直接计算法 思路简单,但因 的指数复杂度而不可行。
  • 前向算法 利用动态规划,定义了前向概率 ,自前向后递推,将复杂度降至 ,是解决评估问题的标准方法。
  • 后向算法 是前向算法的镜像,定义了后向概率 ,自后向前递推,同样可以计算总概率,并且是计算其他重要概率的必要工具。
  • 组合概率 利用前向和后向概率,让我们能深入洞察序列内部的动态,是连接评估问题和学习问题的桥梁。

至此,我们已经掌握了HMM三大问题中的第一个。下一个自然是解决隐马尔科夫模型的学习问题了。