天天看點

隐馬爾科夫模型HMM-過程了解

  HMM模型是個經典模型,處理的是序列的判決問題。本文大體講解一下HMM的過程,而對其原理不作深入探究。

一階馬爾科夫模型

  判斷一個狀态 vi 到另一個狀态 vj 的轉變。

  比如今天的天氣狀态是“晴天”,那明天的天氣狀态是?,我們推測極大的可能也是“晴天”。這就是一個簡單的一階馬爾科夫模型的應用。

  一階馬爾科夫假設:每個狀态隻依賴于前一個狀态。(不是依賴于其前幾個狀态)

  前後關系用時間 t 和t+1表示,則前後狀态的轉移機率為: P(vj(t+1)|vi(t))=aij 。

  表示在目前時刻 t 時,狀态vi向下一時刻 t+1 狀态 vj 的轉移機率。

  

一階馬爾科夫圖示(w就是s)

  

隐馬爾科夫模型HMM-過程了解

一階隐馬爾科夫模型

  含有隐藏狀态 s(t) ,目标仍然是判斷可視狀态 v(t) 的轉變。

  我們若是隻能觀測到某一狀态,但是可觀測狀态是由隐含的某一狀态決定的,那麼就需要隐馬爾科夫模型出馬了。

  獨立性假設:可視狀态隻取決于目前隐藏狀态。

   P(vk(t)|sj(t))=bjk

  齊次馬爾科夫假設:每個狀态隻依賴于前一個狀态。

   P(vj(t+1)|vi(t))=aij

  歸一化限制: ∑jaij=1 和 ∑kbkj=1

  

一階隐馬爾科夫的圖示(w就是s)

  

隐馬爾科夫模型HMM-過程了解

  下面解決三個關鍵問題:

   估值:計算可視序列 VT=v1,v2,v3,...,vn 出現的機率。根據轉移機率 aij 和 bjk 。

   解碼:根據可視序列 VT=v1,v2,v3,...,vn 及轉移機率 aij 和 bjk ,計算最可能出現的隐狀态序列 ST=s1,s2,s3,...,sn 。

   學習:由一組樣本序列确定狀态轉移機率 aij 和 bjk 及隐狀态的先驗機率 πi 。

HMM估值

  已知HMM模型( aij 和 bjk ),如何求解産生可視序列 VT 的機率。

  可視序列的産生機率如下:

   P(VT)=∑rmaxr=1P(VT|STr)P(STr)

  其中 rmax 為 c 個隐狀态時的可能隐序列種數。

  因為隐序列的目前狀态僅僅取決于前一狀态,故:

  P(ST)=∏Tt=1P(st|st−1)

  因為目前可視狀态僅僅由目前隐狀态決定,故:

   P(VT|ST)=P(v1|ST)P(v2|ST)∗...∗P(vT|ST) 可視狀态間互不影響。

   P(VT|ST)=P(v1|s1)P(v2|s2)∗...∗P(vT|sT)=∏Tt=1P(vt|st)

  綜上所述:

   P(VT)=∑rmaxr=1∏Tt=1P(vt|st)∏Tt=1P(st|st−1)

   P(VT)=∑rmaxr=1∏Tt=1P(vt|st)P(st|st−1)

  上面這個式子計算起來實在太過複雜~現在介紹一種簡單計算方法,遞歸地計算 P(VT) ,累積前面的,計算當次的,再累積前面的,計算當次的,直到整個序列都計算完畢。

  設 αi(t) 表示HMM在 t 時刻,位于隐狀态si,并且已經産生了可見序列 VT 的前 t 個符号的機率。

  αi=⎧⎩⎨⎪⎪01bjkv(t)∑iαi(t−1)aijt=0且j≠初始狀态t=0且j=初始狀态其他

  HMM前向估計的遞歸方法示意圖(這裡的 w 是上面的s)。

  

隐馬爾科夫模型HMM-過程了解

   HMM前向算法過程

  1. Initialize t=0,aij,bjk ,可見序列 VT , αj(0)=1

  2. for t=t+1

  3. αj(t)=bjkv(t)∑ci=1αi(t−1)aij

  4. until t=T

  5. returnP(VT)

   HMM後向算法過程

  1. Initialize t=T,aij,bjk ,可見序列 VT , βj(T)

  2. for t=t−1

  3. βi(t)=bjkv(t+1)∑cj=1βj(t+1)aij

  4. until t=1

  5. returnP(VT)

  其中,定義 βi(t) 為在 t 時刻位于狀态si,并且将産生 t 時刻之後的目标序列(時間範圍為從t+1到 T )的機率。

  βi(t)=⎧⎩⎨⎪⎪01bjkv(t+1)∑jβj(t+1)aijsi(t)≠s0且t=Tsi(t)=s0且t=T其他

HMM解碼

  已知一個觀測序列 VT ,解碼就是找到與其對應的最可能的隐狀态序列 ST 。

  一種簡單的方法是周遊所有的可能的隐狀态序列的機率,選擇最大的作為解碼結果。但是這很明顯不現實,因為計算量實在過于巨大。

  現提供一種簡單思路,把每個時刻最可能的隐狀态 s(t) 找到。

  HMM解碼算法(Viterbi)

  1. Initialize paht為空 , t=0

  2.    for t=t+1

  3.      j=1

  4.      for j=j+1

  5.        αj(t)=bjkv(t)∑ci=1αi(t−1)aij

  6.      until j=c

  7.      j′=argmaxjαj(t)

  8.     将隐狀态 sj′ 添加到 path 中

  9.    until t=T

  10.   return path

  這種解碼方法(維特比算法)的缺點是:不能夠保證找到的路徑就是合法的路徑,即找到的路徑有可能是不連貫的。因為是用局部最優解串聯成的解。

HMM學習

  學習模型的過程就是确定模型的參數,轉移機率 aij,bjk 及隐狀态的先驗機率 πi 。

  (1)對于有監督問題

   a^ij=隐狀态si轉到sj的頻次隐狀态si的所有隐狀态轉移頻次

   b^ij=隐狀态sj轉到可視狀态vk的頻次隐狀态sj的所有可視狀态轉移頻次

   π^i=樣本中 t=1 時,可視狀态對應的隐藏狀态為si的頻率

  (2)對于無監督問題

  解決無監督的HMM訓練問題,就是大名鼎鼎的Baum-Welch算法,也叫前向-後向算法。

  該算法是“廣義期望最大化算法”的一種具體實作,其核心思想是:通過遞歸方式更新權重,以得到能夠更好地描述(解釋)訓練樣本的模型參數。

  定義從隐狀态 si(t−1) 到 sj(t) 的機率 γij(t) 如下:

  

γij(t)=αi(t−1)aijbjkβj(t)P(VT|θ)

  其中, P(VT|θ) 是模型用任意的隐含路徑産生序列 VT 的機率, γij(t) 則表示了在産生可序列 VT 的條件下,從隐狀态 si(t−1) 到 sj(t) 的機率。

   aij 的估計值 aij^ 如下, K 表示可轉移的狀态數量:

  

a^ij=∑Tt=1γij(t)∑Tt=1∑Kk=1γik(t)

  上式中,分子表示了 si 到 sj 的期望;分母表示了 si 轉移的總期望。

   bjk 的估計值 bjk^ 如下:

   b^jk=∑Tt=1∑v(t)=vkγik(t)∑Tt=1∑γik(t)

  上式中,分子表示了隐狀态 sj 對應的特定的可視狀态 vk 對應的頻次;分母表示了隐狀态 sj 對應的所有的可視狀态的頻次。

  ?初始狀态機率怎麼确定的?

   前向-後向算法過程

  1. Initial aij,bjk 訓練序列 VT ,收斂判據 θ , z=0

  2.    doz=z+1

  3.      由a(z−1)和b(z−1)計算a^(z)

  4.      由a(z−1)和b(z−1)計算b^(z)

  5.      update:

  6.      aij(z)=a^ij(z−1)

  7.      bjk(z)=b^jk(z−1)

  8.    until maxi,j,k[aij(z)−aij(z−1),bjk(z)−bjk(z−1)]<θ

  9.    return aij=aij(z);

           bjk=bjk(z)

   πi=目前參數下,初始隐狀态s1=si的機率目前參數下,VT的機率=P(VT,s1=si|a,b)P(VT|a,b)

   πi 是隐狀态的先驗機率估計,需要根據樣本推測隐狀态樣本,然後計算。

小結

  HMM算法是個經典算法,在語音識别、自然語言處理、生物資訊等領域應用廣泛。隐馬爾科夫模型是關于時序的機率模型,描述一個由隐藏的馬爾科夫鍊随機生成不可觀測的狀态的序列,再由各個狀态随機生成一個觀測值而産生觀測序列的過程。

繼續閱讀