隱馬爾可夫模型(一)

 

隱馬爾可夫模型

 

  隱馬爾可夫模型(Hidden Markov Model,HMM)是一種統計模型,普遍應用在語音識別,詞性自動標註,音字轉換,機率文法等各個天然語言處理等應用領域。通過長期發展,尤爲是在語音識別中的成功應用,使它成爲一種通用的統計工具。算法

 

馬爾可夫過程

  先來看一個例子。假設幾個月大的寶寶天天作三件事:玩(興奮狀態)、吃(飢餓狀態)、睡(睏倦狀態),這三件事按下圖所示的方向轉移:函數

   這就是一個簡單的馬爾可夫過程。須要注意的是,這和肯定性系統不一樣,每一個轉移都是有機率的,寶寶的狀態是常常變化的,並且會任意在兩個狀態間切換:工具

  上圖中箭頭表示從一個狀態到切換到另外一個狀態的機率,吃飽後睡覺的機率是0.7。學習

  從上圖中能夠看出,一個狀態的轉移只依賴於以前的n個狀態,當n取1時就是馬爾可夫假設。由此得出馬爾可夫鏈的定義:spa

  馬爾可夫鏈是隨機變量 S1, … , St 的一個數列(狀態集),這些變量的範圍,即他們全部可能取值的集合,被稱爲「狀態空間」,而  St  的值則是在時間 的狀態。若是 St+1 對於過去狀態的條件機率分佈僅是 S的一個函數,則:3d

 

  這裏小 x 爲過程當中的某個狀態。上面這個等式稱爲馬爾可夫假設。blog

  上述函數能夠這樣理解:在已知「如今」的條件下,「未來」不依賴於「過去」;或「未來」僅依賴於已知的「如今」。即St+1只於St有關,與St-n, 1<n<t無關。數學

  一個含有 N 個狀態的馬爾可夫鏈有 N2 個狀態轉移。每個轉移的機率叫作狀態轉移機率 (state transition probability),就是從一個狀態轉移到另外一個狀態的機率。這全部的 N個機率能夠用一個狀態轉移矩陣來表示:it

  這個矩陣表示,若是在t時間時寶寶的狀態是吃,則在t+1時間狀態是玩、吃、睡的機率分別爲(0.二、0.一、0.7)。io

  矩陣的每一行的數據累加和爲1。

隱馬爾可夫模型

  在不少時候,馬爾可夫過程不足以描述咱們發現的問題,例如咱們並不能直接知曉寶寶的狀態是餓了或者困了,可是能夠經過寶寶的其餘行爲推測。若是寶寶哭鬧,多是餓了;若是無精打彩,則多是困了。由此咱們將產生兩個狀態集,一個是可觀測的狀態集O和一個隱藏狀態集S,咱們的目的之一是藉由可觀測狀態預測隱藏狀態,爲了簡化描述,將「玩」這個狀態去掉,讓寶寶天天除了吃就是睡,這也是大多數家長共同的願望,模型以下:

  由此獲得O={Ocry,Otired,Ofind},S={Seat,Szzz}。寶寶在「吃(飢餓)」狀態下表現出哭、沒精神、找媽媽三種可觀察行爲的機率分別是(0.7,0.1,0.2)。

  上面的例子中,能夠觀察到的狀態序列和隱藏的狀態序列是機率相關的。因而咱們能夠將這種類型的過程建模爲有一個隱藏的馬爾科夫過程和一個與這個隱藏馬爾科夫過程機率相關的而且能夠觀察到的狀態集合。這就是隱馬爾可夫模型。

  隱馬爾可夫模型 (Hidden Markov Model,HMM) 是一種統計模型,用來描述一個含有隱含未知參數的馬爾可夫過程。

 

  經過轉移矩陣,咱們知道怎樣表示P(St+1=m|St=n),怎樣表示P(Ot|S)呢(觀測到的狀態至關於對隱藏的真實狀態的一種估計)?在HMM中咱們使用另外一個矩陣:

  該矩陣被稱爲混淆矩陣。矩陣行表明隱藏狀態,列表明可觀測的狀態,矩陣每一行機率值的和爲1。其中第1行第1列,P(Ot=cry|Pt=eat)=0.7,寶寶在餓了時,哭的機率是0.7。

混淆矩陣可視爲馬爾可夫模型的另外一個假設,獨立性假設:假設任意時刻的觀測只依賴於該時刻的馬爾可夫鏈的狀態,與其它觀測狀態無關。

 

    HMM模型的形式定義

  一個 HMM 可用一個5元組 { N, M, π,A} 表示,其中:

  • N 表示隱藏狀態的數量,咱們要麼知道確切的值,要麼猜想該值;
  • M 表示可觀測狀態的數量,能夠經過訓練集得到;
  • π={πi} 爲初始狀態機率;表明的是剛開始的時候各個隱藏狀態的發生機率;
  • A={aij}爲隱藏狀態的轉移矩陣;N*N維矩陣,表明的是第一個狀態到第二個狀態發生的機率;
  • B={bij}爲混淆矩陣,N*M矩陣,表明的是處於某個隱狀態的條件下,某個觀測發生的機率。

  在狀態轉移矩陣和混淆矩陣中的每一個機率都是時間無關的,即當系統演化時,這些矩陣並不隨時間改變。對於一個 N 和 M 固定的 HMM 來講,用 λ={π, A, B } 表示 HMM 參數。

問題求解

  假設有一個已知的HMM模型:

  在該模型中,初始化機率π={Seat=0.3,Szzz=0.7};隱藏狀態N=2;可觀測狀態M=3;轉移矩陣和混淆矩陣分別是:

  如今咱們要解決3個問題:

  1.模型評估問題(機率計算問題)

  已知整個模型,寶寶的行爲依次是哭 -> 沒精神 –>找媽媽,計算產生這些行爲的機率。

  即:

  已知模型參數,計算某一給定可觀察狀態序列的機率。即在已知一個觀察序列,和模型λ=(A,B,π}的條件下,觀察序列O的機率,即P(O|λ}。

  對應算法:向前算法、向後算法

  2.解碼問題(預測問題)

  已知整個模型,寶寶的行爲依次是哭 -> 沒精神 –>找媽媽,計算這三個行爲下,寶寶的狀態最多是什麼。

  即:

  已知模型參數和可觀察狀態序列,怎樣選擇一個狀態序列S={S1,S2,…,ST},能最好的解釋觀測序列O。

  對應算法:維特比算法

  3.參數評估問題(屬於非監督學習算法)

  經過寶寶的行爲,哭、沒精神、找媽媽,來肯定寶寶的狀態轉換機率。

  數據集僅有觀測序列,如何調整模型參數 λ=(π, A, B), 使得P(O|λ)最大

  對應算法:鮑姆-韋爾奇算法

 

  本文主要解決問題1和問題2,從中能夠看到馬爾可夫假設(上文提到的公式1和2)簡化了機率計算(問題3後續補充)。

遍歷法

  求解問題1。

  遍歷法也是典型的窮舉法,實現較爲簡單,羅列可能狀況後將其相加便可。共有3種可觀察狀態,每一個可觀察狀態對應2種隱藏狀態,共有23 = 8中可能的狀況。其中一種:

P(Seat1, Seat2, Seat3,Ocry1,Otired2,Ofind3)

= P(Seat1)·P(Ocry1)·P(Seat2)·P(Otired2)·P(Seat3)·P(Ofind3)

= (0.3×0.7)×(0.1×0.1)×(0.1×0.2)

= 0.000042

  上式中的下標的數字表示時間,下標在觀測點和隱藏點都比較少的時候,遍歷法最爲有效(由於簡單),一旦節點數增長,計算量將急劇增大。

向前算法(Forward Algorithm)

  求解問題1。

  向前算法是在時間 t=1的時候,一步一步往前計算。

   其背後的馬爾可夫機率公式:

P(W1,W2) = P(W1)P(W2|W1)

 P(W1,W2,W3) = P(W1,W2)P(W3|W1,W2)

 P(W1,W2,…,Wn) = P(W1,W2,…,Wn-1)P(Wn|W1,W2,…,Wn-1)

 

   1.計算當t=1時,發生Cry這一行爲的機率:

  P(Ocry,Seat) = P(Seat)P(Ocry|Seat) =0.3×0.7=0.21

  P(Ocry,Szzz) = P(Szzz)P(Ocry|Szzz) =0.7×0.3=0.21

 

2.計算當t=2時,發生Tired這一行爲的機率:

  根據馬爾可夫假設,P(Ot=2)僅與St=1有關,下一天的行爲機率是由前一天的狀態計算而來,若是St=2=Seat2

P(Ocry1,Otired2,Seat2)

= P(Ocry1,Seat1)P(Seat2|Seat1)P(Otired2|Seat2)+ P(Ocry1,Szzz1)P(Seat2|Szzz1)P(Otired2|Seat2)

=[P(Ocry1,Seat1)P(Seat2|Seat1)+P(Ocry1,Szzz1)P(Seat2|Szzz1)]·P(Otired2|Seat2)

= [0.21×0.1+0.21×0.8]×0.1

= 0.0189

  若是St=2=Szzz2

P(Ocry1,Otired2,Szzz2)

= P(Ocry1,Seat1)P(Szzz2|Seat1)P(Otired2|Szzz2)+P(Ocry1,Szzz1)P(Szzz2|Szzz1)P(Otired2|Szzz2)

= [P(Ocry1,Seat1)P(Szzz2|Seat1)+ P(Ocry1,Seat1)P(Szzz2|Seat1)]·P(Otired2|Szzz2)

= [0.21×0.9+0.21×0.2]×0.5

= 0.1155

 

3.計算當t=3時,發生Find這一行爲的機率:

若是St=3=Seat3

P(Ocry1,Otired2,Ofind3,Seat3)

= P(Ocry1,Otired2,Seat2)P(Seat3| Seat2)P(Ofind3|Seat3)+

         P(Ocry1,Otired2,Szzz2)P(Seat3| Szzz2)P(Ofind3|Seat3)

= [P(Ocry1,Otired2,Seat2)P(Seat3| Seat2)+

P(Ocry1,Otired2,Szzz2)P(Seat3| Szzz2)]·P(Ofind3|Seat3)

= [0.0189×0.1+0.1155×0.8]×0.2

= 0.018858

若是St=3=Szzz3

P(Ocry1,Otired2,Ofind3,Seat3)

= P(Ocry1,Otired2,Seat2)P(Szzz3| Seat2)P(Ofind3|Szzz3)+

         P(Ocry1,Otired2,Szzz2)P(Szzz3| Szzz2)P(Ofind3|Szzz3)

= [P(Ocry1,Otired2,Seat2)P(Szzz3| Seat2)+

P(Ocry1,Otired2,Szzz2)P(Szzz3| Szzz2)]·P(Ofind3|Szzz3)

= [0.0189×0.9+0.1155×0.2]×0.2

= 0.008022

 

綜上,

P(Ocry1,Otired2,Ofind3)

= P(Ocry1,Otired2,Ofind3,Seat3)+ P(Ocry1,Otired2,Ofind3,Szzz3)

= 0.018858+0.049602

= 0.06848

 

維特比算法(Viterbi Algorithm)

 參照百度百科:

 維特比算法的基礎能夠歸納成下面三點:

  1. 若是機率最大的路徑p(或者說最短路徑)通過某個點,好比途中的X22,那麼這條路徑上的起始點S到X22的這段子路徑Q,必定是S到X22之間的最短路徑。不然,用S到X22的最短路徑R替代Q,便構成一條比P更短的路徑,這顯然是矛盾的。證實了知足最優性原理。
  2. 從S到E的路徑一定通過第i個時刻的某個狀態,假定第i個時刻有k個狀態,那麼若是記錄了從S到第i個狀態的全部k個節點的最短路徑,最終的最短路徑必通過其中一條,這樣,在任意時刻,只要考慮很是有限的最短路便可。
  3. 結合以上兩點,假定當咱們從狀態i進入狀態i+1時,從S到狀態i上各個節的最短路徑已經找到,而且記錄在這些節點上,那麼在計算從起點S到第i+1狀態的某個節點Xi+1的最短路徑時,只要考慮從S到前一個狀態i全部的k個節點的最短路徑,以及從這個節點到Xi+1,j的距離便可。

 在本例中,維特比算法其實是從t=1時刻開始,不斷向後計算,尋找機率最大的路徑。

 

1.計算t=1時刻Ocry發生的機率:

 δ11 = P(Ocry,Seat) = P(Seat)P(Ocry|Seat)=0.3×0.7=0.21

  δ12 = P(Ocry,Szzz) = P(Szzz)P(Ocry|Szzz)=0.7×0.3=0.21

 

2.計算t=2時刻Otired發生的機率:

  δ21 =max(P(Ocry1,Seat1)P(Seat2|Seat1)P(Otired2|Seat2),P(Ocry1,Szzz1)P(Seat2|Szzz1)P(Otired2|Seat2))

 = max(P(Ocry1,Seat1)P(Seat2|Seat1), P(Ocry1,Szzz1)P(Seat2|Szzz1))·P(Otired2|Seat2)

  = max(δ11 P(Seat2|Seat1), δ12 P(Seat2|Szzz1)) ·P(Otired2|Seat2)

  = max(0.21×0.1,0.21×0.8)×0.1

 

          = 0.0168

 

 S21 = eat

 

  δ22 = max(P(Ocry1,Seat1)P(Seat2|Seat1)P(Otired2|Szzz2),P(Ocry1,Szzz1)P(Seat2|Szzz1)P(Otired2|Szzz2))

 = max(δ11 P(Szzz2|Seat1), δ12 P(Szzz2|Szzz1)) ·P(Otired2|Szzz2)

 = max(0.21×0.9,0.21×0.2)×0.5

 = 0.0945

 S22 = zzz

 

3.計算t=3時刻Ofind發生的機率:

  δ31 = max(δ21P(Seat3|Seat2), δ22P(Seat3|Szzz2)) ·P(Ofind3|Seat3)

 =max(0.0168×0.1, 0.0189×0.8)×0.2

 =0.003024

 

S31 = eat

 δ32  = max(δ21P(Szzz3|Seat2), δ22P(Szzz3|Szzz2)) ·P(Ofind3|Szzz3)

 =max(0.0168×0.9, 0.0189×0.2)×0.2

 =0.003024

 S32 = zzz

 

4.回溯,每一步的最大機率:

 max(δ1112), max(δ2122), max(δ3132)

 對應的狀態:eat or zzz, zzz, eat or zzz

 

語音識別

如下內容整理自吳軍的《數學之美》

  當咱們觀測到語音信號 o1,o2,o3 時,咱們要根據這組信號推測出發送的句子 s1,s2,s3。顯然,咱們應該在全部可能的句子中找最有可能性的一個。用數學語言來描述,就是在已知 o1,o2,o3,…的狀況下,求使得條件機率P (s1,s2,s3,…|o1,o2,o3….) 達到最大值的那個句子 s1,s2,s3,… 

其中

獨立性假設

馬爾可夫假設

由此能夠看出,語音識別正好符合HMM模型。

 


 

參考文獻:

1.吳軍《數學之美》

2.https://www.zhihu.com/question/20962240/answer/64187492

3.百度百科:https://baike.baidu.com/item/%E7%BB%B4%E7%89%B9%E6%AF%94%E7%AE%97%E6%B3%95/7765534?fr=aladdin

 做者:我是8位的

 出處:http://www.cnblogs.com/bigmonkey

 本文以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,非商業用途! 

相關文章
相關標籤/搜索