跳转到内容

隐马尔可夫模型

快速概览

HMM 是理解'隐藏结构 + 不确定观测'问题的一页起点:它用状态转移和发射概率,把基因预测、序列分段和蛋白家族建模等任务放进统一框架。

  • 先掌握状态、转移、发射三个核心概念,再去理解 Viterbi 和 decoding。
  • 它不只是理论模型,而是很多序列结构解释任务的经典工作马。
所属板块 核心方法

索引、比对、组装与概率模型构成的核心算法主轴。

阅读目标 帮助建立阅读上下文

先判断这页与你当前问题的关系,再决定是否深入展开。

建议前置 先建立相关基础对象与方法直觉

建议先建立相关基础对象与方法直觉,再进入本页。

1. 直觉模型:公平赌场(The Fair Bet Casino)

Section titled “1. 直觉模型:公平赌场(The Fair Bet Casino)”

理解 HMM 最直观的方式是”公平赌场”模型。

想象你在一个赌场里玩掷硬币游戏。赌场有两种硬币:

  1. 公平硬币(Fair):正反面概率各为 0.5。
  2. 偏置硬币(Biased/Loaded):正面概率为 0.75,反面概率为 0.25。

游戏规则

  • 荷官可以随时在两个硬币之间切换,但你看不见荷官手里拿的是哪一个。
  • 你只能看到掷出的结果序列(如 H T H H H)。
  • 荷官切换硬币的频率遵循一定的概率(例如,有 10% 的概率从公平换成偏置)。

HMM 的映射

  • 隐藏状态(Hidden States):荷官当前使用的是”公平”还是”偏置”硬币。
  • 观测(Observations):你看到的 H (正面) 或 T (反面)。
  • 转移概率(Transition):荷官切换硬币的概率。
  • 发射概率(Emission):每种硬币掷出正反面的概率。

这个模型完美类比了 CG 岛(CG-islands) 的识别:DNA 序列中某些区域的 CG 含量异常高,这些区域(隐藏状态)发射 C/G 的概率(发射概率)不同于背景区域。

HMM 常用于这样的问题:

  • 一个序列中的不同位置分别属于哪种功能状态?
  • 给定观测序列,最可能的隐藏结构是什么?
  • 某个位置更可能来自 exon、intron 还是 intergenic region?
  • 某段蛋白序列是否符合某个家族 profile?

换句话说,HMM 特别适合”线性序列 + 隐藏结构 + 不确定性”的场景。

状态集合 `S`
表示系统可能处于的隐藏结构类别,例如 exon / intron / intergenic。
转移概率 `a_{ij}`
表示从状态 `i` 切换到状态 `j` 的概率。
发射概率 `b_j(o)`
表示在状态 `j` 下观察到某个符号或信号的概率。

一个 HMM 通常包括:

  1. 状态集合 S
  2. 初始状态分布 \pi
  3. 状态转移概率 a_{ij}
  4. 发射概率 b_j(o)

其中:

aij=P(zt=jzt1=i) a_{ij} = P(z_t = j \mid z_{t-1} = i)

表示从状态 i 转移到状态 j 的概率;

bj(ot)=P(otzt=j) b_j(o_t) = P(o_t \mid z_t = j)

表示在状态 j 下观察到符号 o_t 的概率。

HMM 状态转移与发射示意图
隐藏状态通过转移概率连接,同时对观测序列发射不同分布的符号。

假设我们想把 DNA 序列粗略分成两类区域:

  • C:coding region
  • N:non-coding region

那么:

  • 隐藏状态是当前位置属于 C 还是 N
  • 观测是当前位置实际看到的碱基 A/C/G/T
  • 转移概率描述区段切换倾向;
  • 发射概率描述每类区段更偏好哪些碱基组成。

这正是基因预测里最经典的建模思路之一。

HMM 中最常见的三个问题是:

给定模型和观测序列,求这段观测出现的概率。

给定模型和观测序列,求最可能的隐藏状态路径。

给定观测数据,反过来估计模型参数。

在教学和应用中,最常被直接提到的是 decoding 问题,因为它对应”这段序列最可能属于哪些功能状态”。

虽然 HMM 是概率模型,但求最可能状态路径时通常会用动态规划。

例如 Viterbi 算法定义:

Vt(j)=maxi[Vt1(i)aijbj(ot)] V_t(j) = \max_i \left[V_{t-1}(i) \cdot a_{ij} \cdot b_j(o_t)\right]

它表示:在时刻 t 到达状态 j 的最优路径概率,可以由上一时刻各状态的最优结果递推得到。

这说明 HMM 是一个非常典型的”概率模型 + 动态规划”结合体。

假设我们只有两个状态:

  • H:高 GC 区域
  • L:低 GC 区域

观测序列为:

G C G A

直觉上:

  • 前三个字符更像高 GC 状态;
  • 最后一个 A 可能提示状态切换,或者只是该状态中的低概率发射。

Viterbi 的任务就是在”保持当前状态”与”切换状态”之间寻找全局最优解释,而不是只看单个字符。

  • 基因预测:区分 exon / intron / intergenic;
  • CpG island 或区域分段:区分不同组成区域;
  • 蛋白家族建模:profile HMM 是重要工具;
  • motif / domain 分析:从噪声中寻找有结构的模式。

如果状态数为 K,观测长度为 T,那么经典 Viterbi 的时间复杂度约为:

O(TK2) O(TK^2)

当状态数较多时,计算代价会明显上升。

此外,HMM 本身也有简化假设:

  • 当前状态只依赖前一个状态(Markov 假设);
  • 当前观测只依赖当前状态;
  • 模型参数需要能够合理估计。

真实生物过程未必严格满足这些假设,因此 HMM 是有用但不万能的近似模型。

  • 教材中的基因预测常以 HMM 为核心例子;
  • profile HMM 是蛋白家族分析中的关键思想;
  • 很多”序列分段”问题都能在 HMM 框架下重述;
  • 在更复杂模型出现之前,HMM 往往是理解这类任务最清晰的第一站。
  • Durbin, R., Eddy, S., Krogh, A., & Mitchison, G. (1998). Biological Sequence Analysis: Probabilistic Models of Proteins and Nucleic Acids. Cambridge University Press.
  • Jones, N. C., & Pevzner, P. A. (2004). An Introduction to Bioinformatics Algorithms. MIT Press.
  • Eddy, S. R. (1998). Profile hidden Markov models. Bioinformatics, 14(9), 755-763.