HMM(隐马尔可夫模型)学习笔记

概述与直观理解 隐马尔可夫模型(Hidden Markov Model, HMM)是一类用于在“状态不可观测”的情况下,对系统演化过程进行建模和推断的概率模型。它解决的核心问题可以概括为一句话: 当真实世界的状态无法被直接观察时,我们是否仍然能够,仅凭观测到的现象,推断出系统最可能的内部状态变化过程? 为了理解这一点,可以从一个经典且直观的思想实验入手。 假设你被关在一个完全封闭的房间中,永远无法看到外界的天气状况。外面每天的真实天气只可能是三种之一:晴天、阴天或下雨。然而,你每天能够获得的唯一信息,是有人递给你一张纸条,上面记录着某个人当天吃了多少个冰淇淋。 你的目标并不是关心冰淇淋本身,而是希望根据这串“冰淇淋数量”的记录,推断外界每天最可能的天气情况,甚至进一步推断天气是如何随时间变化的。 这正是 HMM 所刻画的典型问题结构。 在这个故事中,天气是真实存在但无法直接观测的,而冰淇淋数量是你唯一能够看到的外显现象。HMM 的建模思想,正是通过对这两层信息之间的统计关系进行刻画,来完成"由现象反推本质"的推断过程。 HMM 的三要素结构 一个标准的 HMM 由三类核心要素构成:隐藏状态、观测值以及它们之间的概率规则。 1. 隐藏状态(Hidden States) 隐藏状态描述的是系统在每一个时间点所处的真实内部状态,但这些状态本身是不可被直接观察到的。 在天气—冰淇淋的例子中,隐藏状态集合可以理解为: 晴天、阴天、下雨 这些状态具有两个重要特征: 第一,它们在现实中确实存在,并且随时间发生变化; 第二,它们不会被直接“暴露”给观察者,而只能通过外在行为或现象间接体现出来。 HMM 的建模目标,正是对这条“看不见的状态序列”进行推断。 2. 观测值(Observations) 与隐藏状态相对的是观测值,即在每一个时间点,观察者能够直接获得的数据。 在本例中,观测值就是每天吃掉的冰淇淋数量,例如: 0 个、1 个、2 个 观测值本身并不是我们最终关心的对象,但它们与隐藏状态之间存在统计关联。正是这种关联,使得“从观测推断状态”成为可能。 3. 概率规则:状态如何演化,现象如何产生 HMM 并不试图通过确定性规则去描述世界,而是通过概率来刻画不确定性。这套概率规则只包含两类。 第一类是状态转移概率,用于描述隐藏状态随时间的演化方式。例如: 如果今天是晴天,那么明天仍然是晴天的概率有多大?变成下雨的概率又有多大? 这一假设反映了一个重要事实:现实世界的状态变化通常具有连续性和惯性,而不是完全随机地跳变。这正是“马尔可夫性”的核心含义——未来只依赖于当前状态,而与更久远的历史无关。 第二类是发射概率(观测概率),用于描述在某个隐藏状态下,观察到特定观测值的可能性。例如: 在晴天,人更有可能吃更多冰淇淋;而在下雨天,吃冰淇淋的概率则显著降低。 隐藏状态并不会直接告诉你"我是谁",它们只会通过观测值"间接露出痕迹"。HMM 正是通过这套概率桥梁,将不可见的状态与可见的现象连接起来。 HMM 要解决的三类核心问题 在明确了 HMM 的基本结构之后(隐藏状态、观测变量、转移概率、发射概率等),接下来的核心问题并不是“模型长什么样”,而是: 在这个模型之上,我们究竟能做哪些推断? 几乎所有关于 HMM 的实际应用——无论是语音识别、序列标注,还是时间序列建模——最终都可以归结为三类本质不同、但彼此紧密相关的问题。HMM 的整个算法体系,正是围绕这三类问题建立起来的。 第一类问题:给定模型,观测序列出现的概率是多少? 第一类问题可以表述为: 在模型参数完全已知的前提下,一段观测序列出现的概率有多大? 用数学语言来说,就是在已知模型参数 \[ \lambda = (\pi, A, B) \] 的情况下,计算某一观测序列...

十二月 24, 2025 · 3 分钟

DTW(动态时间规整)学习笔记

从一个直观问题开始 在处理音频、语音或其他时间序列数据时,我们几乎一定会遇到这样一个问题:如果两段信号在“内容”上是相似的,但在时间推进的速度上并不一致,我们还能不能判断它们是相似的吗? 这个问题在真实场景中非常常见。例如,两个人唱的是同一段旋律,但一个人唱得偏快、另一个人唱得偏慢;学生在视唱时可能会因为犹豫而放慢速度,唱错后回拉重唱,或者在某些位置突然加速;同一句话,被不同的人用不同的语速、不同的停顿方式说出来。 在这些情况下,如果我们强行要求“第 1 帧对第 1 帧,第 2 帧对第 2 帧”,那么几乎所有真实样本都会被简单粗暴地判定为“不相似”。 DTW(Dynamic Time Warping,动态时间规整) 正是为了解决这一类“时间轴对不上,但内容本质相似”的问题而提出的。它关注的并不是时间点是否严格一致,而是:在允许时间发生伸缩的前提下,两段序列能不能以一种合理的方式对应起来。 DTW 的核心思想:允许时间被拉伸 从直觉上看,DTW 的思想并不复杂。它并不要求两段序列在时间上同步前进,而是允许一段序列在某些地方“走快一点”,在另一些地方“走慢一点”,只要整体趋势和形状尽可能一致即可。换句话说,DTW 关注的是“形状是否相似”,而不是“时间是否对齐”。 在数学上,我们通常将两段时间序列表示为: \[ X = (x_1, x_2, \dots, x_N), \quad Y = (y_1, y_2, \dots, y_M) \] 这里的 \(x_i\) 和 \(y_j\) 并不是原始音频采样点,而是在第 \(i\)、第 \(j\) 个时间位置提取到的特征帧。需要注意的是,序列长度 \(N\) 和 \(M\) 并不要求相等,这本身就已经体现了“时间不必同步”的思想。 接下来,DTW 会构造一个大小为 \(N \times M\) 的距离矩阵: \[ D(i, j) = \lVert x_i - y_j \rVert \] 你可以把这个矩阵理解为一个全面的对照表:它回答的问题是,“序列 X 在第 \(i\) 个时刻的状态,与序列 Y 在第 \(j\) 个时刻的状态,到底有多不像?”...

十二月 23, 2025 · 2 分钟