一、基本情況
前面有章節介紹過前向算法的理論,似乎很難了解,本文将用一個執行個體來說明前向算法的應用,先回顧下前向算法的理論
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、算法過程:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzYjN581N2ADO1YjM2MTMvw1Nw8CXzAzMxAjMvw1ckF2bsBXdvwFdl5mLuR2cj5Set1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
四、算法應用
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模型産生的機率
大家動筆一步一步按照執行個體來,就能了解前向算法的應用了,學過動态規劃的就知道,上面這個過程其實用到了動态規劃的思想,是以可以用動态規劃的圖示來看此問題:
五、結語
通過理論了解算法的思想和背景,通過執行個體了解算法的使用,這個是很重要的,反過來通過使用思考算法的思想,也會恍然大悟。。。