Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Hidden Markov Model (HMM)

隐马尔可夫模型(HMM)根据含噪观测推断隐藏状态序列。内容涵盖其参数、维特比算法和应用。

隐马尔可夫模型 (HMM) 是一种序列概率模型,其中系统会在无法直接观测的状态之间转换,而每个隐藏状态都会生成一个可以观测到的观测值。给定一组观测值(例如音频帧或 DNA 字母),HMM 会计算每种隐藏状态序列的可能性,例如音频背后的音素或字母背后的基因区域。“马尔可夫”指的是其核心假设:下一个状态只取决于当前状态。Leonard Baum 及其同事在 20 世纪 60 年代末发展了这套理论,HMM 随后在数十年间推动了语音识别的发展。HMM 完全由显式概率构成,至今仍是时间序列分析和生物信息学中的标准工具,也是统计 AI的经典范例。

HMM 的组成部分#

一个包含 N 个隐藏状态的 HMM 由三组概率定义:

  • 初始概率 (π):从每个隐藏状态开始的概率。
  • 转移概率 (A):一个 N × N 矩阵,其中条目 A[i, j]表示一步内从状态 i 转移到状态 j 的概率,这使隐藏状态构成一个马尔可夫链。
  • 发射概率 (B):给定当前状态时每种观测值出现的概率。离散观测值使用表格;连续观测值(例如声学特征)则使用高斯混合等分布。

两个假设让模型保持易于处理:每个状态只取决于前一个状态,每个观测值只取决于当前状态。按时间展开后,模型就是一条由隐藏状态组成的链,每个状态都会发射一个观测值:

HMM 的三个经典问题#

Lawrence Rabiner 在广受引用的 1989 年教程中,将 HMM 的应用归纳为三个问题。每个问题都有一个动态规划解法,其计算成本随观测数量 T 按 N² × T 增长,而非随 Nᵀ 种可能的状态序列增长:

  • 评估:给定模型下,某个观测序列出现的可能性有多大?前向算法会对所有隐藏路径求和,因此识别器可以据此选择最能解释一段话语的词语模型。
  • 解码:哪种隐藏状态序列最能解释这些观测值?维特比算法由 Andrew Viterbi 于 1967 年发表,用于卷积码解码;它可以找出概率最高的单一路径,而前向后向算法则能给出每个时间步处于各状态的概率。
  • 学习:哪些参数最适合一组观测序列?Baum-Welch 算法是期望最大化算法的一个实例,可根据未标注序列估计 π、A 和 B。如果状态序列已标注,只需统计转移和发射次数即可。

用几行 NumPy 代码就能实现维特比解码。在这个模型中,一个人的活动(走路或跑步)是隐藏状态,跟踪器会为每帧提供一条速度读数,而活动往往会持续多个帧:

import numpy as np

states = ["walk", "run"]
start = np.array([0.8, 0.2])  # 初始状态概率
trans = np.array([[0.9, 0.1], [0.1, 0.9]])  # 活动往往会持续多个帧
emit = np.array([[0.7, 0.25, 0.05], [0.1, 0.3, 0.6]])  # P(speed | state),对应慢速、中速、快速
obs = [0, 0, 2, 0, 0, 1, 2, 2, 1, 2]  # 逐帧速度读数

# 维特比:到达每个状态的最高对数概率,以及回溯指针
logp = np.log(start) + np.log(emit[:, obs[0]])
back = []
for o in obs[1:]:
    scores = logp[:, None] + np.log(trans)  # 行:前一个状态;列:下一个状态
    back.append(scores.argmax(axis=0))
    logp = scores.max(axis=0) + np.log(emit[:, o])

# 从概率最高的最终状态开始,向后追溯最可能的状态序列
path = [int(logp.argmax())]
for pointers in reversed(back):
    path.insert(0, int(pointers[path[0]]))
print("Speeds: ", " ".join(["slow", "medium", "fast"][o] for o in obs))
print("Decoded:", " ".join(states[s] for s in path))

它会解码 walk walk walk walk walk run run run run run。第 3 帧的快速读数仍被判定为“走路”,因为切换到跑步后再切回来需要进行两次不太可能的状态转移;第 6 帧和第 9 帧的中速读数则会被判定为“跑步”,因为前后都有快速帧。忽略状态转移的逐帧分类器会将第 3 帧标记为跑步。

  • 卡尔曼滤波器:对于具有线性动态特性和高斯噪声的连续状态,它会执行相同的预测与更新递归过程。HMM 的前向算法是它在离散状态下的对应方法。
  • 贝叶斯网络:HMM 是最简单的动态贝叶斯网络,每个时间步包含一个隐藏变量和一个观测变量。
  • 马尔可夫决策过程 (MDP):在状态可观测的马尔可夫链中加入动作和奖励,是强化学习背后的框架。
  • 循环神经网络和Transformer:从大型数据集中学习长程非线性依赖关系,并已在大多数语音和语言任务中取代 HMM。HMM 所需数据少得多,而且其每个概率都可以直接读取。
  • 状态空间模型 (SSM):Mamba 等深度学习层沿用了控制理论中的状态空间思想,并通过学习得到的确定性动态特性更新连续隐藏向量。

实际应用#

  • 语音识别:从 20 世纪 80 年代到 2010 年代初,大多数识别器都使用带有高斯混合发射概率的小型 HMM 对每个音素建模。随后,深度神经网络在混合系统中接管了发射模型,之后端到端模型又完全取代了 HMM。
  • 生物信息学:剖面 HMM 用于描述相关蛋白质或 DNA 序列家族。HMMER利用这类模型在序列数据库中搜索远缘相关序列,并为 Pfam 蛋白质家族数据库提供支持;基因预测工具也会用 HMM 将基因组片段标注为编码区或非编码区。
  • 词性标注:早期的统计自然语言处理会通过对词性序列进行维特比解码,将单词标注为名词、动词和其他词性。
  • 活动识别:身体姿态序列或可穿戴传感器读数序列可以解码为站立、行走或跌倒等活动。Ultralytics 的运动监测解决方案会跟踪这类双状态序列:它根据 YOLO26 姿态估计关键点的关节角度(默认使用肘部),将每个人标记为“抬起”或“放下”;角度超过 145° 时切换到“抬起”,低于 90° 时切换到“放下”,并在每次从抬起变为放下时计数一次。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来