概率图模型(1)--隐马尔科夫模型(2)

2024-02-16 12:38
文章标签 模型 概率 马尔科夫

本文主要是介绍概率图模型(1)--隐马尔科夫模型(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HMM模型参数求解概述

HMM模型参数求解根据已知的条件可以分为两种情况。

第一种情况较为简单,就是我们已知 D 个长度为 T 的观测序列和对应的隐藏状态序列,即 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . ( O D , I D ) } \{(O_1, I_1), (O_2, I_2), ...(O_D, I_D)\} {(O1,I1),(O2,I2),...(OD,ID)} 是已知的,此时我们可以很容易的用最大似然来求解模型参数

假设样本从隐藏状态 q i q_i qi 转移到 q j q_j qj 的频率计数是 A i j A_{ij} Aij ,那么状态转移矩阵求得为:

A = [ a i j ] , 其 中 a i j = A i j ∑ s = 1 N A i s A = \Big[a_{ij}\Big], \;其中a_{ij} = \frac{A_{ij}}{\sum\limits_{s=1}^{N}A_{is}} A=[aij],aij=s=1NAisAij

假设样本隐藏状态为 q i q_i qi 且观测状态为 v k v_k vk 的频率计数是 B j k B_{jk} Bjk ,那么观测状态概率矩阵为:

B = [ b j ( k ) ] , 其 中 b j ( k ) = B j k ∑ s = 1 M B j s B= \Big[b_{j}(k)\Big], \;其中b_{j}(k) = \frac{B_{jk}}{\sum\limits_{s=1}^{M}B_{js}} B=[bj(k)],bj(k)=s=1MBjsBjk

假设所有样本中初始隐藏状态为 q i q_i qi 的频率计数为 C ( i ) C(i) C(i) ,那么初始概率分布为:

π ( i ) = C ( i ) ∑ s = 1 N C ( s ) \pi(i) = \frac{C(i)}{\sum\limits_{s=1}^{N}C(s)} π(i)=s=1NC(s)C(i)

第一种情况下求解模型还是很简单的。但是在很多时候,我们无法得到HMM样本观察序列对应的隐藏序列,只有 D 个长度为 T 的观测序列,即 { ( O 1 ) , ( O 2 ) , . . . ( O D ) } \{(O_1), (O_2), ...(O_D)\} {(O1),(O2),...(OD)} 是已知的,此时我们能不能求出合适的HMM模型参数呢?

这就是我们的第二种情况,也是我们本文要讨论的重点。它的解法最常用的是鲍姆-韦尔奇算法,其实就是基于EM算法的求解,只不过鲍姆-韦尔奇算法出现的时代,EM算法还没有被抽象出来,所以我们本文还是说鲍姆-韦尔奇算法。

鲍姆-韦尔奇(Baum-Welch)算法原理

鲍姆-韦尔奇算法原理既然使用的就是EM算法的原理,那么我们需要在E步求出联合分布 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ) 基于条件概率 P ( I ∣ O , λ ‾ ) P(I|O,\overline{\lambda}) P(IO,λ) 的期望,其中 λ ‾ \overline \lambda λ 为当前的模型参数,然后再M步最大化这个期望,得到更新的模型参数 λ \lambda λ 。接着不停的进行EM迭代,直到模型参数的值收敛为止。

首先来看看E步,当前模型参数为 λ ‾ \overline{\lambda} λ , 联合分布 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ) 基于条件概率 P ( I ∣ O , λ ‾ ) P(I|O,\overline{\lambda}) P(IO,λ) 的期望表达式为:

L ( λ , λ ‾ ) = ∑ I P ( I ∣ O , λ ‾ ) l o g P ( O , I ∣ λ ) L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) L(λ,λ)=IP(IO,λ)logP(O,Iλ)

在M步,我们极大化上式,然后得到更新后的模型参数如下:

λ ‾ = a r g max ⁡ λ ∑ I P ( I ∣ O , λ ‾ ) l o g P ( O , I ∣ λ ) \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) λ=argλmaxIP(IO,λ)logP(O,Iλ)

通过不断的E步和M步的迭代,直到 λ ‾ \overline{\lambda} λ 收敛。下面我们来看看鲍姆-韦尔奇算法的推导过程。

鲍姆-韦尔奇算法的推导

我们的训练数据为 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . ( O D , I D ) } \{(O_1, I_1), (O_2, I_2), ...(O_D, I_D)\} {(O1,I1),(O2,I2),...(OD,ID)} ,其中任意一个观测序列 O d = { o 1 ( d ) , o 2 ( d ) , . . . o T ( d ) } O_d = \{o_1^{(d)}, o_2^{(d)}, ... o_T^{(d)}\} Od={o1(d),o2(d),...oT(d)} ,其对应的未知的隐藏状态序列表示为: I d = { i 1 ( d ) , i 2 ( d ) , . . . i T ( d ) } I_d = \{i_1^{(d)}, i_2^{(d)}, ... i_T^{(d)}\} Id={i1(d),i2(d),...iT(d)}

首先看鲍姆-韦尔奇算法的E步,我们需要先计算联合分布 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ) 的表达式如下:

P ( O , I ∣ λ ) = ∏ d = 1 D π i 1 ( d ) b i 1 ( d ) ( o 1 ( d ) ) a i 1 ( d ) i 2 ( d ) b i 2 ( d ) ( o 2 ( d ) ) . . . a i T − 1 ( d ) i T ( d ) b i T ( d ) ( o T ( d ) ) P(O,I|\lambda) = \prod_{d=1}^D\pi_{i_1^{(d)}}b_{i_1^{(d)}}(o_1^{(d)})a_{i_1^{(d)}i_2^{(d)}}b_{i_2^{(d)}}(o_2^{(d)})...a_{i_{T-1}^{(d)}i_T^{(d)}}b_{i_T^{(d)}}(o_T^{(d)}) P(O,Iλ)=d=1Dπi1(d)bi1(d)(o1(d))ai1(d)i2(d)bi2(d)(o2(d))...aiT1(d)iT(d)biT(d)(oT(d))

我们的E步得到的期望表达式为:

L ( λ , λ ‾ ) = ∑ I P ( I ∣ O , λ ‾ ) l o g P ( O , I ∣ λ ) L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) L(λ,λ)=IP(IO,λ)logP(O,Iλ)

在M步我们要极大化上式。由于 P ( I ∣ O , λ ‾ ) = P ( I , O ∣ λ ‾ ) / P ( O ∣ λ ‾ ) P(I|O,\overline{\lambda}) = P(I,O|\overline{\lambda})/P(O|\overline{\lambda}) P(IO,λ)=P(I,Oλ)/P(Oλ) ,而 P ( O ∣ λ ‾ ) P(O|\overline{\lambda}) P(Oλ) 是常数,因此我们要极大化的式子等价于:

λ ‾ = a r g max ⁡ λ ∑ I P ( O , I ∣ λ ‾ ) l o g P ( O , I ∣ λ ) \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{I}P(O,I|\overline{\lambda})logP(O,I|\lambda) λ=argλmaxIP(O,Iλ)logP(O,Iλ)

我们将上面 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ) 的表达式带入我们的极大化式子,得到的表达式如下:

λ ‾ = a r g max ⁡ λ ∑ d = 1 D ∑ I P ( O , I ∣ λ ‾ ) ( l o g π i 1 + ∑ t = 1 T − 1 l o g a i t , i t + 1 + ∑ t = 1 T l o g b i t ( o t ) ) \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})(log\pi_{i_1} + \sum\limits_{t=1}^{T-1}log\;a_{i_t,i_{t+1}} + \sum\limits_{t=1}^Tlog b_{i_t}(o_t)) λ=argλmaxd=1DIP(O,Iλ)(logπi1+t=1T1logait,it+1+t=1Tlogbit(ot))

我们的隐藏模型参数 λ = ( A , B , π ) \lambda =(A,B,\pi) λ=(A,B,π) ,因此下面我们只需要对上式分别对 A , B , π A,B,\pi A,B,π 求导即可得到我们更新的模型参数 λ ‾ \overline \lambda λ

首先我们看看对模型参数 π \pi π 的求导。由于 π \pi π 只在上式中括号里的第一部分出现,因此我们对于 π \pi π 的极大化式子为:

π i ‾ = a r g max ⁡ π i 1 ∑ d = 1 D ∑ I P ( O , I ∣ λ ‾ ) l o g π i 1 = a r g max ⁡ π i ∑ d = 1 D ∑ i = 1 N P ( O , i 1 ( d ) = i ∣ λ ‾ ) l o g π i \overline{\pi_i} = arg\;\max_{\pi_{i_1}} \sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})log\pi_{i_1} = arg\;\max_{\pi_{i}} \sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i} πi=argπi1maxd=1DIP(O,Iλ)logπi1=argπimaxd=1Di=1NP(O,i1(d)=iλ)logπi

由于 π i \pi_i πi 还满足 ∑ i = 1 N π i = 1 \sum\limits_{i=1}^N\pi_i =1 i=1Nπi=1 ,因此根据拉格朗日子乘法,我们得到 π i \pi_i πi 要极大化的拉格朗日函数为:

a r g max ⁡ π i ∑ d = 1 D ∑ i = 1 N P ( O , i 1 ( d ) = i ∣ λ ‾ ) l o g π i + γ ( ∑ i = 1 N π i − 1 ) arg\;\max_{\pi_{i}}\sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i} + \gamma(\sum\limits_{i=1}^N\pi_i -1) argπimaxd=1Di=1NP(O,i1(d)=iλ)logπi+γ(i=1Nπi1)

其中, γ \gamma γ 为拉格朗日系数。上式对 π i \pi_i πi 求偏导数并令结果为0, 我们得到:

∑ d = 1 D P ( O , i 1 ( d ) = i ∣ λ ‾ ) + γ π i = 0 \sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda}) + \gamma\pi_i = 0 d=1DP(O,i1(d)=iλ)+γπi=0

令 i 分别等于从1到 N,从上式可以得到 N 个式子,对这 N 个式子求和可得:

∑ d = 1 D P ( O ∣ λ ‾ ) + γ = 0 \sum\limits_{d=1}^DP(O|\overline{\lambda}) + \gamma = 0 d=1DP(Oλ)+γ=0

从上两式消去 γ \gamma γ ,得到 π i \pi_i πi 的表达式为:

π i = ∑ d = 1 D P ( O , i 1 ( d ) = i ∣ λ ‾ ) ∑ d = 1 D P ( O ∣ λ ‾ ) = ∑ d = 1 D P ( O , i 1 ( d ) = i ∣ λ ‾ ) D P ( O ∣ λ ‾ ) = ∑ d = 1 D P ( i 1 ( d ) = i ∣ O , λ ‾ ) D = ∑ d = 1 D P ( i 1 ( d ) = i ∣ O ( d ) , λ ‾ ) D \pi_i =\frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{\sum\limits_{d=1}^DP(O|\overline{\lambda})} = \frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{DP(O|\overline{\lambda})} = \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O, \overline{\lambda})}{D} = \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O^{(d)}, \overline{\lambda})}{D} πi=d=1DP(Oλ)d=1DP(O,i1(d)=iλ)=DP(Oλ)d=1DP(O,i1(d)=iλ)=Dd=1DP(i1(d)=iO,λ)=Dd=1DP(i1(d)=iO(d),λ)

利用我们在前向概率的定义可得:

P ( i 1 ( d ) = i ∣ O ( d ) , λ ‾ ) = γ 1 ( d ) ( i ) P(i_1^{(d)} =i|O^{(d)}, \overline{\lambda}) = \gamma_1^{(d)}(i) P(i1(d)=iO(d),λ)=γ1(d)(i)

因此最终我们在M步 π i \pi_i πi 的迭代公式为:

π i = ∑ d = 1 D γ 1 ( d ) ( i ) D \pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D} πi=Dd=1Dγ1(d)(i)

现在我们来看看 A 的迭代公式求法。方法和 π \pi π的类似。由于 A 只在最大化函数式中括号里的第二部分出现,而这部分式子可以整理为:

∑ d = 1 D ∑ I ∑ t = 1 T − 1 P ( O , I ∣ λ ‾ ) l o g a i t , i t + 1 = ∑ d = 1 D ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 P ( O , i t ( d ) = i , i t + 1 ( d ) = j ∣ λ ‾ ) l o g a i j \sum\limits_{d=1}^D\sum\limits_{I}\sum\limits_{t=1}^{T-1}P(O,I|\overline{\lambda})log\;a_{i_t,i_{t+1}} = \sum\limits_{d=1}^D\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P(O,i_t^{(d)} = i, i_{t+1}^{(d)} = j|\overline{\lambda})log\;a_{ij} d=1DIt=1T1P(O,Iλ)logait,it+1=d=1Di=1Nj=1Nt=1T1P(O,it(d)=i,it+1(d)=jλ)logaij

由于 a i j a_{ij} aij 还满足 ∑ j = 1 N a i j = 1 \sum\limits_{j=1}^Na_{ij} =1 j=1Naij=1 。和求解 π i \pi_i πi 类似,我们可以用拉格朗日子乘法并对 a i j a_{ij} aij 求导,并令结果为0,可以得到 a i j a_{ij} aij 的迭代表达式为:

a i j = ∑ d = 1 D ∑ t = 1 T − 1 P ( O ( d ) , i t ( d ) = i , i t + 1 ( d ) = j ∣ λ ‾ ) ∑ d = 1 D ∑ t = 1 T − 1 P ( O ( d ) , i t ( d ) = i ∣ λ ‾ ) a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}P(O^{(d)}, i_t^{(d)} = i, i_{t+1}^{(d)} = j|\overline{\lambda})}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}P(O^{(d)}, i_t^{(d)} = i|\overline{\lambda})} aij=d=1Dt=1T1P(O(d),it(d)=iλ)d=1Dt=1T1P(O(d),it(d)=i,it+1(d)=jλ)

利用前向概率的定义和 ξ t ( i , j ) \xi_t(i,j) ξt(i,j) 的定义可得们在M步 a i j a_{ij} aij 的迭代公式为:

a i j = ∑ d = 1 D ∑ t = 1 T − 1 ξ t ( d ) ( i , j ) ∑ d = 1 D ∑ t = 1 T − 1 γ t ( d ) ( i ) a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\gamma_t^{(d)}(i)} aij=d=1Dt=1T1γt(d)(i)d=1Dt=1T1ξt(d)(i,j)

现在我们来看看 B 的迭代公式求法。方法和 π \pi π 的类似。由于 B 只在最大化函数式中括号里的第三部分出现,而这部分式子可以整理为:

∑ d = 1 D ∑ I ∑ t = 1 T P ( O , I ∣ λ ‾ ) l o g b i t ( o t ) = ∑ d = 1 D ∑ j = 1 N ∑ t = 1 T P ( O , i t ( d ) = j ∣ λ ‾ ) l o g b j ( o t ) \sum\limits_{d=1}^D\sum\limits_{I}\sum\limits_{t=1}^{T}P(O,I|\overline{\lambda})log\;b_{i_t}(o_t) = \sum\limits_{d=1}^D\sum\limits_{j=1}^N\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})log\;b_{j}(o_t) d=1DIt=1TP(O,Iλ)logbit(ot)=d=1Dj=1Nt=1TP(O,it(d)=jλ)logbj(ot)

由于 b j ( o t ) b_{j}(o_t) bj(ot) 还满足 ∑ k = 1 M b j ( o t = v k ) = 1 \sum\limits_{k=1}^Mb_{j}(o_t =v_k) =1 k=1Mbj(ot=vk)=1 。和求解 π i \pi_i πi 类似,我们可以用拉格朗日子乘法并对 b j ( k ) b_{j}(k) bj(k) 求导,并令结果为0,得到 b j ( k ) b_{j}(k) bj(k) 的迭代表达式为:

b j ( k ) = ∑ d = 1 D ∑ t = 1 T P ( O , i t ( d ) = j ∣ λ ‾ ) I ( o t ( d ) = v k ) ∑ d = 1 D ∑ t = 1 T P ( O , i t ( d ) = j ∣ λ ‾ ) b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})I(o_t^{(d)}=v_k)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}P(O,i_t^{(d)} = j|\overline{\lambda})} bj(k)=d=1Dt=1TP(O,it(d)=jλ)d=1Dt=1TP(O,it(d)=jλ)I(ot(d)=vk)

其中 I ( o t ( d ) = v k ) I(o_t^{(d)}=v_k) I(ot(d)=vk) 当且仅当 o t ( d ) = v k o_t^{(d)}=v_k ot(d)=vk 时为1,否则为0. 利用前向概率的定义可得 b j ( o t ) b_{j}(o_t) bj(ot) 的最终表达式为:

b j ( k ) = ∑ d = 1 D ∑ t = 1 , o t ( d ) = v k T γ t ( d ) ( j ) ∑ d = 1 D ∑ t = 1 T γ t ( d ) ( j ) b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(j)} bj(k)=d=1Dt=1Tγt(d)(j)d=1Dt=1,ot(d)=vkTγt(d)(j)

有了 π i , a i j , b j ( k ) \pi_i, a_{ij},b_{j}(k) πi,aij,bj(k) 的迭代公式,我们就可以迭代求解HMM模型参数了。

鲍姆-韦尔奇算法流程总结

这里我们概括总结下鲍姆-韦尔奇算法的流程。

输入: D 个观测序列样本 { ( O 1 ) , ( O 2 ) , . . . ( O D ) } \{(O_1), (O_2), ...(O_D)\} {(O1),(O2),...(OD)}

输出:HMM模型参数

1)随机初始化所有的 π i , a i j , b j ( k ) \pi_i, a_{ij},b_{j}(k) πi,aij,bj(k)

2) 对于每个样本 d = 1 , 2 , . . . D d = 1,2,...D d=1,2,...D,用前向后向算法计算 γ t ( d ) ( i ) , ξ t ( d ) ( i , j ) , t = 1 , 2... T \gamma_t^{(d)}(i),\xi_t^{(d)}(i,j), t =1,2...T γt(d)(i)ξt(d)(i,j),t=1,2...T

3) 更新模型参数:

π i = ∑ d = 1 D γ 1 ( d ) ( i ) D \pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D} πi=Dd=1Dγ1(d)(i)

a i j = ∑ d = 1 D ∑ t = 1 T − 1 ξ t ( d ) ( i , j ) ∑ d = 1 D ∑ t = 1 T − 1 γ t ( d ) ( i ) a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\gamma_t^{(d)}(i)} aij=d=1Dt=1T1γt(d)(i)d=1Dt=1T1ξt(d)(i,j)

b j ( k ) = ∑ d = 1 D ∑ t = 1 , o t ( d ) = v k T γ t ( d ) ( j ) ∑ d = 1 D ∑ t = 1 T γ t ( d ) ( j ) b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(j)} bj(k)=d=1Dt=1Tγt(d)(j)d=1Dt=1,ot(d)=vkTγt(d)(j)

  1. 如果 π i , a i j , b j ( k ) \pi_i, a_{ij},b_{j}(k) πi,aij,bj(k) 的值已经收敛,则算法结束,否则回到第2)步继续迭代。

HMM最可能隐藏状态序列求解概述

给定模型和观测序列,求给定观测序列条件下,最可能出现的对应的隐藏状态序列。

HMM模型的解码问题最常用的算法是维特比算法,当然也有其他的算法可以求解这个问题。同时维特比算法是一个通用的求序列最短路径的动态规划算法,也可以用于很多其他问题。

在HMM模型的解码问题中,给定模型 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π) 和观测序列 O = { o 1 , o 2 , . . . o T } O =\{o_1,o_2,...o_T\} O={o1,o2,...oT} ,求给定观测序列O条件下,最可能出现的对应的状态序列 I ∗ = { i 1 ∗ , i 2 ∗ , . . . i T ∗ } I^*= \{i_1^*,i_2^*,...i_T^*\} I={i1,i2,...iT} ,即 P ( I ∗ ∣ O ) P(I^*|O) P(IO) 要最大化。

一个可能的近似解法是求出观测序列 O 在每个时刻 t 最可能的隐藏状态 i t ∗ i_t^* it 然后得到一个近似的隐藏状态序列 I ∗ = { i 1 ∗ , i 2 ∗ , . . . i T ∗ } I^*= \{i_1^*,i_2^*,...i_T^*\} I={i1,i2,...iT} 。要这样近似求解不难,利用定义:在给定模型λλ和观测序列 O 时,在时刻 t 处于状态 q i q_i qi 的概率是 γ t ( i ) \gamma_t(i) γt(i) ,这个概率可以通过HMM的前向算法与后向算法计算。这样我们有:

i t ∗ = a r g max ⁡ 1 ≤ i ≤ N [ γ t ( i ) ] , t = 1 , 2 , . . . T i_t^* = arg \max_{1 \leq i \leq N}[\gamma_t(i)], \; t =1,2,...T it=arg1iNmax[γt(i)],t=1,2,...T

近似算法很简单,但是却不能保证预测的状态序列是整体是最可能的状态序列,因为预测的状态序列中某些相邻的隐藏状态可能存在转移概率为0的情况。

而维特比算法可以将HMM的状态序列作为一个整体来考虑,避免近似算法的问题,下面我们来看看维特比算法进行HMM解码的方法。

维特比算法

维特比算法是一个通用的解码算法,是基于动态规划的求序列最短路径的方法。

既然是动态规划算法,那么就需要找到合适的局部状态,以及局部状态的递推公式。在HMM中,维特比算法定义了两个局部状态用于递推。

第一个局部状态是在时刻 t 隐藏状态为i所有可能的状态转移路径 i 1 , i 2 , . . . i t i_1,i_2,...i_t i1,i2,...it 中的概率最大值。记为 δ t ( i ) \delta_t(i) δt(i) :

δ t ( i ) = max ⁡ i 1 , i 2 , . . . i t − 1 P ( i t = i , i 1 , i 2 , . . . i t − 1 , o t , o t − 1 , . . . o 1 ∣ λ ) , i = 1 , 2 , . . . N \delta_t(i) = \max_{i_1,i_2,...i_{t-1}}\;P(i_t=i, i_1,i_2,...i_{t-1},o_t,o_{t-1},...o_1|\lambda),\; i =1,2,...N δt(i)=i1,i2,...it1maxP(it=i,i1,i2,...it1,ot,ot1,...o1λ),i=1,2,...N

δ t ( i ) \delta_t(i) δt(i) 的定义可以得到 δ \delta δ 的递推表达式:

在这里插入图片描述

第二个局部状态由第一个局部状态递推得到。我们定义在时刻 t 隐藏状态为 i 的所有单个状态转移路径 ( i 1 , i 2 , . . . , i t − 1 , i ) (i_1,i_2,...,i_{t-1},i) (i1,i2,...,it1,i) 中概率最大的转移路径中第 t − 1 t-1 t1 个节点的隐藏状态为 Ψ t ( i ) \Psi_t(i) Ψt(i) ,其递推表达式可以表示为:即 Ψ \Psi Ψ存储了最优路径末状态 的前驱状态

Ψ t ( i ) = a r g max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] \Psi_t(i) = arg \; \max_{1 \leq j \leq N}\;[\delta_{t-1}(j)a_{ji}] Ψt(i)=arg1jNmax[δt1(j)aji]

有了这两个局部状态,我们就可以从时刻0一直递推到时刻 T,然后利用 Ψ t ( i ) \Psi_t(i) Ψt(i) 记录的前一个最可能的状态节点回溯,直到找到最优的隐藏状态序列。

维特比算法流程总结

现在我们来总结下维特比算法的流程:

输入:HMM模型 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π),观测序列 O = ( o 1 , o 2 , . . . o T ) O=(o_1,o_2,...o_T) O=(o1,o2,...oT)

输出:最有可能的隐藏状态序列 I ∗ = { i 1 ∗ , i 2 ∗ , . . . i T ∗ } I^*= \{i_1^*,i_2^*,...i_T^*\} I={i1,i2,...iT}

1)初始化局部状态:

δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2... N \delta_1(i) = \pi_ib_i(o_1),\;i=1,2...N δ1(i)=πibi(o1),i=1,2...N

Ψ 1 ( i ) = 0 , i = 1 , 2... N \Psi_1(i)=0,\;i=1,2...N Ψ1(i)=0,i=1,2...N

  1. 进行动态规划递推时刻 t = 2 , 3 , . . . T t=2,3,...T t=2,3,...T 时刻的局部状态:

δ t ( i ) = max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( 0 t ) , i = 1 , 2... N \delta_{t}(i) = \max_{1 \leq j \leq N}\;[\delta_{t-1}(j)a_{ji}]b_i(0_{t}),\;i=1,2...N δt(i)=1jNmax[δt1(j)aji]bi(0t),i=1,2...N

Ψ t ( i ) = a r g max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2... N \Psi_t(i) = arg \; \max_{1 \leq j \leq N}\;[\delta_{t-1}(j)a_{ji}],\;i=1,2...N Ψt(i)=arg1jNmax[δt1(j)aji],i=1,2...N

  1. 计算时刻 T 最大的 δ T ( i ) \delta_{T}(i) δT(i) ,即为最可能隐藏状态序列出现的概率。计算时刻 T最大的 Ψ t ( i ) \Psi_t(i) Ψt(i) ,即为时刻 T 最可能的隐藏状态。

P ∗ = max ⁡ 1 ≤ j ≤ N δ T ( i ) P* = \max_{1 \leq j \leq N}\delta_{T}(i) P=1jNmaxδT(i)

i T ∗ = a r g max ⁡ 1 ≤ j ≤ N [ δ T ( i ) ] i_T^* = arg \; \max_{1 \leq j \leq N}\;[\delta_{T}(i)] iT=arg1jNmax[δT(i)]

  1. 利用局部状态 Ψ t ( i ) \Psi_t(i) Ψt(i) 开始回溯。对于 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T1,T2,...,1

i t ∗ = Ψ t + 1 ( i t + 1 ∗ ) i_t^* = \Psi_{t+1}(i_{t+1}^*) it=Ψt+1(it+1)

最终得到最有可能的隐藏状态序列 I ∗ = { i 1 ∗ , i 2 ∗ , . . . i T ∗ } I^*= \{i_1^*,i_2^*,...i_T^*\} I={i1,i2,...iT}

HMM模型维特比算法总结

如果了解文本挖掘的分词中的维特比算法,就会发现这两篇个维特比算法稍有不同。主要原因是在中文分词时,我们没有观察状态和隐藏状态的区别,只有一种状态。但是维特比算法的核心是定义动态规划的局部状态与局部递推公式,这一点在中文分词维特比算法和HMM的维特比算法是相同的,也是维特比算法的精华所在。

维特比算法也是寻找序列最短路径的一个通用方法,和dijkstra算法有些类似,但是dijkstra算法并没有使用动态规划,而是贪心算法。同时维特比算法仅仅局限于求序列最短路径,而dijkstra算法是通用的求最短路径的方法。

这篇关于概率图模型(1)--隐马尔科夫模型(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714549

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu4865(概率DP)

题意:已知前一天和今天的天气概率,某天的天气概率和叶子的潮湿程度的概率,n天叶子的湿度,求n天最有可能的天气情况。 思路:概率DP,dp[i][j]表示第i天天气为j的概率,状态转移如下:dp[i][j] = max(dp[i][j, dp[i-1][k]*table2[k][j]*table1[j][col] )  代码如下: #include <stdio.h>#include

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言