【机器学习】2.隐马尔可夫模型(Hidden Markov Model,HMM)

隐马尔可夫模型(HMM)系统知识梳理

隐马尔可夫模型(Hidden Markov Model,HMM)是时序概率图模型的核心代表,属于生成式模型,核心是通过隐藏状态序列生成观测状态序列。它广泛应用于语音识别、自然语言处理、生物信息学等领域。

本文将从核心要素、基本假设、三大核心问题及对应算法、案例实践四个维度,系统梳理HMM的知识体系。

一、 HMM的核心定义与要素

HMM是一个双重随机过程

  1. 隐藏状态的转移过程是马尔可夫链(不可观测);
  2. 每个隐藏状态生成一个观测状态的过程是随机发射过程(可观测)。

1.1 5个核心要素

HMM的模型参数可表示为 λ=(π,A,B)\lambda = (\pi, A, B)λ=(π,A,B),包含以下5个要素,用表格总结如下:

要素名称符号定义维度约束条件
隐藏状态集合S={s1,s2,...,sN}S = \{s_1, s_2, ..., s_N\}S={s1,s2,...,sN}模型内部不可观测的状态,是马尔可夫链的状态NNN 为隐藏状态数-
观测状态集合O={o1,o2,...,oM}O = \{o_1, o_2, ..., o_M\}O={o1,o2,...,oM}模型外部可观测的状态,由隐藏状态生成MMM 为观测状态数-
初始状态概率分布π={πi}\pi = \{\pi_i\}π={πi}t=1t=1t=1 时刻处于隐藏状态 sis_isi 的概率1×N1 \times N1×N∑i=1Nπi=1,πi≥0\sum_{i=1}^N \pi_i = 1, \pi_i \ge 0i=1Nπi=1,πi0
状态转移概率矩阵A={aij}A = \{a_{ij}\}A={aij}ttt 时刻状态 sis_isi 转移到 t+1t+1t+1 时刻状态 sjs_jsj 的概率N×NN \times NN×N∑j=1Naij=1,aij≥0\sum_{j=1}^N a_{ij} = 1, a_{ij} \ge 0j=1Naij=1,aij0
观测概率矩阵(发射矩阵)B={bj(k)}B = \{b_j(k)\}B={bj(k)}隐藏状态 sjs_jsj 生成观测状态 oko_kok 的概率N×MN \times MN×M∑k=1Mbj(k)=1,bj(k)≥0\sum_{k=1}^M b_j(k) = 1, b_j(k) \ge 0k=1Mbj(k)=1,bj(k)0

1.2 3个基本假设

HMM的所有算法均基于以下3个关键假设,这是模型简化的核心前提:

  1. 齐次马尔可夫性:任意时刻的隐藏状态仅依赖于前一时刻的隐藏状态,与更早的状态和当前时刻无关。
    P(it∣it−1,it−2,...,i1,O1,O2,...,Ot)=P(it∣it−1)P(i_t | i_{t-1}, i_{t-2}, ..., i_1, O_1, O_2, ..., O_t) = P(i_t | i_{t-1})P(itit1,it2,...,i1,O1,O2,...,Ot)=P(itit1)
    其中 iti_tit 表示 ttt 时刻的隐藏状态,OtO_tOt 表示 ttt 时刻的观测状态。
  2. 观测独立性:任意时刻的观测状态仅依赖于当前时刻的隐藏状态,与其他状态和观测无关。
    P(Ot∣it,it−1,...,i1,O1,...,Ot−1,Ot+1,...,OT)=P(Ot∣it)P(O_t | i_t, i_{t-1}, ..., i_1, O_1, ..., O_{t-1}, O_{t+1}, ..., O_T) = P(O_t | i_t)P(Otit,it1,...,i1,O1,...,Ot1,Ot+1,...,OT)=P(Otit)
  3. 时序无后效性:模型的状态转移概率和观测概率不随时间变化(即时齐性)。

二、 HMM的三大核心问题及对应算法

HMM的所有应用场景均可归结为三大核心问题,每个问题对应一套经典算法,这是HMM的知识核心。

核心问题问题描述目标核心算法
评估问题给定模型 λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B) 和观测序列 O=(O1,O2,...,OT)O=(O_1,O_2,...,O_T)O=(O1,O2,...,OT),计算 $P(O\lambda)$衡量模型对观测序列的拟合程度
解码问题给定模型 λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B) 和观测序列 OOO,求最可能的隐藏状态序列 I=(i1,i2,...,iT)I=(i_1,i_2,...,i_T)I=(i1,i2,...,iT)从观测序列推断隐藏状态维特比算法
学习问题给定观测序列 OOO,估计模型参数 λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B),使 $P(O\lambda)$ 最大从数据中训练模型

2.1 评估问题:前向算法 & 后向算法

2.1.1 问题本质

直接计算 P(O∣λ)P(O|\lambda)P(Oλ) 的复杂度为 O(TNT)O(TN^T)O(TNT)(枚举所有隐藏序列),完全不可行。前向/后向算法通过动态规划将复杂度降至 O(TN2)O(TN^2)O(TN2)

2.1.2 前向算法(Forward Algorithm)

核心思想:从前往后递推,计算 ttt 时刻处于状态 sis_isi 且生成前 ttt 个观测的概率(前向概率 αt(i)\alpha_t(i)αt(i))。

(1)定义前向概率

αt(i)=P(O1,O2,...,Ot,it=si∣λ)\alpha_t(i) = P(O_1,O_2,...,O_t, i_t=s_i | \lambda)αt(i)=P(O1,O2,...,Ot,it=siλ)
含义:ttt 时刻处于隐藏状态 sis_isi,且生成前 ttt 个观测的联合概率。

(2)算法步骤(伪代码)
输入:模型λ=(π,A,B),观测序列O=(O₁,O₂,...,O_T)
输出:P(O|λ)

1.  初始化(t=1时刻)
    α₁(i) = π_i * b_i(O₁)  ,i=1,2,...,N
    解释:初始状态概率 × 初始状态生成第一个观测的概率

2.  递推(t=2到T时刻)
    α_t(j) = [Σ_{i=1}^N α_{t-1}(i) * a_{ij}] * b_j(O_t)  ,j=1,2,...,N
    解释:前一时刻所有状态的前向概率 × 转移到j的概率 → 求和后 × j生成当前观测的概率

3.  终止(计算最终概率)
    P(O|λ) = Σ_{i=1}^N α_T(i)
    解释:T时刻所有隐藏状态的前向概率之和,即为观测序列的总概率
(3)语法格式(数学公式)
  • 初始化:α1(i)=πibi(O1)\alpha_1(i) = \pi_i b_i(O_1)α1(i)=πibi(O1)
  • 递推:αt(j)=(∑i=1Nαt−1(i)aij)bj(Ot)\alpha_t(j) = \left(\sum_{i=1}^N \alpha_{t-1}(i) a_{ij}\right) b_j(O_t)αt(j)=(i=1Nαt1(i)aij)bj(Ot)
  • 终止:P(O∣λ)=∑i=1NαT(i)P(O|\lambda) = \sum_{i=1}^N \alpha_T(i)P(Oλ)=i=1NαT(i)
2.1.3 后向算法(Backward Algorithm)

核心思想:从后往前递推,计算 ttt 时刻处于状态 sis_isi 且生成后 T−tT-tTt 个观测的概率(后向概率 βt(i)\beta_t(i)βt(i))。

(1)定义后向概率

βt(i)=P(Ot+1,Ot+2,...,OT∣it=si,λ)\beta_t(i) = P(O_{t+1},O_{t+2},...,O_T | i_t=s_i, \lambda)βt(i)=P(Ot+1,Ot+2,...,OTit=si,λ)

(2)算法步骤(伪代码)
输入:模型λ=(π,A,B),观测序列O=(O₁,O₂,...,O_T)
输出:P(O|λ)

1.  初始化(t=T时刻)
    β_T(i) = 1  ,i=1,2,...,N
    解释:T时刻之后无观测,概率为1

2.  递推(t=T-1到1时刻)
    β_t(i) = Σ_{j=1}^N [a_{ij} * b_j(O_{t+1}) * β_{t+1}(j)]  ,i=1,2,...,N

3.  终止(计算最终概率)
    P(O|λ) = Σ_{i=1}^N π_i * b_i(O₁) * β₁(i)
2.1.4 前向-后向概率的关系

P(O∣λ)=∑i=1Nαt(i)βt(i)(∀t∈[1,T])P(O|\lambda) = \sum_{i=1}^N \alpha_t(i) \beta_t(i) \quad (\forall t \in [1,T])P(Oλ)=i=1Nαt(i)βt(i)(t[1,T])

2.2 解码问题:维特比算法(Viterbi Algorithm)

2.2.1 问题本质

给定观测序列,求概率最大的隐藏状态序列,本质是动态规划求最优路径问题。

2.2.2 核心定义
  • δt(i)\delta_t(i)δt(i)ttt 时刻处于状态 sis_isi,且生成前 ttt 个观测的最大概率
  • ψt(i)\psi_t(i)ψt(i)ttt 时刻处于状态 sis_isi 时,前一时刻(t−1t-1t1)的最优前驱状态
2.2.3 算法步骤(伪代码)
输入:模型λ=(π,A,B),观测序列O=(O₁,O₂,...,O_T)
输出:最优隐藏状态序列I*=(i₁*,i₂*,...,i_T*)

1.  初始化(t=1时刻)
    δ₁(i) = π_i * b_i(O₁)  ,i=1,2,...,N
    ψ₁(i) = 0  (无前置状态)

2.  递推(t=2到T时刻)
    δ_t(j) = max_{1≤i≤N} [δ_{t-1}(i) * a_{ij}] * b_j(O_t)  ,j=1,2,...,N
    ψ_t(j) = argmax_{1≤i≤N} [δ_{t-1}(i) * a_{ij}]  ,j=1,2,...,N
    解释:δ_t(j) 记录到j的最大概率;ψ_t(j) 记录到j的最优前驱

3.  终止(找T时刻最优状态)
    P* = max_{1≤i≤N} δ_T(i)
    i_T* = argmax_{1≤i≤N} δ_T(i)

4.  回溯(从T到1时刻,找最优序列)
    i_t* = ψ_{t+1}(i_{t+1}*)  ,t=T-1,T-2,...,1

5.  输出最优序列
    I* = (i₁*,i₂*,...,i_T*)

2.3 学习问题:Baum-Welch算法

2.3.1 问题本质

隐藏状态不可观测,属于无监督学习问题,采用EM算法求解,Baum-Welch是EM在HMM上的特例。

2.3.2 算法框架(EM两步法)

EM算法分为E步(计算期望)和M步(最大化期望似然),迭代至收敛。

步骤核心任务计算公式
E步计算状态转移期望 ξt(i,j)\xi_t(i,j)ξt(i,j)状态占用期望 γt(i)\gamma_t(i)γt(i)1. ξt(i,j)=αt(i)aijbj(Ot+1)βt+1(j)∑i=1N∑j=1Nαt(i)aijbj(Ot+1)βt+1(j)\xi_t(i,j) = \frac{\alpha_t(i) a_{ij} b_j(O_{t+1}) \beta_{t+1}(j)}{\sum_{i=1}^N \sum_{j=1}^N \alpha_t(i) a_{ij} b_j(O_{t+1}) \beta_{t+1}(j)}ξt(i,j)=i=1Nj=1Nαt(i)aijbj(Ot+1)βt+1(j)αt(i)aijbj(Ot+1)βt+1(j)
2. $\gamma_t(i) = \sum_{j=1}^N \xi_t(i,j) = \frac{\alpha_t(i) \beta_t(i)}{P(O
M步用期望更新模型参数 π,A,B\pi,A,Bπ,A,B1. 初始概率:πi=γ1(i)\pi_i = \gamma_1(i)πi=γ1(i)
2. 转移概率:aij=∑t=1T−1ξt(i,j)∑t=1T−1γt(i)a_{ij} = \frac{\sum_{t=1}^{T-1} \xi_t(i,j)}{\sum_{t=1}^{T-1} \gamma_t(i)}aij=t=1T1γt(i)t=1T1ξt(i,j)
3. 观测概率:bj(k)=∑t=1,Ot=okTγt(j)∑t=1Tγt(j)b_j(k) = \frac{\sum_{t=1, O_t=o_k}^T \gamma_t(j)}{\sum_{t=1}^T \gamma_t(j)}bj(k)=t=1Tγt(j)t=1,Ot=okTγt(j)
2.3.3 算法流程
  1. 随机初始化模型参数 λ0=(π0,A0,B0)\lambda_0=(\pi_0,A_0,B_0)λ0=(π0,A0,B0)
  2. 用前向-后向算法计算 αt(i),βt(i)\alpha_t(i),\beta_t(i)αt(i),βt(i),进而计算 ξt(i,j),γt(i)\xi_t(i,j),\gamma_t(i)ξt(i,j),γt(i)(E步);
  3. 用M步公式更新参数,得到 λ1=(π1,A1,B1)\lambda_1=(\pi_1,A_1,B_1)λ1=(π1,A1,B1)
  4. 重复步骤2-3,直到 P(O∣λ)P(O|\lambda)P(Oλ) 收敛,得到最优模型 λ∗\lambda^*λ

三、 具体案例:天气-活动HMM模型

为了直观理解,我们用**天气(隐藏状态)→ 活动(观测状态)**的简单案例,演示前向算法和维特比算法的计算过程。

3.1 案例参数设定

要素具体取值
隐藏状态集合 SSS晴(s1s_1s1)、阴(s2s_2s2)、雨(s3s_3s3) → N=3N=3N=3
观测状态集合 OOO散步(o1o_1o1)、购物(o2o_2o2)、宅家(o3o_3o3) → M=3M=3M=3
初始概率 π\piππ=[0.6,0.3,0.1]\pi=[0.6, 0.3, 0.1]π=[0.6,0.3,0.1] → 初始晴的概率最高
转移矩阵 AAA[0.70.20.10.30.50.20.10.30.6]\begin{bmatrix} 0.7 & 0.2 & 0.1 \\ 0.3 & 0.5 & 0.2 \\ 0.1 & 0.3 & 0.6 \end{bmatrix}0.70.30.10.20.50.30.10.20.6 → 晴→晴概率0.7,雨→雨概率0.6
观测矩阵 BBB[0.80.10.10.20.60.20.10.10.8]\begin{bmatrix} 0.8 & 0.1 & 0.1 \\ 0.2 & 0.6 & 0.2 \\ 0.1 & 0.1 & 0.8 \end{bmatrix}0.80.20.10.10.60.10.10.20.8 → 晴→散步概率0.8,雨→宅家概率0.8
观测序列 OOOO=(o1,o2,o3)O=(o_1,o_2,o_3)O=(o1,o2,o3) → 第一天散步,第二天购物,第三天宅家

3.2 前向算法计算 P(O∣λ)P(O|\lambda)P(Oλ)

步骤1:初始化(t=1,O1=o1O_1=o_1O1=o1

α1(1)=π1b1(o1)=0.6×0.8=0.48α1(2)=π2b2(o1)=0.3×0.2=0.06α1(3)=π3b3(o1)=0.1×0.1=0.01 \begin{align*} \alpha_1(1) &= \pi_1 b_1(o_1) = 0.6 \times 0.8 = 0.48 \\ \alpha_1(2) &= \pi_2 b_2(o_1) = 0.3 \times 0.2 = 0.06 \\ \alpha_1(3) &= \pi_3 b_3(o_1) = 0.1 \times 0.1 = 0.01 \end{align*} α1(1)α1(2)α1(3)=π1b1(o1)=0.6×0.8=0.48=π2b2(o1)=0.3×0.2=0.06=π3b3(o1)=0.1×0.1=0.01

步骤2:递推(t=2,O2=o2O_2=o_2O2=o2

α2(1)=(α1(1)a11+α1(2)a21+α1(3)a31)b1(o2)=(0.48×0.7+0.06×0.3+0.01×0.1)×0.1=(0.336+0.018+0.001)×0.1=0.0355α2(2)=(α1(1)a12+α1(2)a22+α1(3)a32)b2(o2)=(0.48×0.2+0.06×0.5+0.01×0.3)×0.6=(0.096+0.03+0.003)×0.6=0.0774α2(3)=(α1(1)a13+α1(2)a23+α1(3)a33)b3(o2)=(0.48×0.1+0.06×0.2+0.01×0.6)×0.1=(0.048+0.012+0.006)×0.1=0.0066 \begin{align*} \alpha_2(1) &= (\alpha_1(1)a_{11}+\alpha_1(2)a_{21}+\alpha_1(3)a_{31})b_1(o_2) \\ &= (0.48×0.7 + 0.06×0.3 + 0.01×0.1) × 0.1 = (0.336+0.018+0.001)×0.1 = 0.0355 \\ \alpha_2(2) &= (\alpha_1(1)a_{12}+\alpha_1(2)a_{22}+\alpha_1(3)a_{32})b_2(o_2) \\ &= (0.48×0.2 + 0.06×0.5 + 0.01×0.3) × 0.6 = (0.096+0.03+0.003)×0.6 = 0.0774 \\ \alpha_2(3) &= (\alpha_1(1)a_{13}+\alpha_1(2)a_{23}+\alpha_1(3)a_{33})b_3(o_2) \\ &= (0.48×0.1 + 0.06×0.2 + 0.01×0.6) × 0.1 = (0.048+0.012+0.006)×0.1 = 0.0066 \end{align*} α2(1)α2(2)α2(3)=(α1(1)a11+α1(2)a21+α1(3)a31)b1(o2)=(0.48×0.7+0.06×0.3+0.01×0.1)×0.1=(0.336+0.018+0.001)×0.1=0.0355=(α1(1)a12+α1(2)a22+α1(3)a32)b2(o2)=(0.48×0.2+0.06×0.5+0.01×0.3)×0.6=(0.096+0.03+0.003)×0.6=0.0774=(α1(1)a13+α1(2)a23+α1(3)a33)b3(o2)=(0.48×0.1+0.06×0.2+0.01×0.6)×0.1=(0.048+0.012+0.006)×0.1=0.0066

步骤3:递推(t=3,O3=o3O_3=o_3O3=o3

类似计算可得 α3(1)=0.002485\alpha_3(1)=0.002485α3(1)=0.002485α3(2)=0.009288\alpha_3(2)=0.009288α3(2)=0.009288α3(3)=0.0034398\alpha_3(3)=0.0034398α3(3)=0.0034398

步骤4:终止

P(O∣λ)=α3(1)+α3(2)+α3(3)=0.002485+0.009288+0.0034398=0.0152128P(O|\lambda)=\alpha_3(1)+\alpha_3(2)+\alpha_3(3)=0.002485+0.009288+0.0034398=0.0152128P(Oλ)=α3(1)+α3(2)+α3(3)=0.002485+0.009288+0.0034398=0.0152128

3.3 维特比算法求最优隐藏序列

按照维特比算法步骤计算,最终得到最优隐藏状态序列为:
I∗=(s1,s2,s3)→ 晴→阴→雨I^*=(s_1, s_2, s_3) \quad \text{→ 晴→阴→雨}I=(s1,s2,s3)→ 

四、 HMM的应用场景

  1. 语音识别:将语音信号(观测序列)转换为文字(隐藏状态序列);
  2. 自然语言处理:词性标注(句子是观测序列,词性是隐藏状态);
  3. 生物信息学:基因序列分析(DNA序列是观测,基因结构是隐藏状态);
  4. 故障诊断:设备监测数据(观测)推断故障类型(隐藏状态)。

五、 总结

HMM的核心是5要素+3假设+3问题+4算法,其本质是通过动态规划和EM算法,解决时序数据的拟合、推断、训练问题。掌握三大核心问题的算法原理,是理解HMM的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值