隐马尔可夫模型(Hidden Markov Model, HMM)是序列建模的经典工具——当我们观察到一系列可见的输出时,如何推断背后隐藏的状态序列?从语音识别到词性标注,从生物信息学到金融时间序列, HMM 通过巧妙的动态规划算法解决概率计算、学习与预测三大基本问题。本章将深入推导前向后向算法的数学原理、 Viterbi 算法的最优路径求解、以及 Baum-Welch 算法的 EM 框架实现。
马尔可夫链:从无记忆到有限记忆
一阶马尔可夫假设
经典马尔可夫链:状态序列{S_1, S_2, , S_T} $ 满足
$$
P(S_t S_1, , S_{t-1}) = P(S_t S_{t-1}) $$
物理解释:未来只依赖于现在,与历史无关
齐次性假设:转移概率与时间无关
$$
P(S_t = j S_{t-1} = i) = a_{ij}, t $$
转移矩阵:
约束条件:
$$
a_{ij} , {j=1}^N a{ij} = 1 $$
天气预测示例
状态空间:{
转移矩阵:
解读:晴天后仍晴天的概率 80%,雨天后放晴的概率 40%
初始分布:
T 步后的状态分布:
$^{(T)} = ^T
稳态分布:当
对于上述天气例子,稳态分布为
HMM 的三要素与基本架构

核心组件
状态序列(不可观测): $ = {i_1, i_2, , i_T}
观测序列(可观测): $ = {o_1, o_2, , o_T}
三大参数:
- 初始状态概率:
,其中
$i = P(i_1 = i), {i=1}^N _i = 1
- 状态转移概率矩阵:
$$
a_{ij} = P(i_{t+1} = j i_t = i), {j=1}^N a{ij} = 1
- 发射概率矩阵(观测概率):
$$
b_j(k) = P(o_t = v_k i_t = j) $$
紧凑表示:
两个基本假设
齐次马尔可夫假设:
$$
P(i_t i_{t-1}, o_{t-1}, , i_1, o_1) = P(i_t i_{t-1}) $$
观测独立性假设:
$$
P(o_t i_T, o_T, , i_{t+1}, o_{t+1}, i_t, o_{t-1}, , i_1, o_1) = P(o_t i_t) $$
联合概率分解:
$$
P(, ) = {i_1} b{i_1}(o_1) {t=1}^{T-1} a{i_t i_{t+1}} b_{i_{t+1}} (o_{t+1}) $$
词性标注示例
观测序列:["我", "爱", "自然", "语言", "处理"]
隐状态:[代词, 动词, 形容词, 名词, 名词]
状态空间:
观测空间:
发射概率:
HMM 的三个基本问题
问题 1:概率计算问题
输入:模型
输出:观测序列概率
应用:模型评估、序列分类
直接计算(暴力枚举):
$$
P( ) = {} P(, ) = {} {i_1} b{i_1}(o_1) {t=1}^{T-1} a{i_t i_{t+1}} b_{i_{t+1}} (o_{t+1}) $$
复杂度:
问题 2:学习问题
输入:观测序列
输出:模型参数
应用:从数据学习模型
算法: Baum-Welch 算法( HMM 的 EM 算法)
问题 3:预测问题(解码)
输入:模型
输出:最可能的状态序列
应用:词性标注、语音识别
算法: Viterbi 算法(动态规划)
前向算法:从左到右的概率累积
前向概率定义
前向变量:_t(i)
终止目标:
$$
P( ) = _{i=1}^N _T(i) $$
递推公式推导
初始化(
递推(
应用 HMM 假设:
- 观测独立性:
- 马尔可夫性: 得到:
物理意义:从所有可能的前一状态
前向算法完整流程
输入:
步骤 1(初始化):对
步骤 2(递推):对$ t=1, , T-1
步骤 3(终止):
$$
P( ) = _{i=1}^N _T(i) $$
复杂度:
数值稳定性:对数空间计算
问题:连乘导致下溢(概率太小)
解决:使用_t(i)$
递推变为:
使用$ 技巧:
后向算法:从右到左的概率回溯
后向概率定义
后向变量:t(i)
与前向的关系:
$$
P( ) = _{i=1}^N _t(i) _t(i), t $$
递推公式推导
初始化(
约定:没有未来观测时概率为 1
递推(
应用 HMM 假设:
物理意义:从当前状态
后向算法完整流程
输入:
步骤 1(初始化):对
步骤 2(递推):对$ t=T-1, T-2, , 1
步骤 3(验证):
$$
P( ) = _{i=1}^N _i b_i(o_1) _1(i) $$
应与前向算法结果一致
前向后向的协同作用

联合概率分解:
$$
P(o_1, , o_T, i_t = i ) = _t(i) _t(i) $$
状态占据概率( Smoothing):
状态转移概率:
这些概率是 Baum-Welch 算法的核心!
Viterbi 算法:动态规划求解最优路径
问题形式化
目标:找到最可能的状态序列
与前向算法的区别: - 前向算法:对所有路径求和
Viterbi 变量定义

**_t(i)
**_t(i)
递推公式推导
初始化(
递推(
回溯指针:
物理意义:在所有到达状态
Viterbi 算法完整流程
输入:
步骤 1(初始化):对
步骤 2(递推):对$ t=2, , T
步骤 3(终止):
$$
P^{*} = _{1 i N} _T(i), i_T^{*} = _{1 i N} _T(i) $$
步骤 4(回溯):对
$$
i_t^{} = {t+1}(i{t+1}^{}) $$
输出:最优状态序列
对数 Viterbi 算法
数值稳定版本:
避免了连乘导致的下溢问题
Viterbi vs 前向算法
前向算法:
Viterbi 算法:
仅仅是$ 的替换!都是动态规划
Baum-Welch 算法: HMM 的 EM 框架
学习问题的形式化
观测数据:
隐变量:
参数:
目标:最大化似然
困难:对数似然含有隐变量的求和
无法直接求导优化!
EM 算法框架应用
E 步:计算 Q 函数
$$
Q(, ^{} ) = _{} P( , ^{} ) P(, ) $$
M 步:最大化 Q 函数
E 步详细推导
完全数据对数似然:
Q 函数展开:
引入期望统计量:
这些正是前向后向算法计算的!
Q 函数简化为:
$$
Q(, ^{} ) = {i=1}^N 1(i) i + {t=1}^{T-1} {i=1}^N {j=1}^N t(i, j) a{ij} + {t=1}^T {j=1}^N _t(j) b_j(o_t) $$
M 步详细推导
参数独立优化: Q 函数可分解为三部分
优化
目标:
拉格朗日函数:
求导:
约束条件:
最优解:
因为_k _1(k) = 1$(概率归一化)
优化
目标:对每个
拉格朗日函数:
求导:
最优解:
$$
a_{ij} = = $$
物理意义:从状态
优化
离散观测情况:对每个状态
$$
b_j(v_k) = $$
物理意义:在状态
连续观测情况(高斯分布):
$$
b_j(o) = (o _j, _j) $$
更新公式:
Baum-Welch 算法完整流程
输入:观测序列
初始化:随机初始化
迭代(直到收敛):
E 步:使用当前参数
M 步:更新参数
a_{ij}^{(k+1)} =
b_j^{(k+1)}(v_k) = $$
收敛判断:
代码实现:完整 HMM 工具包
前向后向算法实现
1 | import numpy as np |
Viterbi 算法实现
1 | def viterbi(self, observations): |
Baum-Welch 算法实现
1 | def baum_welch(self, observations, max_iter=100, tol=1e-6): |
词性标注应用示例
1 | def pos_tagging_example(): |
模型训练示例
1 | def train_hmm_example(): |
实战问题与优化技巧
初始化策略
问题: Baum-Welch 是局部优化,初始化很关键
方案:
- 均匀初始化:所有参数相等
- 随机初始化 + 多次重启:选择似然最高的
- K-means 预训练:用聚类结果初始化状态
- 专家知识:利用语言学规则初始化词性标注
平滑技术
零概率问题:未见过的转移/发射概率为 0
Laplace 平滑:
$$
a_{ij} = $$
通常取= 0.01$
缩放技术
问题:_t(i)$ 指数级衰减
前向算法缩放版本:
定义缩放因子:
$$
c_t = $$
缩放后的前向变量:
对数似然:
高阶 HMM
二阶 HMM:
$$
P(i_t i_{t-1}, i_{t-2}), a_{ijk} = P(i_t = k i_{t-1} = j, i_{t-2} = i) $$
状态爆炸:二阶需要
简化方案:插值平滑
$$
P(i_t i_{t-1}, i_{t-2}) = 1 a{i_{t-2}i_{t-1}i_t} + 2 a{i_{t-1}i_t} + 3 {i_t} $$
深入问答
Q1:前向算法和 Viterbi 算法的本质区别是什么?
A:两者都是动态规划,但前向算法对所有可能路径求和
仅仅是求和与求最大值的差异,导致前者给出边缘概率,后者给出 MAP 估计。
Q2:为什么 Baum-Welch 能保证似然单调上升?
A:这是 EM 算法的理论保证。 EM 算法每次迭代都保证:
关键在于 E 步构造的 Q 函数是对数似然的下界( ELBO), M 步最大化这个下界会推高真实似然。具体证明依赖于 Jensen 不等式和 KL 散度的非负性。
Q3: HMM 的局限性是什么?
A:三大局限: 1. 马尔可夫假设过强:未来只依赖当前状态,忽略长距离依赖 2. 观测独立性假设:当前观测只依赖当前状态,现实中观测可能相互依赖 3. 状态数固定:需要预先指定,难以自动确定(可用贝叶斯非参数方法如 iHMM 解决)
Q4: CRF 相比 HMM 有什么优势?
A: CRF 是判别式模型,直接建模
劣势是训练复杂度更高(需要计算配分函数)。
Q5:如何选择 HMM 的状态数?
A:三种方法: 1. 交叉验证:在验证集上测试不同
其中
Q6:前向后向算法的时间复杂度如何分析?
A:前向算法每个时刻$ t
Q7: Viterbi 算法为什么不直接用
A:因为
$$
P( ) = $$
但
Q8:如何处理连续观测(如语音信号)?
A:使用连续观测 HMM( CHMM),发射概率改为连续分布:
$$
b_j(o) = (o _j, _j) $$
或高斯混合模型( GMM):
$$
b_j(o) = {m=1}^M c{jm} (o {jm}, {jm}) $$
Baum-Welch 的 M 步相应修改为 EM 算法更新高斯参数。
Q9: HMM 能处理变长序列吗?
A:可以。对于不同长度的序列{^{(1)}, , ^{(K)}} $,似然为:
$$
P({^{(k)}} ) = _{k=1}^K P(^{(k)} ) $$
Baum-Welch 算法对每个序列分别进行 E 步, M 步时累加所有序列的期望统计量。
Q10:前向算法能用于实时解码吗?
A:可以!前向算法天然支持在线计算,每次新观测到
不需要未来信息。但 Viterbi 需要回溯,必须等序列结束。对于实时应用,可以用在线 Viterbi或beam search近似。
Q11: HMM 与 RNN 的关系是什么?
A: HMM 可以看作 RNN 的离散概率版本。两者都建模序列,但: - HMM:离散隐状态,转移概率固定,推断用动态规划 - RNN:连续隐状态,转移函数参数化(神经网络),推断用前向传播
现代深度学习中, RNN/LSTM 已基本替代 HMM,但 HMM 的推断算法(如 CTC)仍在语音识别中使用。
Q12:如何评估 HMM 模型质量?
A:三种方式: 1. 对数似然:P( )$
越高越好(但可能过拟合) 2. 解码准确率: Viterbi
预测的状态序列与真实标签的匹配度 3. 困惑度(
perplexity):
越低越好
参考文献
[1] Rabiner, L. R. (1989). A tutorial on hidden Markov models and selected applications in speech recognition. Proceedings of the IEEE, 77(2), 257-286.
[2] Baum, L. E., & Petrie, T. (1966). Statistical inference for probabilistic functions of finite state Markov chains. The Annals of Mathematical Statistics, 37(6), 1554-1563.
[3] Viterbi, A. (1967). Error bounds for convolutional codes and an asymptotically optimum decoding algorithm. IEEE Transactions on Information Theory, 13(2), 260-269.
[4] Jelinek, F. (1997). Statistical methods for speech recognition. MIT Press.
[5] Eddy, S. R. (1998). Profile hidden Markov models. Bioinformatics, 14(9), 755-763.
[6] Lafferty, J., McCallum, A., & Pereira, F. C. (2001). Conditional random fields: Probabilistic models for segmenting and labeling sequence data. ICML.
[7] Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. MIT Press. (Chapter 17: Hidden Markov Models)
[8] Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. (Chapter 13: Sequential Data)
[9] Ghahramani, Z., & Jordan, M. I. (1997). Factorial hidden Markov models. Machine Learning, 29(2-3), 245-273.
[10] Teh, Y. W., Jordan, M. I., Beal, M. J., & Blei, D. M. (2006). Hierarchical Dirichlet processes. Journal of the American Statistical Association, 101(476), 1566-1581.
- 本文标题:机器学习数学推导(十五)隐马尔可夫模型
- 本文作者:Chen Kai
- 创建时间:2021-11-17 10:00:00
- 本文链接:https://www.chenk.top/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E6%95%B0%E5%AD%A6%E6%8E%A8%E5%AF%BC%EF%BC%88%E5%8D%81%E4%BA%94%EF%BC%89%E9%9A%90%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E6%A8%A1%E5%9E%8B/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!