【机器学习算法推导】隐马尔科夫模型HMM及相关算法

1.隐马尔可夫模型HMM

1.1 简介

  隐马尔科夫模型是与概率论密切相关的一个模型,隐马尔科夫模型(Hidden Markov Model,以下简称HMM)在语音识别,自然语言处理等方面都有所应用。它被用来解决这样的问题:有两组序列Q和V,Q无法被观察到,称为隐藏序列。但是与V有着某种概率上的关系,而V是可以直接被观察到的,称为状态序列

1.2 定义

  令 Q Q Q={ q 1 , q 2 , . . . , q N q_1,q_2,...,q_N q1,q2,...,qN}表示所有隐藏状态的集合, V V V={ v 1 , v 2 , . . . , v M v_1,v_2,...,v_M v1,v2,...,vM}表示所有可观察状态的集合,N表示隐藏状态数,M表示可观察状态数。对于一个长度为T的序列来说,S表示隐藏状态序列,O表示观察序列,即 S S S={ s 1 , s 2 , . . . , s T s_1,s_2,...,s_T s1,s2,...,sT}, O O O={ o 1 , o 2 , . . . o T o_1,o_2,...o_T o1,o2,...oT},其中 s t ∈ Q s_t \in Q stQ, o t ∈ V o_t \in V otV
  一个HMM模型需要由三部分组成,分别是隐藏状态的初始概率分布 Π \Pi Π,状态转移概率矩阵 A A A,以及观测状态概率矩阵 B B B
  HMM模型假定了一个隐藏状态只跟前一个隐藏状态有关。令时刻t的状态 s t = q i s_t=q_i st=qi,时刻t+1的状态为 s t + 1 = q j s_{t+1}=q_j st+1=qj即从时刻t到时刻t+1的HMM状态转移概率 a i j = P ( s t + 1 = q j ∣ s t = q i ) a_{ij}=P(s_{t+1}=q_j|s_t=q_i) aij=P(st+1=qjst=qi),所有的 a i j a_{ij} aij组成了状态转移概率矩阵A。
  HMM模型同时也假定了一个被观测到的状态,只跟当前的隐藏状态有关。令时刻t的隐藏状态 s t = q j s_t=q_j st=qj,对应的观察状态 o t = v k o_{t}=v_k ot=vk即时刻t的观察状态 v k v_k vk在隐藏状态 q j q_j qj下的生成概率为 b j ( k ) = P ( o t = v k ∣ s t = q j ) b_j(k)=P(o_t=v_k|s_t=q_j) bj(k)=P(ot=vkst=qj),所有的$b_j(k)组成了观测状态概率矩阵B。

1.3 实例

  用概率论中经典的“取球模型”来类比的话,假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:
盒子1 盒子2 盒子3 白 球 数 5 4 7 红 球 数 5 6 3 \begin{array}{c|ccc} & \text{盒子1} & \text{盒子2} & \text{盒子3} \\ \hline 白球数 & 5 & 4 & 7 \\ 红球数 & 5 & 6 & 3 \end{array} 盒子155盒子246盒子373
  根据盒子中球的分布,可以得到观测状态概率矩阵B:
A = ( 0.5 0.5 0.4 0.6 0.7 0.3 ) A= \begin{pmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \\ \end{pmatrix} A=0.50.40.70.50.60.3
  按照下面的方法从盒子里抽球,开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。则初始概率分布 Π = ( 0.2 , 0.4 , 0.4 ) T \Pi=(0.2,0.4,0.4)^T Π=(0.2,0.4,0.4)T  以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。说了这么多,最终得到的就是状态转移概率矩阵A:
A = ( 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ) A= \begin{pmatrix} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \\ \end{pmatrix} A=0.50.30.20.20.50.30.30.20.5
  其中
  观察集合是: V = { 红 , 白 } , M = 2 V=\{红,白\},M=2 V={}M=2
  状态集合是: Q = { 盒 子 1 , 盒 子 2 , 盒 子 3 } , N = 3 Q=\{盒子1,盒子2,盒子3\},N=3 Q={123}N=3

1.4 生成观测序列

  假设我们存在一个HMM模型 λ = ( A , B , Π ) \lambda=(A,B,\Pi) λ=(A,B,Π),且已知观测序列的长度T,需要生成一个观测序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} O={o1,o2,...oT},其生成过程如下:

  • 根据初始概率分布 Π \Pi Π生成隐藏状态 s 1 s_1 s1
  • 根据当前隐藏状态 s t s_t st以及观察状态概率 b s t ( k ) b_{s_t}(k) bst(k)生成观察状态 o t o_t ot
  • 根据当前隐藏状态 s t s_t st以及状态转移概率 a s t s t + 1 a_{s_ts_{t+1}} astst+1生成隐藏状态 s t + 1 s_{t+1} st+1
  • 重复T次步骤2和3,得到所有的 o t o_t ot组成观察序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} O={o1,o2,...oT}

1.5 HMM的三个基本问题

  • 评估观察序列概率。即给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到基于动态规划的前向后向算法。
  • 模型参数学习问题。即给定观测序列O={o1,o2,…oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法。
  • 预测问题,也称为解码问题。即给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法。

2.前向后向算法

  问题描述:给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},计算在模型λ下观测序列O出现的概率P(O|λ)。

2.1 暴力求法

  任意一个隐藏序列 S = { s 1 , s 2 , . . . , s T } S=\{s_1,s_2,...,s_T\} S={s1,s2,...,sT}出现的概率是:
P ( S ∣ λ ) = Π s 1 a s 1 s 2 a s 2 s 3 . . . a s T − 1 s T P(S|\lambda)=\Pi_{s_1} a_{s_1s_2}a_{s_2s_3}...a_{s_{T-1}s_T} P(Sλ)=Πs1as1s2as2s3...asT1sT
  在已知S的情况下,我们要求的观察序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} O={o1,o2,...oT}出现的概率为
P ( O ∣ S , λ ) = b s 1 ( o 1 ) b s 2 ( o 2 ) . . . b s T ( o T ) P(O|S,\lambda)=b_{s_1}(o_1)b_{s_2}(o_2)...b_{s_T}(o_T) P(OS,λ)=bs1(o1)bs2(o2)...bsT(oT)
  则S和O联合出现的概率为
P ( O , S ∣ λ ) = P ( S ∣ λ ) P ( O ∣ S , λ ) = Π s 1 a s 1 s 2 a s 2 s 3 . . . a s T − 1 s T b s 1 ( o 1 ) b s 2 ( o 2 ) . . . b s T ( o T ) P(O,S|\lambda)=P(S|\lambda)P(O|S,\lambda)=\Pi_{s_1} a_{s_1s_2}a_{s_2s_3}...a_{s_{T-1}s_T}b_{s_1}(o_1)b_{s_2}(o_2)...b_{s_T}(o_T) P(O,Sλ)=P(Sλ)P(OS,λ)=Πs1as1s2as2s3...asT1sTbs1(o1)bs2(o2)...bsT(oT)
  然后求边缘概率分布,即可得到观测序列O在模型λ下出现的条件概率P(O|λ):
P ( O ∣ λ ) = ∑ S P ( O , S ∣ λ ) P(O|\lambda)=\sum_SP(O,S|\lambda) P(Oλ)=SP(O,Sλ)
  然而暴力算法存在一个大问题,当隐藏状态较多时,预测状态有 N T N^T NT种组合,上述的算法太过耗时。我们一般使用前向算法或者后向算法来求解这个问题。

2.2 前向算法

  算法比较好的同学也许已经发现,上述的过程可以使用动态规划来完成。动态规划的本质是递推,也就是说,我们需要将问题分解为子问题,从子问题的最优解中一步一步,根据递推式,推出整个问题的最优解。
  这里给出动态规划中的子问题,也就是前向概率的定义。假设在时刻t,隐藏状态为 q i q_i qi,观测状态为 o 1 , o 2 , . . . o t o_1,o_2,...o_t o1,o2,...ot的概率为前向概率 f t ( i ) = P ( o 1 , o 2 , . . . , o t ∣ s t = q i , λ ) f_t(i)=P(o_1,o_2,...,o_t|s_t=q_i,\lambda) ft(i)=P(o1,o2,...,otst=qi,λ)
  考虑时刻t+1的情况,因为HMM的隐藏状态只与前一个隐藏状态有关,既然这样,我们就考虑所有前一个状态,让它们都向t+1时刻的某个状态转移,就可以得到相应的概率,这样的话,我们就得到了前向概率的递推式:
f t + 1 ( i ) = b i ( o t + 1 ) ∑ j = 1 N f t ( j ) a j i f_{t+1}(i)=b_i(o_{t+1})\sum_{j=1}^Nf_t(j)a_{ji} ft+1(i)=bi(ot+1)j=1Nft(j)aji
  有了递推式,我们就可以推算出最终的目标,得到观测序列O在模型λ下出现的条件概率P(O|λ)。前向算法过程如下:

  1. 初始化时刻1各个状态的前向概率 f 1 ( i ) = Π i b i ( o 1 ) , i = 1 , 2 , 3 , . . . , N f_1(i)=\Pi_ib_i(o_1),i=1,2,3,...,N f1(i)=Πibi(o1),i=1,2,3,...,N
  2. 使用递推式 f t + 1 ( i ) = b i ( o t + 1 ) ∑ j = 1 N f t ( j ) a j i f_{t+1}(i)=b_i(o_{t+1})\sum_{j=1}^Nf_t(j)a_{ji} ft+1(i)=bi(ot+1)j=1Nft(j)aji递推时刻2,3,…,T的前向概率。
  3. 计算观测序列O在模型λ下出现的条件概率 P ( O ∣ λ ) = ∑ i = 1 N f T ( i ) P(O|λ)=\sum\limits_{i=1}^Nf_T(i) P(Oλ)=i=1NfT(i)

2.3 后向算法

  后向算法和前向算法类似,不同的地方在于后向算法是从后往前递推。假设在时刻t,隐藏状态为 q i q_i qi,观测状态为 o t + 1 , o t + 2 , . . . o T o_{t+1},o_{t+2},...o_T ot+1,ot+2,...oT的概率为后向概率 g t ( i ) = P ( o t + 1 , o t + 2 , . . . o T ∣ s t = q i , λ ) g_t(i)=P(o_{t+1},o_{t+2},...o_T|s_t=q_i,\lambda) gt(i)=P(ot+1,ot+2,...oTst=qi,λ)
  考虑时刻t+1的情况,假定我们已经知道当前所有隐藏状态的后向概率 g t + 1 ( j ) g_{t+1}(j) gt+1(j),在时刻t的某个状态i下,由i到达观测状态为 o t + 1 , o t + 2 , . . . , o T o_{t+1},o_{t+2},...,o_T ot+1,ot+2,...,oT的概率为 a i j b j ( o t + 1 ) g t + 1 ( j ) a_{ij}b_j(o_{t+1})g_{t+1}(j) aijbj(ot+1)gt+1(j),由于这这样的j可以有多个,我们将时刻t+1下所有的状态j考虑进来,就得到了后向概率的递推式:
g t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) g t + 1 ( j ) g_{t}(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})g_{t+1}(j) gt(i)=j=1Naijbj(ot+1)gt+1(j)
  有了递推式,我们就可以推算出最终的目标,得到观测序列O在模型λ下出现的条件概率P(O|λ)。后向算法过程如下:

  1. 初始化时刻T各个状态的前向概率 g T ( i ) = 1 , i = 1 , 2 , 3 , . . . , N g_T(i)=1,i=1,2,3,...,N gT(i)=1,i=1,2,3,...,N
  2. 使用递推式 g t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) g t + 1 ( j ) g_{t}(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})g_{t+1}(j) gt(i)=j=1Naijbj(ot+1)gt+1(j)递推时刻T-1,T-2,…,1的后向概率。
  3. 计算观测序列O在模型λ下出现的条件概率 P ( O ∣ λ ) = ∑ i = 1 N Π i b i ( o 1 ) g 1 ( i ) P(O|λ)=\sum\limits_{i=1}^N\Pi_ib_i(o_1)g_1(i) P(Oλ)=i=1NΠibi(o1)g1(i)

3.鲍勃-韦尔奇算法

  给定若干训练样本O={o1,o2,…oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法。
  联合分布 P ( O , S ∣ λ ) P(O,S|\lambda) P(O,Sλ)的表达式如下:
P ( O , S ∣ λ ) = ∏ 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,S|\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,Sλ)=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-Step的期望表达式为:
L ( λ , λ ˉ ) = ∑ S P ( S ∣ O , λ ˉ ) log ⁡ P ( O , S ∣ λ ) L(\lambda,\bar \lambda)=\sum_SP(S|O,\bar \lambda)\log P(O,S|\lambda) L(λ,λˉ)=SP(SO,λˉ)logP(O,Sλ)
  因为 P ( S ∣ O , λ ˉ ) = P ( O , S ∣ λ ˉ ) P ( O ∣ λ ˉ ) P(S|O,\bar \lambda)=\frac{P(O,S|\bar \lambda)}{P(O|\bar \lambda)} P(SO,λˉ)=P(Oλˉ)P(O,Sλˉ),分母是常数,所以在M-Step中我们要最大化的表达式为:
λ ˉ = arg ⁡ max ⁡ λ ∑ d = 1 D ∑ S P ( O , S ∣ λ ˉ ) ( log ⁡ π s 1 + ∑ t = 1 T − 1 log ⁡ a s t , s t + 1 + ∑ t = 1 T b s t ( o t ) ) . . . . . . . . . . . . ( 1 ) \bar \lambda=\arg \max_\lambda \sum_{d=1}^D \sum_SP(O,S|\bar \lambda)(\log\pi_{s_1}+\sum_{t=1}^{T-1}\log a_{s_t,s_{t+1}}+\sum_{t=1}^Tb_{s_t}(o_t))............(1) λˉ=argλmaxd=1DSP(O,Sλˉ)(logπs1+t=1T1logast,st+1+t=1Tbst(ot))............(1)
  式子1分别对A,B, Π \Pi Π求导,得到相应的迭代公式。在开始推导前,我们先定义一些变量。
  由前向概率和后向概率定义可知:
P ( s t = q i , O ∣ λ ) = f t ( i ) g t ( i ) P ( s t = q i , s t + 1 = q j , O ∣ λ ) = f t ( i ) a i j b j ( o t + 1 ) g t + 1 ( j ) P(s_t=q_i,O|\lambda)=f_t(i)g_t(i)\\P(s_t=q_i,s_{t+1}=q_j,O|\lambda)=f_t(i)a_{ij}b_j(o_{t+1})g_{t+1}(j) P(st=qi,Oλ)=ft(i)gt(i)P(st=qi,st+1=qj,Oλ)=ft(i)aijbj(ot+1)gt+1(j)
  给定模型λ和观测序列O,在时刻t处于状态 q i q_i qi的概率记为:
γ t ( i ) = P ( s t = q i ∣ O , λ ) = P ( s t = q i , O ∣ λ ) P ( O ∣ λ ) = f t ( i ) g t ( i ) ∑ j = 1 N f t ( j ) g t ( j ) \gamma_t(i)=P(s_t=q_i|O,\lambda)=\frac{P(s_t=q_i,O|\lambda )}{P(O|\lambda)}=\frac{f_t(i)g_t(i)}{\sum\limits_{j=1}^Nf_t(j)g_t(j)} γt(i)=P(st=qiO,λ)=P(Oλ)P(st=qi,Oλ)=j=1Nft(j)gt(j)ft(i)gt(i)
  给定模型λ和观测序列O,在时刻t处于状态 q i q_i qi,且时刻t+1处于状态 q j q_j qj的概率记为:
ξ t ( i , j ) = P ( s t = q i , s t + 1 = q j ∣ O , λ ) = P ( s t = q i , s t + 1 = q j , O ∣ λ ) P ( O ∣ λ ) = f t ( i ) a i j b j ( o t + 1 ) g t + 1 ( j ) ∑ r = 1 N ∑ s = 1 N f t ( r ) a r s b s ( o t + 1 ) g t + 1 ( s ) \xi_t(i,j)=P(s_t=q_i,s_{t+1}=q_j|O,\lambda)=\frac{P(s_t=q_i,s_{t+1}=q_j,O|\lambda)}{P(O|\lambda)}=\frac{f_t(i)a_{ij}b_j(o_{t+1})g_{t+1}(j)}{\sum\limits_{r=1}^N\sum\limits_{s=1}^Nf_t(r)a_{rs}b_s(o_{t+1})g_{t+1}(s)} ξt(i,j)=P(st=qi,st+1=qjO,λ)=P(Oλ)P(st=qi,st+1=qj,Oλ)=r=1Ns=1Nft(r)arsbs(ot+1)gt+1(s)ft(i)aijbj(ot+1)gt+1(j)

3.1 对 π i \pi_i πi求导

  式子1对 Π i \Pi_i Πi求偏导,式子中后面部分的 ∑ t = 1 T − 1 log ⁡ a s t , s t + 1 + ∑ t = 1 T b s t ( o t ) \sum\limits_{t=1}^{T-1}\log a_{s_t,s_{t+1}}+\sum\limits_{t=1}^Tb_{s_t}(o_t) t=1T1logast,st+1+t=1Tbst(ot)为常数,直接无视,求导的式子变成
λ ˉ = arg ⁡ max ⁡ λ ∑ d = 1 D ∑ S P ( O , S ∣ λ ˉ ) log ⁡ π s 1 . . . . . . . . . . . . ( 2 ) \bar \lambda=\arg \max_\lambda \sum_{d=1}^D \sum_SP(O,S|\bar \lambda)\log\pi_{s_1}............(2) λˉ=argλmaxd=1DSP(O,Sλˉ)logπs1............(2)
  由于 Π i \Pi_i Πi是初始概率分布,所以还满足 ∑ i = 1 N π i = 1 \sum\limits_{i=1}^N\pi_i=1 i=1Nπi=1。因此需要用到拉格朗日乘子法来求。式子2的拉格朗日函数为:
L ( π i ) = ∑ d = 1 D ∑ S P ( O , S ∣ λ ˉ ) log ⁡ π s 1 + γ ( ∑ i = 1 N π i − 1 ) . . . . . . . . . . . . ( 3 ) L(\pi_i)=\sum_{d=1}^D \sum_SP(O,S|\bar \lambda)\log\pi_{s_1}+\gamma(\sum_{i=1}^N\pi_i-1)............(3) L(πi)=d=1DSP(O,Sλˉ)logπs1+γ(i=1Nπi1)............(3)
  对 π i \pi_i πi进行求导,并令偏导数为0,得到
∑ d = 1 D P ( O , s 1 ( d ) = i ∣ λ ˉ ) + γ π i = 0......... ( 4 ) \sum_{d=1}^DP(O,s_1^{(d)}=i|\bar \lambda)+\gamma\pi_i=0.........(4) d=1DP(O,s1(d)=iλˉ)+γπi=0.........(4)
  由于i可以取值范围为1到N,因此我们得到N个方程,将所有方程相加后得到
∑ d = 1 D P ( O ∣ λ ˉ ) + π i = 0.......... ( 5 ) \sum_{d=1}^DP(O|\bar \lambda)+\pi_i=0..........(5) d=1DP(Oλˉ)+πi=0..........(5)
  联立4和5得到
π i = ∑ d = 1 D P ( O , s 1 ( d ) = i ∣ λ ˉ ) ∑ d = 1 D P ( O ∣ λ ˉ ) = ∑ d = 1 D P ( O , s 1 ( d ) = i ∣ λ ˉ ) D P ( O ∣ λ ˉ ) = ∑ d = 1 D P ( s 1 ( d ) = i ∣ O ( d ) , λ ˉ ) D = ∑ d = 1 D γ i ( d ) D . . . . . . . . . . ( 6 ) \begin{aligned} \pi_i &=\frac{\sum\limits_{d=1}^DP(O,s_1^{(d)}=i|\bar \lambda)}{\sum\limits_{d=1}^DP(O|\bar \lambda)} \\ &=\frac{\sum\limits_{d=1}^DP(O,s_1^{(d)}=i|\bar \lambda)}{DP(O|\bar \lambda)}\\ &=\frac{\sum\limits_{d=1}^DP(s_1^{(d)}=i|O^{(d)},\bar \lambda)}{D} \\ &=\frac{\sum\limits_{d=1}^D\gamma_i^{(d)}}{D}..........(6) \end{aligned} πi=d=1DP(Oλˉ)d=1DP(O,s1(d)=iλˉ)=DP(Oλˉ)d=1DP(O,s1(d)=iλˉ)=Dd=1DP(s1(d)=iO(d),λˉ)=Dd=1Dγi(d)..........(6)
  至此就得到了 π \pi π的迭代公式。

3.2 对 a i j a_{ij} aij求导

  式子1对 a i j a_{ij} aij求偏导,直接无视常数部分,求导的式子变成
∑ d = 1 D ∑ S ∑ t = 1 T − 1 P ( O , S ∣ λ ˉ ) log ⁡ a s t , s t + 1 = ∑ d = 1 D ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 P ( O , s t ( d ) = i , s t + 1 ( d ) = j ∣ λ ˉ ) log ⁡ a i j . . . . . . . . . . . . ( 7 ) \sum_{d=1}^D \sum_S\sum_{t=1}^{T-1}P(O,S|\bar \lambda)\log a_{s_t,s_{t+1}}=\sum_{d=1}^D \sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}P(O,s_t^{(d)}=i,s_{t+1}^{(d)}=j|\bar \lambda)\log a_{ij}............(7) d=1DSt=1T1P(O,Sλˉ)logast,st+1=d=1Di=1Nj=1Nt=1T1P(O,st(d)=i,st+1(d)=jλˉ)logaij............(7)
  同样存在 ∑ i = 1 N a i j = 1 \sum\limits_{i=1}^Na_{ij}=1 i=1Naij=1的限制,使用拉格朗日乘子法,最终得到 a i j a_{ij} aij的表达式为
a i j = ∑ d = 1 D ∑ t = 1 T − 1 P ( O ( d ) , s t ( d ) = i , s t + 1 ( d ) = j ∣ λ ˉ ) ∑ d = 1 D ∑ t = 1 T − 1 P ( O ( d ) , s t ( d ) = i ∣ λ ˉ ) = ∑ 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_{d=1}^D\sum_{t=1}^{T-1}P(O^{(d)},s_t^{(d)}=i,s_{t+1}^{(d)}=j|\bar \lambda)}{\sum_{d=1}^D\sum_{t=1}^{T-1}P(O^{(d)},s_t^{(d)}=i|\bar \lambda)}=\frac{\sum_{d=1}^D\sum_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum_{d=1}^D\sum_{t=1}^{T-1}\gamma_t^{(d)}(i)} aij=d=1Dt=1T1P(O(d),st(d)=iλˉ)d=1Dt=1T1P(O(d),st(d)=i,st+1(d)=jλˉ)=d=1Dt=1T1γt(d)(i)d=1Dt=1T1ξt(d)(i,j)

3.3 对 b j b_j bj求导

  同上述的步骤类似, b j ( k ) b_j(k) bj(k)的迭代公式为:
b j ( k ) = ∑ d = 1 D ∑ t = 1 , o t ( d ) = v k N P ( O , s t ( d ) = j ∣ λ ˉ ) ∑ d = 1 D ∑ t = 1 N P ( O , s t ( d ) = j ∣ λ ˉ ) = ∑ d = 1 D ∑ t = 1 , o t ( d ) = v k N γ t ( d ) ( j ) ∑ d = 1 D ∑ t = 1 N γ t ( d ) ( j ) \begin{aligned} b_j(k) &=\frac{\sum\limits_{d=1}^D\sum\limits_{t=1,o_t^{(d)}=v_k}^NP(O,s_t^{(d)}=j|\bar \lambda)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^NP(O,s_t^{(d)}=j|\bar \lambda)}\\ &=\frac{\sum\limits_{d=1}^D\sum\limits_{t=1,o_t^{(d)}=v_k}^N\gamma_t^{(d)}(j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^N\gamma_t^{(d)}(j)} \end{aligned} bj(k)=d=1Dt=1NP(O,st(d)=jλˉ)d=1Dt=1,ot(d)=vkNP(O,st(d)=jλˉ)=d=1Dt=1Nγt(d)(j)d=1Dt=1,ot(d)=vkNγt(d)(j)

3.4 算法总结

  1. 随机初始化HMM的参数 λ \lambda λ
  2. 对所有的观察序列,计算 γ t ( d ) ( i ) , ξ t ( d ) ( i , j ) \gamma_t^{(d)}(i),\xi_t^{(d)}(i,j) γt(d)(i),ξt(d)(i,j),t=1,2,…,T
  3. 根据迭代公式更新模型参数
  4. 如果参数收敛,则算法结束,否则重复2和3。

4. 维特比算法

  问题描述:在已知模型参数 λ \lambda λ和观察序列O的情况下,要找出最有可能的隐藏状态。可以使用维特比算法来解决,它是一种基于动态规划的算法。在维特比算法中,定义了两个局部状态。
  定义 δ t ( i ) \delta_t(i) δt(i)表示在时刻t,状态为i的情况下,到目前为止所有可能的转移路径中概率最大的情况。递推式如下:
δ t + 1 ( i ) = max ⁡ 1 ≤ j ≤ N δ t ( j ) a j i b i ( o t + 1 ) \delta_{t+1}(i)=\max_{1\le j \le N}\delta_t(j)a_{ji}b_i(o_{t+1}) δt+1(i)=1jNmaxδt(j)ajibi(ot+1)
   ψ t ( i ) \psi_t(i) ψt(i)记录在时刻t,状态为i的情况下,概率最大的转移路径的第t-1个节点的状态。递推式如下:
ψ t ( i ) = max ⁡ 1 ≤ j ≤ N δ t − 1 a j i \psi_t(i)=\max_{1\le j \le N}\delta_{t-1}a_{ji} ψt(i)=1jNmaxδt1aji
  维特比算法总结如下:

  1. 初始化 δ 1 ( i ) = π i b i ( o 1 ) , ψ 1 ( i ) = 0 , i = 1 , 2 , . . . , N \delta_1(i)=\pi_ib_i(o_1),\psi_1(i)=0,i=1,2,...,N δ1(i)=πibi(o1),ψ1(i)=0,i=1,2,...,N
  2. 利用递推式 δ t + 1 ( i ) = max ⁡ 1 ≤ j ≤ N δ t ( j ) a j i b i ( o t + 1 ) \delta_{t+1}(i)=\max_{1\le j \le N}\delta_t(j)a_{ji}b_i(o_{t+1}) δt+1(i)=max1jNδt(j)ajibi(ot+1) ψ t ( i ) = max ⁡ 1 ≤ j ≤ N δ t − 1 a j i \psi_t(i)=\max_{1\le j \le N}\delta_{t-1}a_{ji} ψt(i)=max1jNδt1aji求解时刻2,3,…,T
  3. 选择最大的 δ T ( i ) \delta_T(i) δT(i),利用 ψ t ( i ) \psi_t(i) ψt(i)回溯得到前T-1个状态,最终得到最有可能的序列,并且最大的 δ T ( i ) \delta_T(i) δT(i)为这个序列出现的概率。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值