try ai
科普
编辑
分享
反馈
  • 隐马尔可夫模型

隐马尔可夫模型

SciencePedia玻尔百科
核心要点
  • 隐马尔可夫模型是一种统计工具,用于通过转移概率和发射概率,从一系列可观察的“发射”中推断出不可观察的“隐藏”状态。
  • HMM 的三个基本任务——评估、解码和学习——分别通过前向算法、维特比算法和 Baum-Welch 算法得到高效解决。
  • 马尔可夫性质假设当前状态仅取决于前一个状态,这是一个关键的简化,使得 HMM 在计算上变得可行。
  • HMM 用途广泛,在基因组学中的基因发现、金融学中的波动性分析以及进化生物学中重建种群历史等方面都有强大的应用。
  • 像 Profile HMM 这样的高级结构在生物信息学中至关重要,它通过对保守位置以及插入/缺失进行建模来识别蛋白质家族。

引言

无论在哪里我们发现序列数据——一串字符、一系列随时间变化的测量值、一连串事件——我们常常会怀疑有一个潜在的、未被观察到的过程在驱动我们所看到的模式。隐马尔可夫模型(HMM)是一个强大的统计框架,旨在揭示这些隐藏的过程。它提供了一种形式化语言,用于对那些真实状态不可见但其效应可被观察到的系统进行建模。HMM 所解决的核心挑战是弥合可观察数据与其隐藏原因之间的鸿沟,使我们能够解码驱动我们所见事件的秘密叙事。

本文将对隐马尔可夫模型进行全面的探讨。首先,我们将深入探讨其​​原理与机制​​,剖析模型的核心组成部分、其基础的马尔可夫性质,以及使其得以工作的精妙动态规划算法。您将了解到 HMM 如何解决评估、解码和学习这三大问题。随后,我们将遨游于其多样的​​应用与跨学科联系​​之中,探索这一数学思想如何被用作一种通用解码器,在 DNA 中寻找基因、预测金融市场状况、重建人类进化史,甚至观察单个分子的舞动。

原理与机制

想象一下,你有一位朋友,他住在遥远的城市,是一位相当古怪的气象学家。他从不直接告诉你天气如何,每天只告诉你他是否带了雨伞。根据这一系列‘带伞’或‘没带伞’的观测,你想要推断出必然发生过的天气状况序列——‘晴天’、‘多云’或‘雨天’。你会如何着手解决这个问题?

这个小谜题包含了隐马尔可夫模型(HMM)的全部精髓。这是一个有两层的故事。第一层是你所能看到的:​​观测值​​(雨伞)。第二层是你所看不到的,即观测背后的原因:​​隐藏状态​​(天气)。HMM 是一种用于对这个隐藏层进行推理的工具,一种揭示驱动我们所观察事件的秘密叙事的方法。

为了建立我们的模型,我们需要对我们的朋友和天气做一些合理的假设。

看不见的世界的逻辑

首先,我们知道天气并非日复一日地完全随机。雨天之后更有可能是另一个雨天,而不是晴天。这种关系——从一个隐藏状态转移到另一个隐藏状态的概率——由​​转移概率​​来捕捉。

其次,我们朋友带伞的决定显然受到天气的影响。他很可能在雨天带伞,可能偶尔在多云天带伞,而在晴天几乎从不带伞。这种隐藏状态与可观察事件之间的联系由​​发射概率​​来决定。

最后,为了开始我们的推断,我们需要一个起点。在我们观测的第一天,天气可能是什么样的?这就是​​初始状态分布​​。

这三个组成部分——初始分布、转移概率和发射概率——是定义一个隐马尔可夫模型的完整参数集。它们提供了一个完整的​​生成模型​​,一个用于产生无穷多种观测序列的概率性配方。

机器的记忆:马尔可夫性质

我们所做的最关键的假设在于状态转移。我们假设明天的天气只取决于今天的天气,而不是上周以来的整个天气历史。如果我们知道今天下雨,那么两天前是晴天这一事实并不会为我们提供关于明天是否会多云的任何额外信息。这就是​​马尔可夫性质​​,也是使 HMM 在计算上变得可行的关键。

这是一个强大的简化假设。例如,在自然语言处理中,HMM 用于词性标注,其中隐藏状态是语法标签(名词、动词、形容词),而观测值是单词本身。该模型假设当前单词的标签仅取决于前一个单词的标签。这种“无记忆性”使得模型的算法能够如此高效地工作。

当然,这个假设有其局限性。在语言中,一个词的功能可能取决于句子中更早出现的词。一阶 HMM 由于其本质,不善于捕捉这种长程依赖关系。马尔可夫性质是一种权衡:我们牺牲了对复杂长距离关系建模的能力,以换取一个我们实际上可以操作的模型的巨大好处。

模型的蓝图

有了这些部分,我们就可以写下模型的完整蓝图。观测到一个特定的词序列(或带伞事件序列)X=(x1,x2,…,xT)X = (x_1, x_2, \dots, x_T)X=(x1​,x2​,…,xT​) 并且 一个特定的隐藏状态序列 Z=(z1,z2,…,zT)Z = (z_1, z_2, \dots, z_T)Z=(z1​,z2​,…,zT​) 的概率,就是我们生成故事中所有概率步骤的乘积。

我们从状态 z1z_1z1​ 开始(概率为 πz1\pi_{z_1}πz1​​),发射第一个观测值 x1x_1x1​(概率为 P(x1∣z1)P(x_1|z_1)P(x1​∣z1​)),然后转移到状态 z2z_2z2​(概率为 P(z2∣z1)P(z_2|z_1)P(z2​∣z1​)),发射第二个观测值 x2x_2x2​(概率为 P(x2∣z2)P(x_2|z_2)P(x2​∣z2​)),以此类推。整个历史的联合概率是这些步骤链接在一起的乘积:

P(X,Z)=πz1P(x1∣z1)∏t=2TP(zt∣zt−1)P(xt∣zt)P(X, Z) = \pi_{z_1} P(x_1 | z_1) \prod_{t=2}^{T} P(z_t | z_{t-1}) P(x_t | z_t)P(X,Z)=πz1​​P(x1​∣z1​)t=2∏T​P(zt​∣zt−1​)P(xt​∣zt​)

这个因式分解是 HMM 的核心方程。它可能看起来有点吓人,但它只是用数学语言讲述的我们的天气故事。这个单一的表达式是我们可以推导出 HMM 所有神奇能力的基础。

三大问题

一旦我们定义了一个 HMM,我们就可以提出三个基本问题。回答这些问题使我们能够将模型付诸实践。

评估问题:这个观测序列的可能性有多大?

假设我们有两个用于分析 DNA 的 HMM。一个是“背景”模型,代表基因组的典型片段。另一个是“CpG 岛”模型,代表具有特定生物学意义的区域。给定一个新的 DNA 序列,我们如何决定哪个模型更有可能产生它?这就是评估问题。

最直接的方法是通过对可能生成该序列的所有可能隐藏状态路径的概率求和,来计算该序列在某个模型下的概率。但是,对于一个长度为 TTT、有 KKK 个状态的序列,存在 KTK^TKT 条可能的路径——这个数字很快就会变得天文般巨大。这种暴力方法是行不通的。

精妙的解决方案是​​前向算法​​。这是动态规划的一个绝佳例子。我们不跟踪每一条路径,而是在每个时间步 ttt 为每个状态 iii 计算一个值 αt(i)\alpha_t(i)αt​(i)。这个值,即​​前向变量​​,代表观测到序列的前 ttt 个符号并且最终处于状态 iii 的联合概率。

αt(i)=P(x1,x2,…,xt,zt=i)\alpha_t(i) = P(x_1, x_2, \dots, x_t, z_t=i)αt​(i)=P(x1​,x2​,…,xt​,zt​=i)

通过从一个时间步到下一个时间步递归地计算这些值,我们巧妙地将所有通向给定状态的路径捆绑在一起。最后,我们只需将所有状态的最终 αT(i)\alpha_T(i)αT​(i) 值相加,即可得到该序列的总概率。这将一个指数级问题转化为一个线性问题,计算成本约为 O(K2T)O(K^2 T)O(K2T),使不可能成为可能。

解码问题:隐藏的故事是什么?

这又回到了我们的天气谜题。给定一系列带伞的观测记录,发生过的最可能的天气状态序列是什么?这就是解码问题。

一个常见的错误是认为我们只需在每个独立的时间步找到最可能的状态。但这可能会得到一个无效的状态序列(例如,一个概率为零的转移)。我们需要的是贯穿整个序列的唯一最佳路径。

答案是另一个动态规划的奇迹:​​维特比算法​​。它的运作方式与前向算法几乎完全相同,但在每一步,它不是对来自前一状态的概率求和,而是取最大值。它不仅记录到达一个状态的最大概率,还记录是哪个前一状态导致了这个最大值。当算法到达序列末尾时,它可以通过回溯这条“最佳选择”链来揭示最可能的单一隐藏路径。

该算法在现实世界中有惊人的应用。在计算生物学中,蛋白质序列可以通过一个 HMM 库进行建模,其中每个模型代表一个已知的蛋白质结构域。当分析一个新的、长的、具有多个、模糊且重叠的潜在结构域匹配的蛋白质时,可以在一个大型复合 HMM 上使用维特比算法。它会筛选所有可能性,并返回整个蛋白质的单一、全局最优的“结构域解析”,提供一个解决了所有局部模糊性的连贯生物学注释。

学习问题:我们如何构建这个机器?

到目前为止,我们都假设已经知道了转移概率和发射概率。但它们从何而来?我们必须从数据中学习它们。这就是训练或学习问题。

如果我们有一个数据集,其中观测值和隐藏状态都是已知的,那这就很容易了——我们只需计算每个转移和发射的发生次数,并将它们归一化为概率。但状态是隐藏的!我们陷入了一个经典的先有鸡还是先有蛋的困境:要找到状态,我们需要参数;但要找到参数,我们需要状态。

解决方案是一种称为 ​​Baum-Welch 算法​​的迭代方法,它是通用的​​期望最大化(EM)​​算法的一个特例。其工作方式如下:

  1. 从对参数的随机猜测开始。
  2. ​​期望步骤(E-step):​​ 给定当前参数,使用前向和后向算法(一种与前向算法类似但从序列末尾开始工作的算法)来计算每个转移和发射发生的期望次数。这就像一个“软”计数版本,我们将计数概率性地分布在所有可能的路径上。
  3. ​​最大化步骤(M-step):​​ 使用这些期望计数来重新估计参数,就像我们用直接计数法做的那样。
  4. 重复步骤 2 和 3。每次迭代都保证会提高模型生成数据的似然性,直到收敛到一组最优参数。

从简单链到复杂架构

HMM 的真正魅力在于其灵活性。基本模型是一个简单的链,但我们可以构建出惊人复杂的架构来模拟现实世界的现象。

在生物信息学中,一个简单的序列基序可以由位置特异性评分矩阵(PSSM)表示,这不过是一个具有线性“匹配”状态链且没有插入或删除的简单 HMM。真正的威力来自于我们通过增加另外两种状态来创建​​Profile HMM​​:​​插入状态​​(用于模拟序列相对于家族共有序列的插入)和​​删除状态​​(它们是静默的,允许模型跳过某些位置)。这种结构既捕捉了位置特异性的氨基酸偏好,又捕捉了位置特异性的空位罚分,因此在寻找远缘进化亲属方面,比依赖于位置非特异性评分的 BLAST 等方法要灵敏得多。

我们甚至可以组合 HMM 来表示更复杂的假设。想象一个已知的蛋白质结构域存在两种完全不同、相互排斥的三维折叠方式。我们可以通过构建两个独立的 profile HMM(每种折叠方式一个),然后在开头添加一个分支点,以概率方式选择进入哪个子模型,从而构建一个单一的、统一的模型。这创建了一个更大的、有效的 HMM,可以同时针对两种折叠假说对一个序列进行评分,完美地展示了 HMM 作为一种模块化建模语言的强大功能。

选择合适的机器:一个平衡问题

拥有了所有这些建模能力后,一个实际问题随之而来:我们的模型应该多复杂?例如,我们应该使用多少个隐藏状态?状态越多的模型参数也越多,几乎总能在训练数据上获得更高的似然值。但这可能导致​​过拟合​​,即模型学习了数据中的噪声而非其潜在的信号。

为了解决这个问题,我们使用像​​贝叶斯信息准则(BIC)​​这样的模型选择标准,它在模型拟合度(似然)和复杂性(自由参数的数量)之间进行权衡。BIC 对参数更多的模型进行惩罚,迫使我们必须用拟合度的显著提升来证明增加复杂性的合理性。

这触及了统计学中一个深刻而基本的概念:​​偏差-方差权衡​​。让我们将 HMM 与一个现代、强大的深度学习模型,如循环神经网络(RNN),在一个序列标注任务上进行比较。

  • RNN 极其灵活,是一个具有极低偏差的“通用逼近器”;原则上,它可以学习几乎任何模式。然而,这种灵活性是以高方差为代价的;它的预测可能对所见的特定训练数据非常敏感,使其容易过拟合,尤其是在小数据集上。
  • 而 HMM,由于其严格的马尔可夫假设,具有高偏差;它可能是“错误”的,因为它无法捕捉真实数据生成过程的全部复杂性。但这种结构上的刚性也使其具有低方差;其参数更稳定,更不容易过拟合。

这就是为什么在一个数据有限的假设情景中,HMM 实际上可以胜过更强大的 RNN。当数据稀缺时,HMM 的强假设起到了一种宝贵的正则化作用,防止它学习到虚假的模式。更简单的 HMM 的误差将主要由其偏差主导,而复杂的 RNN 的误差将主要由其方差主导。对于少量样本,RNN 的方差驱动误差可能大于 HMM 的偏差驱动误差,使得“更简单”的模型成为更好的选择。

归根结底,隐马尔可夫模型不仅仅是一种算法,它更是一种思维方式。它教会我们将世界看作一个由隐藏原因和可见效应构成的过程,欣赏简化假设的力量,并理解模型对现实的保真度与其在不确定性面前的鲁棒性之间深刻而美妙的权衡。

应用与跨学科联系

在掌握了隐马尔可夫模型的数学机制——构成其核心的状态、转移和发射之后——我们现在可以踏上一段旅程,去看看这个美妙的想法将我们引向何方。这真是一段奇妙的旅程!HMM 不仅仅是一个抽象的统计工具,它是一种通用解码器,一个概率透镜,让我们能够感知几乎科学每个角落里的隐藏结构和过程。无论我们在哪里发现序列数据——一串字符、一系列随时间变化的测量值、一连串事件——我们常常会怀疑有一个潜在的、未被观察到的过程在驱动我们所看到的模式。HMM 为我们提供了一种形式化语言来描述这种怀疑,以及一个强大的引擎来检验它。我们发现,无论是在解读生命之书、重建我们物种的历史、预测金融市场的情绪,还是甚至观察单个分子的舞动,同样的基本逻辑都适用。

解读生命之书

HMM 最成熟、最多样化的应用或许是在计算生物学中,在这里,基因组——一个由数十亿个字母组成的序列——呈现了终极的编码信息。HMM 是注释这段浩瀚文本的完美工具,它不仅能找到字母,还能找到单词、标点和语法。

一个简单而又基本的任务是将基因组解析为不同的功能区域。DNA 的某些部分由简单的重复序列组成,而其他部分则信息丰富。我们可以构建一个双状态 HMM 来自动区分这些区域。让我们想象两个隐藏状态:一个“低复杂度”状态和一个“高复杂度”状态。低复杂度状态可能具有很高的概率重复发射同一个核苷酸(比如腺嘌呤‘A’),而高复杂度状态则以更均匀的概率发射所有四种核苷酸。通过将 DNA 序列输入该模型,我们可以使用维特比算法推断出与 DNA 并行运行的最可能的隐藏状态序列。这提供了一种动态且有原则的方法来分割基因组,揭示一个隐藏的注释轨道,它可能会说:“这段是重复的……这部分是复杂的……这部分又是重复的”。

当状态代表更复杂的生物学概念时,这种分割的想法变得更加强大。20世纪90年代基因组学的核心挑战是基因发现:定位编码蛋白质的 DNA 区域。用于基因发现的 HMM 可能包含“编码区”、“内含子”和“基因间区”等状态。其魔力在于发射概率。“编码”状态发射的不是单个核苷酸,而是密码子(核苷酸三联体)。此外,其发射概率并非均匀。由于生物学压力,编码相同氨基酸的不同密码子的使用频率不同,这种现象被称为密码子偏好。通过构建一个 HMM,使其“编码”状态的发射反映已知的密码子使用统计数据(如相对同义密码子使用度,或 RSCU),我们创建了一个能够“调谐”到真实基因统计特征的模型。转移也提供了信息:模型学习到一旦进入编码状态,很可能会在其中停留几百个密码子,然后再转移出去。

同样的原理从基因延伸到它们编码的蛋白质。蛋白质是由氨基酸链折叠成的功能单元,称为结构域。一个相关结构域家族共享一个共同的序列“概貌”(profile)。我们可以用一种特殊类型的 HMM,即 ​​profile HMM​​,来捕捉这种概貌,它有一系列线性的“匹配”状态,对应于结构域中的保守位置。通过用这个 profile HMM 对一个新的蛋白质序列进行评分,我们可以计算出该序列由我们的结构域模型生成相对于由一个随机“空”模型生成的可能性高多少。这个分数,通常表示为对数奇数比,或 log-odds 分数,为我们提供了一个统计上稳健的度量,以判断该蛋白质是否包含该结构域。这正是像 Pfam 这样的大型生物数据库背后的引擎,它们使用一个包含数千个 profile HMM 的库来自动注释科学家发现的每一个新蛋白质序列。

HMM 框架足够灵活,不仅可以模拟简单的线性结构域,还可以模拟复杂的“语法”结构。一些蛋白质结构域,如 β-螺旋桨结构,由数量可变的重复单元或“桨叶”组成。一个简单的线性 HMM 在这里会失败。相反,需要一种更复杂的架构:将单个桨叶的 profile HMM 嵌入到一个更大的结构中,该结构允许模型循环回来生成另一个桨叶,再一个,如此反复。这种架构可以自然地处理可变数量的重复,并且通过巧妙的设计,甚至可以解释“环状排列”,即蛋白质的序列被打乱,使得第一个桨叶连接到最后一个的末尾。

基因组的“隐藏文本”不仅存在于 DNA 序列本身,还存在于对 DNA 及其包装蛋白(组蛋白)的复杂化学修饰中。这些“表观遗传”标记形成了一个调控层,决定了哪些基因是活性的或沉默的。像 ChIP-seq 这样的现代技术可以测量整个基因组中数十种这样的组蛋白标记。一个多变量 HMM 可以同时接收多个标记的数据,并将基因组分割成少数几个“染色质状态”,如“活性启动子”、“增强子”或“抑制状态”。在这里,隐藏状态是染色质状态,每个位置的观测不再是单个符号,而是所有标记的测量向量。发射概率被建模为每个标记概率的乘积,假设它们在给定隐藏状态下是独立的。为了处理测序数据的噪声和定量特性(它们是整数计数),这些模型超越了简单的伯努利发射,采用了更合适的统计分布,如负二项分布,并嵌入到可以校正实验偏差的广义线性模型框架中。其结果是一幅基因组功能景观图,完全由 HMM 从原始生化数据中推断出来。

解读时间的脉动

HMM 的威力远远超出了生物学的静态序列,延伸到了动态、不断展开的时间序列。每当我们有一个观测的时间序列时,我们都可以问是否存在一个隐藏的“状态”或“状况”在调节这个过程。

考虑动荡的金融世界。股票或指数的每日回报率通常看起来像随机游走。然而,金融分析师早就观察到,市场似乎在不同的“情绪”之间切换:平静、低波动的时期和动荡、高波动的时期。HMM 是将这种直觉形式化的完美工具。我们可以提出一个双状态模型:“低波动”状态和“高波动”状态。关键在于这些状态的发射分布是不同的。低波动状态可能发射服从标准差较小的高斯(正态)分布的收益率。而高波动状态,则可能用学生 t 分布来描述更好,因为后者具有“重尾”,能更好地解释动荡市场中特有的突然、大幅度的价格波动。通过将这个模型拟合到股票收益率的时间序列上,我们可以推断出市场状况的隐藏序列,并在任何给定时刻计算出我们处于平静还是动荡状态的概率。

这套同样的逻辑——使用 HMM 推断一个随时间演变的隐藏过程——在进化生物学中展现出惊人的规模。正如我们可以从价格波动中解读市场情绪一样,我们也可以通过分析单一个体基因组上的遗传变异模式来推断我们自己物种的种群历史。成对顺序马尔可夫溯祖(PSMC)方法是基于这一思想的里程碑式成就。你基因组上任何一点的隐藏状态是“最近共同祖先的时间”(TMRCA)——即你必须追溯多远的时间,你的两条染色体(分别来自父母)才能找到它们的共同祖先。这个 TMRCA 并非恒定不变;由于历史重组的混合效应,它沿着基因组变化。在 PSMC 的 HMM 中,TMRCA 状态之间的转移是由重组驱动的。发射是观测到的杂合位点(你的两条染色体拷贝不同的地方),其密度与 TMRCA 成正比。溯祖理论告诉我们,TMRCA 的分布又是历史有效种群大小 Ne(t)N_e(t)Ne​(t) 的函数。通过找到能最好地解释观测到的杂合性模式的 HMM 参数,PSMC 可以重构我们祖先种群大小在数十万年间兴衰起伏的图景。这是一个 HMM 充当时间机器的惊人例子。

在我们重建历史的过程中,HMM 也是一个确保数据完整性的强大工具。在遗传图谱构建中,我们通过家系追踪重组事件。在染色体上三个紧密连锁的标记上观测到像“A-B-A”这样的基因型,这提出了一个难题。这是两个罕见的生物学事件——双交换——的结果,还是一个更常见的技术故障——中间标记的基因分型错误——的结果?HMM 提供了一种严谨的决策方法。亲本等位基因的真实序列是隐藏状态,而观测到的(可能错误的)基因型是发射。重组是转移,错误是发射。通过计算给定数据下“错误”假说与“双交换”假说的后验概率,模型可以有效地“清洗”遗传图谱,防止技术噪声被误解为生物学信号。

观察单个分子的舞动

我们的旅程在生物学最基本的层面达到高潮:单个分子的行为。像电压门控离子通道这样的蛋白质是一种微观机器,它在不同的物理形状或构象状态(例如,关闭、开放、失活)之间翻转。我们无法直接看到这种舞动。我们能测量的是当通道打开时流过的微小电流。这个记录是含噪声的,但其中埋藏着通道构象变化的故事。

这是一个完美的 HMM 场景。隐藏状态是蛋白质真实的、离散的构象状态。观测值是连续的、含噪声的电流测量值。每个状态的发射是一个高斯分布,其中心位于该状态的电流水平(例如,关闭状态为 000 皮安,开放状态为几皮安)。通过将这样的 HMM 拟合到原始电流记录中,我们可以推断出最可能的构象状态序列——实际上,我们可以一步步地重建分子的舞动。对这些状态的停留时间(通道保持开放或关闭的时长)的分析揭示了其机制的深层真相。例如,如果关闭时间的分布最好用三个指数函数的和来描述,这意味着通道的动力学方案中必须至少有三个不同的关闭状态。在特定电压下出现一个非常长寿的关闭状态(毫秒级)可以被识别为慢失活的生物物理过程。至关重要的是,这种 HMM 方法远优于简单地在电流上设置阈值。通过使用连续时间模型进行转移(P=exp⁡(QΔt)P=\exp(Q\Delta t)P=exp(QΔt),其中 QQQ 是转移速率矩阵)并最大化原始数据的似然,即使事件非常短暂以至于被记录设备模糊或完全错过,HMM 也能正确推断其动力学。

从人类进化的宏大画卷到单个蛋白质的狂热舞动,隐马尔可夫模型已被证明是一个惊人地多功能且强大的思想。它为我们提供了一种谈论隐藏过程的语言和一种揭示它们的方法论。它的美在于这种统一性——在 DNA 中寻找基因的核心逻辑同样可以用于在股票价格中寻找波动性区域和在蛋白质中寻找构象变化。这是一个深刻的证明,说明一个简单的数学结构如何能够照亮我们周围复杂、隐藏的世界。