HMM学习笔记1

HMM学习笔记1

周文铠

最近在看HMM模型,先看了理论基础的东西,写了总结如下,大体就是把国内一些书上的概述和HMM学习范例结合在一起,自己以后看起来方便点。 


         众所周知,定义一个一阶马尔科夫过程,可以由三个量来描述:

1)状态:状态个数(N)、状态集();

2)π向量:系统初始化状态向量;

3)状态转移矩阵(A):表示前一个状态已知的情况下下一个状态的发生概率。

         在某些情况下,马尔科夫状态并不能满足模式描述的要求。典型的例子如语音识别,我们听到的声音是来自于声带、喉咙大小、舌头位置以及其他一些东西的组合结果。所有这些因素相互作用产生一个单词的声音,一套语音识别系统检测的声音就是来自于个人发音时身体内部物理变化所引起的不断改变的声音。这时我们定义两类状态:观察状态和隐藏状态。语音识别装置工作的原理是将内部的语音产出看作是隐藏的状态,而将声音结果作为一系列观察的状态,这些由语音过程生成并且最好的近似了实际(隐藏)的状态。

在这种情况下,观察到的状态序列与隐藏过程有一定的概率关系。我们使用隐马尔科夫模型(HMM)对这样的过程建模,这个模型包含了一个底层隐藏的随时间改变的马尔科夫过程,以及一个与隐藏状态某种程度相关的可观察到的状态集合。

通常,定义一个HMM状态 建模包含两组状态集合和三组概率集合:

1)观察状态集:M(可观察到的符号数)、符号集V={ }、观察序列O={ };

2)隐藏状态集:状态个数(N)、状态集

3)隐藏状态转移概率分布(矩阵):A=( );

4)观察符号概率分布(混淆矩阵):B=( )给定了HMM某一个隐藏状态下,观察到某个符号的概率;

5)π向量:Π=( )系统初始化状态向量。

一旦一个系统可以作为HMM被描述,就可以用来解决三个基本问题。其中前两个是模式识别问题:给定HMM求一个观察序列的概率(评估);搜索最有可能生成一个观察序列的隐藏状态序列(解码)。第三个问题是给定观察序列生成一个HMM(学习)。

1、评估:

已知一个特定的观察序列O和一些HMM模型( 的集合),求,最有可能产生该观察序列的HMM模型。即求每个HMM模型产生此观察序列的概率 ,取最大值。

方法:

穷举搜索:

找到每一个可能的隐藏状态,并且将这些隐藏状态下的观察序列概率相加。用这种方式计算观察序列概率极为昂贵,特别对于大的模型或较长的序列,因此我们可以利用这些概率的时间不变性来减少问题的复杂度。

前向算法:

给定一个隐马尔科夫模型(HMM),我们将考虑递归地计算一个观察序列的概率。我们首先定义局部概率а,它是到达网格中的某个中间状态时的概率。

第一步:计算t=1时刻所有状态的局部概率,为初始概率乘以观察概率分布

第二步:计算t=2,3,…,T时每个状态的局部概率,根据前一时刻的状态不变性,进行迭代计算:

=P(观察状态|隐藏状态j)*P(t时刻所有指向j状态的路径)

第三步:对于给定HMM,观察序列的概率等于T时刻所有局部概率之和:

使用前向算法来计算给定隐马尔科夫模型(HMM)后的一个观察序列的概率。它在计算中利用递归避免对网格所有路径进行穷举计算。给定这种算法,可以直接用来确定对于已知的一个观察序列,在一些隐马尔科夫模型(HMMs)中哪一个HMM最好的描述了它——先用前向算法评估每一个(HMM),再选取其中概率最高的一个。

总结:在语音识别中,我们可以通过计算比较 ,从多个模型中选择出与观察序列匹配的最好的那个模型。

2、解码:

已知一个特定的HMM以及一个相应的观察序列,找到生成此观察序列最可能的隐藏状态序列,即找出从初始时刻到结束时刻的最佳状态转移路径。

方法:

穷举搜索:

可以通过列出所有可能的隐藏状态序列并且计算对于每个组合相应的观察序列的概率来找到最可能的隐藏状态序列。最可能的隐藏状态序列是使下面这个概率最大的组合:

P(观察序列|隐藏状态的组合)

这种方法是可行的,但是通过穷举计算每一个组合的概率找到最可能的序列是极为昂贵的。与前向算法类似,我们可以利用这些概率的时间不变性来降低计算复杂度。

Viterbi算法:

我们首先定义局部概率δ,它是到达网格中的某个特殊的中间状态时的概率。对于网格中的每一个中间及终止状态,都有一个到达该状态的最可能路径。我们称这些路径为局部最佳路径( 。其中每个局部最佳路径都有一个相关联的概率,即局部概率与前向算法中的局部概率不同,是到达该状态(最可能)的一条路径的概率,而不是所有路径概率的总和。

因而 是t时刻到达状态i的所有序列概率中最大的概率,而局部最佳路径是得到此最大概率的隐藏状态序列。对于每一个可能的i和t值来说,这一类概率(及局部路径)均存在。特别地,在t =T时每一个状态都有一个局部概率和一个局部最佳路径。这样我们就可以通过选择此时刻包含最大局部概率的状态及其相应的局部最佳路径来确定全局最佳路径(最佳隐藏状态序列)。

第一步:通过隐藏状态的初始概率和相应的观察概率之积计算t=1时刻的局部概率。

  1≤ ≤N

第二步:回顾一下马尔科夫假设:给定一个状态序列,一个状态发生的概率只依赖于前n个状态。特别地,在一阶马尔可夫假设下,当前状态在一个状态序列后发生的概率只取决于之前的一个状态(迭代计算)

在每一个中间及终止状态我们都知道了局部概率 。然而我们的目标是在给定一个观察序列的情况下寻找网格中最可能的隐藏状态序列。因此,我们需要一些方法来记住网格中的局部最佳路径。回顾一下我们是如何计算局部概率的,计算t时刻的δ时,我们仅仅需要知道t-1时刻的δ。在这个局部概率计算之后,就有可能记录前一时刻哪个状态生成了 。也就是说,在t-1时刻系统必须处于某个状态,该状态导致了系统在t时刻到达状态i是最优的。这种记录(记忆)是通过对每一个状态赋予一个反向指针完成的,这个指针指向最优的引发当前状态的前一时刻的某个状态。形式上,我们可以写成如下的公式:

其中arg max运算符是用来计算使括号中表达式的值最大的索引j的。

这样就确定了到达下一个状态的最可能路径,并对如何到达下一个状态做了记录。具体来说首先通过考察所有的转移概率与上一步获得的最大的局部概率之积,然后记录下其中最大的一个,同时也包含了上一步触发此概率的状态。

第三步:确定系统完成时(t=T)最可能的隐藏状态:


第四步:通过回溯确定最终路径:


3、学习:

根据观察序列生成隐马尔科夫模型。在以上两个问题当中,我们都是已知一个固定的HMM( )来进行计算,在一些情况中,如一个庞大的语音处理数据库,其隐层的语音可能由一个马尔可夫过程基于已知的音素建模的,而其可以观察的部分可能由可识别的状态(可能通过一些矢量数据表示)建模的,但是没有直接的方式来获取隐马尔科夫模型(HMM)参数。这时就需要通过学习让系统自己寻找最优参数。通常用Baum-Waich算法来实现这一目的。

定义两个相关的概率模型:

表示给定观察序列O和模型 的情况下,t时刻处于状态i,t+1时刻处于状态j的概率,归一化表示:

表示给定观察序列O和模型 的情况下,t时刻处于状态i的概率,归一化表示:

表示观察序列中,从状态i出发的状态转移次数的期望。

表示观察序列中,从状态i到j的状态转移次数的期望。

Baum-Waich算法的基本思想就是,先任意指定参数模型 ,通过特定的参数重估公式根据现有的模型 得到新的参数 ,保证 ,然后将新的参数 重复上述过程,直到参数模型处于收敛状态,即得到最大似然模型。

重构公式的推导过程忽略,最后得到的结果是:

在限制条件:

下:

总结来说重估的步骤就是EM算法的一种特殊情况,按照E步M步计算即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章