前言

隐马尔科夫模型有三个基本问题:概率计算问题,学习问题,预测问题。本博客介绍概率计算问题的前向与后向算法。阅读本文前请先学习隐马尔科夫模型——基本概念

什么是概率计算问题

给定模型λ=(A,B,π)和观测序列O=(o1,o2,...,oT),计算在模型下观测序列O出现的概率P(O|λ)

结合先前讨论的盒子实验问题,就是要计算出现某个随机球序列的概率是多少。

直接计算法

最直观容易理解的方法是,先穷举出所有长度为T的状态序列,然后根据各个状态序列和观测序列,求出所有状态序列下,可以得到给定观测序列的概率。最后对所有可能的状态序列求和。比如我们得到了的观测序列是{红,白,白},那么我们首先穷举出所有长度为3状态序列组合;对于每一个可能确定的状态序列,比如{盒子1,盒子2,盒子3},求出此状态序列产生的概率P(I|λ),此概率再乘以此状态下产生已知观测队列的概率P(O|I,λ),得到P(O,I|λ)。然后把所有可以得到该观测序列的概率求和。
事实上,这种算法计算量太大,并不可行。

前向算法

前向概率

给定模型λ,从时刻1到时刻t可观测序列为o1,o2,...,ot且状态为qi的概率记做前向概率

αt(i)=P(o1,o2,...,ot,it=qi|λ)

前向算法过程描述

  1. 初始化:
    α1(i)=πibi(o1)i=1,2,...,N
  2. 递推:对于t=1,2,3,…,T-1
    αt(i)=[j=1Nαt(j)aji]bi(ot+1)
    代表到时刻t+1,已知观测序列o1,o2,...,ot+1,状态为qi的前向概率。
  3. 终止:
    P(O|λ)=i=1NαT(i)

减少计算量的原因在于每一次计算直接引用前一个时刻的计算结果,避免重复计算。

举例计算

下面的例子是先前提到盒子实验问题更简单版本。请务必先阅读先前的盒子问题。隐马尔科夫模型——前向后向算法

后向算法

后向概率

给定模型λ,时刻t状态为qi的条件下,从时刻t+1到时刻T可观测序列为ot+1,ot+2,...,oT的概率记做后向概率

βt(i)=P(ot+1,ot+2,...,oT|i=qi,λ)

  1. 初始化:
    βT(i)=1i=1,2,...,N
  2. 递归:对t=T-1,T-2,…,1
    βt(i)=j=1Naijbj(ot+1)βt+1(j)i=1,2,...,N
  3. 终止:
    P(O|λ)=i=1Nπibi(o1)β1(i)

后续

由前向概率和后向概率我们可以得到一些单个状态和两个状态概率的计算公式。这里不再讨论。我们还可以得到一些有用的期望值,具体内容可以参看李航《统计学习方法》第十章。

相关文章:

  • 2021-12-08
  • 2021-12-12
  • 2021-07-22
  • 2021-12-07
  • 2022-12-23
  • 2021-07-10
猜你喜欢
  • 2021-06-08
  • 2022-12-23
  • 2022-12-23
  • 2021-07-04
  • 2021-07-24
  • 2022-12-23
  • 2021-07-18
相关资源
相似解决方案