热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

隐马尔可夫模型(HiddenMarkovModel,HMM)理解

隐马尔可夫模型(HiddenMarkovModel,HMM)最初由L.E.Baum和其它一些学者发表在一系列的统计学论文中,随后在语音识别,自然语言处理以及生物信息等



隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语音识别,自然语言处理以及生物信息等领域体现了很大的价值。到目前为止,它一直被认为是实现快速精确的语音识别系统的系统,自然语言处理过程的最成功的方法。

1.   HMM引入                 

          隐马尔可夫模型(HMM)是一个输出符号序列统计模型,具有T个状态X1,X2.......Xt-1,它按一定的周期从一个状态转移到另一个状态,每次转移时,输出一个符号(观测值)。转移到哪一个状态,转移时输出什么符号,分别由状态转移概率和转移时输出概率来决定。因为只能观测到输出符号的序列,而不能观测待状态转移序列(即模型的观测序列是通过哪个状态路径是不知道的)所以称为隐马尔可夫模型。

          下面是一个简单的例子。气象学上,可通过年轮的宽窄了解各年的气候状况,利用年轮上的信息可推测出几千年来的气候变迁情况。年轮宽表示那年光照充足,风调雨顺;若年轮较窄,则表示那年温度低、雨量少,气候恶劣。            为了简单起见,我们只考虑冷(code),热(hot)两种温度。根据现代的气象知识可以知道,“冷”的一年跟着下一年为热的概率为0.4,为冷的概率为0.6;“热”的一年跟着下一年为热的概率为0.7,为冷的概率为0.3。可以简单的归纳为下面规律:


我们将树的年轮简单分为小(small),中(middle),大(large)三种,或者分别写成S,M,L。根据现代的气象知识可以知道,热的一年树木年轮为“小”,“中”,“大”的概率分别为0.1,0.4,0.5;冷的一年树木年轮为“小”,“中”,“大”的概率分别为0.7,0.2,0.1。因此,冷(C),热(H)对年轮的影响可以简单归纳为下面规律:

         在这个系统中,状态序列是每年的温度--H 或者 C。因为下一年的温度只与上一年有关,所以从一个状态(温度)转移到下一个状态(温度)可以看成是一个一阶Markov process。因为无法观测过去的温度,状态序列也被称为隐藏状态。尽管我们不能观测过去的状态(温度)序列,但是可以通过树的年轮给我们提供的信息预测温度。我们的目标就是充分利用可观测的年轮序列,来预测那些年的温度序列情况(Markov 过程)。从上面规律可以得到,
状态转移矩阵A:

观测矩阵B:

假设初始状态矩阵PI , (如本例中是初始状态矩阵是最开始产生Hot,和Cold天气的概率)


这样可以得到天气与树年轮的概率图模型

图中最开始产生Hot天气的概率为0.6(由初始状态矩阵PI决定),Hot天气产生树年轮Small的概率为0.1,Hot产生状态产生Hot状态的概率为0.7,接着Hot产生Middle的概率为0.4........。
因此可以得到隐藏天气序列HHCC产生树木年轮序列为SMSL的概率

使用这种办法我们就可以计算产生SMSL序列存在的所有天气序列的概率



比较可得P(CCCH)的概率为0.002822,是最大的。

结论:
  • 若树木年轮序列为SMSL,则最可能状态序列(Markov process)是CCCH .
  • 产生树木年轮序列为SMSL的概率为0.009629 (所有可能相加)
2.  HMM模型

2.1  HMM基本公式

      HMM由两个随机过程组成,一个是状态转移序列,它对应着一个单纯的马尔可夫过程,另一个是每一次转移时输出的符号组成的符号序列。这两个随机过程,其中一个是不可观测的,只能通过另一个随机过程的输出观察序列观测得到。不同于Naive Bayes Model,只需要预测一个输出变量y,HMM需要预测一个输出序列

设可观测序列是:


我们的目标是推测出最有可能的输出(状态)序列:

现在我们简单的回顾一下Naive Bayes Model  ,它的目标是在已知输入向量x的情况下,求条件概率p(y|x)

 因为HMM需要预测的是一个输出序列,模仿Naive Bayes Model可以写成


考虑到yi还受前一时刻的影响,可以从概率图模型看出每一个状态yi-1跳到下一个状态yi都有一个状态转移概率。

其中一个状态序列的概率,如1中的(HHCC)序列的概率可以写成

这将得到有名的HMM模型,如1中求树木年轮序列 为 SMSL的概率 P(SMSL)


2.2  HMM的基本元素

       有了前面对HMM模型的讨论,以及树木年轮的例子,就可以给出HMM的定义,或者说HMM可以由哪些元素描述。

LET:

       下图描述的是一个 Hidden Markov Model 。其中 Xi 表示隐藏序列,其余的都如上面所定义。其中序列X是未知的,我们要通过可观测序列O,状态转移矩阵A,观测概率矩阵B推测。

Hidden Markov Model

其中:


 
         
若带人具体数值可得:
3.  HMM的三个基本问题
想要有效的使用HMMs解决实际问题,有三个基本问题必须加以解决。

3.1  问题 1---识别问题 

   
   

3.2 问题 2---解码问题

   

3.3 问题 3---模型训练问题

4 HMM的基本算法
下面结合讨论3中提到的三个问题的解法,介绍HMM的基本算法。

4.1 问题1的解决方案

问题1的可以归纳为:

4.1.1蛮力算法


若用图表示可以得到如下:

其中:
         

当然也可以从Naive Bayes Model的角度理解(但本质上没有区别):


然而,这种直接的计算的方法(蛮力算法)一般是不可行的,实际情况中,我们不可能知道每一种可能的路径,而且这种计算的计算量也是十分惊人的,达到大约数量级。如,当HMM的状态数为5,观测序列长度为100时,计算量达到,是完全无法接受的。因此需要更有效的算法,这就是Baum 等人提出的前向-后向算法。

4.1.2 前向算法(a-pass )

前向算法即按输出观察值序列的时间,从前向后递推计算输出概率。
首先说明下列符号的定义:

由上面的符号的定义,则可由下面递推公式计算得到:
  
解释:

                     






使用这种前向递推计算算法的计算量大为减少,变为复杂度变为。同样的1中例子,N=5,T=100时,只需要大约2500次乘法。

4.1.3 后向算法()

        与前向算法类似,向后算法即使按输出观察序列的时间,从后面向前递推计算输出概率的方法。首先说明下列符号的定义:
      
有递推公式可得:

解释:
    


4.2 问题2解决方案

   问题2可以归纳为:

4.2.1蛮力算法

       如4.1.1中计算每一条可能状态序列的概率,然后比较找出其中概率最大的一条就为我们需要的状态序列X。如开始的例1中就是采用这种算法。这种算法虽然易理解,但是计算开销太大,一般不可取。

4.2.2前向后向算法

       在4.1中我们详细的讨论了前向算法以及后向算法,而前向后向算法就是综合这两种算法。可以用来解决寻找最可能隐藏状态序列X的问题。首先我们说明下列符号的定义:
     

4.2.3  维特比(Viterbi)算法



4.3 问题3解决方案

问题3解决的主要是HMM的训练,即HMM的参数估计问题。可以归纳为:

4.3.1 Baum-Welch算法

首先我们说明下列符号的定义:

 根据前向-后向算法,可以得到:

 由此可以推出重估公式:






推荐阅读
author-avatar
小辉0110_737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有