当前位置:文档之家› 隐马尔科夫模型学习总结.pdf

隐马尔科夫模型学习总结.pdf

隐马尔科夫模型学习总结by terry__feng 隐马尔科夫模型,这个久违的老朋友。

大三上学期在实验室的时候,由于实验室项目需用到语音识别,所以就使用了微软的Microsoft Speech SDK,也关注了一下语音识别的原理,其中有以HMM作为模型进行识别的。

后来实验室的机器人项目中上位机的软件使用到了人脸识别的功能。

实验室有关于识别的工程源代码,但是工程庞大,结构复杂,并且里面有很多没有用到的功能,并且程序经常莫名其妙的跑飞,还存在严重的内存泄露问题。

所以就自己另起炉灶,重新编写上位机软件。

其中的人脸识别用到的核心算法的代码就来源于这个工程。

它使用到的技术不是PCA和LDA,而是HMM和DCT。

那时候为了看明白HMM实现的原理,在图书馆看了关于模式识别的书,但有基本都是工程相关的,所以说原理性的知识牵扯的不多,自己也就是学习了大概,只是摸熟了里面使用到的各种牛逼的算法,比如Forward-backward,Viterbi,Baum-Welch。

但是各种算法原理的理解上就差得远了。

没有什么理论的基础,也不知如何学起,最终未能继续。

后来又通过吴军老师的《数学之美》了解到隐马尔科夫模型在语音识别中的重要作用。

时隔快两年了,从李航博士的《统计学习方法》中又看到了HMM模型的魅影,里面对其原理进行了深刻的剖析,能够学习之内心自是欣慰至极。

于是便花了几天的时间读了关于HMM的几章,现在算是有点收获,总结一下(大部分内容来自对吴军老师的《数学之美》和李航博士的《统计学习方法》的总结)。

文章主要包括信息传递模型、HMM模型简介,和对所使用的三个主要算法:前向后向算法、Baum-Welch算法和维特比算法进行了总结。

由于公式比较的多……所以生成pdf版的了。

1、信息传递的模型任何信息都是通过一定的媒介从一端传递到另一端。

对于信息源的传输者来说,其所需传输的序列可假设为S={s1,s2,s3,…,sn},而处于媒介另一端的观测者观测到的序列是O={o1,o2,o3,…,om}。

对于观测者来说,他接收到序列O的目的是为了明白传输者的意图,这样才能达到信息交流的目的。

也就是说,观测者能够做的事情就是使用观测到的数据(即序列O)去揣测传输者要传输的数据(即序列S)。

但是仅仅根据序列O能够揣测出来的序列S的可能性太多了,哪一个猜到的序列S是我们想要的呢?按照概率论的观点,我们可以把上面的问题建立数学模型。

P(S|O)=P(s1,s2,s3,…,s n|o1,o2,o3,…,o m)上式的意思是:对于一个给定的观测序列o1,o2,o3,…,o m,它的原序列是s1,s2,s3,…,s n的概率。

然而s1,s2,s3,…,s n的可能取值有很多,究竟哪一个才是自己想要的呢?所以便有了下面的式子:s1,s2,s3,…,s n=argmaxall s1,s2,s3,…,s nP(S|O)(1.1)也就是说找到概率最大的原序列,或者说是最有可能的原序列。

利用贝叶斯定理可以把上式转化得:P (S |O )=P(o 1,o 2,o 3,…,o m |s 1,s 2,s 3,…,s n )∙P(s 1,s 2,s 3,…,s n )P(o 1,o 2,o 3,…,o m ) (1.2)由于我们要求的是能够使猜测到的S 序列是合乎情理的可能性最大,所以说比较的是不同的S 序列,而与已经观测到的O 序列无关,所以由式1.1和1.2可得:s 1,s 2,s 3,…,s n =argmax all s 1,s 2,s 3,…,s nP(o 1,o 2,o 3,…,o m |s 1,s 2,s 3,…,s n )P(s 1,s 2,s 3,…,s n ) (1.3)2、 隐马尔科夫模型简介2.1 马尔科夫假设对于任意的状态序列{s 1,s 2,s 3,…,s n },它的某一状态出现的概率只与上一个状态有关。

就像预报天气一样,若要预报明天的天气,就仅与今天的天气作为参考,而不考虑昨天、前天或者更早的天气情况(当然这样不合理,但是确是简化的模型),称之为马尔科夫假设。

所以可以得到:P (s 1,s 2,s 3,…,s n )=∏P(s t |s t−1)n t(2.1) 2.2 独立输出假设对于任何一个可以观测到的状态o t ,它只与一个s t 的状态有关,而与其他的状态s 无关,称之为独立输出假设。

所以可以得到:P (o 1,o 2,o 3,…,o m |s 1,s 2,s 3,…,s n )=∏P(o t |s t )n t(2.2) 由式1.3,2.1,2.2可得:s 1,s 2,s 3,…,s n =argmax all s 1,s 2,s 3,…,s n P (o 1,o 2,o 3,…,o m |s 1,s 2,s 3,…,s n )P (s 1,s 2,s 3,…,s n ) =∏P(s t |s t−1)P(o t |s t )nt2.3 隐含马尔科夫“隐”的含义“隐”是针对观测者来说的。

因为观测真能够观测到的只有序列O ,而序列S 是看不到的,只能由观测值来揣测,再结合2.1和2.2所说的,所以称之为隐含马尔科夫模型。

2.4 隐含马尔科夫模型的例子(选自李航博士的《统计学习方法》P173,稍作修改)假设有4个盒子,Boxes={box1,box2,box3,box4},每个盒子里都装有红白两种颜色的球,Colors={color1,color2},有两个实验者A 和B (假设两个实验者未曾见面,只能通过电话联系)。

每个盒子里面球的个数为:Step1:实验者A从4个盒子里面以等可能的概率随机选取1个盒子,记录其盒子s1;接着从这个盒子里抽取一个球,然后通过电话告知B所抽取的球的颜色,B记录其颜色o1后,A将球放回原盒子中;Step2:A从当前的盒子转移到下一个盒子,按照下面的概率矩阵转移:s t;接着从这个盒子里抽取一个球,然后通过电话告知B所抽取的球的颜色,B记录其颜色o t后,A将球放回原盒子中;Step3:继续step2,直到记录到的球数达到n。

经过以上的三个步骤,对于A来说,得到了盒子的序列S={s1,s2,s3,…,s n};对于B来说,得到了球的观测序列O={o1,o2,o3,…,o n}。

我们现在的就假设站在B的立场上分析这个问题。

我们只得到了序列O(称为观测序列),而序列S(称为状态序列)对于我们来说是不知道的,所以我们称之为隐含的。

但是我们可以通过一定的模型来推断序列S的分布,继而求出最有可能的序列S,而这样的一个模型可以有很多种,但是一种简单的、容易计算的并且预测精度高的模型就非隐含马尔科夫模型莫属了。

3、隐马尔科夫模型接下来就来总结一下关于隐马尔科夫模型的定义。

3.1 定义隐马尔科夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。

由隐马尔科夫链生成的状态随机序列称为状态序列(state sequence);每个状态生成一个观测,而由此产生的随机序列,称为观测序列(observation sequence)。

序列的每一个位置可以认为是一个时刻。

隐马尔科夫模型可以由初始概率分布、状态转移概率分布和观测概率分布确定。

隐马尔科夫模型的形式定义如下:设Q是所有可能的状态集合(N个状态),V是所有可能的观测的集合(M个观测)。

I是状态序列(长度T),O是对应的观测序列(长度T)。

A 是状态转移矩阵A =[a ij ]N×N ,其中a ij =P(i t+1=q j |i t =q i ),i =1,2,…,N;j =1,2,…,N 是在时刻t 处于q i 状态而在下一时刻t+1时刻处于q j 的概率。

B 是观测概率矩阵B =[b j (k)]N×M ,其中b j (k )=P(o t =v k |i t =q j ),k =1,2,…,M;j =1,2,…,N 是在时刻t 状态为q j 的条件下生成观测v k 的概率。

π是初始状态概率向量:π=(πi ),其中πi =P (i 1=q i ),i =1,2,…,N 是时刻t=1时处于状态q i 的概率。

隐马尔科夫模型就是有初始状态π、状态转移概率矩阵A 和观测概率矩阵B 决定的。

前两者确定了隐马尔科夫链,生成不可观测的状态序列,后者确定了如何从状态生成观测序列。

使用λ=(A,B,π)表示隐马尔科夫模型的参数。

例如2.4中提到的例子里面,状态集合Q 为四个盒子Boxes ,共4个状态;观测集合即为Colors ,共2个观测值;状态转移矩阵A 可由表2所得A=01000.400.6000.400.6000.50.5⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦;观测概率矩阵B 可有表1所得B=;初始状态π=。

3.2 3个基本问题1、概率计算问题给定模型λ=(A,B,π)和观测序列O =(o 1,o 2,…,o T ),计算在模型λ下观测序列O 出现的概率P(O|λ)。

2、学习问题已知观测序列O =(o 1,o 2,…,o T ),估计模型参数λ=(A,B,π)使得在该模型的参数下观测序列概率P(O|λ)最大。

即用极大似然估计的方法估计参数。

3、预测问题已知模型参数λ=(A,B,π)和观测序列O =(o 1,o 2,…,o T ),求在给定观测序列的情况下条件概率P(I|O)最大的状态序列I =(i 1,i 2,…,i T ),即给定观测序列,求最有可能对应的状态序列。

4、 概率计算问题我们首要的事情就是要解决概率计算的问题。

4.1 直接计算法此方法比较的简单,可以由下面的公式直接求得。

P (O |λ)=∑P(O,I|λ)I =∑P (O |I,λ)P (I |λ)I其中P (O |I,λ)=b i 1(o 1)b i 2(o 2)…b i T (o T )、P (I |λ)=πi 1a i 1i 2a i 2i 3…a i T−1i T 所以最终上式为: 0.50.50.30.70.60.40.80.2⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦()0.250.250.250.25TP (O |λ)=∑πi 1a i 1i 2b i 1(o 1)a i 2i 3b i 2(o 2)…a i T−1i T b i T (o T )i 1,i 2,…,i T但是此公式计算量大,因为I 的状态共有N 中,然后排列成长度为T 的序列,排法共有N T ,再加上式子之前的取和运算符,时间复杂度为O(TN T ),所以这种算法不可行。

4.2 前向算法这个算法将时刻t 的状态保存下来,然后利用递推的原理计算出地t+1时刻的状态,既而求出时刻T 的状态。

前向概率的定义:给定隐马尔科夫模型参数λ,定义到时刻t 部分观测序列o 1,o 2,…,o t 且状态为q i 的概率为前向概率,记作:αt (i )=P (o 1,o 2,…,o t ,i t =q i |λ)由上式可得,t+1时刻的前向概率为:αt+1(i )=[∑αt (j )a ji Nj=1]b i (o t+1)其中中括号里面表示的是时刻t 部分观测序列o 1,o 2,…,o t 且状态为q j 而时刻t+1时状态为q i 的联合概率,而乘以观测概率得到前向概率。

相关主题