隐马尔科夫模型(一)

        隐马尔科夫模型是一种序列模型,广泛应用于自然语言处理,语音识别,生物信息等领域。

1. 模型的定义与约定:

       定义一:一个隐马尔科夫模型指的是如下的两个随机序列$I,O$:

       1)一个不可观测随机序列:$I=(i_{1},...,i_{T})$, 可以取值状态集合$Q=lbrace 1,...,K brace$, 并且满足齐次马尔科夫性

                               egin{equation}P(i_{t+1}mid i_{t},i_{t-1},...,i_{1})=P(i_{t+1}mid i_{t}), end{equation}

与$t$无关

       2) 一个可观测随机序列:$O=(o_{1},...,o_{T})$, 可以取值的状态集合$V=lbrace 1,...,L brace$, 且与随机序列$I$一起满足观测独立性

                              egin{equation}P(o_{t}mid i_{t},i_{t-1},o_{t-1},...,i_{1},o_{1})=P(o_{t}mid i_{t})end{equation}

与$t$无关

     由以上的定义可以知道,一个隐马尔科夫模型完全由相应的$K imes K$矩阵$A$与$L imes K$矩阵$B$还有向量$piinmathbb{R}^{K}$确定,使得:

                              egin{equation}A_{ji}=P(i_{t+1}=jmid i_{t}=i),end{equation}

对任意的$i,j=1,...,K$, $t=1,...,T-1$, 并且:

                              egin{equation}B_{alpha i}=P(o_{t}=alphamid i_{t}=i),end{equation}

对任意的$alpha=1,...,L$,$i=1,...,K$,$t=1,...,T$(这里我们用希腊字母表示可观测状态,而用拉丁字母表示不可观测状态), 且:

                             egin{equation}pi_{i}=P(i_{1}=i),end{equation}

所以我们今后也约定:"一个具有参数$lambda=(A,B,pi)$的隐马尔科夫模型" 为一个满足上述条件(3)-(5)的隐马尔科夫模型。

2.隐马尔科夫链的几大基本问题

        现在我们自然地会问如下三个基本问题:

       1)概率计算问题:给定模型参数$lambda=(A,B,pi)$ 以及某个观测序列$O=(0_{1},...,0_{T})$, 如何高效地计算出概率$P(Omid lambda)$?

       2)学习问题:已知某个观测序列$O=(o_{1},...,o_{T})$, 如何得到参数$lambda=(A,B,pi)$使得似然函数$P(Omidlambda)$极大,或者至少尽量大?

       3)预测问题:预测问题,也成为解码问题(Decoding Problem),也就是已知观测序列$O=(o_{1},...,o_{T})$, 以及参数$lambda=(A,B,pi)$, 求不可观测序列$I$使得概率: egin{equation}P(Imid O,lambda)end{equation}极大。

3.概率计算的直接算法:

        

       对于第一个问题,概率计算问题,我们由条件(1),(2)我们很容易得到理论上的概率计算公式:

                                             egin{equation}P(Omidlambda)=sum_{I=(i_{1},...,i_{T})}A_{i_{T}i_{T-1}}...A_{i_{3}i_{2}}A_{i_{2}i_{1}}B_{o_{T}i_{T}}...B_{o_{2}i_{2}}B_{o_{1}i_{1}}end{equation}

    很容易知道这种算法如果交给计算机执行,其时间复杂度为$O(TK^{T})$, 是一种糟糕的算法。

4. 概率计算的前向算法

       

       下面介绍一种前向迭代算法:

              我们定义$alpha_{t,i} riangleq P(o_{1},...,o_{t},i_{t}=imid lambda)$, 对于任意的$i=1,...,K$, $t=1,...,T$,首先我们很容易知道:

                            egin{equation}alpha_{1,i}=B_{o_{1}i}pi_{i},end{equation}

对任意的$i=1,...,K$。并且迭代步骤中, 结合假设(1),(2)我们可以计算:

                            egin{equation}egin{split}alpha_{t+1,i}&=P(o_{1},...,o_{t+1},i_{t+1}=imid lambda) ewline &=sum_{j=1}^{K}P(o_{1},...,o_{t+1},i_{t}=j,i_{t+1}=imid lambda) ewline &=sum_{j=1}^{K}P(o_{t+1}mid o_{1},...,o_{t},i_{t}=j,i_{t+1}=i,lambda)P(i_{t+1}=imid o_{1},...,o_{t},i_{t}=j,lambda)P(o_{1},...,o_{t},i_{t}=jmid lambda) ewline &=sum_{j=1}^{K}P(o_{t+1}mid i_{t+1}=j,lambda)P(i_{t+1}=imid i_{t}=j,lambda)alpha_{t,j} ewline &=sum_{j=1}^{K}B_{o_{t+1}i}A_{ij}alpha_{t,j}end{split}end{equation}

       于是我们可以总结出前向算法计算概率:

        算法一:


              输入:某带有参数$lambda=(A,B,pi)$的隐马尔科夫模型,某观测序列$O=(o_{1},...,o_{T})$;

              输出:概率$P(Omid lambda)$。

              算法:

              Step1:对$i=1,...,K$, 计算$alpha_{i,t}=B_{o_{1}i}pi_{i}$;

              Step2:对任意$t=2,...,T$, 我们计算:

                                   egin{equation}alpha_{i,t}=sum_{j=1}^{K}B_{o_{t}i}A_{ij}alpha_{j,t-1},end{equation}

                            其中$i=1,...,K$;

              Step3:计算$P(Omid lambda)=sum_{i=1}^{K}alpha_{i,T}$, 输出$P(Omid lambda)$。


       容易看出该算法的时间复杂度为$O(K^{2}T)$, 空间复杂度为$O(KT)$。       

5.概率计算的后向算法:

     

     下面看一种方向相反的算法。这时候我们定义后向概率:

                             egin{equation}eta_{t,i} riangleq P(o_{t+1},...,o_{T}mid i_{t}=i)end{equation}

         这时候$eta_{T,i}=1$,且与前向算法相反的是$eta_{t,i}$由$eta_{t+1,j}$递推得到,容易计算:

                             egin{equation}eta_{t,i}=sum_{j=1}^{K}eta_{t+1,j}B_{o_{t+1}j}A_{ji}end{equation}

         算法二:


              输入:某带有参数$lambda=(A,B,pi)$的隐马尔科夫模型,某观测序列$O=(o_{1},...,o_{T})$;

              输出:概率$P(Omid lambda)$。

              算法:

              Step1:对$i=1,...,K$,  令$eta_{T,i}=1$;

              Step2:对任意$t=T-1,...,1$, 我们计算:

                            egin{equation}eta_{t,i}=sum_{j=1}^{K}eta_{t+1,j}B_{o_{t+1}j}A_{ji}end{equation}

                           其中$i=1,...,K$;

              Step3:计算$P(Omid lambda)=sum_{i=1}^{K}B_{o_{1}i}eta_{1,i}pi_{i}$, 输出$P(Omid lambda)$。


       该算法的时间复杂度为$O(K^{2}T)$, 空间复杂度为$O(KT)$。    

原文地址:https://www.cnblogs.com/szqfreiburger/p/11777856.html