HMM中的前向法(Forward Agorithm)

普通方法(Normal Approach):

各位应该不难想象,最普通最直接的计算P(O|\lambda)的方法就是枚举所有可能的隐状态序列(S),然后用Transition Matrix与Emission Matrix的数据,对每一个隐状态序列S求我们的目标观察序列O的一个概率。普通方法的推导如下:

根据对HMM的理解,不难写出以下的P(O|\lambda)表达式:

P(O|\lambda)=\sum_{r=1}^{N^T}P(O|S_r )P(S_r)

式中,r就是枚举出来的可能隐状态序列的编号,假设一共会有N个状态出现,序列的长度为T,那么就一共会有r={N^T}个可能的隐状态序列S。右边第一项P(O|S_r )是在当前隐状态序列S下,目标观察序列O的发生概率(由Emission Matrix影响)。而第二项P(S_r)即为当前隐状态序列S的发生概率(由Transition Matrix影响)。

注意到HMM的Markov特性,即当前事件只与前一时刻时间有关,于是上式第二项可以变为:

P(S_r)=\prod_{t=1}^{T}P[S(t)|S(t-1)]

意思即:此种隐状态组合的出现概率P(S_r)是由Transition Matrix里面的相应概率相乘得到。

又注意到,我们之前已经假设每个时刻(假设这个时刻为t)产生的观察符号O(t)只依赖于这个时刻所处的隐状态S_r(t),因此总表达式的右边第一项可以改写为:

P(O|S_r )=\prod_{t=1}^{T}P[O(t)|S_r(t-1)]

至此,联立上面三式可以得到:

P(O|\lambda)=\sum_{r=1}^{N^T}\prod_{t=1}^{T}P[O(t)|S_r(t-1)]P[S(t)|S(t-1)]

别看上面的公式好像很长很臭,其实意思是十分明确的,这里不作过多的解释。通过这么长的一个式子,我们至少已经可以直观地看出一个问题,就是这个式子的计算复杂度的问题。显然,如果要计算上式,复杂度将会为:

\sum_{r=1}^{N^T}\prod_{t=1}^{T} = TN^T

它意味着,假如我们有10种可能的隐状态,序列长度为20,那么计算量将会是:(10^20) * 20 = 2.0 × 1021

普通方法(穷举法):示意图

普通方法(穷举法):示意图

Pages: 1 2 3 4

1 comment to HMM中的前向法(Forward Agorithm)

  • [...] HMM中的维特比解码(Viterbi Agorithm) By Suz, on 八月 27th, 2010, 350 views, 2 comments var addthis_config = { username: "dround" } 在之前的文章中,已经分别介绍了隐马科夫模型(HMM)的概况以及HMM中广泛应用的一种解决估值问题的算法:前向法(Forward Algorithm)。在本文将介绍解决HMM另外一个问题 – 解码问题 – 的算法:维特比算法(Viterbi Agorithm),也属于HMM中的一个基本算法,而且算法本身很像Forward的这个概念,理解起来相对容易。 [...]

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>