一、基本情況
前面有章節介紹過前向算法的理論,似乎很難理解,本文將用一個實例來說明前向算法的應用,先回顧下前向算法的理論
1、 一個隱馬爾可夫模型 (HMM) 是由一個五元組描述的:
λ =( N,M ,A,B, π )
其中:
N = {q1,...qN}:狀態的有限集合
M = {v1,...,vM}:觀察值的有限集合
A = {aij},aij = P(qt = Sj |qt-1 = Si):狀態轉移概率矩陣
B = {bjk}, bjk = P(Ot = vk | qt = Sj):觀察值概率分佈矩陣
π = {πi},πi = P(q1 = Si):初始狀態概率分佈
2、 給定HMM模型 λ = (A, B, π) ,則觀察序列 O=O1,O2,…OT 可由以下步驟產生:
1.根據初始狀態概率分佈π= πi,選擇一初始狀態q1=Si;
2.設t=1;
3.根據狀態 Si的輸出概率分佈bjk,輸出Ot=vk;
4.根據狀態轉移概率分佈aij,轉移到新狀態qt+1=Sj;
5.設t=t+1,如果t<T,重複步驟3、4,否則結束。
二、HMM的三個基本問題
令 λ = {π,A,B} 爲給定HMM的參數,
令 O = O1,...,OT 爲觀察值序列,則有關於隱馬爾可夫模型(HMM)的三個基本問題:
1.評估問題:對於給定模型,求某個觀察值序列的概率P(O|λ) ;
2.解碼問題:對於給定模型和觀察值序列,求可能性最大的狀態序列maxQ{P(Q|O,λ)};
3.學習問題:對於給定的一個觀察值序列O,調整參數λ,使得觀察值出現的概率P(O|λ)最大。
三、前向算法解決評估問題
1、基本步驟:
定義前向變量:“在時間步t, 得到t之前的所有明符號序列, 且時間步t的狀態是Si”這一事件的概率,
記爲(t, i) = P(o1,…,ot, qt = Si|λ)
採用動態規劃算法,複雜度O(N2T)
2、算法過程:
四、算法應用
HMM模型如下,試根據前向算法計算產生觀察符號序列O={ABAB}的概率。
初始概率矩陣π=(1,0,0),即開始處於狀態1。按照前向算法公式,我們依次遞推解出
t(i) 。解法如下:
1、當t=1時,
2、當t=2時:
3、當t=3時:
4、當t=4時:
所以最終有:
P(O| λ)= 4(1)+ 4(2)+ 4(3)=0.0717696 即觀察序列O由HMM模型產生的概率
大家動筆一步一步按照實例來,就能理解前向算法的應用了,學過動態規劃的就知道,上面這個過程其實用到了動態規劃的思想,因此可以用動態規劃的圖示來看此問題:
五、結語
通過理論瞭解算法的思想和背景,通過實例瞭解算法的使用,這個是很重要的,反過來通過使用思考算法的思想,也會恍然大悟。。。