本文主要討論HMM要解決的三個基本問題。
並對第一個問題求似然概率進行公式推導和說明。
首先,HMM由以下幾個組件構成:
1. Q=q1q2...qN 狀態集合
2. A=a11a12...an1...ann 狀態轉移矩陣,aij 表示從狀態i到狀態j的概率 p(qj|qi)
3. O=o1o2...oT 長度爲T序列的觀測值
4. B=bi(ot) 觀測似然,也叫發射概率,觀測值ot 由狀態i產生的概率
5. q0,qF 初始狀態,結束狀態
π = π1,π2,...,πN 初始概率分佈 πi 表示HMM初始由狀態i開始的概率
前提:
1.Markov假設:
P(qi|q1...qi−1) = P(qi|qi−1) => 當前狀態只和前一個狀態有關。
2.輸出獨立假設:P(oi|q1...qi,...,qT,o1,...,oi,...,oT)=P(oi|qi) 即輸出只和一個狀態qi有關,不和其他狀態或者輸出相關。
有了以上基礎概念,我們看HMM有三個問題需要解決:
問題1,計算似然(likelihood):給定HMM的λ= (A,B) 和觀測序列O ,計算似然概率P(O|λ)
問題2,解碼問題(decoding):給定HMM的λ = (A,B) 和觀測序列O,找到最佳狀態序列Q
問題3,訓練問題(Learning):給定觀測序列O和狀態集合,訓練HMM參數A和B
接下來,我們就要討論第一個問題
針對問題1,首先,在一定的狀態序列,觀測概率的聯合概率計算如下所示:
在HMM中,有N個隱藏狀態,觀測值爲T個觀測序列情況下:
有NT 個可能的狀態序列,當N和T很大的情況下,所以通過計算每個隱藏狀態序列的似然概率,然後求和算出總的似然概率變得非常不現實了。
我們使用前向(forward)算法來高效的解決以上問題,其中用一個table用來存儲中間值,其時間複雜度爲O(N2T) 。
首先,使αt(j)記做:在給定λ前提下,觀測到前t個觀測值(O1-Ot)且狀態在j的概率:
其計算公式如下:
1.初始化:
2.遞歸:
3.終止:(狀態qF
沒有發射概率)
算法代碼如下所示:
可視化的圖例如下所示:
上圖中,forward[s,t] 代表αt(s)
forward[qF,T] 表示αT(qF) ,即:
在給定λ前提下,觀測到T個觀測序列(O),且狀態在結束狀態qF的概率,即P(O|λ)
以上就是求似然概率的公式推導。
下一章會討論HMM第二個問題,解碼(decoding)的公式推導.