隐马尔可夫模型(HMM)推导详解

1、隐马尔可夫模型基本概念

隐马尔可夫(Hidden Markov Model, HMM)是马尔可夫链(Markov chain)的扩展,同样适合于对有限状态演进的随机过程建模。在马尔可夫链中,状态是可观察得到的,然而在某些情况下,状态隐藏在观测事件下,状态与观测变量不再满足一一对应的关系,此时观测变量是状态的概率分布函数。举例来说,医生可以通过患者的行为(发热、打喷嚏等)判断病人的身体状况,但无法不通过观察直接得到。此时,发热、打喷嚏等行为即观测事件,身体状况即病人此时的状态。HMM就是用来描述此类的马尔可夫链。

2、隐马尔可夫模型基本参数

HMM各个时期会处于各种状态,设 Q Q Q是所有可能状态的集合;每个状态可以产生各种观测事件,设 V V V是所有可能的观测事件的集合。 Q Q Q V V V的定义如下:
Q = { q 1 , q 2 , . . . q N } , V = { v 1 , v 2 , . . . v M } Q=\{q_1, q_2, ... q_N\}, V=\{v_1, v_2, ... v_M\} Q={q1,q2,...qN},V={v1,v2,...vM}
其中 N N N是可能的状态数, M M M是可能的观测数。还是以上面的医生看病为例,这里的 Q Q Q表示{感冒,健康},而 V V V表示{发热、打喷嚏、无异常}。

然后定义 S S S是长度为 T T T的模型状态序列,定义 O O O为对应的观测序列。
S = { s 1 , s 2 , . . . s T } , O = { o 1 , o 2 , . . . o T } S=\{s_1, s_2, ... s_T\}, O=\{o_1, o_2, ... o_T\} S={s1,s2,...sT},O={o1,o2,...oT}
这两个序列都是整数列表,其中每个整数对应的是状态集合 Q Q Q和观测事件集合 V V V中的索引。比如: q s 2 q_{s_2} qs2表示模型在时刻2时的状态, v o 5 v_{o_5} vo5表示模型在时刻5时的观测。

除此之外,还有三个分布被定义来描述一个隐马尔可夫模型:

  • π \pi π:初始概率分布,表示在初始时刻各个状态出现的概率:
    π = [ π 1 , π 2 , . . . , π N ] T π i = P ( s 1 = i ) , i = 1 , 2 , . . . , N \pi=[\pi_1, \pi_2, ..., \pi_N]^T \\ \pi_i=P(s_1=i), i=1, 2, ..., N π=[π1,π2,...,πN]Tπi=P(s1=i),i=1,2,...,N
  • A A A:状态转移分布,表示上一时刻到下一时刻不同状态之间转换的概率:
    A = [ a i j ] N × N a i j = P ( s t + 1 = j ∣ s t = i ) A=[a_{ij}]_{N\times N} \\ a_{ij}=P(s_{t+1}=j|s_t=i) A=[aij]N×Naij=P(st+1=jst=i)
  • B B B:观测概率分布,表示某个状态下各种观测事件出现的概率:
    B = [ b i j ] N × M b i j = P ( o t = j ∣ s t = i ) B=[b_{ij}]_{N\times M} \\ b_{ij}=P(o_{t}=j|s_t=i) B=[bij]N×Mbij=P(ot=jst=i)

隐马尔可夫模型由以上三个分布决定,因此可以用一个三元符号表示:
λ = ( A , B , π ) \lambda=(A, B, \pi) λ=(A,B,π)

3、隐马尔可夫模型基本假设

HMM 是表示随机过程 { s 1 , s 2 , . . . , s T , o 1 , o 2 , . . . , o T } \{s_1, s_2, ..., s_T, o_1, o_2, ..., o_T\} {s1,s2,...,sT,o1,o2,...,oT}的联合概率分布。HMM 基于两条假设使得问题得到简化:

  • 齐次马尔可夫性假设。任意时刻的状态只依赖于前一时刻的状态,与其它时刻的状态及观测无关:
    P ( s t ∣ s t − 1 , o t − 1 , . . . , s 1 , o 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_{t-1}, o_{t-1}, ..., s_{1}, o_{1})=P(s_t|s_{t-1}) P(stst1,ot1,...,s1,o1)=P(stst1)
  • 观测独立性假设。任意时刻的观测只依赖于此刻的状态,与其它无关:
    P ( o t ∣ s t , o t − 1 , . . . , s 1 , o 1 ) = P ( o t ∣ s t ) P(o_t|s_{t}, o_{t-1}, ..., s_{1}, o_{1})=P(o_t|s_{t}) P(otst,ot1,...,s1,o1)=P(otst)

4、隐马尔可夫模型基本问题

经典HMM主要解决三个基本问题。

4.1 评估问题

给定模型 λ λ λ和观测序列 O O O,计算在该模型下观测序列 O O O出现的概率 P ( O ∣ λ ) P(O|λ) P(Oλ)

4.2 学习问题

已知观测序列 O O O,估计模型 λ λ λ的参数,使得在该模型下观测到这个序列的概率 P ( O ∣ λ ) P(O|λ) P(Oλ)最大。

4.3 预测问题

已知模型 λ λ λ,给定观测序列 O O O,求与之对应的状态序列 S S S,使得概率 P ( S ∣ O , λ ) P(S|O,λ) P(SO,λ)最大。

5、隐马尔可夫模型基本问题解法

5.1 评估问题

对于给定的模型参数 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π),计算观测序列 O = ( o 1 , o 2 , … , o T ) O=(o_1,o_2,…,o_T) O=(o1,o2,,oT)出现的概率,最简单的就是把所有可能的状态序列的概率都计算出来,然后选择最大的那个,也就是俗称的穷举法。但是这个方法计算复杂度是极大的,高达 O ( T N T ) O(TN^T) O(TNT)阶,所以不可行。为解决这一问题,两种计算可行的算法被提出。

5.1.1 前向算法

首先对前向概率进行定义:
α t ( i ) = P ( o 1 , o 2 , . . . , o t , s t = i ∣ λ ) \alpha_t(i)=P(o_1, o_2, ..., o_t, s_t=i|\lambda) αt(i)=P(o1,o2,...,ot,st=iλ)
也就是说, α t ( i ) \alpha_t(i) αt(i)表示在时刻 t t t时,观测序列为 ( o 1 , o 2 , … , o t ) (o_1,o_2,…,o_t) (o1,o2,,ot),且此时状态为 q i q_i qi的概率。前向算法基本流程如下:

  • 定义初值。即 t = 1 t=1 t=1时在观察到 o 1 o_1 o1的情况下所有状态发生的概率,一共有 N N N个(因为有 N N N种可能的状态):
    α 1 ( i ) = P ( o 1 , s 1 = i ∣ λ ) = π i b i o 1 , i = 1 , 2 , . . . , N \alpha_1(i)=P(o_1, s_1=i|\lambda)=\pi_ib_{io_1}, i=1, 2, ..., N α1(i)=P(o1,s1=iλ)=πibio1,i=1,2,...,N

  • 递推。对 t = 2 , 3 , . . . , T t=2, 3, ..., T t=2,3,...,T,计算所有状态发生的概率,每个时间点下同样都要计算N个概率:
    α t ( i ) = P ( o 1 , o 2 , . . . , o t , s t = i ∣ λ ) = ∑ j = 1 N P ( o 1 , o 2 , . . . , o t , s t − 1 = j , s t = i ∣ λ ) = ∑ j = 1 N P ( o t ∣ o 1 , o 2 , . . . , o t − 1 , s t − 1 = j , s t = i , λ ) P ( o 1 , o 2 , . . . , o t − 1 , s t − 1 = j , s t = i ∣ λ ) = ∑ j = 1 N P ( o t ∣ s t = i , λ ) P ( s t = i ∣ o 1 , o 2 , . . . , o t − 1 , s t − 1 = j , λ ) P ( o 1 , o 2 , . . . , o t − 1 , s t − 1 = j ∣ λ ) = P ( o t ∣ s t = i , λ ) ∑ j = 1 N P ( s t = i ∣ s t − 1 = j , λ ) P ( o 1 , o 2 , . . . , o t − 1 , s t − 1 = j ∣ λ ) = b i o t ∑ j = 1 N a j i α t − 1 ( j ) , i = 1 , 2 , . . . , N \begin{aligned} \alpha_t(i) & = P(o_1, o_2, ..., o_t, s_t=i|\lambda) \\ & = \sum_{j=1}^NP(o_1, o_2, ..., o_t, s_{t-1}=j, s_t=i|\lambda) \\ & = \sum_{j=1}^NP(o_t|o_1, o_2, ..., o_{t-1}, s_{t-1}=j, s_t=i, \lambda)P(o_1, o_2, ..., o_{t-1}, s_{t-1}=j, s_t=i|\lambda) \\ & = \sum_{j=1}^NP(o_t|s_t=i, \lambda)P(s_t=i|o_1, o_2, ..., o_{t-1}, s_{t-1}=j, \lambda)P(o_1, o_2, ..., o_{t-1}, s_{t-1}=j|\lambda) \\ & = P(o_t|s_t=i, \lambda)\sum_{j=1}^NP(s_t=i|s_{t-1}=j, \lambda)P(o_1, o_2, ..., o_{t-1}, s_{t-1}=j|\lambda) \\ & = b_{io_t}\sum_{j=1}^Na_{ji}\alpha_{t-1}(j), i=1, 2, ..., N \end{aligned} αt(i)=P(o1,o2,...,ot,st=iλ)=j=1NP(o1,o2,...,ot,st1=j,st=iλ)=j=1NP(oto1,o2,...,ot1,st1=j,st=i,λ)P(o1,o2,...,ot1,st1=j,st=iλ)=j=1NP(otst=i,λ)P(st=io1,o2,...,ot1,st1=j,λ)P(o1,o2,...,ot1,st1=jλ)=P(otst=i,λ)j=1NP(st=ist1=j,λ)P(o1,o2,...,ot1,st1=jλ)=biotj=1Najiαt1(j),i=1,2,...,N
    其中:

    • 第一行表示 α t ( i ) \alpha_t(i) αt(i)的定义;
    • 第二行表示考虑了 t − 1 t-1 t1时刻所有状态的概率;
    • 第三行中
      • 第二项是在该模型参数下取得观察序列 { o 1 , o 2 , . . . , o t − 1 } \{o_1, o_2, ..., o_{t-1}\} {o1,o2,...,ot1}以及第 t − 1 t-1 t1时刻状态为 j j j和第 t t t时刻状态为 i i i的概率
      • 第一项是在已知观察序列 { o 1 , o 2 , . . . , o t − 1 } \{o_1, o_2, ..., o_{t-1}\} {o1,o2,...,ot1}以及第 t − 1 t-1 t1时刻状态为 j j j和第 t t t时刻状态为 i i i的情况下取得 t t t时刻观察值为 o t o_t ot的概率;
    • 第四行中
      • 第三项是在该模型参数下取得观察序列 { o 1 , o 2 , . . . , o t − 1 } \{o_1, o_2, ..., o_{t-1}\} {o1,o2,...,ot1}以及第 t − 1 t-1 t1时刻状态为 j j j的概率
      • 第二项是在已知观察序列 { o 1 , o 2 , . . . , o t − 1 } \{o_1, o_2, ..., o_{t-1}\} {o1,o2,...,ot1}以及第 t − 1 t-1 t1时刻状态为 j j j的情况下取得 t t t时刻状态为 i i i的概率
      • 第一项是在已知 t t t时刻状态为 i i i的情况下取得 t t t时刻观察值为 o t o_t ot的概率;
    • 第五行中的操作是将第四行中与变量 j j j无关的项提到求和操作外面。
  • 计算最后的概率。
    P ( O ∣ λ ) = ∑ i = 1 N P ( o 1 , o 2 , . . . , o T , s T = i ∣ λ ) = ∑ j = 1 N α T ( i ) P(O|\lambda)=\sum_{i=1}^NP(o_1, o_2, ..., o_{T}, s_{T}=i|\lambda)=\sum_{j=1}^N\alpha_T(i) P(Oλ)=i=1NP(o1,o2,...,oT,sT=iλ)=j=1NαT(i)

5.1.2 后向算法

首先对后向概率进行定义:
β t ( i ) = P ( o t + 1 , o t + 2 , . . . , o T ∣ s t = i , λ ) \beta_t(i)=P(o_{t+1}, o_{t+2}, ..., o_T|s_t=i, \lambda) βt(i)=P(ot+1,ot+2,...,oTst=i,λ)
也就是说, β t ( i ) \beta_t(i) βt(i)表示已知时刻 t t 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)的概率。后向算法基本流程如下:

  • 定义初值。由于是从后往前推,所以要定义 β T ( i ) \beta_T(i) βT(i)的值:
    β T ( i ) = 1 , i = 1 , 2 , . . . , N \beta_T(i)=1, i=1, 2, ..., N βT(i)=1,i=1,2,...,N

  • 递推。对 t = T − 1 , T − 2 , . . . , 1 t=T-1, T-2, ..., 1 t=T1,T2,...,1,计算:
    β t ( i ) = P ( o t + 1 , o t + 2 , . . . , o T ∣ s t = i , λ ) = ∑ j = 1 N P ( o t + 1 , o t + 2 , . . . , o T , s t + 1 = j ∣ s t = i , λ ) = ∑ j = 1 N P ( o t + 1 ∣ o t + 2 , . . . , o T , s t + 1 = j , s t = i , λ ) P ( o t + 2 , . . . , o T , s t + 1 = j ∣ s t = i , λ ) = ∑ j = 1 N P ( o t + 1 ∣ s t + 1 = j , λ ) P ( o t + 2 , . . . , o T ∣ s t + 1 = j , s t = i , λ ) P ( s t + 1 = j ∣ s t = i , λ ) = ∑ j = 1 N P ( o t + 1 ∣ s t + 1 = j , λ ) P ( o t + 2 , . . . , o T ∣ s t + 1 = j , λ ) P ( s t + 1 = j ∣ s t = i , λ ) = ∑ j = 1 N a i j b j o t + 1 β t + 1 ( j ) , i = 1 , 2 , . . . , N \begin{aligned} \beta_t(i) & =P(o_{t+1}, o_{t+2}, ..., o_T|s_t=i, \lambda) \\ & = \sum_{j=1}^NP(o_{t+1}, o_{t+2}, ..., o_T, s_{t+1}=j|s_t=i, \lambda) \\ & = \sum_{j=1}^NP(o_{t+1}|o_{t+2}, ..., o_T, s_{t+1}=j, s_t=i, \lambda)P(o_{t+2}, ..., o_T, s_{t+1}=j|s_t=i, \lambda) \\ & = \sum_{j=1}^NP(o_{t+1}|s_{t+1}=j, \lambda)P(o_{t+2}, ..., o_T|s_{t+1}=j, s_t=i, \lambda)P(s_{t+1}=j|s_t=i, \lambda) \\ & = \sum_{j=1}^NP(o_{t+1}|s_{t+1}=j, \lambda)P(o_{t+2}, ..., o_T|s_{t+1}=j, \lambda)P(s_{t+1}=j|s_t=i, \lambda) \\ & = \sum_{j=1}^Na_{ij}b_{jo_{t+1}}\beta_{t+1}(j), i=1, 2, ..., N \end{aligned} βt(i)=P(ot+1,ot+2,...,oTst=i,λ)=j=1NP(ot+1,ot+2,...,oT,st+1=jst=i,λ)=j=1NP(ot+1ot+2,...,oT,st+1=j,st=i,λ)P(ot+2,...,oT,st+1=jst=i,λ)=j=1NP(ot+1st+1=j,λ)P(ot+2,...,oTst+1=j,st=i,λ)P(st+1=jst=i,λ)=j=1NP(ot+1st+1=j,λ)P(ot+2,...,oTst+1=j,λ)P(st+1=jst=i,λ)=j=1Naijbjot+1βt+1(j),i=1,2,...,N
    其中:

    • 第一行表示 β t ( i ) \beta_t(i) βt(i)的定义;
    • 第二行表示考虑了 t + 1 t+1 t+1时刻所有状态的概率;
    • 第三行中
      • 第二项是在该模型参数下已知第 t t t时刻状态为 i i i的情况下取得观察序列 { o t + 2 , . . . , o T } \{o_{t+2}, ..., o_T\} {ot+2,...,oT}以及第 t + 1 t+1 t+1时刻状态为 j j j的概率
      • 第一项是在已知第 t t t时刻状态为 i i i、第 t + 1 t+1 t+1时刻状态为 j j j以及观察序列 { o t + 2 , . . . , o T } \{o_{t+2}, ..., o_T\} {ot+2,...,oT}的情况下取得 t + 1 t+1 t+1时刻观察值为 o t + 1 o_{t+1} ot+1的概率;
    • 第四行中
      • 第三项是在已知第 t t t时刻状态为 i i i的情况下取得第 t + 1 t+1 t+1时刻状态为 j j j的概率
      • 第二项是在已知第 t t t时刻状态为 i i i以及第 t + 1 t+1 t+1时刻状态为 j j j的情况下取得观察序列 { o t + 2 , . . . , o T } \{o_{t+2}, ..., o_T\} {ot+2,...,oT}的概率
      • 第一项是根据观测独立性假设对第三行第一项的简化表示;
    • 第五行相对于第四行只有第二项有改变,这一项将 s t = i s_t=i st=i这个条件去掉了,这是因为,根据观测独立性假设,第 t t t时刻的状态对第 t + 2 t+2 t+2及以后时刻的观察值不产生影响。
  • 计算最后的概率。
    P ( O ∣ λ ) = ∑ i = 1 N π i b i o 1 β 1 ( i ) P(O|\lambda)=\sum_{i=1}^N\pi_ib_{io_1}\beta_1(i) P(Oλ)=i=1Nπibio1β1(i)

5.2 学习问题

在学习问题中,只有观测序列是已知的,我们需要根据这些观测值来估计概率模型的参数 λ \lambda λ。另外,一般会有不止一个观测序列被用于该训练过程,即会进行多次实验得到多个观测序列。这种问题常使用Baum-Welch算法(实际上就是EM算法的应用)。

Q函数

因为只有观测序列,其未知的状态序列就可以看做隐变量。在EM算法推导详解一文中,我们知道求解带有隐函数的概率模型参数需要使用EM算法,而此算法中最重要的一步就是构造Q函数,然后通过Q函数不断更新模型参数 λ \lambda λ

假设用于训练的观测序列集合为:
O = { O 1 , O 2 , . . . , O ∣ O ∣ } \Bbb{O}=\{O_1, O_2, ..., O_{|\Bbb{O}|}\} O={O1,O2,...,OO}
其中任意观测序列 O i O_i Oi的长度都为 T T T,共有 ∣ O ∣ |\Bbb{O}| O个观测序列被用于模型训练过程。

假定隐变量状态序列的所有可能性集合为:
S = { S = ( s 1 , s 2 , . . . , s T ) ∣ s t = 1 , 2 , . . . , N , t = 1 , 2 , . . . , T } \Bbb{S}=\{S=(s_1, s_2, ..., s_T)|s_t=1, 2, ..., N, t=1, 2, ..., T\} S={S=(s1,s2,...,sT)st=1,2,...,N,t=1,2,...,T}
因此,根据EM算法推导详解一文中推导出的Q函数,我们可以定义第 k k k次迭代的Q函数:
Q ( λ , λ k ) = ∑ O ∑ S P ( S ∣ O , λ k ) l o g P ( S , O ∣ λ ) Q(λ,λ^k)=∑_\Bbb{O}∑_\Bbb{S}P(S|O,λ^k)logP(S,O|λ) Q(λ,λk)=OSP(SO,λk)logP(S,Oλ)
代入待优化参数,然后进行分解:
Q ( λ , λ k ) = ∑ O ∑ S P ( S ∣ O , λ k ) l o g ( π s 1 b s 1 o 1 a s 1 s 2 b s 2 o 2 ⋅ ⋅ ⋅ a s T − 1 s T b s T o T ) = ∑ O ∑ S P ( S ∣ O , λ k ) ( l o g π s 1 + ∑ t = 1 T − 1 l o g a s t s t + 1 + ∑ t = 1 T l o g b s t o t ) \begin{aligned} Q(λ,λ^k) & =∑_\Bbb{O}∑_\Bbb{S}P(S|O,λ^k)log(\pi_{s_{1}}b_{s_{1}o_1}a_{s_1s_2}b_{s_{2}o_2}···a_{s_{T-1}s_T}b_{s_{T}o_T}) \\ & =∑_\Bbb{O}∑_\Bbb{S}P(S|O,λ^k)(log\pi_{s_1}+\sum_{t=1}^{T-1}loga_{s_ts_{t+1}}+\sum_{t=1}^Tlogb_{s_to_t}) \end{aligned} Q(λ,λk)=OSP(SO,λk)log(πs1bs1o1as1s2bs2o2asT1sTbsToT)=OSP(SO,λk)(logπs1+t=1T1logastst+1+t=1Tlogbstot)
可以看到待优化式子分解为三个不同待优化变量的求和,因此可以将它们分开分别进行优化。

迭代

使用EM算法迭代计算HMM参数的步骤如下:

  • 1、初始化 λ 0 = ( π 0 , A 0 , B 0 ) λ^0=(π^0,A^0,B^0) λ0=(π0,A0,B0)
  • 2、第 k k k次迭代,在 λ k − 1 λ^{k−1} λk1的基础上对 π π π a a a b b b进行优化,得到 λ k λ^k λk
  • 3、判断终止条件,满足即完成迭代,否则回到第二步执行下一次迭代。

5.3 预测问题

预测问题最常用的方法是维特比算法,它实际上就是动态规划,在递推的过程中保持步步最优,从而最终达到全局最优的目的。

定义在 t t t时刻以内,且 t t t时刻状态为 q i q_i qi的所有状态序列的出现概率的最大值为:
δ t ( i ) = max ⁡ s 1 , . . . , s t − 1 P ( s t = i , s t − 1 , . . . , s 1 , o t , . . . , o 1 ∣ λ ) \delta_{t}(i) = \max_{s_1, ..., s_{t-1}}P(s_t=i, s_{t-1}, ..., s_1, o_t, ..., o_1|\lambda) δt(i)=s1,...,st1maxP(st=i,st1,...,s1,ot,...,o1λ)
由定义可以获得 δ δ δ的递推公式:
δ t + 1 ( i ) = max ⁡ s 1 , . . . , s t P ( s t + 1 = i , s t , . . . , s 1 , o t + 1 , . . . , o 1 ∣ λ ) = max ⁡ s t max ⁡ s 1 , . . . , s t − 1 P ( s t + 1 = i , s t , . . . , s 1 , o t + 1 , . . . , o 1 ∣ λ ) = max ⁡ 1 ≤ j ≤ N max ⁡ s 1 , . . . , s t − 1 P ( s t + 1 = i , s t = j , s t − 1 , . . . , s 1 , o t + 1 , . . . , o 1 ∣ λ ) = max ⁡ 1 ≤ j ≤ N max ⁡ s 1 , . . . , s t − 1 [ P ( o t + 1 ∣ s t + 1 = i , λ ) P ( s t + 1 = i , s t = j , s t − 1 , . . . , s 1 , o t , . . . , o 1 ∣ λ ) ] = P ( o t + 1 ∣ s t + 1 = i , λ ) max ⁡ 1 ≤ j ≤ N max ⁡ s 1 , . . . , s t − 1 [ P ( s t + 1 = i ∣ s t = j , λ ) P ( s t = j , s t − 1 , . . . , s 1 , o t , . . . , o 1 ∣ λ ) ] = P ( o t + 1 ∣ s t + 1 = i , λ ) max ⁡ 1 ≤ j ≤ N [ P ( s t + 1 = i ∣ s t = j , λ ) max ⁡ s 1 , . . . , s t − 1 P ( s t = j , s t − 1 , . . . , s 1 , o t , . . . , o 1 ∣ λ ) ] = b i o t + 1 max ⁡ 1 ≤ j ≤ N a j i δ t ( j ) \begin{aligned} \delta_{t+1}(i) & = \max_{s_1, ..., s_{t}}P(s_{t+1}=i, s_{t}, ..., s_1, o_{t+1}, ..., o_1|\lambda)\\ & = \max_{s_t}\max_{s_1, ..., s_{t-1}}P(s_{t+1}=i, s_{t}, ..., s_1, o_{t+1}, ..., o_1|\lambda)\\ & = \max_{1\leq j\leq N}\max_{s_1, ..., s_{t-1}}P(s_{t+1}=i, s_{t}=j, s_{t-1}, ..., s_1, o_{t+1}, ..., o_1|\lambda)\\ & = \max_{1\leq j\leq N}\max_{s_1, ..., s_{t-1}}[P(o_{t+1}|s_{t+1}=i, \lambda)P(s_{t+1}=i, s_{t}=j, s_{t-1}, ..., s_1, o_{t}, ..., o_1|\lambda)]\\ & = P(o_{t+1}|s_{t+1}=i, \lambda)\max_{1\leq j\leq N}\max_{s_1, ..., s_{t-1}}[P(s_{t+1}=i|s_{t}=j, \lambda)P(s_{t}=j, s_{t-1}, ..., s_1, o_{t}, ..., o_1|\lambda)]\\ & = P(o_{t+1}|s_{t+1}=i, \lambda)\max_{1\leq j\leq N}[P(s_{t+1}=i|s_{t}=j, \lambda)\max_{s_1, ..., s_{t-1}}P(s_{t}=j, s_{t-1}, ..., s_1, o_{t}, ..., o_1|\lambda)]\\ & = b_{io_{t+1}}\max_{1\leq j\leq N}a_{ji}\delta_t(j) \end{aligned} δt+1(i)=s1,...,stmaxP(st+1=i,st,...,s1,ot+1,...,o1λ)=stmaxs1,...,st1maxP(st+1=i,st,...,s1,ot+1,...,o1λ)=1jNmaxs1,...,st1maxP(st+1=i,st=j,st1,...,s1,ot+1,...,o1λ)=1jNmaxs1,...,st1max[P(ot+1st+1=i,λ)P(st+1=i,st=j,st1,...,s1,ot,...,o1λ)]=P(ot+1st+1=i,λ)1jNmaxs1,...,st1max[P(st+1=ist=j,λ)P(st=j,st1,...,s1,ot,...,o1λ)]=P(ot+1st+1=i,λ)1jNmax[P(st+1=ist=j,λ)s1,...,st1maxP(st=j,st1,...,s1,ot,...,o1λ)]=biot+11jNmaxajiδt(j)
以上算的是概率,并没有获取每个时刻下的状态编号。所以再定义 Ψ t ( i ) Ψ_t(i) Ψt(i)函数来回溯获取状态序列:
Ψ t ( i ) = arg max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N Ψ_t(i)=\argmax_{1≤j≤N}[δ_{t−1}(j)a_{ji}], i=1,2,...,N Ψt(i)=1jNargmax[δt1(j)aji],i=1,2,...,N
维特比算法用已知观测序列预测状态序列过程如下:

  • 1、初始化。直接计算 δ 1 ( i ) δ_1(i) δ1(i)
  • 2、对 t = 2 , 3 , . . . , T t=2,3,...,T t=2,3,...,T,使用递推公式计算 δ t ( i ) δ_t(i) δt(i)
  • 3、使用 Ψ t ( i ) Ψ_t(i) Ψt(i)函数回溯,获取最大概率状态序列。

参考资料

[1] 隐马尔可夫模型——概念与算法详解
[2] EM 算法推导详解

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cofisher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值