机器学习笔记(十四)——HMM估计问题和前向后向算法
2016-09-25 11:49
483 查看
一、隐马尔科夫链的第一个基本问题
估计问题:给定一个观察序列O=O1O2…OT和模型u=(A,B,π),如何快速地计算出给定模型u情况下,观察序列O的概率, 即P(O|u)?二、求解观察序列的概率
其实,求解这个问题就是一个解码问题。 对于任意的状态序列Q=q1q2…qT,有P(O|Q,u)=∏t=1T−1P(Ot|qt,qt+1,u)=bq1(O1)bq2(O2)…bqT(OT)
并且
P(Q|u)=πq1aq1q2aq2q3…aqT−1qT
由于
P(O,Q|u)=P(O|Q,u)P(Q|u)
所以
P(O|u)=∑QP(O,Q|u)∑QP(O|Q,u)P(Q|u)=∑Qπq1bq1(O1)∏t=1T−1aqtqt+1bqt+1(Ot+1)
上述推导过程很直接,但是实际的计算量是非常庞大的,它要穷尽所有可能的状态序列,如果模型中有N个状态,时间长度为T, 那么有NT个可能的状态序列,这导致了并不能有效地执行这个算法。因此,人们提出了前向算法,利用动态规划来解决指数爆炸的问题。
三、HMM中的前向算法
为了实现前向算法,需要定义一个前向变量αt(i).定义1 前向变量αt(i)是在时间t, HMM输出序列O=O1O2…Ot并且位于状态si的概率:
αt(i)=P(O1O2…Ot,qt=si|u)
前向算法的主要思想是,如果可以快速地计算前向变量αt(i),那么就可以根据αt(i)计算出P(O|u), 因为P(O|u)是在所有状态下观察到序列O=O1O2…Ot的概率:
P(O|u)=∑siP(O1O2…OT,qT=si|u)=∑i=1NαT(i)
在前向算法中,采用动态规划的方法计算前向变量αt(i),其思想基于如下观察:在时间t+1的前向变量可以根据时间t时的前向变量αt(1),αt(2),…,αt(N)来归纳计算:
αt+1(j)=(∑i=1Nαt(i)aij)bj(Ot+1)
前向算法
1 初始化: α1(i)=πibi(O1),1≤i≤N
2 归纳计算: αt+1(j)=(∑Ni=1αt(i)aij)bj(Ot+1),1≤t≤T−1
3 求和终结: P(O|u)=∑Ni=1αT(i)
前向算法的时间复杂度为O(N2T)
四、HMM中的后向算法
快速计算P(O|u)还有一种后向算法。对应于前向变量,定义一个后向变量βt(i).
定义2 后向变量βt(i)是在给定模型u=(A,B,π)并且在时间t状态为si的条件下,HMM的输出观察序列O=Ot+1Ot+2…OT的概率:
βt(i)=P(Ot+1Ot+2…OT|qt=si|u)
类似于前向算法,也可以用动态规划算法计算后向变量。
1. 从时间t到时间t+1, HMM的状态si到状态sj输出Ot+1,概率为aijbj(Ot+1)
2. 在时间t+1的状态为sj的条件下,HMM输出观察序列Ot+2…OT,概率为:βt+1(j)
则,归纳关系为:
βt(i)=∑j=1Naijbj(Ot+1)βt+1(j)
后向算法
1 初始化:βT(i)=1,1≤i≤N
2 归纳计算:βt(i)=∑Nj=1aijbj(Ot+1)βt+1(j),T−1≥t≥1;1≤i≤N
3 求和终结:P(O|u)=∑Ni=1πibi(O1)β1(i)
后向算法的时间复杂度为O(N2T)
相关文章推荐
- [台大机器学习笔记整理]机器学习问题与算法的基本分类&由霍夫丁不等式论证机器学习的可行性
- 机器学习笔记(十五)——HMM序列问题和维特比算法
- 【笔记】【算法学习】【动态规划】背包问题总结(1)
- 算法笔记(问题分解,分治与动态规划)
- 【算法导论笔记】所有结点对的最短路径问题
- 0044算法笔记——【随机化算法】舍伍德(Sherwood)算法和线性时间选择问题
- 算法设计和数据结构学习_3(《数据结构和问题求解》part2笔记)
- Java 线程同步问题 生产者-消费者 算法实现 -Java学习笔记(29)
- [算法 笔记]字符串移位包含问题
- 0024算法笔记——【贪心算法】单源最短路径问题
- 算法导论学习笔记(十三):动态规划(三):01背包问题
- 精确覆盖问题学习笔记(三)——算法的初步实现
- HMM学习笔记_1(从一个实例中学习DTW算法)
- 韩顺平_PHP程序员玩转算法公开课(第一季)05_使用单链表解决约瑟夫问题_学习笔记_源代码图解_PPT文档整理
- 算法导论学习笔记(1)——快排中hoarePartition的实现(问题已解决)
- 0026算法笔记——【贪心算法】多机调度问题
- 算法笔记(问题分解,分治与动态规划)
- HMM学习笔记_1(从一个实例中学习DTW算法)
- 算法系列之十四:狼、羊、菜和农夫过河问题 .
- 算法学习笔记----最长公共子序列问题