HMM的概率计算问题

HMM的概率计算问题

HMM的概率计算问题是指,给定模型参数 λ = ( A , B , π ) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) ,计算在模型 λ 下,观测序列 O 出现的概率: P ( O | λ )


直接计算

按概率公式直接计算,在贝叶斯框架下有:

P ( O | λ ) = I P ( O , I | λ ) = I P ( O | I , λ ) P ( I | λ )

  • 其中, P ( O | I , λ ) 是从 i t o t ,由发射概率矩阵 [ b j ( k ) ] N × M 中获得:

    P ( O | I , λ ) = P ( o 1 | i 1 ) . . . P ( o t | i t ) . . . P ( o T | i T ) = b i 1 ( o 1 ) . . . b i t ( o t ) . . . b i T ( o T ) ,共 T

  • P ( I | λ ) 是从 i t 1 i t ,由转移概率矩阵 [ a i j ] N × N 和初始状态概率向量 π 获得:

    P ( I | λ ) = π i 1 P ( i 2 | i 1 ) . . . P ( i t | i t 1 ) . . . P ( i T | i T 1 ) = π i 1 a i 1 i 2 . . . a i t 1 i t . . . a i T 1 i T ,共 T

两式代入计算得:

  • P ( O | λ ) = I P ( O , I | λ )

    = I P ( O | I , λ ) P ( I | λ )

    = I [ b i 1 ( o 1 ) . . . b i t ( o t ) . . . b i T ( o T ) ] × [ π i 1 a i 1 i 2 . . . a i t 1 i t . . . a i T 1 i T ]

    = I π i 1 t = 1 T b i t ( o t ) t = 1 T 1 a i t i t + 1

由于 I = i 1 . . . i t . . . i T ,每个 i t N 种取值可能,故 I 共有 N T 项,可知若按概率公式直接计算 P ( O | λ ) ,计算量会很大。


前向算法(Forward Algorithm)

找出从时刻 1 . . . t . . . T ,前向概率的递归关系:

前向概率

在观测时间点 1 , . . . , t , . . . , T 上,对应的观测值为 o 1 , . . . , o t , . . . , o T ,各隐状态分别为 i 1 , . . . , i t , . . . , i T

i 1 . . . i t . . . i T
o 1 . . . o t . . . o T

定义前向概率

α t ( i ) = P ( o 1 , . . . , o t , i t = q i | λ )

它表示:截止到时刻 t ,观测序列的值为 o 1 , o 2 , . . . , o t 、且 t 时刻的状态为 q i 的概率。

递归过程的公式推导

根据定义,写出 t = 1 t = 2 的前向概率:

  • α 1 ( i ) = P ( o 1 , i 1 = q i | λ ) = P ( o 1 | i 1 = q i , λ ) P ( i 1 = q i | λ ) = b i ( o 1 ) π i

  • α 2 ( j ) = P ( o 1 , o 2 , i 2 = q j | λ )
    = i = 1 N P ( o 1 , o 2 , i 1 = q i , i 2 = q j | λ )
    = i = 1 N P ( o 2 | i 2 = q j , λ ) P ( i 2 = q j | i 1 = q i , λ ) P ( o 1 | i 1 = q i , λ ) P ( i 1 = q i | λ )
    = i = 1 N b j ( o 2 ) a i j α 1
    = b j ( o 2 ) i = 1 N a i j α 1 ( i )

. . .

递推得到 α t + 1 ( j ) α t ( i ) 之间的关系:

α t + 1 ( j ) = b j ( o t + 1 ) i = 1 N a i j α t ( i )

其中, j { 1 , 2 , . . . , N }

对递归过程的直观理解

t = 1 t = 2 两个时刻为例,它们之间涉及到的观测值和隐状态有: o 1 o 2 i 1 i 2

i 1 i 2

o 1 o 2

当计算出 α 1 ( i ) = P ( o 1 , i 1 = q i | λ ) , i { 1 , 2 , . . . , N } 后,我们手上的信息有:在时刻 t = 1 ,隐状态为 q 1 且观测值为 o 1 的概率 α 1 ( 1 ) 、…、隐状态为 q N 且观测值为 o 1 的概率 α 1 ( N )

而计算 α 2 ( j ) = P ( o 1 , o 2 , i 2 = q j | λ ) , j { 1 , 2 , . . . , N } 意味着我们要求出:在时刻 t = 2 ,隐状态为 q 1 且过去两个观测值为 o 1 o 2 的概率 α 2 ( 1 ) 、…、隐状态为 q N 且过去两个观测值为 o 1 o 2 的概率 α 2 ( N )

如何利用 α 1 ( i ) 来计算 α 2 ( j )

对比我们已有的信息、待求的信息,发现我们需要确定的是观测值 o 2 ,而 o 2 是通过 i 2 决定(即 b i 2 ( o 2 ) ), i 2 又由 i 1 确定(即 a i 1 i 2 )。因此,在每个 α 1 ( i ) 的基础上,再加入 b i 2 ( o 2 ) a i 1 i 2 这两个概率,就可求得 α 2 ( j )

α 2 ( j ) = i 1 = 1 N α 1 ( i ) b i 2 ( o 2 ) a i 1 i 2

稍作调整令 i 1 = q i , i 2 = q j ,即可得:

α 2 ( j ) = i = 1 N α 1 ( i ) b j ( o 2 ) a i j = b j ( o 2 ) i = 1 N α 1 ( i ) a i j

意义

为什么要计算前向概率?

  • 首先,前向概率可以帮助我们计算目标概率: P ( O | λ ) 。根据定义, t = T 时刻的前向概率为:

    α T ( i ) = P ( o 1 , . . . , o T , i T = q i | λ )

    因此, P ( O | λ ) = i = 1 N α T ( i )

  • 其次,由于递归关系的存在,计算前向概率的工作量,远小于概率公式直接计算。注意到, i { 1 , 2 , . . . , N } 。因此,计算 α 1 ( i ) 需进行 N 次运算;计算 α 2 ( i ) 需进行 N 次累加;…;计算 α T ( i ) 需进行 N 次累加。最终进行了 N × T 次运算,远小于 N T
    计算量减少的原因在于,每一次计算直接引用前一个时刻的计算结果,避免重复计算。


后向算法(Backward Algorithm)

找出从时刻 T . . . t . . . 1 ,后向概率的递归关系:

后向概率

在观测时间点 1 , . . . , t , . . . , T 上,对应的观测值为 o 1 , . . . , o t , . . . , o T ,各隐状态分别为 i 1 , . . . , i t , . . . , i T

i 1 . . . i t . . . i T
o 1 . . . o t . . . o T

定义后向概率

β t ( i ) = P ( o t + 1 , . . . , o T | i t = q i , λ )

它表示:在 t 时刻的状态为 q i 的条件下,对于 t 之后的所有时刻,观测序列的值为 o t + 1 , o t + 2 , . . . , o T 的概率。

递归过程的公式推导

根据定义,写出 t = T t = T 1 t = T 2 的后向概率:

  • β T ( i ) = 1

    【注】:初始值等于 1 是因为,后向概率考量的是 t 时刻之后(不包括 t 时刻)的观测值序列,我们的观测序列只持续到时刻 T T 之后的观测值与状态都未知,所有的情况都是可能的,因此定义为 1

  • β T 1 ( i ) = P ( o T | i T 1 = q i , λ )
    = k = 1 N P ( o T , i T = q k | i T 1 = q i , λ )
    = k = 1 N P ( o T | i T = q k , λ ) P ( i T = q k | i T 1 = q i , λ )
    = k = 1 N b k ( o T ) a i k

  • β T 2 ( j ) = P ( o T , o T 1 | i T 2 = q j , λ )
    = i = 1 N k = 1 N P ( o T , o T 1 , i T = q k , i T 1 = q i | i T 2 = q j , λ )
    = i = 1 N k = 1 N P ( o T | i T = q k , λ ) P ( i T = q k | i T 1 = q i , λ ) P ( o T 1 | i T 1 = q i , λ ) P ( i T 1 = q i | i T 2 = q j , λ )
    = i = 1 N β T 1 ( i ) b i ( o T 1 ) a j i

. . .

递推得到 β t ( j ) β t + 1 ( i ) 之间的关系:

β t ( j ) = i = 1 N β t + 1 ( i ) b i ( o t + 1 ) a j i

其中, j { 1 , 2 , . . . , N }

对递归过程的直观理解

t = T 1 t = T 2 两个时刻为例,它们之间涉及到的观测值和隐状态有: o T 2 o T 1 o T i T 2 i T 1 i T

i T 2 i T 1 i T

o T 2 o T 1 o T

当计算出 β T 1 ( i ) = P ( o T | i T 1 = q i , λ ) , i { 1 , 2 , . . . , N } 后,我们手上的信息有:在时刻 t = T 1 ,隐状态为 q 1 的条件下,后面时刻的观测值为 o T 的概率 β T 1 ( 1 ) 、…、隐状态为 q N 的条件下,后面时刻的观测值为 o T 的概率 β T 1 ( N )

而计算 β T 2 ( j ) = P ( o T , o T 1 | i T 2 = q j , λ ) , j { 1 , 2 , . . . , N } 意味着我们要求出:在时刻 t = T 2 ,隐状态为 q 1 的条件下,后面时刻的观测值为 o T o T 1 的概率 β T 2 ( 1 ) 、…、隐状态为 q N 的条件下,后面时刻的观测值为 o T o T 1 的概率 β T 2 ( N )

如何利用 β T 1 ( i ) 来计算 β T 2 ( j )

对比我们已有的信息、待求的信息,发现我们需要确定的是观测值 o T 1 ,而 o T 1 是通过 i T 1 决定(即 b i T 1 ( o T 1 ) ), i T 1 又由 i T 2 确定(即 a i T 2 i T 1 )。因此,在每个 β T 1 ( i ) 的基础上,再加入 b i T 1 ( o T 1 ) a i T 2 i T 1 这两个概率,就可求得 β T 2 ( j )

β T 2 ( j ) = i T 1 = 1 N β T 1 ( i ) b i T 1 ( o T 1 ) a i T 2 i T 1

稍作调整令 t = T 2 , t + 1 = T 1 , i T 1 = q i , i T 2 = q j ,即可得:

β t ( j ) = i = 1 N β t + 1 ( i ) b i ( o t + 1 ) a j i

意义

为什么要计算后向概率?

  • 首先,后向概率也可以帮助我们计算目标概率: P ( O | λ ) 。根据定义, t = 1 时刻的后向概率为:

    β 1 ( i ) = P ( o 2 , . . . , o T | i 1 = q i , λ )

    此时 β 1 ( i ) 与目标概率 P ( O | λ ) 相比,还差一个观测值 o 1 。由于所有的观测都相互独立,在 t = 1 时刻、状态为 q i 的条件下,观测值 o 1 出现的条件概率为:

    P ( o 1 | i 1 = q i , λ ) = b i ( o 1 )

    两式相乘,得到所有观测值 O = ( o 1 , . . . , o T ) t = 1 时刻、状态为 q i 条件下的联合概率:

    P ( o 1 , . . . , o T | i 1 = q i , λ ) = β 1 ( i ) b i ( o 1 )

    因此,目标概率

    P ( O | λ ) = i = 1 N P ( o 1 , . . . , o T | i 1 = q i , λ ) P ( i 1 = q i | λ ) = i = 1 N β 1 ( i ) b i ( o 1 ) π i

  • 其次,后向概率与前向概率的计算量一样,最终进行了 N × T 次运算,都远远小于概率公式直接计算的 N T 项。


前向-后向算法(Forward-Backward Algorithm)

前向算法利用前向概率,从 1 T 的方向计算 P ( O | λ ) = i = 1 N α T ( i )

后向算法利用后向概率,从 T 1 的方向计算 P ( O | λ ) = i = 1 N β 1 ( i ) b i ( o 1 ) π i

也可以同时用前向概率、后向概率计算 P ( O | λ )

P ( O | λ ) = i = 1 N P ( O , i t = q i | λ )

= i = 1 N P ( O | i t = q i , λ ) P ( i t = q i | λ )

= i = 1 N P ( o 1 , . . . , o t | i t = q i , λ ) P ( o t + 1 , . . . , o T | i t = q i , λ ) P ( i t = q i | λ )

= i = 1 N P ( o 1 , . . . , o t , i t = q i | λ ) P ( o t + 1 , . . . , o T | i t = q i , λ )

= i = 1 N α t ( i ) β t ( i )

若利用后向概率的递推关系,替换 β t ( i ) = j = 1 N β t + 1 ( j ) b j ( o t + 1 ) a i j ,又有:

P ( O | λ ) = i = 1 N j = 1 N α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j


其他概率的计算

利用前向、后向概率,还可以进行其他的计算:

  • 给定模型 λ ,则观测序列为 O = ( o 1 , . . . , o T ) 、且 t 时刻的隐状态为 q i 的概率:

    P ( O , i t = q i | λ ) = α t ( i ) β t ( i )

  • 给定模型 λ 和观测序列 O = ( o 1 , . . . , o T ) ,则 t 时刻的隐状态为 q i 的概率(单个状态):

    P ( i t = q i | O , λ ) = P ( O , i t = q i | λ ) P ( O | λ ) = α t ( i ) β t ( i ) j = 1 N α t ( j ) β t ( j )

  • 给定模型 λ 和观测序列 O = ( o 1 , . . . , o T ) ,则 t 时刻的隐状态为 q i 、且 t + 1 时刻的隐状态为 q j 的概率(两个状态):

    P ( i t = q i , i t + 1 = q j | O , λ ) = P ( O , i t = q i , i t + 1 = q j | λ ) P ( O | λ ) = α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j i = 1 N j = 1 N α t ( i ) β t + 1 ( j ) b j ( o t + 1 ) a i j

猜你喜欢

转载自blog.csdn.net/Joyliness/article/details/79593485
HMM