您的位置:首页 > 其它

HMM——维比特算法

2015-09-19 19:39 363 查看
维比特算法(ViterbiAlgorithm)

【注】结合文章最后的例子更好理解。

寻找最可能的隐藏状态序列:

对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列。

1. 穷举搜索

使用下图来描述隐藏状态和观察状态之间的联系



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

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

对于上图,最有可能隐藏状态序列是下面这些概率中最大概率所对应的那个隐藏状态序列:Pr(dry,damp,soggy |sunny,sunny,sunny), Pr(dry,damp,soggy | sunny,sunny,cloudy), Pr(dry,damp,soggy| sunny,sunny,rainy), . . . . Pr(dry,damp,soggy | rainy,rainy,rainy)

这种方法可行,但是昂贵。利用这些概率的时间不变性来降低计算复杂度。

2. 使用递归降低复杂度

先定义局部概率δ,它是达到图中某个特殊的中间状态时的概率。这些局部概率与前向算法中所计算的局部概率不同,它们表示的是时刻t时到达某个状态最可能的路径的概率,而不是所有路径概率的总和。

2.1 局部概率δ’s和局部最佳途径

下图显示的是天气状态及对于观察序列干燥、湿润和湿透的一阶状态的转移情况:



对于网格中的每一个中间及终止状态,都有一个到达该状态的最可能的路径,称这些局部路径最佳路径(partial best paths)。其中每个局部最佳路径都有一个相关联的概率,即局部概率或δ。与前向算法中的局部概率不同,δ是达到该状态(最可能)的一条路径的概率。

δ(I,t)是t时刻到达状态i的所有序列概率中最大的概率。局部最佳路径就是得到此最大概率的隐藏状态序列。

在t=T时,每一个状态都有一个局部概率和一个局部最佳路径。这样我们就可以通过选择此时刻包含最大局部概率的状态及相应的局部最佳路径来确定全局最佳路径(最佳隐藏状态序列)。

2.2 计算t=1时刻的局部概率δ’s

t=1时到达某状态的最可能路径明显是不存在的,但是我们使用t=1时的所处状态的初始概率及相应的观察状态k1的观察概率计算局部概率δ,即



与前向算法类似,都是初始概率乘以相应的观察概率得出的。

2.3 计算t>1时刻的局部概率

利用t-1时刻的局部概率计算t时刻的局部概率。



计算t时刻到达状态X的最可能的路径,这条到达状态X的路径将通过t-1时刻的状态A,B或C中的某一个。

(状态序列),…,A,X

       (状态序列),…,B,X

或 (状态序列),…,C,X

路径末端是AX的最可能的路径将是到达A的最可能路径再紧跟X。相似地,这条路径的概率将是

Pr (到达状态A最可能的路径) *Pr (X | A) *Pr (观察状态 | X)

到达状态X的最可能的路径概率是:



第一项是t-1时刻的局部概率δ,第二项是状态转移概率以及第三项是观察概率。

在t时刻,观察状态是kt,到达隐藏状态i的最佳局部路径的概率是:



这里假设前一个状态的局部概率是已知的,同事利用了状态转移概率和相应的观察概率之积。然后在其中选择最大的概率就是局部概率了。

2.4 反向指针φ’s



在每个中间及终止状态我们都知道了局部概率,δ(i,t)。我们的目标是在给定状态序列的情况下,寻找网格中最可能的隐藏状态序列。因此需要一些方法记住网格中的局部最佳路径。

在t-1时刻,系统必须处于某种状态,该状态导致系统在t时刻达到最优,这种记录是通过对每一个状态赋予一个反向指针φ完成的,这个指针指向最优的引发当前状态的前一时刻的状态。



Argmax是用来计算使括号中的表达式的值最大的索引j的。

这个表达式是通过前一个时间步骤的局部概率δ’s和转移概率计算的,并不包括观察概率(与计算局部概率δ’s本身不同)。

维比特算法有一个非常有用的性质,就是对于观察序列的整个上下文进行了最好的解释。

维比特算法在确定最可能的终止状态前将考虑整个观察序列。然后通过φ指针回溯,以确定某个隐藏状态是否是最可能的隐藏状态序列的一员。这样就可以孤立序列中的噪音,而这些‘噪音’在实时数据中是很常见的。

维比特算法提供了一种很有效的计算方法来分析隐马尔可夫模型的观察序列,并捕获最可能的隐藏状态序列。利用递归减少计算量,利用整个序列的上下文来做判断,从而对包含‘噪音’的序列也能进行良好的分析。

维比特算法对于网格中每一个单元(cell)都计算一个局部概率,同时包括一个反向指针用来只是最可能到达该单元的路径。当完成整个计算过程后,首先在终止时刻找到最可能的状态,然后通过反向指针回溯到t=1时刻,这样回溯路径上的状态序列就是最可能的隐藏状态序列了。

维比特算法的定义:

1. 维比特算法的形式化定义

对于每一个i=1….n,令



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

对于t=2……T,和i=1……n,令





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

令:



这样就确定了系统完成时(t=T)最可能的隐藏状态

对于t=T-1…..1,令:



这样就可以按最可能的状态路径在整个网格中回溯。回溯完成时,对于观察序列来说,序列i1…..iT就是生成此观察序列的最可能的隐藏状态序列。

2. 计算单独的δ’s和φ’s



与前向算法的图很相似。唯一不同的是前向算法中计算局部概率δ’s时的求和符号(∑),在维比特算法中计算局部概率δ’s时被替换成max——这一个重要的不同也说明了在维比特算法中我们选择的是到达当前状态的最可能的路径,而不是总的概率,维比特算法中维护了一个反向指针,记录到达当前状态的最佳路径。即在计算φ’s时通过argmax获得。

对于一个特定的隐马尔可夫模型,维比特算法被用来寻找生成一个观察序列的最可能的隐藏状态序列。维比特算法对于每一个状态(t>1)都保存了一个反向指针(φ),并在每一个状态中存储了一个局部概率(δ)。

局部概率δ是由反向指针指示的路径到达某个状态的概率。维比特算法重点不在于能够对于某个给定的时间点选择最可能的隐藏状态,而是基于全局序列做决策。因此,如果在观察序列中有一件“非同寻常”的时间发生,对于维比特算法的结果影响不大。

通过实例来理解维比特算法:

寻找最可能的隐藏状态序列(findthe most probable sequence of hidden States)

假设连续观察3天的海藻湿度为{Dry,Damp,Soggy},求这三天最可能的天气情况,天气有三类(Sunny,Cloudy,Rainy)而且海藻湿度与天气有一定的关系。

已知:

1. 隐藏状态序列:Sunny,Cloudy,Rainy

海藻的湿度有:{Dry,Dryish,Damp,Soggy}

2. 观察状态序列{Dry,Damp,Soggy}

3. 初始状态序列:Sunny(0.63),Cloudy(0.17),Rainy(0.20)

4.状态转移矩阵

Sunny
Cloudy
Rainy
Sunny
0.5
0.375
0.125
Cloudy
0.25
0.125
0.625
Rainy
0.25
0.375
0.375
Cloudy(昨天)→Sunny(今天)的概率是0.25

Sunny(昨天)→Rainy(今天)的概率是0.125

5. 混淆矩阵(海藻的湿度和天气的相关性)

Dry
Dryish
Damp
Soggy
Sunny
0.6
0.2
0.15
0.05
Cloudy
0.25
0.25
0.25
0.25
Rainy
0.05
0.10
0.35
0.50
由HMM可知,Day2的天气仅取决于Day1;Day3的天气只取决于Day2的天气。

Day1由于是初始状态,且水藻状态为Dry,我们分别求

P(Day1-Sunny)=0.63*0.6=0.378;

P(Day1-Cloudy)=0.17*0.25=0.0425;

P(Day1-Rain)=0.20*0.05=0.01;

Choose max{ P(Day1-Sunny) ,P(Day1-Cloudy),P(Day1-Rainy)}

得到P(Day1 -Sunny)最大,得出第一天Sunny的概率最大。

Day2 的天气取决于Day1的天气状况,同时也受Day2观察的海藻情况影响

P(Day2-Sunny)= max{ P(Day1-Sunny)*0.5,P(Day1-Cloudy)*0.25, P(Day1-Rainy)*0.25}*0.15=

Max{0.189 0.010625 0.0025}*0.15=0.02835;

P(Day2-Cloudy)=max{P(Day1-Sunny)*0.375,P(Day1-Cloudy)*0.125,P(Day1-Rainy)*0.375}*0.25=max{0.14175 0.0053125 0.00375}*0.25=0.0354375;

P(Day2-Rainy)= max{ P(Day1-Sunny)*0.125, P(Day1-Cloudy)*0.625, P(Day1-Rainy)*0.375} *0.35

=max{0.04725 0.0265625 0.00375}*0.35=0.0165375;

max{ P(Day2-Sunny) , P(Day2-Cloudy),P(Day2-Rainy)}

得到P(Day2-cloudy)最大,得出第2天Rainy的概率最大。

Day3的天气又取决于Day2的天气情况,同时也受Day3观察的海藻情况的影响。

P(Day3-Sunny)= max{ P(Day2-Sunny)*0.5,P(Day2-Cloudy)*0.25, P(Day2-Rainy)*0.25}*0.05;

P(Day3-Cloudy)= max{ P(Day2-Sunny)*0.375, P(Day2-Cloudy)*0.125, P(Day2-Rainy)*0.625}*0.25;

P(Day3-Rainy)= max{P(Day2-Sunny)*0.125, P(Day2-Cloudy)*0.625, P(Day2-Rainy)*0.375} *0. 05;

Choosemax{ P(Day3-Sunny) , P(Day3-Cloudy),P(Day3-Rainy)}

得到P{Day3-Rainy }最大,得出第三天Rainy的概率最大

故{Sunny,cloudy,Rainy }是这三天最可能的天气序列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: