通俗理解隐马尔可夫模型(HMM)

HMM(隐马尔可夫模型)

对于一个观测序列,我们认为这个观测序列是由另一个状态序列输出的,而这个状态序列我们称之为隐马尔可夫链

隐马尔可夫链每次可以输出一个观测值,但是一个观测值一次只能被一个状态输出;
HMM 的每一个状态输出完一个观测值后会根据概率转换到其他状态(其他状态也包括自身状态)然后在下一个状态下在输出下一个观测值,直到输出所有观测值时结束
一个HMM包含三组参数(π , A , B \pi,A,B π,A ,B)我们用λ表示三组参数的集合:
数组π \pi π:表示初始化时每种状态被选择的概率(初始概率分布);
矩阵A(N * N,N=状态数)用来保存不同状态之间转换的概率;
矩阵B(N * 观测值数量)用来保存每种状态输出每种观测值的概率;

1. HMM的两个假设

1.齐次马尔可夫假设:
在隐马尔可夫链中,t t t 时刻的状态只与 t − 1 t-1 t −1 时刻的状态有关;齐次马尔可夫链中的 齐次是指转移概率和时间无关,只和转移的前后状态有关
2.观测独立假设:
在隐马尔可夫链中,t t t 时刻的观测值只与当前时刻的状态有关

2. HMM的三个问题

2.1 概率计算问题(evaluation)

已知HMM模型参数λ和观测序列,求当前观测序列出现的概率,一般使用前向和后向算法

本质上是求解当前观测序列在所有隐状态序列的加权概率和

2.2 学习问题(learning)

已知观测序列和隐层状态序列,求HMM的参数,一般使用极大似然估计算法(EM)EM算法的详细解析请参考此文章->[#通俗理解# 从极大似然估计(MLE)到最大期望(EM)算法]

2.3 预测问题(decoder)

已知模型参数和观测序列,求解最大概率的隐层序列,具体来说有两种应用,一种是预测下一时刻的状态,一种是已知t时刻观测值,预测t时刻隐层状态

3. 解决三个问题的算法

3.1 概率计算问题-前向算法(后向算法)

概率计算本质上是求解当前观测序列在所有隐状态序列上的概率加权和;前向算法使用的是 动态规划的思想,从第一个观测输出递推得到第N个观测输出,

前向算法首先要定义一个变量 α t ( i ) α_t(i)αt ​(i ) :
α t ( i ) = ( o 0 , o 1 . . . o t , t i = q i ∣ λ ) α_t(i)=(o_0,o_1…o_t,t_i=q_i|λ)αt ​(i )=(o 0 ​,o 1 ​…o t ​,t i ​=q i ​∣λ)
其中,λ 表示已知的HMM模型参数,o 0 , o 1 . . . o t o_0,o_1…o_t o 0 ​,o 1 ​…o t ​ 表示到t时刻的观测序列,t i = q i t_i=q_i t i ​=q i ​表示 t t t 时刻的状态为 q i q_i q i ​;总结一下,α t ( i ) α_t(i)αt ​(i )就是: 已知参数为λ的HMM模型,在t t t 时刻得到观测序列o 0 , o 1 . . . o t o_0,o_1…o_t o 0 ​,o 1 ​…o t ​ 且t t t 时刻的状态为q i q_i q i ​ 的概率

算法步骤:
1. 设定初始值:
α 1 ( i ) = π i b i ( o 1 ) α_1(i)=\pi_i b_i (o_1)α1 ​(i )=πi ​b i ​(o 1 ​)
其中,π i \pi_i πi ​ 表示第一个状态为 p i p_i p i ​ 的概率,b i ( o 1 ) b_i(o_1)b i ​(o 1 ​) 表示 q i q_i q i ​ 输出 ( o 1 ) (o_1)(o 1 ​) 观测状态的概率

2. 递推α t ( i ) α_t(i)αt ​(i ):
α t + 1 ( j ) = [ ∑ i = 1 N α ( i ) a i j ] b j ( o t + 1 ) α_{t+1}(j)=[\sum_{i=1}^{N}{α(i)a_{ij}}]b_j(o_{t+1})αt +1 ​(j )=[i =1 ∑N ​α(i )a i j ​]b j ​(o t +1 ​)
∑ i p ( o t + 1 ∣ q t , λ ) p ( q t ∣ λ ) \sum_i{p(o_{t+1}|q_t,λ)p(q_t|λ)}i ∑​p (o t +1 ​∣q t ​,λ)p (q t ​∣λ)
上式中,N 表示所有状态数量;中括号内的部分表示 t t t 时刻所有可能状态转换到 t+1 时刻 q j q_j q j ​ 状态的概率(t t t时刻所有 q i q_i q i ​ 状态 乘以 i i i 状态到 j j j 状态的转换概率 然后对这个数值求和);中括号外表示 q j q_j q j ​ 状态输出 o t + 1 o_{t+1}o t +1 ​ 观测值得概率,这个过程用到了HMM的两个假设:

  1. 当前状态之和前一个状态有关
  2. 当前观测值之和当前状态有关

3. 终止:
p ( o ∣ λ ) = ∑ i = 1 N α T ( i ) p(o|λ)=\sum_{i=1}^{N}{α_T(i)}p (o ∣λ)=i =1 ∑N ​αT ​(i )
上式表示:当所有观测状态输出完毕,对所有α T ( i ) α_T(i)αT ​(i )求和

通过反复计算步骤2,我们可以依次得到每个时刻的N个状态的概率值,并最终得到 p ( o ∣ λ ) p(o|λ)p (o ∣λ),这里 p ( o ∣ λ ) p(o|λ)p (o ∣λ) 等价于 p ( o 0 , o 1 . . . o T ∣ λ ) p(o_0,o_1…o_T|λ)p (o 0 ​,o 1 ​…o T ​∣λ)

向后算法和前向算法类似,区别是: 后向算法从序列的最后一个观测状态出现的概率递推得到整个观测序列的出现的概率;相对于前向算法,后向算法的计算要相对复杂,这里不做赘述

3.2 学习问题-Baum-Welch算法

Baum-Welch算法是EM算法的一种特例,是专门用来解决HMM学习问题的一种方法

EM算法就是最大期望算法,一般用来解决包含隐变量的参数优化问题;简单来说EM算法就是在给定隐变量分布的情况下求似然函数的期望,或者说是在对似然函数的隐变量进行积分(如果隐变量是离散的,则根据隐变量的分布概率对似然函数进行加权求和)

在HMM中,一个观测序列可以由多个隐层状态序列得到,而每个隐层状态序列是一种隐变量的取值;在EM算法中,我们将HMM模型的参数分成两个部分分别优化,具体实现过程如下:

  1. 随机初始化HMM模型的参数λ 其中包括 隐层状态初始概率矩阵π \pi π、状态转移矩阵A、观测矩阵B
  2. 根据参数λ估计隐变量的概率分布(一个观测序列被不同隐层状态序列得出的概率)
  3. 使用向前或向后算法得到当前观测序列的概率计算公式,也就是当前观测序列的似然函数
  4. 通过最大化当前观测序列的似然函数得到参数λ的更新值,然后迭代执行步骤2~4,直至模型收敛

关于MLE和EM算法的详细介绍请参考此文章->#通俗理解# 从极大似然估计(MLE)到最大期望(EM)算法

3.3 预测问题-Viterbi算法

预测问题就是: 对于一个观测序列,求出最大概率的隐层状态序列,其中使用的算法是 Viterbi算法
Viterbi算法本质上是使用动态规划的方法递归求解隐层状态序列;Viterbi算法是一种剪枝算法;对于每个时刻,根据转移概率和发射概率,t时刻的n个状态和t+1时刻的n个状态会有n*n条路径,Viterbi算法只保留对于t+1时刻n个状态最优的n条路径以及这n条最优路径的概率

具体计算过程如下:

  1. 根据初始状态概率π \pi π计算第一个时刻每个隐层状态输出当前时刻观测值的概率(每个隐层状态的初始概率*每个隐层状态输出当前观测状态的概率)
  2. 对于t+1时刻,计算t+1时刻每个隐层状态得到当前观测值的最大概率以及最大概率对应的最优路径(每次只记录n个隐层对应的n条最优路径)
    通俗理解隐马尔可夫模型(HMM)

对于一个观测序列,隐层状态序列可能有上图这么多种路径(隐层状态组合),但是使用Viterbi算法我们只计算下图这么多条路径的值即可,提高了计算效率

通俗理解隐马尔可夫模型(HMM)
下一篇文章将介绍如何使用 GMM+HMM 进行语音识别->#透彻理解# GMM+HMM 语音识别模型过程

参考文章:如何通俗地讲解 viterbi 算法?

Original: https://blog.csdn.net/lch551218/article/details/118096043
Author: energy_百分百
Title: 通俗理解隐马尔可夫模型(HMM)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/516195/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球