隐马尔科夫模型(Hidden Markov Models)之理解篇和证明篇

Hidden Markov Models

一:介绍(Introduction)

         我们通常都习惯寻找一个事物在一段时间里的变化模式(规律),这些模式发生在很多领域,比如计算机中的指令序列,句子中的词语顺序和口语单词的因素修咧等等,事实上任何领域中的一系列事件都有可能产生有用的模式。

        考虑一个简单的例子,有人试图通过一片海藻推断天气——民间传说告诉我们,湿透的海藻意味着潮湿阴雨(雨天),而干燥的海藻则意味着阳光灿烂(晴天)。如果它处于一个中间状态(有湿气),我们就无法确定天气如何。然而,天气的状态并没有受限于海藻的状态,所以我们可以在观察的基础上预测天气是雨天或晴天的可能性。另一个有用的线索是前一天的天气状态(或者,至少是它的可能状态)——通过综合昨天的天气及相应观察的海藻状态,我们有可能更好的预测今天的天气。

         这是本教程中我们将考虑的一个典型的系统类型。

         首先,我们将介绍产生概率模式的系统,如晴天及雨天间的天气波动。

         然后,我们将会看到这样一个系统,我们希望预测的状态并不是观察到的——其底层系统是隐藏的。在上面的例子中,观察到的序列将是海藻,而隐藏的系统将是实际的天气。

        最后,我们会利用已经建立的模型解决一些实际的问题,对于上述例子,我们想知道:

                1.给出一个星期每天的海藻观察状态,之后的天气将会是什么?

                2.给出一个海藻的观察状态序列,预测一下此时是冬季还是夏季?直观地,如果一段时间内海藻都是干燥的,那么这段时间很可能是夏季,反之,如果,一段时间内海藻都是潮湿的,那么这段时间可能是冬季。

二、生成模式(Generating Patterns)

1、确定模式(Deterministic Patterns)

           考虑一套交通信号灯,灯的颜色变化序列依次是 红色——红色/黄色——绿色——黄色——红色,这个序列可以作为一个状态机器,交通信号灯的不同状态都紧跟着上一个状态。


2、非确定性模式(Non-deterministic patterns)

          为了使天气那个例子更符合实际,加入第三个状态——多云。与交通信号灯例子不同,我们并不期望这三个天气状态之间的变化是确定性的,但是我们依然希望对这个系统建模以便生成一个天气变化模式(规律)。

          一个做法是假设模型的当前状态仅仅依赖于前面的几个状态,这被称为 马尔科夫假设,他极大地简化了问题。显然。它可能是一种粗糙的假设,并且因此可能将一些非常重要的信息丢失。

           当考虑天气问题时,马尔科夫假设假定今天的天气只能通过过去几天已知的天气情况进行预测---而对于其他因素,譬如风力、气压等没有考虑。在这个例子及其他相似的例子中,这样的假设显然不现实。然而,由于这样经过简化的系统可以用来分析,我们常常接受这样的假设,虽然它产生的某些信息不完全正确。

           

          一个马尔科夫过程是状态间的转移仅依赖于前n个状态的过程。这个过程被称为n阶马尔科夫模型,其中n是影响下一个状态选择的前 n个状态。最简单的马尔科夫过程是一阶模型,它的状态选择仅与前一个状态有关。这里要注意它与确定性系统并不相同,因为下一个状态的选择由相应的概率决定,并不是确定性的。

         下图是天气例子中状态间所有可能的一阶状态转移情况:


        对于有M个状态的一阶马尔科夫模型,共有M^2个状态转移,因为任何一个状态都有可能是所有状态的下一个转移状态。每一个状态都有一个概率值,称为状态转移概率——即从一个状态转移到另一个状态的概率。所有的M^2个概率可以用一个状态转移矩阵表示。注意这些概率并不随时间变化而不同——这是一个非常重要(但常常不符合实际)的假设。

      下面的状态转移矩阵显示的是天气例子中可能的状态转移概率:


         也就是说,如果昨天是晴天,那么今天是晴天的概率为0.5,是多云的概率为0.375。注意,每一行的概率之和为1。

         要初始化这样一个系统,我们需要确定起始日天气(或可能的)情况,定义其中初始概率向量,称为pi向量:



现在我们定义一个一阶马尔科夫过程如下:

状态:三个状态——晴天、多云、雨天

pi向量:定义系统初始化时每一个状态的概率。

状态转移矩阵:给定前一天天气情况下的当前天气概率。

任何一个可以用这种方式描述的系统都是一个马尔科夫过程。

3、总结

       我们尝试识别时间变化中的模式,并且为了达到这个目的,我们试图对这个过程建模以便产生这样的模式。我们使用了离散时间点、离散状态以及做了马尔科夫假设。在采用了这些假设之后,系统产生了这个被描述为马尔科夫过程的模式,它包含了一个pi向量(初始概率)和一个状态转移矩阵。关于假设,重要的一点是状态转移矩阵。关于假设,重要的一点是状态转移矩阵并不随时间的改变而改变——这个矩阵在整个系统的生命周期中是固定不变的。

三、隐藏模式(Hidden Patterns)

1、马尔科夫过程的局限性

       在某些情况下,我们希望找到的模式用马尔科夫过程描述还显得不充分。回顾一下天气那个例子,一个隐士也许不能够直接获取到天气的观察情况,但是他有一些水藻。民间传说告诉我们水藻的状态与天气状态有一定的概率关系——天气和水藻的状态是紧密相关的。在这个例子中我们有两组状态,观察的状态(水藻的状态)和隐藏的状态(天气的状态)。我们希望为隐士设计一种算法,在不能够直接观察天气的情况下,通过水藻和马尔科夫假设来观测天气。

       一个更实际的问题是语音识别,我们听到的声音是来自于声带、喉咙大小、舌头位置以及其他一些东西的组合结果。所有这些因素相互作用产生一个单词的声音,一套语音识别系统检测的声音就是来自于个人发音时身体内部物理变化所引起的不断改变的声音。

       一个语音识别装置工作的原理是将内部的语音产生看作是隐藏的状态,而将声音结果作为一系列观察的状态,这些由语音过程生成并且最好的近似了实际(隐藏)的状态。在这两个例子中,需要着重指出的是。隐藏状态的数目与观察状态的数目可以是不同的。一个包含三个状态的天气系统(晴天、多云、雨天)中,可以观察到4个等级的海藻湿润情况(干燥、稍干、潮湿、湿润)。纯粹的语音可以有80个音素描述,而身体的发声系统会产生出不同数目的声音,或者比80多,或者比80少。

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

2、隐马尔科夫模型(Hidden Markov Models)

         下图显示的天气例子中的隐藏状态和观察状态。假设隐藏状态(实际的天气)由一个简单的一阶马尔科夫过程描述,那么它们之间都相互连接。


       隐藏状态和观察状态之间的连接表示:在给定的马尔科夫过程中,一个特定的隐藏状态生成特定的观察状态的概率。这很清晰的表示了进入一个观察状态的所有概率之和1,在上面这个例子中就是

      除了定义了马尔科夫过程的概率关系,我们还有另一个矩阵,定义了马尔科夫过程的概率关系,我们还有另一个矩阵,定义为混淆矩阵(Confusion Matrix),它包含了给定一个隐藏状态后得到的观察状态的概率。对于天气例子,混淆矩阵是:


注意矩阵的每一行之和是1。

3、总结(Summary)

      我们已经看到在一些过程中一个观察序列与一个底层马尔科夫过程是概率相关的。在这些例子中,观察状态的数目可以和隐藏状态的数码不同。

我们使用一个隐马尔科夫模型(HMM)对这些例子建模。这个模型包含两组状态集合和三组概率集合:

  • 隐藏状态:一个系统的(真实)状态,可以由一个马尔科夫过程进行描述(例如,天气)。
  • 观察状态:在这个过程中"可视"的状态(例如,海藻的湿度)。
  • pi向量:包含了(隐)模型在时间t=1时一个特殊的隐藏状态的概率(初始概率)。
  • 状态转移矩阵:包含了一个隐藏状态到另一个隐藏状态的概率。
  • 混淆矩阵:包含了给定隐马尔科夫模型的某一个特殊的隐藏状态,观察到的某个观察状态的概率。

因此一个隐马尔科夫模型是一个标准的马尔科夫过程中引入一组观察状态,以及其与隐藏状态间的概率关系。

四:隐马尔科夫模型

2、应用(Uses associated with HMMs)

一旦一个系统可以作为HMM被描述,就可以用来解决三个基本问题。

  1. 给定HMM,求一个观察序列的概率(评估)。
  2. 搜索最有可能生成一个观察序列的隐藏序列状态(解码)。
  3. 给定观察序列生成一个HMM(学习)。
a)评估(Evaluation)考虑这样的问题,我们有一些描述不同系统的隐马尔科夫模型(也就是一些(pi,A,B)三元组的集合)及一个观察序列。我们想知道哪一个HMM最有可能产生了这个给定的观察系列。我们想知道哪一个HMM最有可能产生这个给定的观察序列。例如,对于海藻来说,我们也许会有一个"夏季"模型和一个"冬季"模型,因为不同季节之间的情况是不同的——我们也许想根据海湿度的观察序列来确定当前的季节。

我们使用前向算法(forward algorithm)来计算给定的隐马尔科夫模型后的一个观察序列的概率,并因此选择最合适的隐马尔科夫模型(HMM)。

在语音识别中这种类型的问题发生在当一大堆数目的马尔科夫模型被使用,并且每一个模型都对一个特殊的单词进行建模时,一个观察序列从一个发音单词中形成,并且通过寻找对于此观察序列最有可能的隐马尔科夫模型(HMM)识别这个单词。

--------------------------------------------------------------------------------------------------------------------

五、前向算法(Forward Algorithm)

计算观察序列的概率(Finding the probability of an observed sequence)

1、穷举搜索(Exhaustive search for solution)

给定隐马尔科夫模型,也就是在模型参数(pi,A,B)已知的情况下,我们想找到观察序列的概率。还是考虑天气这个例子,我们有一个用来描述天气及与它密切相关的海藻湿度状态的隐马尔科夫模型(HMM),另外我们还有一个海藻的湿度状态观察序列。假设连续3天海藻湿度的观察结果是(干燥、湿润、湿透)——而这三天每一天都可能是晴天、多云或者下雨,对于观察序列以及隐藏的状态,可以将其视为网络:


可以看出,一种计算观察序列概率的方法是找到每一个可能的隐藏状态,并且将这些隐藏状态下的观察序列的概率。我们首先定义局部概率(partial probability),它是到达网络中的某个中间状态时的概率。然后,我们将介绍如何在t=1和t=n(>1)时计算这些局部概率。

考虑下面这个网络,它显示的是天气状态及对于观察序列干燥、湿润及湿透的一阶状态转移情况:


我们可以将计算到达网络中某个中间状态的概率作为所有到达这个状态的可能路径的概率求和问题。

例如,t=2时位于"多云"状态的局部概率通过如下路径计算得出:


我们定义t时刻位于状态j的局部概率为

———————————————————————————————————————————————

定义:

观察状态,隐藏状态

转移矩阵,混淆矩阵

观察的时间序列输出序列:

,其中

HMM解决的问题一:

产生这个序列的的概率:


是多少。

第一种方法:穷举法


上面的网络就表示了所有可能出现的隐藏时间状态序列,即

,

其中

,,

每一个时间点t处都有种可能性的隐藏状态,则会有种可能的隐藏时间序列状态。时间复杂度为


第二种方法:前向(后向算法)

定义一下变量:


代表所有在t时刻隐藏状态是的概率和。

所以


时间复杂度显然为:。其中

————————————————————————————————————————————————

HMM的解决的第二个问题:



  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值