前言
隐马尔科夫模型有三个基本问题:概率计算问题,学习问题,预测问题。本博客介绍概率计算问题的前向与后向算法。阅读本文前请先学习隐马尔科夫模型——基本概念
什么是概率计算问题
给定模型
λ=(A,B,π) 和观测序列O=(o1,o2,...,oT) ,计算在模型下观测序列O出现的概率P(O|λ)
结合先前讨论的盒子实验问题,就是要计算出现某个随机球序列的概率是多少。
直接计算法
最直观容易理解的方法是,先穷举出所有长度为T的状态序列,然后根据各个状态序列和观测序列,求出所有状态序列下,可以得到给定观测序列的概率。最后对所有可能的状态序列求和。比如我们得到了的观测序列是{红,白,白},那么我们首先穷举出所有长度为3状态序列组合;对于每一个可能确定的状态序列,比如{盒子1,盒子2,盒子3},求出此状态序列产生的概率
事实上,这种算法计算量太大,并不可行。
前向算法
前向概率
给定模型
λ ,从时刻1到时刻t可观测序列为o1,o2,...,ot 且状态为qi 的概率记做前向概率αt(i)=P(o1,o2,...,ot,it=qi|λ)
前向算法过程描述
- 初始化:
α1(i)=πibi(o1),i=1,2,...,N - 递推:对于t=1,2,3,…,T-1 代表到时刻t+1,已知观测序列
αt(i)=[∑j=1Nαt(j)aji]bi(ot+1) o1,o2,...,ot+1 ,状态为qi 的前向概率。 - 终止:
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,λ)
- 初始化:
βT(i)=1,i=1,2,...,N - 递归:对t=T-1,T-2,…,1
βt(i)=∑j=1Naijbj(ot+1)βt+1(j),i=1,2,...,N - 终止:
P(O|λ)=∑i=1Nπibi(o1)β1(i)
后续
由前向概率和后向概率我们可以得到一些单个状态和两个状态概率的计算公式。这里不再讨论。我们还可以得到一些有用的期望值,具体内容可以参看李航《统计学习方法》第十章。