隐马尔科夫模型HMM(一)HMM模型

简介: 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用。当然,随着目前深度学习的崛起,尤其是RNN,LSTM等神经网络序列模型的火热,HMM的地位有所下降。

隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用。当然,随着目前深度学习的崛起,尤其是RNN,LSTM等神经网络序列模型的火热,HMM的地位有所下降。但是作为一个经典的模型,学习HMM的模型和对应算法,对我们解决问题建模的能力提高以及算法思路的拓展还是很好的。本文是HMM系列的第一篇,关注于HMM模型的基础。
1. 什么样的问题需要HMM模型
首先我们来看看什么样的问题解决可以用HMM模型。使用HMM模型时我们的问题一般有这两个特征:1)我们的问题是基于序列的,比如时间序列,或者状态序列。2)我们的问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。
有了这两个特征,那么这个问题一般可以用HMM模型来尝试解决。这样的问题在实际生活中是很多的。比如:我现在在打字写博客,我在键盘上敲出来的一系列字符就是观测序列,而我实际想写的一段话就是隐藏序列,输入法的任务就是从敲入的一系列字符尽可能的猜测我要写的一段话,并把最可能的词语放在最前面让我选择,这就可以看做一个HMM模型了。再举一个,我在和你说话,我发出的一串连续的声音就是观测序列,而我实际要表达的一段话就是状态序列,你大脑的任务,就是从这一串连续的声音中判断出我最可能要表达的话的内容。
从这些例子中,我们可以发现,HMM模型可以无处不在。但是上面的描述还不精确,下面我们用精确的数学符号来表述我们的HMM模型。

2. HMM模型的定义
 对于HMM模型,首先我们假设$Q$是所有可能的隐藏状态的集合,$V$是所有可能的观测状态的集合,即:

$$ Q = \{q_1,q_2,...,q_N\}, \; V =\{v_1,v_2,...v_M\} $$

其中,$N$是可能的隐藏状态数,$M$是所有的可能的观察状态数。
对于一个长度为$T$的序列,$I$对应的状态序列, $O$是对应的观察序列,即:

$$ I = \{i_1,i_2,...,i_T\}, \; O =\{o_1,o_2,...o_T\} $$

其中,任意一个隐藏状态$i_t \in Q$,任意一个观察状态$o_t \in V$
HMM模型做了两个很重要的假设如下:
1) 齐次马尔科夫链假设。即任意时刻的隐藏状态只依赖于它前一个隐藏状态。当然这样假设有点极端,因为很多时候我们的某一个隐藏状态不仅仅只依赖于前一个隐藏状态,可能是前两个或者是前三个。但是这样假设的好处就是模型简单,便于求解。如果在时刻$t$的隐藏状态是$i_t= q_i$,在时刻$t+1$的隐藏状态是$i_{t+1} = q_j$, 则从时刻$t$到时刻$t+1$的HMM状态转移概率$a_{ij}$可以表示为:

$$ a_{ij} = P(i_{t+1} = q_j | i_t= q_i) $$

这样$a_{ij}$可以组成马尔科夫链的状态转移矩阵$A$:

$$ A=\Big [a_{ij}\Big ]_{N \times N} $$

2) 观测独立性假设。即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。如果在时刻$t$的隐藏状态是$i_t= q_j$, 而对应的观察状态为$o_t = v_k$, 则该时刻观察状态$v_k$在隐藏状态$q_j$下生成的概率为$b_j(k)$,满足:

$$ b_j(k) = P(o_t = v_k | i_t= q_j) $$

这样

$$ b_j(k) $$

可以组成观测状态生成的概率矩阵$B$:

$$ B = \Big [b_j(k) \Big ]_{N \times M} $$

除此之外,我们需要一组在时刻$t=1$的隐藏状态概率分布$Π$:

$$ \Pi = \Big [ \pi(i)\Big ]_N \; 其中 \;\pi(i) = P(i_1 = q_i) $$

一个HMM模型,可以由隐藏状态初始概率分布$Π$, 状态转移概率矩阵$A$和观测状态概率矩阵$B$决定。$Π,A$决定状态序列,$B$决定观测序列。因此,HMM模型可以由一个三元组$λ$表示如下:

$$ \lambda = (A, B, \Pi) $$

3.一个HMM模型实例
下面我们用一个简单的实例来描述上面抽象出的HMM模型。这是一个盒子与球的模型,例子来源于李航的《统计学习方法》。
假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:

image


按照下面的方法从盒子里抽球,开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。如此下去,直到重复三次,得到一个球的颜色的观测序列:

$$ O=\{红,白,红\} $$

注意在这个过程中,观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的。
那么按照我们上一节HMM模型的定义,我们的观察集合是:

$$ V=\{红,白\},M=2 $$

我们的状态集合是:

$$ Q =\{盒子1,盒子2,盒子3\}, N=3 $$

而观察序列和状态序列的长度为3.
初始状态分布为:

$$ \Pi = (0.2,0.4,0.4)^T $$

状态转移概率分布矩阵为:

$$ A = \left( \begin{array} {ccc} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 &0.5 \end{array} \right) $$

观测状态概率矩阵为:

$$ B = \left( \begin{array} {ccc} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{array} \right) $$

4. HMM观测序列的生成
从上一节的例子,我们也可以抽象出HMM观测序列生成的过程。
输入的是HMM的模型$λ=(A,B,Π)$,观测序列的长度$T$
输出是观测序列$O =\{o_1,o_2,...o_T\}$
生成的过程如下:
1)根据初始状态概率分布$Π$生成隐藏状态$i_1$
2) for t from 1 to T

  • 按照隐藏状态$i_t$的观测状态分布$b_{i_t}(k)$生成观察状态$o_t$
  • 按照隐藏状态$i_t$的状态转移概率分布$a_{i_t\;\;i_{t+1}}$产生隐藏状态$i_{t+1}$

所有的$o_t$一起形成观测序列$O =\{o_1,o_2,...o_T\}$

5. HMM模型的三个基本问题
HMM模型一共有三个经典的问题需要解决:
1) 评估观察序列概率。即给定模型$λ=(A,B,Π)$和观测序列$O =\{o_1,o_2,...o_T\}$,计算在模型λλ下观测序列$O$出现的概率$P(O|λ)$。这个问题的求解需要用到前向后向算法,我们在这个系列的第二篇会详细讲解。这个问题是HMM模型三个问题中最简单的。
2)模型参数学习问题。即给定观测序列$O =\{o_1,o_2,...o_T\}$,估计模型$λ=(A,B,Π)$的参数,使该模型下观测序列的条件概率$P(O|λ)$最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法, 我们在这个系列的第三篇会详细讲解。这个问题是HMM模型三个问题中最复杂的。
3)预测问题,也称为解码问题。即给定模型$λ=(A,B,Π)$和观测序列$O =\{o_1,o_2,...o_T\}$,求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法,我们在这个系列的第四篇会详细讲解。这个问题是HMM模型三个问题中复杂度居中的算法。

摘自:http://www.cnblogs.com/pinard/p/6945257.html

目录
相关文章
|
数据采集 自然语言处理 数据可视化
Hidden Markov Model,简称 HMM
隐马尔可夫模型(Hidden Markov Model,简称 HMM)是一种统计模型,用于描述由隐藏的马尔可夫链随机生成观测序列的过程。它是一种生成模型,可以通过学习模型参数来预测观测序列的未来状态。HMM 主要包括以下几个步骤:
388 5
|
机器学习/深度学习 算法 TensorFlow
维特比算法(Viterbi algorithm)
维特比算法(Viterbi algorithm)是一种用于解码隐马尔可夫模型(Hidden Markov Model,HMM)的动态规划算法。它用于找到给定观测序列条件下的最有可能的隐藏状态序列。
1348 1
|
机器学习/深度学习 自然语言处理 数据可视化
基于Python+词云图+情感分析对某东上完美日记的用户评论分析
基于Python+词云图+情感分析对某东上完美日记的用户评论分析
1049 0
基于Python+词云图+情感分析对某东上完美日记的用户评论分析
|
存储 关系型数据库 数据库
Ganos全空间数据多态分层存储能力解析与最佳实践
本文介绍了Ganos与云原生关系型数据库PolarDB-PG联合打造的全空间数据多态分层存储能力与最佳实践。多态分层存储将OSS对象存储直接作为PolarDB-PG数据库的一种存储介质,可以与块存储联合使用,它支持用户将整库、单表、子分区表甚至是表内的一个LOB字段存储在OSS上,达到存储降本的目的,同时保持了增删改查的全部透明,并通过多级缓存保障了性能的最少衰减。多态分层存储是一种兼顾成本、性能与易用性的全空间数据管理方案,可极大程度降低业务开发的复杂度与云资源使用成本。
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
自然语言处理 算法 语音技术
隐马尔可夫模型(HMM)
隐马尔可夫模型(HMM)
614 0
|
搜索推荐
搜索树基础:二叉搜索树(详解特性用途,图解实现过程)
搜索树基础:二叉搜索树(详解特性用途,图解实现过程)
|
人工智能 Dart 算法
Flutter AI版本五子棋
在上一篇文章中,讲解了如何实现双人在本地对战的五子棋,但是只有一个人的时候就不太好玩,同时博主也没有把五子棋相关的文章写过瘾。那么这篇文章,我们来实现一个功能更加丰富的五子棋吧!
|
机器学习/深度学习
差异基因通路富集分析的统计学假设-个人见解分享
本文主要分享了学习 “差异基因通路富集中使用的 超几何检验方法背后意义” 的个人见解
737 0
|
前端开发 算法 开发工具
工作两年,本地git分支达到了惊人的361个,该怎么快速清理呢?
工作两年,本地git分支达到了惊人的361个,该怎么快速清理呢?
1033 0