學習HMM的一些簡單總結,具體的內容和推導可以去參考《條件隨機場理論綜述》,寫的非常好。
1,離散馬爾科夫過程
時間和狀態都是離散變量,且當前所處的狀態只與它之前的一個狀態有關(馬爾科夫性),這種隨機過程即為馬爾科夫過程。
2,HMM的五個要素
HMM可以用一個五元組表示:\(\lambda= (S,K,A,B,\pi) \)。其中S為狀態集合,K為觀察集合,A為轉移矩陣,B為觀察概率矩陣,\(\pi\)為初始狀態分布。
3,HMM的三個假設
(1)t時刻的狀態只依賴於t-1時刻
(2)t時刻的觀測值Ot只依賴於t時刻的狀態qt
(3)狀態與具體時間無關,即轉移概率是獨立於時間的
4,HMM的三個基本問題
(1)給定模型,如果和求觀測序列o1,o2...ot出現的概率\(P(O|\lambda)\)
(2)給定模型和觀測序列,如何找到產生這一序列概率最大的狀態序列Q
(3)給定模型和觀測序列,如何調整模型的參數,使得產生觀測序列的概率最大
5,forward-backward算法
本篇文章總結一下如何解決第一個問題?給定一個觀測序列o1,o2,o3..ot,它產生的概率是什么?一個最直接的思路就是把所有可能產生這個序列的狀態序列窮舉出來,這樣自然序列o1o2...on的概率也出來了,但是這樣做自然是不行的,因為時間復雜度太高了。。那怎么做呢?forward-backford算法,這其實是一種動態規划算法,建立在節點與之前之后節點的關系上。
定義forward變量:
\(\alpha_t(i)=P(O_1O_2O_t,q_t=s_i|\lambda)\)
這是部分觀測序列與t時刻狀態\(s_i\)的聯合分布。如何從\(\alpha_t(i)\)推導出\(\alpha_{t+1}(j)\)呢?
雖然推導的過程很復雜,但是\(\alpha_j(t+1)=[\sum_{i=1}^{N}\alpha_i(t)a_{ij}]b_j(O_{t+1})\)確不難理解。t+1時刻的狀態j可以從t時刻的任意狀態轉移而來,所以就有了前半部分的加和\(\sum_{i=1}^{N}\alpha_i(t)a_{ij}\),然后再乘以第二部分的發射概率\(b_j(O_{t+1})\)。
從而也容易推出整體序列O的概率\(P(O|\lambda)=\sum_{i=1}^{N}\alpha_T(i)\)
類似forward變量的定義,backforward變量\(\beta_i(t)\)定義如下:\(\beta_i(t)=P(O_{t+1}...O_T|q_t=s_i,\lambda)\)。這個是部分序列\(O_{t+1}\)到OT,在t時刻狀態為i時的條件概率,還記的嗎?forword變量是聯合概率。同樣,也可以得到\(\beta_i(t)\)與\(\beta_{j}(t+1)\)的關系。
\(P(O|\lambda)\)可以用forward變量和backword變量共同表示:
\(P(O|\lambda) = \sum_{i}^{N}P(q_t=s_i,O|\lambda)\)
而 \(P(q_t=s_i,O|\lambda)=P(O|q_t=s_i,\lambda)P(q_t=s_i|\lambda)\)
\(=P(O_1O_2...O_t...O_T|q_t=s_i,\lambda)P(q_t=s_i|\lambda)\)
\(=P(O_1O_2...O_t|q_t=s_i,\lambda)P(O_{t+1}...O_T|q_t=s_j,\lambda)P(q_t=s_i|\lambda)\)
\(=P(O_1O_2...O_t,q_t=s_j|\lambda)P(O_{t+1}...O_T|q_t=s_j,\lambda)\)
\(=\alpha_i(t)\beta_i(t)\)
所以
\(P(O|\lambda) = \sum_{i}^{N}P(q_t=s_i,O|\lambda)=\sum_{i=1}^{N}\alpha_i(t)\beta_i(t)\)
看來要想求\(P(O|\lambda)\)可以從任何一個t點出發。
實際問題
編程求解