HMM學習筆記_2(從一個實例中學習HMM前向算法)


     HMM算法想必大家已經聽說了好多次了,完全看公式一頭霧水。但是HMM的基本理論其實很簡單。因為HMM是馬爾科夫鏈中的一種,只是它的狀態不能直接被觀察到,但是可以通過觀察向量間接的反映出來,即每一個觀察向量由一個具有相應概率密度分布的狀態序列產生,又由於每一個狀態也是隨機分布的,所以HMM是一個雙重隨機過程。

     HMM是語音識別,人體行為識別,文字識別等領域應用非常廣泛。

     一個HMM模型可以用5個元素來描述,包過2個狀態集合和3個概率矩陣。其分別為

     隱含狀態S,可觀測狀態O,初始狀態概率矩陣π,隱含狀態概率轉移矩陣A,觀測狀態轉移概率矩陣 B。

     HMM在實際應用中主要用來解決3類問題。

     1. 評估問題。

   即給定觀測序列 O=O1O2O3…Ot和模型參數λ=(A,B,π),怎樣有效計算這一觀測序列出現的概率

     2. 解碼問題。

   即給定觀測序列 O=O1O2O3…Ot和模型參數λ=(A,B,π),怎樣尋找滿足這種觀察序列意義上最優的隱含狀態序列S。

     3. 學習問題。

     即HMM的模型參數λ=(A,B,π)未知,如何求出這3個參數以使觀測序列O=O1O2O3…Ot的概率盡可能的大。

     這篇文章是針對第一個問題來說的,一般采用的是前向后向算法來解決評估問題。這里將的是前向算法。

     在此之前,先引入幾個符號:

     at(i) :  表示到第t個觀察值Ot時處於狀態i。

     : 表示在狀態i下產生觀察值 的概率。

     現在來看一下前向算法的理論來源。

     因為我們要解決的是模型估計問題。即計算概率 。將其利用如下公式化簡:

 

   

     因此首先要先計算

   ,其中Q為一給定的狀態序列 。又有

  

     其中

  

     所以

  

     因此最后求得

  

     由此可以看見其計算復雜度非常大,為

    為了解決這個問題,前向算法就出現了。首先定義了一個前向變量 。表示從1到t,輸出符號o序列,t時刻處於狀態i的累計輸出概率。

     因為前向變量有如下性質:

     初值:

    ,且

    ,最后有遞推關系:

   

     為什么這樣就可以簡化計算復雜度呢?其原因很簡單,因為每一次的at(i),我們都可以用at-1(i)來計算,就不用重復計算了。如下示意圖可以幫助我們形象的理解:

 

   

     看了這么多公式,是不是頭暈了?不急,下面看一個實例就會完全明白的。

     題目:HMM模型如下,試通過前向算法計算產生觀察符號序列O={ABAB}時每個時刻的 和總概率。

     當然初始概率矩陣π=(1,0,0),即開始處於狀態1。按照上面的公式理論,我們的遞推依次解出at(i)。解法如下:

     t=1時:

  

     t=2時:

  

     t=3時:

 

     t=4時:

 

     所以有最后的結果:

 

   

     最后將其計算過程示意圖表示如下:

 

  

 

 


免責聲明!

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



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