1.隐马尔科夫模型介绍

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

                               隐马尔科夫模型

                                                                                     图1

        隐马尔可夫模型可以简单的表示为图1所示的模型。序列1是随机生成的不可观测的隐序列,也成为状态序列;中在每一个t时刻,隐序列的每个状态xn可以生成对应的状态yn,所有的yn组成了序列2,是我们可以实际观测到的序列,称为观测序列。

        设Q是所有可能的状态序列,V是所有可能的观测序列,表示形式如下:

                                              隐马尔科夫模型

        N就表示所有的状态数,M就表示所有的观测数。

        序列1可以表示为:I=(i1,i2,⋯,iT)隐马尔科夫模型,表示为长度为T的状态序列;序列2可以表示为隐马尔科夫模型,表示为状态序列对应的观测序列。

        对于时序的概念,肯定要有从一个时刻到下一时刻的改变,也就是状态转移;马尔可夫模型中只有隐状态的转移,状态集合为Q,一共有N个状态,所以可以将所有的状态转移情况表示为一个N×N的矩阵形式:

                                                        隐马尔科夫模型

其中

                                                    隐马尔科夫模型

        表示t时刻状态为qi,到t+1(下一时刻),状态为qj的概率。

        每一时刻的状态都会生成一个观测值,所以观测值是通过状态来确定的,而观测值之间没有必然的联系,那么我们就需要给出各个状态生成各个观测值的概率,状态有N个,观测值有M个,所有我们可以表示为一个N×M的矩阵:

                                                   隐马尔科夫模型

        bj(k)表示一个概率,表示状态qj生成观测值vk的概率。

        整个序列我们需要一个开始的状态,就医t1时刻的Q集合中所有状态出现的概率:

                                          隐马尔科夫模型

        到这里我们可以总结一下:通过初始的状态向量π和状态转移矩阵A,可以生成状态序列,也就是可以确定隐藏的马尔科夫链,又通过状态生成观测值的概率矩阵B生成对应的观测序列。所以我们可以确定隐马尔科夫模型的三要素:

                                                 隐马尔科夫模型

        λ表示隐马尔科夫模型的参数。

        隐马尔科夫模型是建立在两个基本假设之上的,就像贝叶斯模型是建立在条件相互独立之上的:

  1. 齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻t的状态值依赖于前一时刻的状态,与其他时刻的状态以及观测无关,也与时刻t无关。
  2. 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关

       隐马尔可夫模型可以用于标注,这时状态对应着标记,标注问题是给定观测的序列预测其对应的标记序列。

       隐马尔可夫模型有三个主要的问题:

  1. 概率计算:给定模型λ=(A,B,π)和观测序列O=(o1,o2,…,oT),计算次观测序列出现的概率。
  2. 学习问题:已知观测序列O=(o1,o2,…,oT),估计参数模型λ=(A,B,π),使得在该模型下观测序列概率P(O|λ)最大,即用极大似然估计的方法估计参数。
  3. 预测问题:也称解码(decoding)问题。已知模型λ=(A,B,π)和观测序列O=(o1,o2,…,oT),求对给定观测序列条件概率P(I|O)最大的状态序列I=( i1,i2,…,iT))。即给定观测序列,求最有可能的对应的状态序列。

2.概率计算算法

        首先我们计算直接计算的方法。这个思路很简单,我们列出所有可能的状态序列,也就是NT种组合,然后对每种可能计算其观测概率,然后将所有得到的观测概率相加就是最终的概率。

        其中每一种状态序列的概率为:

                                      隐马尔科夫模型

        表示为一系列的状态概率相乘的形式,然后我们看对应状态序列下其对应的观测序列的概率

                              隐马尔科夫模型

        然后两者同时出现的概率为:

                        隐马尔科夫模型

        式1只是一个状态序列对应的概率公式,我们把所有的P(O,I|λ)加起来就是我们最终得到的概率。

        明显直接计算的方法是计算量很大的,后面介绍的前向-后向算法就相对计算量少了好多。

        首先介绍前向算法:

        在已知的观测序列中,每个时刻的观测值都是确定的,假设时刻s的观测值是os,那么此时我们可以通过观测概率得到时刻s所有状态is转化为os的概率;那么此时的状态是怎么来的呢,就是通过上一个时刻s-1转化过来的。我们知道状态转移矩阵是一个N×N的方阵,那么就是说所有状态都可以转化为某个状态,某个状态也可以转化为其他的所有状态(尽管某些转化只是概率是0罢了),所以时刻s的某一状态是有s-1时刻的所有状态概率决定的(求和),而对于s时刻,我们需要求所有状态的概率,以便为求s+1时刻的所有状态做准备。所以说这是一个地推的过程,递推过程如下:

                              隐马尔科夫模型

        注意式2中,带t和t+1下标的是alpha,带ji下标的是状态转移矩阵中的状态转移概率a。看方括号中的内容,我们算的是状态i的概率,他用到的是上一时刻所有的状态的概率,所以我们需要在每一步的时候求出所有的状态的概率即 隐马尔科夫模型,N是状态的个数;后面要乘以观测概率,因为如果不乘的话,就单单是状态转移的概率,这是个递推的过程,所以我们需要在每一步上乘以观测概率。最终我们可以得到T时刻所有的状态的概率。

                             隐马尔科夫模型

        式3表示T时刻所有状态的概率之和,就是最终的概率。

        其实后向算法是将前向算法倒着算,下面直接给出算法步骤:

                       隐马尔科夫模型

        比较难理解的是第2步,如下图所示

                                 隐马尔科夫模型

                                           图1

        第2步中等式左边的是图1中左边的βt(i),等式右边的表示左右的βt+1(j)的和。所以对于每个时刻,参考前向算法,我们要计算每一时刻的βt1~βtN隐马尔科夫模型,知道计算到t=1时刻,然后就是步骤3相加得出最终的概率。

3.学习算法

学习算法可以分为监督学习算法和非监督学习算法(Baum-Welch)算法。监督学习方法比较容易理解,因为他直接是用频率之比代替概率,而Baum-Welch算法是用到了E-M算法,就相对比较抽象了。

先看监督学习算法。假设已给训练数据包含S个长度相同的观测序列和对应的状态序列{(O1,I1), (O2,I2),…, (Os,Is)},那么可以利用极大似然估计法来估计隐马尔可夫模型的擦护。方法如下:

        (1)转移概率aij的估计

设样本中时刻t处于状态i时刻t+1转移到状态j的频数为Aij,那么状态转移概率aij的估计是:

                                隐马尔科夫模型

       (2)观测概率bj(k)的估计

        设样本中状态j应观测为k的频数是Bjk,那么状态为j观测为k的概率b j(k)的估计是

                                隐马尔科夫模型

         (3)初始状态概率πi的估计为s个样本中初始转台为qi的频率

        这里用频率代替概率了,所以还是比较容易理解的。

        Baum-Welch算法是用到了E-M算法,我也没深入了解,所以想深入了解的可以自己查阅资料,或者看李航《统计学习方法》中的推理步骤。我只给出一个我自己的大概的了解:我们要选取初始值隐马尔科夫模型(E-M算法也是要有初始值的),然后通过每个参数的表达式,计算出新的值,得到一个中间的模型参数隐马尔科夫模型,然后再用这个中间的模型参数继续迭代计算,直到满足为止,下面给出迭代公式:

                             隐马尔科夫模型

                      隐马尔科夫模型

                      隐马尔科夫模型

4.预测算法

预测算法就是给我们模型参数和观测序列,让我们预测最优可能出现的状态序列。有两种算法:近似算法和维特比算法。

近似算法的想法是,在每个时刻t选择在该时刻最有可能出现的状态it,从而得到一个状态序列I=(i1, i2, …,it),将它作为预测的结果。当前概率的计算方式如下:

                                                    隐马尔科夫模型

怎么理解式3。αt(i)隐马尔科夫模型是前向概率,βt(i)隐马尔科夫模型是后向概率,为什么两者相乘呢?我的理解是,当前的状态是和前后状态都有关系的,因为要从前一个状态转移到当前状态,当前状态也是要转化为下一状态,在给定的观测序列下,当前状态的前后状态都是对其有限制的,所以要考虑其前向和后向概率。我们要计算当前时刻的最大概率,那就计算出所有状态的概率,然后挑出最大的那个即可:

                                                      隐马尔科夫模型

从而得到状态序列I=(i1, i2, …,it)。

近似算法的优点就是计算简单,其缺点是不能保证预测的序列状态整体是最有可能的状态序列,因为预测的状态序列可能有实际不发生的部分。事实上,上述方法得到的状态序列中有可能存在转移概率是0的相邻状态,即对某些i,j,aij=0时。尽管如此,近似算法仍然是有用的。

近似算法是从时间点来考虑的,而维特比算法是从整个路径层面来考虑的。

维特比算法是根据动态规划求概率最大的路径,如果最优路径在时刻t通过结点it,那么这一路径从结点it到终点iT的所有可能中必须是最优的,所谓的最优也就是到达终点的概率最大的。依据这一原理,我们只需要从时刻t=1开始,递推地计算在时刻t状态为i的各条部分路径的最大概率,纸质得到时刻t=T状态为i的各条路径的最大概率。时刻t=T的最大概率即为最优路径的概率P,最优路径的中街店iT也同事得到。只有为了找出最优路径各个节点,从中街店iT开始,由后向前逐步求得i(T-1),…,i1,得到最优路径I=(i1, i2, …,it)。

我们用:隐马尔科夫模型表示定义在时刻t状态为i的所有单个路径中概率最大值,其递推公式如下:

                             隐马尔科夫模型

定义概率最大的路径第t-1个结点的取值为:

                            隐马尔科夫模型

下面是算法的过程:

                      隐马尔科夫模型

              隐马尔科夫模型

        怎么理解这个算法呢?我们知道每一时刻,我们都要对所有状态计算一个生成该状态的对应的概率,这个状态是可能有上一时刻所有状态中任意一个状态转移过来的,我们在计算过程中需要做的就是:记录时刻t中,上一时刻所有状态转移到当前时刻状态为i中的最大概率最大的那个状态,及其对应的那个最大概率,作为当前状态i的概率。假设t-1有三个状态1,2,3,他们对应的概率是0.2,0.3,0.1,我们要求的是t时刻他们都转化为1的概率,他们转化为1的概率分别为0.2,0.1,0.5,所以

        1->1:P=0.2×0.2=0.04

        2->1:P=0.3×0.1=0.03

        3->1:P=0.1×0.5=0.05

        所以我们要记录隐马尔科夫模型,表示t时刻状态1的概率为0.05,我的上一状态是3。这样依次计算,直到T时刻,得到生成对应状态的最大概率,及其对应的上一时刻。由于上一时刻我们计算了所有状态的相对最大概率,及其上上时刻的对应状态,依次类推,就可以倒退得到整个路径上的状态了,就是我们的预测状态。

相关文章: