天天看点

前向算法的实例应用

一、基本情况

        前面有章节介绍过前向算法的理论,似乎很难理解,本文将用一个实例来说明前向算法的应用,先回顾下前向算法的理论

        1、 一个隐马尔可夫模型 (HMM) 是由一个五元组描述的: 

                      λ  =( N,M ,A,B, π )

                     其中:

                              N = {q1,...qN}:状态的有限集合

                              M = {v1,...,vM}:观察值的有限集合

                              A = {aij},aij = P(qt = Sj |qt-1 = Si):状态转移概率矩阵

                              B = {bjk}, bjk = P(Ot = vk | qt = Sj):观察值概率分布矩阵

                              π = {πi},πi = P(q1 = Si):初始状态概率分布

        2、 给定HMM模型 λ = (A, B, π) ,则观察序列 O=O1,O2,…OT 可由以下步骤产生:

                               1.根据初始状态概率分布π= πi,选择一初始状态q1=Si;

                               2.设t=1;

                               3.根据状态 Si的输出概率分布bjk,输出Ot=vk;

                               4.根据状态转移概率分布aij,转移到新状态qt+1=Sj;

                               5.设t=t+1,如果t<T,重复步骤3、4,否则结束。

二、HMM的三个基本问题

        令 λ = {π,A,B} 为给定HMM的参数,

        令 O = O1,...,OT 为观察值序列,则有关于隐马尔可夫模型(HMM)的三个基本问题: 

        1.评估问题:对于给定模型,求某个观察值序列的概率P(O|λ) ;

        2.解码问题:对于给定模型和观察值序列,求可能性最大的状态序列maxQ{P(Q|O,λ)};

        3.学习问题:对于给定的一个观察值序列O,调整参数λ,使得观察值出现的概率P(O|λ)最大。

三、前向算法解决评估问题

      1、基本步骤:

                     定义前向变量:“在时间步t, 得到t之前的所有明符号序列, 且时间步t的状态是Si”这一事件的概率,

                                                     记为(t, i) = P(o1,…,ot, qt = Si|λ)

                     采用动态规划算法,复杂度O(N2T)

      2、算法过程:

前向算法的实例应用

四、算法应用

          HMM模型如下,试根据前向算法计算产生观察符号序列O={ABAB}的概率。 

前向算法的实例应用

初始概率矩阵π=(1,0,0),即开始处于状态1。按照前向算法公式,我们依次递推解出

    t(i) 。解法如下:

    1、当t=1时,

前向算法的实例应用

    2、当t=2时:

前向算法的实例应用

    3、当t=3时:

前向算法的实例应用

    4、当t=4时:

前向算法的实例应用

    所以最终有:

    P(O| λ)= 4(1)+ 4(2)+ 4(3)=0.0717696    即观察序列O由HMM模型产生的概率

       大家动笔一步一步按照实例来,就能理解前向算法的应用了,学过动态规划的就知道,上面这个过程其实用到了动态规划的思想,因此可以用动态规划的图示来看此问题:

前向算法的实例应用

五、结语

           通过理论了解算法的思想和背景,通过实例了解算法的使用,这个是很重要的,反过来通过使用思考算法的思想,也会恍然大悟。。。