HMM 定义

崔晓源 翻译

HMM是一个三元组 (,A,B).

 the vector of the initial state probabilities;

 the state transition matrix; 

 the confusion matrix; 

这其中,所有的状态转移概率和混淆概率在整个系统中都是一成不变的。这也是HMM中最不切实际的假设。

HMM的应用

有三个主要的应用:前两个是模式识别后一个作为参数估计

(1) 评估

根据已知的HMM找出一个观察序列的概率。

这类问题是假设我们有一系列的HMM模型,来描述不同的系统(比如夏天的天气变化规律和冬天的天气变化规律),我们想知道哪个系统生成观察状态序列的概率最大。反过来说,把不同季节的天气系统应用到一个给定的观察状态序列上,得到概率最大的哪个系统所对应的季节就是最有可能出现的季节。(也就是根据观察状态序列,如何判断季节)。在语音识别中也有同样的应用。

我们会用forward algorithm 算法来得到观察状态序列对应于一个HMM的概率。

(2) 解码

根据观察序列找到最有可能出现的隐状态序列

回想水藻和天气的例子,一个盲人隐士只能通过感受水藻的状态来判断天气状况,这就显得尤为重要。我们使用viterbi algorithm来解决这类问题。

viterbi算法也被广泛的应用在自然语言处理领域。比如词性标注。字面上的文字信息就是观察状态,而词性就是隐状态。通过HMM我们就可以找到一句话上下文中最有可能出现的句法结构。

(3) 学习

从观察序列中得出HMM

这是最难的HMM应用。也就是根据观察序列和其代表的隐状态,生成一个三元组HMM (,A,B)。使这个三元组能够最好的描述我们所见的一个现象规律。

我们用forward-backward algorithm来解决在现实中经常出现的问题--转移矩阵和混淆矩阵不能直接得到的情况。

总结 HMM可以解决的三类问题

  1. Matching the most likely system to a sequence of observations -evaluation, solved using the forward algorithm;
  2. determining the hidden sequence most likely to have generated a sequence of observations - decoding, solved using the Viterbi algorithm;
  3. determining the model parameters most likely to have generated a sequence of observations - learning, solved using the forward-backward algorithm.

4-1)Forward Algorithm

找到观察序列的概率

崔晓源 翻译

Finding the probability of an observed sequence

1、穷举搜索方法

对于水藻和天气的关系,我们可以用穷举搜索方法的到下面的状态转移图(trellis): 

图中,每一列于相邻列的连线由状态转移概率决定,而观察状态和每一列的隐状态则由混淆矩阵决定。如果用穷举的方法的到某一观察状态序列的概率,就要求所有可能的天气状态序列下的概率之和,这个trellis中共有3*3=27个可能的序列。

Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) + Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy) + . . . . Pr(dry,damp,soggy | rainy,rainy ,rainy)

可见计算复杂度是很大,特别是当状态空间很大,观察序列很长时。我们可以利用概率的时间不变性解决复杂度。
2、采用递归方法降低复杂度
我们采用递归的方式计算观察序列的概率,首先定义部分概率为到达trellis中某一中间状态的概率。在后面的文章里,我们把长度为T的观察状态序列表示为:
2a. Partial probabilities, (‘s)
在计算trellis中某一中间状态的概率时,用所有可能到达该状态的路径之和表示。
比如在t=2时间,状态为cloudy的概率可以用下面的路径计算:
t ( j ) 表示在时间t时 状态j的部分概率。计算方法如下:
t ( j )= Pr( observation | hidden state is j ) * Pr(all paths to state j at time t)
最后的观察状态的部分概率表示,这些状态所经过的所有可能路径的概率。比如:

这表示最后的部分概率的和即为trellis中所有可能路径的和,也就是当前HMM下观察序列的概率。
Section 3  会给出一个动态效果介绍如何计算概率。
2b.计算初始状态的部分概率
我们计算部分概率的公式为:
 t ( j )= Pr( observation | hidden state is j ) x Pr(all paths to state j at time t)
但是在初始状态,没有路径到达这些状态。那么我们就用probability乘以associated observation probability计算:
这样初始时刻的状态的部分概率就只与其自身的概率和该时刻观察状态的概率有关。

隐马尔科夫模型HMM自学 (4-2)Forward Algorithm

崔晓源 翻译

书接上文,前一话我们讲到了Forward Algorithm中初始状态的部分概率的计算方法。这次我们继续介绍。

2c.如何计算t>1时刻的部分概率

回忆一下我们如何计算部分概率:

t ( j )= Pr( observation | hidden state is j ) * Pr(all paths to state j at time t)

我们可知(通过递归)乘积中第一项是可用的。那么如何得到Pr(all paths to state j at time t) 呢?

为了计算到达一个状态的所有路径的概率,就等于每一个到达这个状态的路径之和:

随着序列数的增长,所要计算的路径数呈指数增长。但是在t时刻我们已经计算出所有到达某一状态的部分概率,因此在计算t+1时刻的某一状态的部分概率时只和t时刻有关。
这个式子的含义就是恰当的观察概率(状态j下,时刻t+1所真正看到的观察状态的概率)乘以此时所有到达该状态的概率和(前一时刻所有状态的概率与相应的转移概率的积)。因此,我们说在计算t+1时刻的概率时,只用到了t时刻的概率。这样我们就可以计算出整个观察序列的概率。
2d.复杂度比较
对于观察序列长度T,穷举法的复杂度为T的指数级;而Forward Algorithm的复杂度为T的线性。
=======================================================
最后我们给出Forward Algorithm的完整定义
We use the forward algorithm to calculate the probability of a T long observation sequence;

where each of the y is one of the observable set. Intermediate probabilities (‘s) are calculated recursively by first calculating  for all states at t=1.

Then for each time step, t = 2, ..., T, the partial probability  is calculated for each state;   

that is, the product of the appropriate observation probability and the sum over all possible routes to that state, exploiting recursion by knowing these values already for the previous time step. Finally the sum of all partial probabilities gives the probability of the observation, given the HMM, .    =======================================================

我们还用天气的例子来说明如何计算t=2时刻,状态CLOUDY的部分概率

怎么样?看到这里豁然开朗了吧。要是还不明白,我就.....................还有办法,看个动画效果:
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/forward_algorithm/s3_pg3.html
参数定义:
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/forward_algorithm/s3_pg4.html
http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/forward_algorithm/s3_pg5.html
最后记住我们使用这个算法的目的(没有应用任何算法都是垃圾),从若干个HMM模型中选出一个最能够体现给定的观察状态序列的模型(概率最大的那个)。
Forward Algorithm (Done)

隐马尔科夫模型HMM自学 (2)相关推荐

  1. 隐马尔科夫模型HMM自学 (3)

    Viterbi Algorithm 本来想明天再把后面的部分写好,可是睡觉今天是节日呢?一时情不自禁就有打开电脑.......... 找到可能性最大的隐含状态序列 崔晓源 翻译 多数情况下,我们都希望 ...

  2. 隐马尔科夫模型HMM自学(1)

    介绍 崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首 ...

  3. 【NLP】用于语音识别、分词的隐马尔科夫模型HMM

    大家好,今天介绍自然语言处理中经典的隐马尔科夫模型(HMM).HMM早期在语音识别.分词等序列标注问题中有着广泛的应用. 了解HMM的基础原理以及应用,对于了解NLP处理问题的基本思想和技术发展脉络有 ...

  4. python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法

    1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...

  5. 隐马尔科夫模型 HMM 与 语音识别 speech recognition (1):名词解释

    0.引言 想在 CSDN 上看一下隐马尔科夫模型,简称HMM(Hidden Markov Model)的例子,找了几篇博文,却发现大部分都是转载的,转载的还没有出处,文中的表述与逻辑也看的人晕头转向, ...

  6. 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

    在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇 ...

  7. 一、隐马尔科夫模型HMM

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用. ...

  8. 隐马尔科夫模型 (HMM) 算法介绍及代码实现

    Table of Contents Hidden Markov Model (隐马尔科夫模型) 定义 基本问题 前向算法 算法流程 实现代码 后向算法 算法流程 实现代码 Viterbi算法 算法流程 ...

  9. 隐马尔科夫模型(HMM)择时应用的量化策略

    HMM模型 隐马尔科夫模型(HMM)择时应用的量化策略. 仅为研究学习使用, 不作为任何投资策略建议. 文章内容从各处整理汇总而成, 感谢各位大神分享.  具体策略代码均调试通过. 一.从大奖章讲起 ...

最新文章

  1. sample java_从sample来学习Java堆(转)
  2. PHP多台服务实现单点登录,如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)...
  3. SpringBoot-hello world
  4. list对oracle结果集排序了_详解SQL窗口函数和分组排序函数
  5. 【洛谷 2661】信息传递
  6. 从无到有:阿里巴巴中国站手机客户端项目设计
  7. Android使用百度翻译api
  8. 有一列数列,1,11,21,1211,111221,.........,
  9. JS-记事本(代码)
  10. 服务器连接电脑显示屏花屏怎么解决,电脑显示器花屏怎么办 电脑显示器花屏解决方法【详解】...
  11. python土味情话_GitHub - MMstarry/itchat: 微信机器人 土味情话
  12. 算法设计与分析基础 第一章谜题
  13. Echarts-实现3D柱状图显示,并单个柱子变色
  14. 如何用C语言实现小游戏——扫雷
  15. bugku-web-source
  16. AWS - Redshift - Unload 数据到S3产生的文件名
  17. ubuntu18.04 使用calibration_camera_lidar 实现激光雷达和相机联合标定
  18. flex 开发的电子画板(桌面应用程序)
  19. 量化投资常用技能——指标篇3:详解RSI指标,及其代码实现和绘图
  20. 学习突围1 - 关于学习的痛点

热门文章

  1. 关于Linux访问web遇到403 Forbidden的问题
  2. 数据结构源码笔记(C语言):二路归并排序
  3. linux空洞目录,学习笔记:linux之文件空洞
  4. java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现
  5. Python+Selenium 自动化-指定chrome驱动运行selenium实例演示,运行指定位置下的浏览器驱动
  6. Python 微信机器人-用itchat库下载微信接收到的语音、图片等资源实例演示
  7. windows卸载程序提示“请等待当前程序完成卸载或更改“问题解决方法,windows卸载卡进程问题解决方法
  8. C# 学习笔记(15)自己的串口助手----波形显示
  9. Android studio导出的apk在真机上安装提示“文件不存在或已失效”的解决方法
  10. 双击SDK Manager.exe和AVD Manager.exe时,弹出提示:failed to execute tools\android.bat解决办法