1. 程式人生 > >機器學習筆記(十四)——HMM估計問題和前向後向演算法

機器學習筆記(十四)——HMM估計問題和前向後向演算法

一、隱馬爾科夫鏈的第一個基本問題

    估計問題:給定一個觀察序列O=O1O2OT和模型u=(A,B,π),如何快速地計算出給定模型u情況下,觀察序列O的概率, 即P(O|u)?

二、求解觀察序列的概率

    其實,求解這個問題就是一個解碼問題。 對於任意的狀態序列Q=q1q2qT,有

P(O|Q,u)=t=1T1P(Ot|qt,qt+1,u)=bq1(O1)bq2(O2)bqT(OT)
並且
P(Q|u)=πq1aq1q2aq2q3aqT1qT
由於
P(O,Q|u)=P(O|Q,u)P(Q|u)
所以
P(O|u)=QP(O,Q|u)Q
P(O|Q,u)P(Q|u)
=Qπq1bq1(O1)t=1T1aqtqt+1bqt+1(Ot+1)

上述推導過程很直接,但是實際的計算量是非常龐大的,它要窮盡所有可能的狀態序列,如果模型中有N個狀態,時間長度為T, 那麼有NT個可能的狀態序列,這導致了並不能有效地執行這個演算法。因此,人們提出了前向演算法,利用動態規劃來解決指數爆炸的問題。

三、HMM中的前向演算法

    為了實現前向演算法,需要定義一個前向變數αt(i).
定義1 前向變數αt(i)是在時間t, HMM輸出序列O=O1O2Ot並且位於狀態si的概率

αt(i)=P(O1O2Ot,qt=si|u)

    前向演算法的主要思想是,如果可以快速地計算前向變數α

t(i),那麼就可以根據αt(i)計算出P(O|u), 因為P(O|u)是在所有狀態下觀察到序列O=O1O2O