如图HMM模型,请列出所有可能输出序列的状态转移序列,计算由每一个状态转移序列输出观察序列V 的概率,计算最有可能输出观察序列V 的状态转移序列

版权声明:本文为博主原创文章,未经博主允许不得转载。如果你非要转载,麻烦加上我的原网址,谢谢。http://blog.csdn.net/qinglingLS https://blog.csdn.net/qinglingLS/article/details/89365113

如图HMM模型,初始概率:在这里插入图片描述
在这里插入图片描述
1,请列出所有可能输出序列在这里插入图片描述的状态转移序列。
2,分别计算由每一个状态转移序列输出观察序列V 的概率
3,计算最有可能输出观察序列V 的状态转移序列

解析:

不合理之处还请批评指正,小弟谢过^0<

第一题:
首先,V=v2 v4 v4 v1 表示一个看到的现象,那么这个现象是由于什么原因导致的呢?
我们的任务就是去找这背后的“幕后主使”。
从图中可以知道,w2可以导致v2(也就是B22),w1也可以导致v2(也就是b12),w3也可以导致v2(也就是b32),那么到底谁才是v2现象的幕后主使者呢?
在这里插入图片描述
这时候就需要看状态输出概率矩阵
也就是说,从v2的现象开始,转移到v4的现象,
这里就可能是下面几种列举:
w1->w2 且表现为b22
w1->w3 且表现为b32
w2->w3 且表现为b32
w2->w2 且表现为b22
w3->w3 且表现为b32
那么现在已经是在v4的表现的情况下,又出现了V4,那么就对上面的几种情况进一步分析,
w1->w2 且表现为b24
w1->w3 且表现为b34
w2->w3 且表现为b34
w2->w2 且表现为b24
w3->w3 且表现为b34
同理,对于在看到v4后又看到v1:
w1->w2 且表现为b21
w1->w3 且表现为b31
w2->w3 且表现为b31
w2->w2 且表现为b21
w3->w3 且表现为b31
所以有333*3种可能(也就是对w1,w2,w3排列数)……你以为是这样,但是其实不是这样。

下面是正确答案:

注意w3只有进,没有出,一旦到了w3状态,就再也不会跑到其他情况了,也就是说,
也就是说,从v2的现象开始,转移到v4的现象,
这里就可能是下面几种列举:
w1->w2 且表现为b22
w2->w2 且表现为b22
w1->w3 且表现为b32
w2->w3 且表现为b32
w3->w3 且表现为b32
但是
这里的前两种情况w1->w2 且表现为b22w2->w2 且表现为b22都还可以继续拓展,
但是

w1->w3 且表现为b32
w2->w3 且表现为b32
w3->w3 且表现为b32

已经失去了拓展空间,他们的幕后主使者已经确定为了w3,
从而总共只有:

w1->w2->w3->w3
w1->w2->w2->w3
w1->w2->w2->w2
w1->w3->w3->w3
w2->w2->w2->w2
w2->w2->w2->w3
w2->w2->w3->w3
w2->w3->w3->w3
w3->w3->w3->w3

9种情况,少于27种。
又由于
在这里插入图片描述
所以概率不为0的只有4种。

 w1->w2->w3->w3
    w1->w2->w2->w3
    w1->w2->w2->w2
    w1->w3->w3->w3

第二题:分别计算由每一个状态转移序列输出观察序列V 的概率
按照状态输出概率矩阵状态输出概率矩阵写就行:
p=p(observation|state)*p(state—>next_state)
注意这里有:
在这里插入图片描述
所以,p(w1)=1;
p(w2)=0,p(w3)=0;

w1->w2->w3->w3

observation=v2
next_state=w2
    state=w1
        p=p(v2|w1)*p(w1—>w2)=b12*a12=0.3*0.3=0.09
        triple=(0.09*p(w1)=1*0.03,w1->,0.09*p(w1)=1*0.09)
    state=w2
        p=p(v2|w2)*p(w2—>w2)=b22*a22=0.4*0.6=0.24
        triple=(0.24*p(w2)*0,w2->,0.24*p(w2)*0)
  
  //不可能,因为w3不能转移到w2状态
  //  state=w3
  //     p(v2|w3)*p(w3—>w2)……
  //       

P= Π1(派1)x b12 +(Π1(派1)x b12 x a12) * a12 x b24 + ((Π1(派1)x b12 x a12) * a12 x b24 )x a23 x b34 +(((Π1(派1)x b12 x a12) * a12 x b24 )x a23 x b34) xa33 x b31 =

表示从w1出发,这里初始概率为1,在w1下概率看到v2为b12,然后转移到w2,此时概率为a12,
在w2下看到v4概率b24,然后转移到w3,此时概率为a23,在w3下看到v4概率为b34,转移到w3,
此时转移概率为a33,在w3下看到v1概率为b31,从而可知上式。

下面的同理,
w1->w2->w2->w3
w1->w2->w2->w2
w1->w3->w3->w3

由每一个状态转移序列输出观察序列V 的概率和输出状态序列的概率是不一样的两个概念!


在这里插入图片描述
所以 p(w1->w2->w3->w3)=Π1*a12 x a23 x a33 =

第三题:
用维特比算法求解即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拓展知识:
在 HMM 中有三个典型问题:
  (一) 已知模型参数,计算某一给定可观察状态序列的概率
  
假设我们已经有一个特定的隐马尔科夫模型 λ 和一个可观察状态序列集。我们也许想知道在所有可能的隐藏状态序列下,给定的可观察状态序列的概率。当给定如下一个隐藏状态序列:
  在这里插入图片描述
  那么在 HMM 和这个隐藏状态序列的条件下,可观察状态序列的概率为:
   在这里插入图片描述
  而隐藏状态序列在 HMM 条件下的概率为:
  在这里插入图片描述
  因此,隐藏状态序列和可观察状态序列的联合概率为:
  在这里插入图片描述

那么所有可能的隐藏状态序列上,可观察状态序列的概率为:
  在这里插入图片描述

例如,我们也许有一个海藻的“Summer”模型和一个“Winter”模型,因为海藻在夏天和冬天的状态应该是不同的,我们希望根据一个可观察状态(海藻的潮湿与否)序列来判断现在是夏天还是冬天。
  我们可以使用前向算法来计算在某个特定的 HMM 下一个可观察状态序列的概率,然后据此找到最可能的模型。
  这种类型的应用通常出现在语音设别中,通常我们会使用很多 HMM,每一个针对一个特别的单词。一个可观察状态的序列是从一个可以听到的单词向前得到的,然后这个单词就可以通过找到满足这个可观察状态序列的最大概率的 HMM 来识别。
  下面介绍一下前向算法 (Forward Algorithm)
  如何计算一个可观察序列的概率?
  1. 穷举搜索
  给定一个 HMM,我们想计算出某个可观察序列的概率。考虑天气的例子,我们知道一个描述天气和海藻状态的 HMM,而且我们还有一个海藻状态的序列。假设这个状态中的某三天是(dry,damp,soggy),在这三天中的每一天,天气都可能是晴朗,多云或者下雨,我们可以用下图来描述观察序列和隐藏序列:
  在这里插入图片描述
  在这个图中的每一列表示天气的状态可能,并且每个状态都指向相邻的列的每个状态,每个状态转换在状态转移矩阵中都有一个概率。每一列的下面是当天的可观察的海藻的状态,在每种状态下出现这种可观察状态的概率是由混淆矩阵给出的。
  一个可能的计算可观察概率的方法是找到每一个可能的隐藏状态的序列,这里有3的三次方 = 27种,这个时候的可观察序列的概率就是 Pr(dry, damp, soggy | HMM)=Pr(dry, damp, soggy | sunny, sunny, sunny) + . . . . + Pr(dry, damp, soggy | rainy, rainy, rainy)。
  很显然,这种计算的效率非常低,尤其是当模型中的状态非常多或者序列很长的时候。事实上,我们可以利用概率不随时间变化这个假设来降低时间的开销。
  2. 使用递归来降低复杂度
  我们可以考虑给定 HMM 的情况下,递归的计算一个可观察序列的概率。我们可以首先定义一个部分概率,表示达到某个中间状态的概率。接下来我们将看到这些部分概率是如何 在time=1 和 time = n (n > 1) 的时候计算的。
  假设一个T时间段的可观察序列是:
  在这里插入图片描述
  1) 部分概率
  下面这张图表示了一个观察序列(dry,damp,soggy)的一阶转移
  在这里插入图片描述

我们可以通过计算到达某个状态的所有路径的概率和来计算到达某个中间状态的概率。比如说,t=2时刻,cloudy的概率用三条路径的概率之和来表示:
  在这里插入图片描述

我们用 αt(j) 来表示在 t 时刻是状态 j 的概率,αt(j)=Pr(观察状态 | 隐藏状态 j ) x Pr(t 时刻到达状态 j 的所有路径)。
  最后一个观察状态的部分概率就表示了整个序列最后达到某个状态的所有可能的路径的概率和,比如说在这个例子中,最后一列的部分状态是通过下列路径计算得到的:
   在这里插入图片描述
  因为最后一列的部分概率是所有可能的路径的概率和,所以就是这个观察序列在给定 HMM 下的概率了。
  2) 计算 t=1时候的部分概率
  当 t=1 的时候,没有路径到某个状态,所以这里是初始概率,Pr(状态 j | t=0) = π(状态 j ),这样我们就可以计算 t=1 时候的部分概率为:
  在这里插入图片描述
  因为在初始的时候,状态 j 的概率不仅和这个状态本身相关,还和观察状态有关,所以这里用到了混淆矩阵的值,k1 表示第一个观察状态,bjk1 表示隐藏状态是 j,但是观察成 k1 的概率。
  3) 计算 t>1 时候的部分概率
  还是看计算部分概率的公式是:αt(j) = Pr(观察状态 | 隐藏状态 j) x Pr(t 时刻到达状态 j 的所有路径)。 这个公式的左边是从混淆矩阵中已知的,我只需要计算右边部分,很显然右边是所有路径的和:
  在这里插入图片描述
  需要计算的路径数是和观察序列的长度的平方相关的,但是 t 时刻的部分概率已经计算过了之前的所有路径,所以在 t+1 时刻只需要根据 t 时刻的概率来计算就可以了:

这里简单解释下,bjk(t+1) 就是在 t+1 时刻的第 j 个隐藏状态被认为是当前的观察状态的概率,后面一部分是所有t时刻的隐藏状态到 t+1 时候的隐藏状态j的转移的概率的和。这样我们每一步的计算都可以利用上一步的结果,节省了很多时间。
  4) 公式推导
   在这里插入图片描述
   在这里插入图片描述

5) 降低计算复杂度
  我们可以比较穷举和递归算法的复杂度。假设有一个 HMM,其中有 n 个隐藏状态,我们有一个长度为 T 的观察序列。
  穷举算法的需要计算所有可能的隐藏序列:
   在这里插入图片描述
  需要计算:
  在这里插入图片描述

很显然穷举算法的时间开销是和 T 指数相关的,即 N的T次方,而如果采用递归算法,由于我们每一步都可以利用上一步的结果,所以是和 T 线性相关的,即复杂度是 N的平方*T。
  这里我们的目的是在某个给定的 HMM 下,计算出某个可观察序列的概率。我们通过先计算部分概率的方式递归的计算整个序列的所有路径的概率,大大节省了时间。在 t=1 的时候,使用了初始概率和混淆矩阵的概率,而在t时刻的概率则可以利用 t-1 时刻的结果。
  这样我们就可以用递归的方式来计算所有可能的路径的概率和,最后,所有的部分概率的计算公式为
  在这里插入图片描述
  使用天气的例子,计算 t=2 时刻的 cloudy 状态的概率方法如图:
  在这里插入图片描述
  我们使用前向算法在给定的一个 HMM 下计算某个可观察序列的概率。前向算法主要采用的是递归的思想,利用之前的计算结果。有了这个算法,我们就可以在一堆 HMM 中,找到一个最满足当前的可观察序列的模型(前向算法计算出来的概率最大)。

猜你喜欢

转载自blog.csdn.net/qinglingLS/article/details/89365113
今日推荐