隱馬爾科夫模型(上)


  隱馬爾科夫模型在語音識別,自然語言處理等領域有着廣泛的應用,80年代李開復博士就是采用隱含馬爾可夫模型的框架, 成功地開發了世界上第一個大詞匯量連續語音識別系統 Sphinx。本文先介紹隱馬爾科夫模型的定義及觀察序列的概率計算問題。

模型定義

  隱馬爾科夫模型定義如下:$$\lambda = (Q,V,A,B,\pi);$$

  I是長度為T的狀態序列:$I=(i_1,i_2,...,i_T)$;

  O是對應的觀測序列: $O = (o_1,o_2,...,o_t)$;

  其中:

  1) Q為狀態的集合:$Q={q_1,q_2,...,q_N}$, N為狀態的數量;

  2) V為觀測的集合:$V={v_1,v_2,...,v_M}$,M為觀測的數量;

  3) A為狀態轉移概率矩陣:$A=[a(i,j)]  (1<=i,j <= N)$,$a(i,j)=P(i_{t+1}=q_j|i_t=q_i)$表示在t時刻處於狀態$q_i$的條件下t+1時刻轉移到$q_j$的概率;

  4) B為觀測生成概率矩陣:$B=[b(j,k)] (1<=j <= N, 1<= k <=M)$, $b(j,k)=P(o_t=v_k|i_t=q_j)$表示在t時刻處於狀態$q_j$的條件下生成觀測$v_k$的概率;

  5) $\pi$是初試概率向量:$\pi =(\pi(i) )  (1<=i <= N)$, $\pi(i)=P(i_1=q_i)$表示t=1時處於狀態$q_i$的概率。

  只要上述的五個參數確定了一個馬爾科夫模型。

假設前提

  隱馬爾科夫模型作了兩個基本的假設:

  1) 其次馬爾科夫假設:任意時刻t的狀態只依賴於其前一刻的狀態,與觀測和其他時刻的狀態無關,即:$$P(i_t|t_{t-1},o_{t-1},..,i_1,o_1)=P(i_t|i_{t-1}), t=1,2,..,T;$$

  2) 觀測獨立性假設: 任意時刻的觀測值只依賴於該時刻的狀態,與觀測和其他時刻的狀態無關,即:$$P(o_t|i_t,o_T,..,i_1,o_1)=P(o_t|i_t)$$

  下面是一個例子,希望能通過這個例子理解什么是狀態什么是觀測,只有把這兩個概念理清楚了,才能理解下去,不然真是一團亂麻。

賭場的欺詐(示例)

  某賭場在擲骰子根據點數決定勝負時 , 采取暗中作弊的手段,連續多次使用正常骰子A后,偶爾使用一個灌鉛骰子 B,骰子A的6個字碼出現的概率是相等的,而骰子B的6個字碼出現的概率是不相等,甚至某個字碼出現的概率為0,這樣在使用骰子B時,老板可以大賺一筆。

  下面是兩個骰子的各個字碼出現的概率分布:

 字碼

骰子A

骰子B

1點

1/6

0

2點

1/6

1/8

3點

1/6

1/8

4點

1/6

3/16

5點

1/6

3/16

6點

1/6

3/8

  另外假設,骰子使用的概率如下:

  再設第一次掙骰子一定使用骰子A,即初始概率向量為:$\pi={1,0}$。

  於是賭場骰子的隱馬爾科夫模型如下:

  狀態集合:Q={骰子A,骰子B};

  觀測集合:V={1,2,3,4,5,6};

  狀態轉移矩陣:A={{0.9,0.1},

           {0.8,0.2}};

  生成概率矩陣:B={{1/6,1/6,1/6,1/6,1/6,1/6},

           {0,1/8,1/8,3/16,3/16,3/8}};

  可以描述為如下圖:

  實際上,狀態應該叫隱狀態,即狀態時不可見的,我們可見的是觀測,就好比醫生給病人看病,醫生不能直接看到病人的內部器官哪里出了毛病,但是看病人的舌頭、膚色等能夠得到一些觀測數據,即通過觀察來推測內部狀態。上例中狀態是骰子的類別,觀測是掙骰子得到的字碼。

隱馬爾科夫模型的三個問題

  1) 概率計算問題: 給定模型$\lambda = (Q,V,A,B,\pi)$和觀測序列$O=(o_1,o_2,...,o_T)$,計算在模型$\lambda$下觀察序列O出現的概率$P(O|\lambda)$; 比如對於上述示例,骰子掙出的點數序列記錄為:124552646214614613613666166466163661636616361651561511514612356234,問這個序列出現的概率為多少?

  2) 學習問題: 已知觀測序列$O=(o_1,o_2,...,o_T)$,估計模型$\lambda = (Q,V,A,B,\pi)$的參數,使得該模型下觀測序列概率$P(O|\lambda)$最大;比如骰子掙出的點數序列記錄為:124552646214614613613666166466163661636616361651561511514612356234,求初始概率向量$\pi$,狀態轉移矩陣A,觀測生成概率矩陣B。

  3) 預測問題(解碼問題): 已經模型$\lambda = (Q,V,A,B,\pi)$和觀測序列$O=(o_1,o_2,...,o_T)$,求最可能的對應的觀測序列。比如骰子掙出的點數序列記錄為:124552646214614613613666166466163661636616361651561511514612356234,求哪些點數是用骰子B掙出的?

概率計算問題

  直接計算觀測序列的概率計算復雜度很高,可以采用動態規划來加速求解,有兩個求解方法:前向算法、后向算法。

前向算法

  根據隱馬爾科夫模型的假設,時刻t+1的觀測只依賴於t+1時刻的狀態,而t+1時刻的狀態又只依賴於t時刻的狀態,因此從直觀上來說,我們就可以先求出觀測序列$o_1,o_2,..o_t$的概率,再求$o_1,o_2,..o_t,o_{t+1}$的概率,最終求得$o_1,o_2,..o_T$的概率,即$P(O|\lambda)$。

  定義前向概率:前t時刻部分的觀測序列為$o_1,o_2,..o_t$且t時刻狀態為$q_i$的概率,記為:$$\alpha(t,i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda)$$

  1) 初始化:$$\alpha(1,i)=\pi_ib(i,o_1), i=1,2,..,N$$

  2) 遞推:對T=1,2,...,T-1,$$\alpha(t+1,i)=[\sum_{j=1}^N\alpha(t,j)a(j,i)]b(i,o_{i+1}), i=1,2,...,N$$

  3) 終止:$$P(O|\lambda)=\sum_{i=1}^N\alpha(T,i)$$  

  解釋一下遞推公式,$\alpha(t+1,i)=P(o_1,o_2,...,o_{t+1},i_t+1=q_i|\lambda)$要求t+1時刻的狀態是$q_i$並且觀測是$o_{t+1}$,首先t+1時刻的狀態$q_i$可能是t時刻的任意一種狀態轉移過來的,因此對前t時刻的前向概率乘以對應的轉移概率並累加,最后乘以$b(i,o_{i+1})$是t+1時狀態$q_i$生成觀測$o_{i+1}$的概率。

  為了說明計算過程,我們用一個長度為3的觀測序列O=(124)來演示前向計算的過程,模型為示例所示:

  1) 初始化計算:$$\alpha(1,1)=\pi(1)b(1,o_1)=\pi(1)b(1,1)=1*\frac{1}{6}=\frac{1}{6}$$$$\alpha(1,2)=\pi(2)b(2,o_1)=\pi(2)b(2,1)=0*0=0$$

  2) 遞推計算:$$\alpha(2,1)=[\alpha(1,1)a(1,1)+\alpha(1,2)a(2,1)]b(1,o_2)=[\frac{1}{6}*0.9+0*0.8]*\frac{1}{6}= 0.025$$

    $$\alpha(2,2)=[\alpha(1,1)a(1,2)+\alpha(1,2)a(2,2)]b(2,o_2)=[\frac{1}{6}*0.1+0*0.8]*\frac{1}{8}= 0.002083$$

    $$\alpha(3,1)=[\alpha(2,1)a(1,1)+\alpha(2,2)a(2,1)]b(1,o_3)=[0.025*0.9+0.002083*0.8]*\frac{1}{6}=0.004027$$

    $$\alpha(3,2)=[\alpha(2,1)a(1,2)+\alpha(2,2)a(2,2)]b(2,o_3)=[0.025*0.1+0.002083*0.2]*\frac{3}{16}=0.000547$$

  3) 終止:$$P(O|\lambda)=P(124|\lambda)=\alpha(3,1)+\alpha(3,2)=0.004574$$

后向算法

  前向算法是從前往后遞推計算,而后向算法則相反,從后往前計算。

  定義后向概率:在時刻t狀態為$q_i$的條件下,從t+1到T時刻部分觀測序列為$(o_{t+1},o_{t+2},..o_T)$的概率,記作:$$\beta(t,i)=P((o_{t+1},o_{t+2},..o_T|i_t=q_i,\lambda)$$

  1) 初始化:$$\beta(T,i)=1, i=1,2,...,N$$

  2) 遞推:對t=T-1,T-2,..,1 $$\beta(t,i)=\sum_{j=1}^Na(i,j)b(j,o_{i+1})\beta(t+1,j), i=1,2,..,N$$

  3) 終止:$$P(O|\lambda)=\sum_{i=1}^N\pi(i)b(i,o_1)\beta(1,i)$$

  同樣,我們以觀測序列O=(124)來演示后向計算的過程:

  1) 初始化計算:$$\beta(3,1)=\beta(3,2)=1$$

  2) 遞推計算:$$\beta(2,1)=a(1,1)b(1,o_3)\beta(3,1)+a(1,2)b(2,o_3)\beta(3,2)=0.9*\frac{1}{6}*1+0.1*\frac{3}{16}*1=0.1687$$
      $$\beta(2,2)=a(2,1)b(1,o_3)\beta(3,1)+a(2,2)b(2,o_3)\beta(3,2)=0.8*\frac{1}{6}*1+0.2*\frac{3}{16}*1=0.1708$$
      $$\beta(1,1)=a(1,1)b(1,o_2)\beta(2,1)+a(1,2)b(2,o_2)\beta(2,2)=0.9*\frac{1}{6}*0.1687+0.1*\frac{1}{8}*0.1708=0.0274$$
      $$\beta(1,2)=a(2,1)b(1,o_2)\beta(2,1)+a(2,2)b(2,o_2)\beta(2,2)=0.8*\frac{1}{6}*0.1687+0.2*\frac{1}{8}*0.1708=0.02677$$

  3) 終止:$$P(O|\lambda)=P(124|\lambda)=\pi(1)b(1,o_1)\beta(1,1)+\pi(2)b(2,o_1)\beta(1,2)=1*\frac{1}{6}*0.0274+0=0.004574$$

  可以看到前向計算和后向計算的結果是一致的。

  本文先介紹模型的定義和概率計算問題,學習問題和預測問題留在下文介紹。

參考文獻

  [1].李航.統計學習方法

  [2].http://wenku.baidu.com/view/39835f727fd5360cba1adb23.html

  轉載請注明出處:http://www.cnblogs.com/fengfenggirl/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM