1. 程式人生 > >【統計學習方法-李航-筆記總結】十、隱馬爾可夫模型

【統計學習方法-李航-筆記總結】十、隱馬爾可夫模型

本文是李航老師《統計學習方法》第十章的筆記,歡迎大佬巨佬們交流。

主要參考部落格:

https://www.cnblogs.com/YongSun/p/4767667.html

https://www.cnblogs.com/naonaoling/p/5701634.html

https://www.cnblogs.com/fxjwind/p/3949993.html

主要內容:

1. 隱馬爾可夫模型的基本概念

2. 概率計算演算法

3. 學習演算法

4. 預測演算法

    隱馬爾可夫模型(hidden Markov model, HMM)是可用於標註問題的統計學習模型,標註問題的目的在於學習一個模型,使它能夠對觀測序列給出標記序列作為預測,HMM描述由隱藏的馬爾可夫鏈隨機生成觀測序列的過程,屬於生成模型。

1. 隱馬爾可夫模型的基本概念

(1)補充馬爾科夫概念:

    馬爾科夫假設:當前的狀態只與之前的狀態有關

    馬爾科夫過程:當前的狀態只與前n個狀態有關,被稱為n階馬爾科夫模型。

    馬爾科夫鏈:可以理解為帶有概率的狀態轉移鏈

    一階馬爾科夫模型:當前的狀態只與前一狀態有關 :

  (a)若有M個狀態,則共有M*M個狀態轉移

  (b)轉移概率:每一個狀態轉移都有一定的概率,稱為~,所有的轉移概率用一個M*M的矩陣表示

  (c)每一個系統開始的時候,需要一個初始概率,稱為π向量,表示每種狀態作為初始狀態出現的概率

    隱馬爾科夫模型:可能存在這樣一種情況,我們想要的狀態並不能直接觀察得到,但是這個狀態和其他某種可觀測的狀態之間存在一定的概率關係,也就是說可以通過那種可觀測的狀態(觀測狀態),來求解我們想要得到的狀態(隱狀態),這就是隱馬爾科夫模型的主要思想。

(2)隱馬爾可夫模型的定義

  (a) 隱馬爾可夫模型:隱馬爾可夫模型是關於時序的概率模型,描述由一個隱藏的馬爾可夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程。隱藏的馬爾可夫鏈隨機生成的狀態的序列,稱為狀態序列(state sequence):每個狀態生成一個觀測,而由此產生的觀測的隨機序列,稱為觀測序列

(observation sequenoe )。序列的每一個位置又可以看作是一個時刻。

    隱馬爾可夫模型由初始概率分佈狀態轉移概率分佈以及觀測概率分佈確定。隱馬爾可夫模型的形式定義如下:

    設Q是所有可能的狀態的集合,V是所有可能的觀測的集:

    

    其中,N是可能的狀態數,M是可能的觀測數;

    I是長度為T的狀態序列,O是對應的觀測序列:

    

    A是狀態轉移概率矩陣

        

    其中,

    表示:在時刻t處於狀態qi的條件下在時刻t+1轉移到狀態qj的概率。

    B是觀測概率矩陣

    

    其中,

    表示:在時刻t處於狀態qj的條件下生成觀測vk的概率。

    π是初始狀態概率向量

    

    其中,

    表示:時刻t =1處於狀態qi的概率。

  (b)隱馬爾可夫模型的三要素:

    隱馬爾可夫模型由初始狀態概率向量π、狀態轉移概率矩陣A和觀測概率矩陣B決定,其中,π個A決定狀態序列,B決定觀測序列。A,B,π稱為隱馬爾可夫模型的三要素,因此,隱馬爾可夫模型λ可以用三元符號表示,即:

    狀態轉移概率矩陣A與初始狀態概率向量π確定了隱藏的馬爾可夫鏈,生成不可觀測的狀態序列。

    觀測概率矩陣B確定瞭如何從狀態生成觀測,與狀態序列綜合確定瞭如何產生觀測序列。

  (c)隱馬爾可夫模型的兩個基本假設

    假設一:齊次馬爾可夫性假設,即假設隱藏的馬爾可夫鏈在任意時刻t的狀態只依賴於其前一時刻的狀態,與其他時刻的狀態及觀測無關,也與時刻t無關,即:

    

 

    假設二:觀測獨立性假設,即假設任意時刻的觀測只依賴於該時刻的馬爾可夫鏈的狀態,與其他觀測及狀態無關:

    

    隱馬爾可夫模型可以用於標註,這時狀態對應著標記。標註問題是給定觀測的序列預測其對應的標記序列可以假設標註問題的資料是由隱馬爾可夫模型生成的。這樣我們可以利用隱馬爾可夫模型的學習與預測演算法進行標註。

    有描述隱馬爾可夫模型的例子如下:

    

    

    解釋:B的行列代表每個盒子得到紅球或白球狀態的概率。

(3)觀測序列的生成過程

    根據隱馬爾可夫模型的定義,可將一個長度為T的觀測序列的生成過程描述如下:

    

(4)隱馬爾可夫模型的三個基本問題

    (a)概率計算問題。給定模型和觀測序列O=(o1,o2,... ,oT),計算在模型λ下觀測序列O出現的概率

    (b)學習問題。己知觀測序列O=(o1,o2,... ,oT),估計模型引數,使得在該模型下觀測序列概率最大。即用極大似然估計的方法估計引數。

    (c)預測問題,也稱為解碼(decoding)問題。己知模型和觀測序列O=(o1,o2,... ,oT),求對給定觀測序列條件概率P(I | O)最大的狀態序列I=(i1,i2,... ,iT),即給定觀測序列,求最有可能的對應的狀態序列。

2. 概率計算演算法

(1)直接計算(概念上可行實際不可行的方法)

    給定模型和觀測序列,需要計算觀測序列O出現的概率

    最直接的想法是按照概率公式直接計算,通過列舉所有可能的長度狀態為T的序列I=(i1,i2,...,iT),求各個狀態序列I與觀測序列O=(o1,o2,...,oT)的聯合概率P(O,I|λ),然後對所有可能的狀態序列求和,得到,即:

    狀態序列I的概率是:

    對固定的狀態序列I,觀測序列O的概率是:

    O和I同時出現的聯合概率為:

    然後,對所有可能的狀態序列I求和,得到觀測序列O的概率:

    但是,最後一個公式的計算量很大,是O(TN^T)階的,因此直接計算不可行。

(2)前向演算法

    前向概率:給定隱馬爾可夫模型λ,定義到時刻t部分觀測序列為o1,o2,...,ot,且狀態為qi的概率為前向概率,記作:

    

    可以遞推地求得前項概率及觀測序列概率

    觀測序列概率的前向演算法

    

    

    步驟(1)初始化前向概率,是初始時刻的狀態i1=qi和觀測o1的聯合概率。

    步驟(2)是前向概率的遞推公式,計算到時刻t+1部分觀測序列為o1,o2,... ,ot ,ot+1且在時刻t+1處於狀態qi的前向概率,如圖10.1所示。

    

    αi(j)是到時刻t觀測到o1,o2,... ,ot並在時刻t處於狀態qj的前向概率,那麼乘積αi(j)*αji就是到時刻t觀測到o1,o2,... ,ot在在時刻t處於狀態qj而在時刻t+1到達狀態qi的聯合概率。對這個乘積在時刻t的所有可能的N個狀態qj求和,其結果就是到時刻t觀測為o1,o2,... ,ot並在時刻t+1處於狀態qi的聯合概率。方括弧裡的值與觀測概率bi(ot+1)的乘積恰好是到時刻t+1觀測到

o1,o2,... ,ot ,ot+1且在時刻t+1處於狀態qi的前向概率。

    演算法高效性的分析:高效的關鍵是其區域性計算前向概率,然後利用路徑結構(如下圖所示)將前向概率遞推到全域性。具體地,在時刻t=1,計算α1(i)的N個值;在時刻t = 1,2,...,T-1,計算\alpha _{i+1}(i)的N個值,而且每個時刻的\alpha _{i+1}(i)的計算利用前一時刻N個\alpha _{i}(j),這樣計算量減少的原因在於每一次直接引用前一次的計算結果,避免重複計算,計算量是O(N^2T)階。

    

    看下面例子的計算來幫助理解計算過程:

    

        

(3)後向演算法

    後向概率:給定隱馬爾可夫模型λ,定義在時刻t狀態為qi的條件下,從t+1到T的部分觀測序列為的概率為後向概率,記作:

    可以用遞推的方法求得後向概率及觀測序列概率,演算法描述:

    

    

    步驟(1)初始化初始化後向概率,對最終時刻的所有狀態qi規定

    步驟(2)是後向概率的遞推公式,如圖10.3所示,為了計算在時刻t部狀態為qi的條件下,從t+1到T的部分觀測序列為ot+1,ot+2 ,... ,oT的後向概率。只需考慮在時刻t十1所有可能的N個狀態qj的轉移概率(即aij項),以及在此狀態下的觀測ot+1的觀測概率(即bj(oi+1)項),然後考慮狀態qj之後的觀測序列的後向概率(即項)。

    步驟(3)求解的思路與步驟(2)一致,只是初始概率代替轉移概率。

    後向概率遞推公式的圖解如下,它和前項的關係是可以看做圖10.2的從一個點出發往前看(由它前面的計算得到它,也就是前像計算),以及從這個點出發往後看(由後邊的計算得到它,後向計算)。

    利用前向概率和後向概率的定義可以吧觀測序列概率P(O|λ)統一寫成

    

    當t=1或者t=T-1時,分別為式(10.17)和(10.21)

(4)一些概率與期望值的計算

  (a)給定模型λ和觀測O,在時刻t處於狀態qi的概率,記為:

    可以通過前向後向概率計算:

    

    由前向概率和後向概率可知:

    

    於是:

  (b)給定模型λ和觀測O,在時刻t處於狀態qi且在t+1時刻處於狀態qj的概率,記為:

    可以通過前向後向概率計算:

    

    而:

    因此:

  (c)將對各個時刻t求和,可以得到一些有用的期望值:

    在觀測O下狀態i出現的期望值:

    在觀測O下由狀態i轉移的期望值:

    在觀測O下由狀態i轉移到狀態j的期望值:

 

3. 學習演算法

    隱馬爾可夫模型的學習,根據訓練資料是包括觀測序列和對應的狀態序列還是隻有觀測序列,可以分別由監督學習與非監督學習實現。

(1)監督學習方法

    假設已給訓練資料包含S個長度相同的觀測序列和對應的狀態序列{(O1,I1),...,(Os,Is)},利用極大似然估計法來估計隱馬爾可夫模型的引數。

(a)轉移概率aij的估計 
   設樣本中時t處於狀態i時刻t+1轉移到狀態j的頻數為Aij,那麼狀態轉移概率的估計是

    

 

(b)觀測概率bj(k)的估計

   設樣本中狀態為j並觀測為k的頻數是Bjk,那麼狀態為j觀測為k的概率的估計是

    

(c)初始狀態概率的估計為S個樣本中初始狀態為qi的頻率

(2)Baum-Welch演算法

    假設給定訓練資料只包含S個長度為T的觀測序列{O1,...,Os)}而沒有對應的狀態序列,目標是學習隱馬爾可夫模型的引數。將觀測序列資料看作觀測資料O,狀態序列資料看作不可觀測的隱資料I,那麼隱馬爾可夫模型事實上是一個含有隱變數的概率模型:

    它的引數學習可以由EM演算法實現:

  (a)確定完全資料的對數似然函式:

    完全資料由觀測資料和隱資料組成(O,I)=(o1,o2,... ,oT,i1,i2,... ,iT),對數似然函式是

  (b)EM演算法的E步:求Q函式

    

    其中\overline{\lambda }是隱馬爾可夫模型的當前估計值,λ是要極大化的隱馬爾可夫模型引數:

     

    於是:

  (c)EM的M步:極大化Q函式求模型引數A,B,π

    單獨極大化上式(10.34)的每一項:

    

    

    

(3)Baum-Welch模型引數估計公式

    將式(10.36)至(10.38)中的各概率分別用表示,可將相應的公式寫成:

    

    Baum-Welch演算法:

    

  

4. 預測演算法

(1)近似演算法

    近似演算法的想法是:在每個時刻t選擇在該時刻最有可能出現的狀態i_{t}^{*},得到一個狀態序列作為預測的結果。

在每一時刻t最有可能的狀態i_{t}^{*}通過下式得到:

    

 

    近似演算法的優點是計算簡單,其缺點是不能保證預測的狀態序列整體是最有可能的狀態序列,因為預測的狀態序列可能有實際不發生的部分。該方法得到的狀態序列中有可能存在轉移概率為0的相鄰狀態。

(2)維特比演算法

    維特比演算法實際是用動態規劃解隱馬爾可夫模型預側問題,即用動態規劃(dynamic programming)求概率最大路徑(最優路徑)。一條路徑對應著一個狀態序列。

    根據動態規劃原理,最優路徑具有這樣的特性:如果最優路徑在時刻t通過結點i_{t}^{*},那麼這一路徑從結點i_{t}^{*}到終點i_{T}^{*}的部分路徑,對於從i_{t}^{*}i_{T}^{*}的所有可能的部分路徑來說,必須是最優的。依據這一原理,我們只需從時刻t=1開始,遞推地計算在時刻t狀態為i的各條部分路徑的最大概率,直至得到時刻t=T狀態為i的各條路徑的最大概率。時刻t=T的最大概率即為最優路徑的概率P*。

    最優路徑的終結點i_{T}^{*}也同時得到。之後,從終結點i_{T}^{*}開始,由後向前逐步求得結點

    維特比演算法描述:

   

    

    維特比演算法的例子: