1. 回顧HMM問題一:求觀測序列的概率
首先我們回顧下HMM模型的問題一。這個問題是這樣的。我們已知HMM模型的參數λ=(A,B,Π)λ=(A,B,Π)。其中AA是隱藏狀態轉移概率的矩陣,BB是觀測狀態生成概率的矩陣, ΠΠ是隱藏狀態的初始概率分布。同時我們也已經得到了觀測序列O={o1,o2,...oT}O={o1,o2,...oT},現在我們要求觀測序列OO在模型λλ下出現的條件概率P(O|λ)P(O|λ)。
乍一看,這個問題很簡單。因為我們知道所有的隱藏狀態之間的轉移概率和所有從隱藏狀態到觀測狀態生成概率,那么我們是可以暴力求解的。
我們可以列舉出所有可能出現的長度為TT的隱藏序列I={i1,i2,...,iT}I={i1,i2,...,iT},分布求出這些隱藏序列與觀測序列O={o1,o2,...oT}O={o1,o2,...oT}的聯合概率分布P(O,I|λ)P(O,I|λ),這樣我們就可以很容易的求出邊緣分布P(O|λ)P(O|λ)了。
具體暴力求解的方法是這樣的:首先,任意一個隱藏序列I={i1,i2,...,iT}I={i1,i2,...,iT}出現的概率是:
對於固定的狀態序列I={i1,i2,...,iT}I={i1,i2,...,iT},我們要求的觀察序列O={o1,o2,...oT}O={o1,o2,...oT}出現的概率是:
則OO和II聯合出現的概率是:
然后求邊緣概率分布,即可得到觀測序列OO在模型λλ下出現的條件概率P(O|λ)P(O|λ):
雖然上述方法有效,但是如果我們的隱藏狀態數NN非常多的那就麻煩了,此時我們預測狀態有NTNT種組合,算法的時間復雜度是O(TNT)O(TNT)階的。因此對於一些隱藏狀態數極少的模型,我們可以用暴力求解法來得到觀測序列出現的概率,但是如果隱藏狀態多,則上述算法太耗時,我們需要尋找其他簡潔的算法。
前向后向算法就是來幫助我們在較低的時間復雜度情況下求解這個問題的。
2. 用前向算法求HMM觀測序列的概率
前向后向算法是前向算法和后向算法的統稱,這兩個算法都可以用來求HMM觀測序列的概率。我們先來看看前向算法是如何求解這個問題的。
前向算法本質上屬於動態規划的算法,也就是我們要通過找到局部狀態遞推的公式,這樣一步步的從子問題的最優解拓展到整個問題的最優解。
在前向算法中,通過定義“前向概率”來定義動態規划的這個局部狀態。什么是前向概率呢, 其實定義很簡單:定義時刻tt時隱藏狀態為qiqi, 觀測狀態的序列為o1,o2,...oto1,o2,...ot的概率為前向概率。記為:
既然是動態規划,我們就要遞推了,現在我們假設我們已經找到了在時刻tt時各個隱藏狀態的前向概率,現在我們需要遞推出時刻t+1t+1時各個隱藏狀態的前向概率。
從下圖可以看出,我們可以基於時刻tt時各個隱藏狀態的前向概率,再乘以對應的狀態轉移概率,即αt(j)ajiαt(j)aji就是在時刻tt觀測到o1,o2,...oto1,o2,...ot,並且時刻tt隱藏狀態qjqj, 時刻t+1t+1隱藏狀態qiqi的概率。如果將想下面所有的線對應的概率求和,即∑j=1Nαt(j)aji∑j=1Nαt(j)aji就是在時刻tt觀測到o1,o2,...oto1,o2,...ot,並且時刻t+1t+1隱藏狀態qiqi的概率。繼續一步,由於觀測狀態ot+1ot+1只依賴於t+1t+1時刻隱藏狀態qiqi, 這樣[∑j=1Nαt(j)aji]bi(ot+1)[∑j=1Nαt(j)aji]bi(ot+1)就是在在時刻t+1t+1觀測到o1,o2,...ot,ot+1o1,o2,...ot,ot+1,並且時刻t+1t+1隱藏狀態qiqi的概率。而這個概率,恰恰就是時刻t+1t+1對應的隱藏狀態ii的前向概率,這樣我們得到了前向概率的遞推關系式如下:
我們的動態規划從時刻1開始,到時刻TT結束,由於αT(i)αT(i)表示在時刻TT觀測序列為o1,o2,...oTo1,o2,...oT,並且時刻TT隱藏狀態qiqi的概率,我們只要將所有隱藏狀態對應的概率相加,即∑i=1NαT(i)∑i=1NαT(i)就得到了在時刻TT觀測序列為o1,o2,...oTo1,o2,...oT的概率。
下面總結下前向算法。
輸入:HMM模型λ=(A,B,Π)λ=(A,B,Π),觀測序列O=(o1,o2,...oT)O=(o1,o2,...oT)
輸出:觀測序列概率P(O|λ)P(O|λ)
1) 計算時刻1的各個隱藏狀態前向概率:
2) 遞推時刻2,3,...T2,3,...T時刻的前向概率:
3) 計算最終結果:
從遞推公式可以看出,我們的算法時間復雜度是O(TN2)O(TN2),比暴力解法的時間復雜度O(TNT)O(TNT)少了幾個數量級。
3. HMM前向算法求解實例
這里我們用隱馬爾科夫模型HMM(一)HMM模型中盒子與球的例子來顯示前向概率的計算。
我們的觀察集合是:
我們的狀態集合是:
而觀察序列和狀態序列的長度為3.
初始狀態分布為:
狀態轉移概率分布矩陣為:
觀測狀態概率矩陣為:
球的顏色的觀測序列:
按照我們上一節的前向算法。首先計算時刻1三個狀態的前向概率:
時刻1是紅色球,隱藏狀態是盒子1的概率為:
隱藏狀態是盒子2的概率為:
隱藏狀態是盒子3的概率為:
現在我們可以開始遞推了,首先遞推時刻2三個狀態的前向概率:
時刻2是白色球,隱藏狀態是盒子1的概率為:
隱藏狀態是盒子2的概率為:
隱藏狀態是盒子3的概率為:
繼續遞推,現在我們遞推時刻3三個狀態的前向概率:
時刻3是紅色球,隱藏狀態是盒子1的概率為:
隱藏狀態是盒子2的概率為:
隱藏狀態是盒子3的概率為:
最終我們求出觀測序列:O={紅,白,紅}O={紅,白,紅}的概率為:
4. 用后向算法求HMM觀測序列的概率
熟悉了用前向算法求HMM觀測序列的概率,現在我們再來看看怎么用后向算法求HMM觀測序列的概率。
后向算法和前向算法非常類似,都是用的動態規划,唯一的區別是選擇的局部狀態不同,后向算法用的是“后向概率”,那么后向概率是如何定義的呢?
定義時刻tt時隱藏狀態為qiqi, 從時刻t+1t+1到最后時刻TT的觀測狀態的序列為ot+1,ot+2,...oTot+1,ot+2,...oT的概率為后向概率。記為:
后向概率的動態規划遞推公式和前向概率是相反的。現在我們假設我們已經找到了在時刻t+1t+1時各個隱藏狀態的后向概率βt+1(j)βt+1(j),現在我們需要遞推出時刻tt時各個隱藏狀態的后向概率。如下圖,我們可以計算出觀測狀態的序列為ot+2,ot+3,...oTot+2,ot+3,...oT, tt時隱藏狀態為qiqi, 時刻t+1t+1隱藏狀態為qjqj的概率為aijβt+1(j)aijβt+1(j), 接着可以得到觀測狀態的序列為ot+1,ot+2,...oTot+1,ot+2,...oT, tt時隱藏狀態為qiqi, 時刻t+1t+1隱藏狀態為qjqj的概率為aijbj(ot+1)βt+1(j)aijbj(ot+1)βt+1(j), 則把下面所有線對應的概率加起來,我們可以得到觀測狀態的序列為ot+1,ot+2,...oTot+1,ot+2,...oT, tt時隱藏狀態為qiqi的概率為∑j=1Naijbj(ot+1)βt+1(j)∑j=1Naijbj(ot+1)βt+1(j),這個概率即為時刻tt的后向概率。
這樣我們得到了后向概率的遞推關系式如下:
現在我們總結下后向算法的流程,注意下和前向算法的相同點和不同點:
輸入:HMM模型λ=(A,B,Π)λ=(A,B,Π),觀測序列O=(o1,o2,...oT)O=(o1,o2,...oT)
輸出:觀測序列概率P(O|λ)P(O|λ)
1) 初始化時刻TT的各個隱藏狀態后向概率:
2) 遞推時刻T−1,T−2,...1T−1,T−2,...1時刻的后向概率:
3) 計算最終結果:
此時我們的算法時間復雜度仍然是O(TN2)O(TN2)。
5. HMM常用概率的計算
利用前向概率和后向概率,我們可以計算出HMM中單個狀態和兩個狀態的概率公式。
1)給定模型λλ和觀測序列OO,在時刻tt處於狀態qiqi的概率記為:
利用前向概率和后向概率的定義可知:
於是我們得到:
2)給定模型λλ和觀測序列OO,在時刻tt處於狀態qiqi,且時刻t+1t+1處於狀態qjqj的概率記為:
而P(it=qi,it+1=qj,O|λ)P(it=qi,it+1=qj,O|λ)可以由前向后向概率來表示為:
從而最終我們得到ξt(i,j)ξt(i,j)的表達式如下:
3) 將γt(i)γt(i)和ξt(i,j)ξt(i,j)在各個時刻tt求和,可以得到:
在觀測序列OO下狀態ii出現的期望值∑t=1Tγt(i)∑t=1Tγt(i)
在觀測序列OO下由狀態ii轉移的期望值∑t=1T−1γt(i)∑t=1T−1γt(i)
在觀測序列OO下由狀態ii轉移到狀態jj的期望值∑t=1T−1ξt(i,j)∑t=1T−1ξt(i,j)
上面這些常用的概率值在求解HMM問題二,即求解HMM模型參數的時候需要用到。我們在這個系列的第三篇來討論求解HMM參數的問題和解法。
轉載處:http://www.cnblogs.com/pinard/p/6955871.html