机器学习笔记(十四)——HMM估计问题和前向后向算法
一、隐马尔科夫链的第一个基本问题
估计问题:给定一个观察序列O=O1O2…OTO=O_1O_2\dots O_T和模型u=(A,B,π)u = (\boldsymbol{A,B,\pi}),如何快速地计算出给定模型uu情况下,观察序列OO的概率, 即P(O|u)P(O|u)?
二、求解观察序列的概率
其实,求解这个问题就是一个解码问题。 对于任意的状态序列Q=q1q2…qTQ=q_1q_2\dots q_T,有
P(O|Q,u)= \prod_{t=1}^{T-1} P(O_t|q_t,q_t+1,u) \\ =b_{q1}(O_1)b_{q2}(O_2)\dots b_{qT}(O_T)
并且
P(Q|u) = \pi _{q_1}a_{q_1q_2}a_{q_2q_3} \dots a_{q_{T-1}q_T}
由于
P(O,Q|u) = P(O|Q,u)P(Q|u)
所以
P(O|u) = \sum _{Q} P(O,Q|u) \\ \sum _{Q}P(O|Q,u)P(Q|u) \\ =\sum _{Q}\pi _{q_1}b_{q1}(O_1)\prod_{t=1}^{T-1}a_{q_{t}q_{t+1}}b_{q_{t+1}}(O_{t+1})
上述推导过程很直接,但是实际的计算量是非常庞大的,它要穷尽所有可能的状态序列,如果模型中有 NN个状态,时间长度为TT, 那么有 NTN^T个可能的状态序列,这导致了并不能有效地执行这个算法。因此,人们提出了前向算法,利用动态规划来解决指数爆炸的问题。
三、HMM中的前向算法
为了实现前向算法,需要定义一个前向变量αt(i)\alpha_t(i).
定义1 前向变量αt(i)\alpha_t(i)是在时间tt, HMM输出序列O=O1O2…OtO=O_1O_2\dots O_t并且位于状态sis_i的概率:
\alpha_t(i) = P(O_1O_2\dots O_t, q_t=s_i|u)
前向算法的主要思想是,如果可以快速地计算前向变量αt(i)\alpha_t(i),那么就可以根据αt(i)\alpha_t(i)计算出P(O|u)P(O|u) , 因为P(O|u)P(O|u) 是在所有状态下观察到序列O=O1O2…OtO=O_1O_2\dots O_t的概率:
P(O|u) = \sum _{s_i}P(O_1O_2\dots O_T, q_T=s_i|u)= \sum _{i=1}^{N}\alpha_T(i)
在前向算法中,采用动态规划的方法计算前向变量 αt(i)\alpha_t(i),其思想基于如下观察:在时间t+1的前向变量可以根据时间t时的前向变量 αt(1),αt(2),…,αt(N)\alpha_t(1),\alpha_t(2),\dots, \alpha_t(N)来归纳计算:
\alpha_{t+1}(j) = (\sum_{i=1}^{N}\alpha_t(i)a_{ij})b_j({O_{t+1}})
前向算法
1 初始化: α1(i)=πibi(O1),1≤i≤N\alpha_1(i)=\pi_ib_i(O_1), 1 \le i \le N
2 归纳计算: αt+1(j)=(∑Ni=1αt(i)aij)bj(Ot+1),1≤t≤T−1\alpha_{t+1}(j) = (\sum_{i=1}^{N}\alpha_t(i)a_{ij})b_j({O_{t+1}}) , 1 \le t \le T-1
3 求和终结: P(O|u)=∑Ni=1αT(i)P(O|u) = \sum _{i=1}^{N}\alpha_T(i)
前向算法的时间复杂度为O(N2T)O(N^2T)
四、HMM中的后向算法
快速计算P(O|u)P(O|u)还有一种后向算法。
对应于前向变量,定义一个后向变量βt(i)\beta_t(i).
定义2 后向变量βt(i)\beta_t(i)是在给定模型u=(A,B,π)u = (\boldsymbol{A,B,\pi})并且在时间tt状态为sis_i的条件下,HMM的输出观察序列O=Ot+1Ot+2…OTO=O_{t+1}O_{t+2}\dots O_T的概率:
\beta_t(i) = P(O_{t+1}O_{t+2}\dots O_T| q_t=s_i|u)
类似于前向算法,也可以用动态规划算法计算后向变量。
1. 从时间 tt到时间t+1t+1, HMM的状态 sis_i到状态 sjs_j输出 Ot+1O_{t+1},概率为 aijbj(Ot+1)a_{ij}b_j(O_{t+1})
2. 在时间 t+1t+1的状态为 sjs_j的条件下,HMM输出观察序列 Ot+2…OTO_{t+2}\dots O_T,概率为: βt+1(j)\beta_{t+1}(j)
则,归纳关系为:
\beta_t(i)=\sum_{j=1}^{N}a_{ij}b_j(O_{t+1})\beta_{t+1}(j)
后向算法
1 初始化:βT(i)=1,1≤i≤N\beta_T(i)=1, 1 \le i \le N
2 归纳计算:βt(i)=∑Nj=1aijbj(Ot+1)βt+1(j),T−1≥t≥1;1≤i≤N\beta_t(i)=\sum_{j=1}^{N}a_{ij}b_j(O_{t+1})\beta_{t+1}(j), T-1 \ge t \ge 1; 1 \le i \le N
3 求和终结:P(O|u)=∑Ni=1πibi(O1)β1(i)P(O|u) = \sum _{i=1}^{N}\pi_ib_i(O_1)\beta_1(i)
后向算法的时间复杂度为O(N2T)O(N^2T)
机器学习笔记(十四)——HMM估计问题和前向后向算法相关推荐
- 机器学习笔记十四:随机森林
在上一篇机器学习笔记十三:Ensemble思想(上)中,简要的提了一下集成学习的原理和两种主要的集成学习形式. 而在这部分要讲的随机森林,就算是其中属于bagging思路的一种学习方法.为了篇幅,b ...
- 机器学习笔记(十八)——HMM的参数估计
一.HMM中的第三个基本问题 参数估计问题:给定一个观察序列O=O1O2-OTO=O_1O_2\dots O_T,如何调节模型μ=(A,B,π)\mu = (A, B, \pi)的参数,使得P(O|μ ...
- 机器学习笔记 十四:k-近邻算法(kNN)的实现
目录 1. 什么是机器学习 2. k-近邻算法(kNN) 2.1 kNN的原理 2.2 k-近邻算法的一般流程 2.3 kNN伪代码 3. 函数介绍 3.1 get()函数:利用字典统计列表中元素出现 ...
- 吴恩达机器学习笔记十四之大规模机器学习
本节目录 1 大型数据集的学习 2 随机梯度下降法 3 小批量梯度下降 4 随机梯度下降收敛 5 在线学习 6 映射化简和数据并行 1 大型数据集的学习 如果我们有一个低方差的模型,增加数据集的规模可 ...
- 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进
吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...
- 【周志华机器学习】十四、概率图模型
文章目录 参考资料 1. 基本概念 2. 隐马尔可夫模型(HMM) 2.1 隐马尔可夫三大问题 1. 第一个问题解法 2. 第二个问题解法 3. 第三个问题解法 3. 马尔可夫随机场(MRF) 3.1 ...
- 强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现
强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现 TD3算法简介 TD3是Twin Delayed Deep Deterministic policy gradie ...
- 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9712321 作者:七十一雾央 新浪微博:http:// ...
- Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理
Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...
最新文章
- python 显示数据库数据tk_如何使用python显示从Mysql表获取的Tkinter treeview中的数据...
- 多线程:了解一下ForkJoin、FutureTask、BlockingQueue
- 使用 Castal DynamicProxy 简化 Silverlight 数据绑定
- MIME type类型
- MySQL ACID及四种隔离级别的解释
- python图书管理系统增删改查_python基础-字典的增删改查
- java中的jpa_在JPA中处理Java的LocalDateTime
- 漫谈CGI FastCGI WSGI
- Java 创建线程的4种方式
- 修改 tomcat 初始 ROOT 的方法
- 第31讲 聊天室程序
- 软件工程pert图_《软件工程》软件项目管理实验
- object has no attribute 'cleaned_data'
- python爬取网页停止_如何使用Python抓取雪球网页?
- veracrypt源码编译
- php 抢红包_用PHP实现的抢红包小程序
- (数据库系统概论|王珊)第七章数据库设计-第三节:概念结构设计
- 诗歌七 千字文(天地玄黄,宇宙洪荒)
- 如何理解 ssh 三大框架
- 行人重识别论文(五)Beyond Part Models: Person Retrieval with Refined Part Pooling