马尔科夫模型与隐马尔科夫模型

https://blog.csdn.net/maverick17/article/details/79574917

 

1.    马尔科夫模型

1.1马尔可夫过程

       马尔可夫过程(Markov process)是一类随机过程。它的原始模型马尔可夫链,由俄国数学家A.A.马尔可夫1907年提出。该过程具有如下特性:在已知目前状态(现在)的条件下,它未来的演变(将来)不依赖于它以往的演变 (过去 )例如森林中动物头数的变化构成——马尔可夫过程。在现实世界中,有很多过程都是马尔可夫过程,如液体中微粒所作的布朗运动、传染病受感染的人数、车站的候车人数等,都可视为马尔可夫过程。

在马尔可夫性的定义中,"现在"是指固定的时刻,但实际问题中常需把马尔可夫性中的现在这个时刻概念推广为停时(见随机过程)。例如考察从圆心出发的平面上的布朗运动,如果要研究首次到达圆周的时刻 τ以前的事件和以后的事件的条件独立性,这里τ为停时,并且认为τ现在。如果把现在推广为停时情形的现在,在已知现在的条件下,将来过去无关,这种特性就叫强马尔可夫性。具有这种性质的马尔可夫过程叫强马尔可夫过程。在相当一段时间内,不少人认为马尔可夫过程必然是强马尔可夫过程。首次提出对强马尔可夫性需要严格证明的是J.L.杜布。直到1956年,才有人找到马尔可夫过程不是强马尔可夫过程的例子。马尔可夫过程理论的进一步发展表明,强马尔可夫过程才是马尔可夫过程真正研究的对象。

一个马尔科夫过程就是指过程中的每个状态的转移只依赖于之前的 n个状态,这个过程被称为1 n阶的模型,其中 n是影响转移状态的数目。最简单的马尔科夫过程就是一阶过程,每一个状态的转移只依赖于其之前的那一个状态。

 

1.2马尔可夫链

因安德烈·马尔可夫(Andrey Markov18561922)得名,是数学中具有马尔可夫性质的离散时间随机过程。该过程中,在给定当前知识或信息的情况下,过去(即当前以前的历史状态)对于预测将来(即当前以后的未来状态)是无关的。这种性质叫做无后效性

       时间和状态都是离散的马尔可夫过程称为马尔可夫链,简记为Xn=X(n),n=0,1,2…

马尔可夫链是随机变量X1,X2,X3…的一个数列。这些变量的范围,即他们所有可能取值的集合,被称为状态空间,而Xn的值则是在时间n的状态。如果Xn + 1对于过去状态的条件概率分布仅是Xn的一个函数,则


这里为过程中的某个状态。上面这个恒等式可以被看作是马尔可夫性质

        马尔可夫1906年首先做出了这类过程。而将此一般化到可数无限状态空间是由柯尔莫果洛夫在1936年给出的。

        马尔可夫链的在很多应用中发挥了重要作用,例如,谷歌所使用的网页排序算法(PageRank)就是由马尔可夫链定义的

 

1.3马尔可夫模型

      马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的统计工具。到目前为止,它一直被认为是实现快速精确的语音识别系统的最成功的方法。

 

1.4实例——不确定的模式

       介绍一个可以随时间产生概率性模型的系统,天气在晴天或者雨天或者多云之间变动。系统状态之间转移的概率是不确定的。


       假设这个模型的每个状态都只依赖于之前的状态,这个假设被称为马尔科夫假设,这个假设可以大大的简化这个问题。显然,这个假设可能是一个非常糟糕的假设,导致很多重要的信息都丢失了。

下面这个图展示了天气这个例子中所有可能的一阶转移


注意:一个含有M个状态的一阶过程有M的平方个状态转移。每一个转移的概率叫做状态转移概率(state transition probability),就是从一个状态转移到另一个状态的概率。这所有的M的平方个概率可以用一个状态转移矩阵来表示。注意这里有一个假设,概率不随时间的变化而变化,这又是一个不现实但很重要的假设。

可知,上图的状态转移矩阵为:


矩阵的意思是,如果昨天是晴天,那么今天又50%的可能是晴天,37.5%的概率是阴天,12.5%的概率会下雨,很明显,每一行的和都是1。

为了初始化这样一个系统,我们还需要一个初始的概率向量:


这个向量表示第一天是晴天。因此,一阶马尔科夫过程定义了以下三个部分:

  • 状态:晴天、阴天和下雨
  • 初始向量:定义系统在时间为0的时候的状态的概率
  • 状态转移矩阵:每种天气转换的概率

所有的能被这样描述的系统都是一个马尔科夫过程。

1.5总结(Summary)

我们为了找到随时间变化的模式,就试图去建立一个可以产生模式的过程模型。我们使用了具体的时间步骤、状态、并且做了马尔科夫假设。有了这些假设,这个能产生模式系统就是一个马尔科夫过程。一个马尔科夫过程包括一个初始向量和一个状态转移矩阵。关于这个假设需要注意的一点是状态转移概率不随时间变化。

 

2.    隐马尔科夫模型

2.1    实例引入——隐含模式

在某些情况下马尔科夫过程不足以描述我们希望发现的模式。回到之前那个天气的例子,一个隐居的人可能不能直观的观察到天气的情况,但是有一些海藻。民间的传说告诉我们海藻的状态在某种概率上是和天气的情况相关的。在这种情况下我们有两个状态集合,一个可以观察到的状态集合(海藻的状态)和一个隐藏的状态(天气的状况)。我们希望能找到一个算法可以根据海藻的状况和马尔科夫假设来预测天气的状况。

其中,隐藏状态的数目和可以观察到的状态的数目可能是不一样的。在语音识别中,一个简单的发言也许只需要80个语素来描述,但是一个内部的发音机制可以产生不到80或者超过80种不同的声音。同理,在一个有三种状态的天气系统(sunny、cloudy、rainy)中,也许可以观察到四种潮湿程度的海藻(dry、dryish、damp、soggy)。在此情况下,可以观察到的状态序列和隐藏的状态序列是概率相关的。于是我们可以将这种类型的过程建模为一个隐藏的马尔科夫过程一个和这个马尔科夫过程概率相关的并且可以观察到的状态集合

下图显示了天气的例子中隐藏的状态和可以观察到的状态之间的关系。我们假设隐藏的状态是一个简单的一阶马尔科夫过程,并且他们两两之间都可以相互转换。


下图则明确的表示出模型的演化,其中绿色的圆圈表示隐藏状态,紫色圆圈表示可观察到状态,箭头表示状态之间的依存概率。一个 HMM 可用一个5元组 { N, M, π,A,B }表示,其中 N 表示隐藏状态的数量,我们要么知道确切的值,要么猜测该值,M 表示可观测状态的数量,可以通过训练集获得, π={πi}为初始状态概率,A={aij}为隐藏状态的转移矩阵 Pr(xt(i) | xt-1(j)),B={bik} 表示某个时刻因隐藏状态而可观察的状态的概率,即混淆矩阵,Pr(ot(i) | xt(j))。在状态转移矩阵和混淆矩阵中的每个概率都是时间无关的,即当系统演化时,这些矩阵并不随时间改变。对于一个 N 和 M 固的 HMM 来说,用λ={ π,A, B } 表示 HMM 参数。


隐藏的状态和可以观察到的状态之间有一种概率上的关系,也就是说某种隐藏状态H被认为是某个可以观察的状态O1是有概率的,假设为P(O1|H)。如果可以观察的状态有三种,那么很显然P(O1|H)+ P(O2|H)+ P(O3|H) =1。

这样,我们也可以得到一个另一个矩阵,称为混淆矩阵。这个矩阵的内容是某个隐藏的状态被分别观察成集中不同的可以观察的状态的概率,在天气的例子中,这个矩阵如下图:

注意到图中每一行的和为1,但是每一列的和不为1,这里我觉得可能是原文出错了,或者隐藏状态还有其他。

总结

我们已经看到有一些过程是和一个隐藏的马尔科夫过程概率相关的。在这种情况下,可以观察到的状态和隐藏的状态的数目可能是不一样的。我们可以把这种过程建模为隐马尔科夫模型(HMM)。这个模型包含两个状态集合和三个概率集合。

  • 隐藏的状态:状态变量,一个隐藏的马尔科夫过程
  • 可以观察到的状态:观测值
  • 初始状态概率(向量):模型在初始时刻各状态出现的概率
  • 状态转移概率(矩阵):模型在各个状态间转换的概率
  • 输出观测概率(混淆矩阵):模型根据当前状态获得各个观测值的概率

我们可以认为隐马尔科夫模型是在一个不可观察的马尔科夫过程上添加了一个可以观察到的状态集合,加上这个过程到这个集合的一些概率关系得到的。

2.2 隐马尔科夫模型

隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含未知参数的马尔可夫过程。它是结构最简单的动态贝叶斯网,这是一种著名的有向图模型,主要用于时序数据建模,在语音识别、自然语言处理等领域有广泛应用。

定义:隐马尔科夫模型可以用一个三元组来定义:

(1)   初始状态概率向量:通常记为,其中表示模型的初始状态为的概率。

(2)   状态转移概率矩阵:模型在各个状态间转换的概率,通常记为,其中

 ,表示在任意时刻t,状态为,下一时刻为状态为的概率

(3)   输出观测概率矩阵:模型根据当前状态获得各个观测值的概率,,其中

,表示在任意时刻t,若状态为,则观测值被获取的概率

值得注意的是,在状态转移矩阵中的每个概率都是时间无关的,也就是说我们假设这个概率是固定的,不随时间变化。

 

2.3 隐马尔科夫模型的三个基本问题

(1)   给定模型,如何有效计算产生观测序列的概率?换言之,如何评估模型与观测序列之间的匹配程度?

(2)   给定模型和观测序列,如何找到与此观测序列最匹配的状态序列?换言之,如何根据观测序列推断出隐藏的模型状态?

(3)   给定观测序列,如何调整模型参数使得该序列出现的概率最大?换言之,如何训练模型使其能最好地描述观测数据?

前两个问题模式识别的问题:1) 根据隐马尔科夫模型得到一个可观察状态序列的概率(评价);2) 找到一个隐藏状态的序列使得这个序列产生一个可观察状态序列的概率最大(解码)。第三个问题就是根据一个可以观察到的状态序列集产生一个隐马尔科夫模型(学习)。

上述为题在现实应用中非常重要。例如许多任务需根据以往的观测序列来推测当前时刻最有可能的观测值 ,这显然可转化为求取概率,即上述第一个问题。在语音识别等任务中,观测值为语音信号,隐藏的状态为文字,目标就是根据观测信号来推断最优可能的状态序列(即对应的文字),即上述第二个问题。在大多数现实应用中,人工指定的模型参数已变得越来越不可用,如何根据训练样本学得最优的模型参数,恰是上述第三个问题。

2.3.1评价

假设我们有很多隐马尔科夫模型(也就是说一个三元组的集合)描述不同的系统和一个可观察状态序列集。我们也许想知道哪一个隐马尔科夫模型最可能产生某个可观察状态序列。比如说,我们也许有一个海藻的“Summer”模型和一个“Winter”模型,因为海藻在夏天和冬天的状态应该是不同的,我们希望根据一个可观察状态(海藻的潮湿与否)序列来判断现在是夏天还是冬天。

我们可以使用前向算法来计算在某个特定的HMM下一个可观察序列的概率,然后据此找到最可能的模型。

这种类型的应用通常出现在语音设别中,通常我们会使用很多HMM,每一个针对一个特别的单词。一个可观察状态的序列是从一个可以听到的单词向前得到的,然后这个单词就可以通过找到满足这个可观察状态序列的最大概率的HMM来识别。

2.3.2 解码

根据可观察状态的序列找到一个最可能的隐藏状态序列。

和上面一个问题相似的并且更有趣的是根据可观察序列找到隐藏序列。在很多情况下,我们对隐藏状态更有兴趣,因为其包含了一些不能被直接观察到的有价值的信息。比如说在海藻和天气的例子中,一个隐居的人只能看到海藻的状态,但是他想知道天气的状态。这时候我们就可以使用Viterbi算法来根据可观察序列得到最优可能的隐藏状态的序列,当然前提是已经有一个HMM。

另一个广泛使用Viterbi算法的领域是自然语言处中标引词性。

句子中的单词是可以观察到的,词性是隐藏的状态。通过根据语句的上下文找到一句话中的单词序列的最有可能的隐藏状态序列,我们就可以得到一个单词的词性(可能性大)。这样我们就可以用这种信息来完成其他一些工作。

2.3.3 学习

从一个观察集中得到一个隐马尔科夫模型。

第三个问题也是最困难的问题,根据观察到的序列集来找到一个最有可能的HMM,也就是说确定一个最有可能的三元组(π,A,B)。当A,B矩阵都不是直观可测量(通过经验得到)的的时候,可以使用前向后向算法(Baum-Welch 算法)来解决这个问题。

总结

尽管做出了一些不太符合实际的假设,但是用三元组描述的HMMs在描述真实系统并进行分析的时候具有很大的价值,并且可以解决下面这些问题:

    1. 前向算法找到最有可能的隐马尔科夫模型
    2. Viterbi算法根据观察序列找到最有可能的隐藏序列
    3. 前向后向算法决定最有可能产生某个观察集的隐马尔科夫模型的
原文地址:https://www.cnblogs.com/fengff/p/10120960.html