HMM之前向后向算法
来源:互联网 发布:淘宝网虎牌保温杯 编辑:程序博客网 时间:2024/05/12 08:42
注:本文中所有公式和思路来自于邹博先生的《机器学习升级版》,我只是为了加深记忆和理解写的本文。
前文已经详细介绍了HMM模型的结构、参数等等,本文将介绍HMM的三个基本问题中的第一个:概率计算问题
在说前向后向算法之前我们需要先讲一下概率计算的暴力求解是怎么做的(不会白讲的,后边会用到)
暴力求解
按照概率公式,列举所有可能的长度为T的状态序列I = {i1, i2, i3...},求各个状态序列I与观测序列O={o1, o2, o3...}的联合概率
P = (O, I | λ),然后对所有的I求和(也就是对I积分),从而得到P(O | λ)
状态序列I = {i1, i2, i3...}出现的概率为:
对固定的状态序列I,观测序列O={o1, o2, o3...}的概率为:
O和I同时出现的联合概率为:
然后对所有的状态序列I求和,得到观测序列O的概率P(O | λ):
我们来对最终的式子分析一下:加和符号中有2T-1个因子,I遍历个数N^T,时间复杂度为O(TN^T),显然是没办法用于实践的。
所以我们采用前向后向算法来做这件事情,首先我们先定义出前向概率和后向概率:
前向概率:给定模型λ,第t时刻处于i状态,并且观测到y1到yt的概率:
后向概率:给定模型λ,第t时刻处于i状态,并且观测到yt+1到yT的概率:
正式给出前向算法。
前向算法
前向概率:
初值:
递推:对于t=1,2,3...T-1
最终:
需要注意,这里的每一步的概率计算都严格按照前向概率的定义来做,第一步最后一步也是如此,如果觉得不直观的话就拿定义比对一下就会清楚了。
前向算法的时间复杂度是O(TN^2),计算比较简单,就不赘述了,接着说后向算法。
后向算法
后向概率:
初值:
递推:对于t = T-1,T-2...1
最终:
这里的每一步也是按照后向概率来计算的,我第一次学习这块的时候就是走了弯路,没有注意概率公式中t时刻观测的是t+1以后的,自己想当然计算递推公式、终止公式,百思不得其解,后来对照后向概率来看,还真的是有道理的。
那么前向算法和后向算法之间有什么联系呢?
我们来推导一下:
从结论我们不难看出,在t时刻如果知道了状态为qi,那么可以将这个t之前和之后阻断,最后变换成前向概率和后向概率。
那么我们就可以求单个状态的概率了:
这样的话我么你从t=1一直计算到t=T,我们就可以得到每个时刻最有可能的那个状态,但是这样子做对么?
我认为是不对的,原因是每一个时刻最有可能最终组成的状态序列是不一定存在的,打个比方说,全市高考,我选出每个学科的最高分,那么我就说这是第一名的各科成绩,显然是不一定的,那么正确的做法是什么呢?我们将在后边的Viterbi算法中介绍。
进一步思考:如果要求了t时刻状态为i,t+1时刻状态为j的联合概率呢?
最终结果是:
这里把联合概率这块拿出来只是让大家更直观的感觉这个前后向概率而已,跟我们整体的HMM模型框架无关。
前后后向算法介绍完了,下一篇将会介绍HMM的第二个基本问题-学习问题,也就是BW算法。
- HMM之前向后向算法
- HMM-前向后向算法
- HMM之前向算法
- HMM之前向算法
- HMM之前向算法
- HMM模型之前向算法
- HMM——前向后向算法
- HMM基础-HMM训练-前向后向算法
- HMM之前向算法(forward algorithms)
- HMM 自学教程(七)前向后向算法
- HMM前向算法,维比特算法,后向算法,前向后向算法代码
- HMM学习2之前向-后向算法(转)
- HMM学习2之前向算法(转)
- HMM(利用前向后向求概率)
- 机器学习笔记(十四)——HMM估计问题和前向后向算法
- 隐马尔可夫模型(HMM)的MATLAB实现——前向后向算法
- hmm-前向算法
- hmm-前向算法
- 模板笔记003 - 非类型模板参数
- 第十周项目3-利用二叉树遍历思想解决问题
- C# 获取主机IP地址
- sizeof规则
- 第九周 项目4 广义表算法库及应用
- HMM之前向后向算法
- 第10周项目3 利用二叉树遍历思想解决问题
- Spring 配置文件报错:元素 "context:component-scan" 的前缀 "context" 未绑定。
- 关于/proc/id/status中内容的描述
- 二维数组的参数传递
- Android内核之内核提取
- 第十一周项目1-验证二叉树算法(3)
- 【深度学习】【框架概述1】【卷积神经网络-进化史】从LeNet到AlexNet
- 第十一周 二叉树构造算法的验证