隱馬爾科夫模型(HMM)原理詳解

  隱馬爾可夫模型(Hidden Markov Model,HMM)是可用於標註問題的統計學習模型,描述由隱藏的馬爾可夫鏈隨機生成觀測序列的過程,屬於生成模型。HMM在語音識別、天然語言處理、生物信息、模式識別等領域都有着普遍的應用。html

1、 HMM模型的定義

    HMM模型是關於時序的機率模型,描述由一個隱藏的馬爾可夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程。隱藏的馬爾可夫鏈隨機生成的狀態的序列稱爲狀態序列(state sequence);每一個狀態生成一個觀測,再由此產生的觀測的隨機序列,稱爲觀測序列(observation sequence。序列的每個位置能夠看做是一個時刻。算法

    HMM模型由初始機率分佈、狀態轉移機率分佈、觀測機率分佈肯定。設$Q$是全部可能的狀態的集合,$V$是全部可能的觀測的集合,即:函數

$Q=\left\{q_{1}, q_{2}, \cdots, q_{N}\right\}, \quad V=\left\{v_{1}, v_{2}, \cdots, v_{M}\right\}$學習

  其中,$N$是可能的狀態數,$M$是可能的觀測數。記$I$是長度爲$T$的狀態序列,$O$是對應的觀測序列,即:spa

$I=\left(i_{1}, i_{2}, \cdots, i_{T}\right), \quad O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)$.net

  記$A$爲狀態轉移機率矩陣:3d

$A=\left[a_{i j}\right]_{N \times N}$
code

  其中,$a_{i j}=P\left(i_{t+1}=q_{j} | i_{t}=q_{i}\right), \quad i=1,2, \cdots, N ; j=1,2, \cdots, N$,即在時刻$t$處於狀態​$q_{i}$的條件下在時刻$t+1$轉移到狀態​$q_{j}$的機率。htm

    記$B$觀測機率矩陣:blog

$B=\left[b_{j}(k)\right]_{N \times \mu}$

  其中,$b_{j}(k)=P\left(o_{t}=v_{k} | i_{t}=q_{j}\right), \quad k=1,2, \cdots, M ; j=1,2, \cdots, N$,$N$是在時刻$t$處於狀態$q_{j}$的條件下生成觀測$v_{k}$的機率。

    記$\pi $爲初始狀態機率向量:

$\pi=\left(\pi_{i}\right)$

  其中,$\pi_{i}=P\left(i_{1}=q_{i}\right), \quad i=1,2, \cdots, N$表示時刻$t=1$處於狀態$q_{i}$的機率。

    所以,HMM模型$\lambda$能夠用三元符號表示,即:

$\lambda=(A, B, \pi)$

  $A, B, \pi$稱爲HMM模型的三要素。

   舉例說明

  假設有4個盒子,每一個盒子都有紅白兩種顏色的球,球的數量以下:

  盒子 1 2 3 4   紅球數 5 3 6 8   白球數 5 7 4 2

  按下面的方法抽取球:
  開始時,從4個盒子中等機率地抽取一個,再從盒子中隨機抽一個球,記錄顏色後放回。而後從當前盒子轉移到下一個盒子,若是當前爲盒子1,下一個盒子必定是2;若是當前爲盒子2或3,以機率0.4和0.6轉移到左邊或右邊的盒子;若是當前爲盒子4,各以0.5機率停留在盒子4或轉移到盒子3。轉移後,再從盒子中隨機抽一個球,記錄顏色後放回。
  如今假設咱們要連續地抽5次。抽取結果以下:

$O$=( 紅 , 紅 , 白 , 白 , 紅 )

  這個例子中有兩個隨機序列:
  盒子序列(狀態序列)和球顏色序列(觀測序列)。前者是隱藏的,後者是可觀測的。
  則狀態集合$Q$和觀測集合$V$爲:

$Q$=(盒子1,盒子2,盒子3,盒子4),   $V$=(紅,白)

  狀態序列和觀測序列長度T=5。
  開始時,從4個盒子中等機率地抽取一個,則初始機率分佈$\pi $爲:

$\pi=(0.25,0.25,0.25,0.25)^{\mathrm{T}}$  

  狀態轉移機率分佈$A$爲(由盒子轉移規則得出):

  觀測機率分佈$B$爲(由每一個盒子紅白球比例計算得出):

2、兩個基本假設和三個基本問題

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

  • 齊次馬爾可夫性假設,即假設隱藏的馬爾可夫鏈在任意時刻t的狀態只依賴於其前一時刻的狀態,與其餘時刻的狀態及觀測無關,也與時刻t無關,即:
    $P\left(i_{t} | i_{t-1}, o_{t-1}, \cdots, i_{1}, o_{1}\right)=P\left(i_{t} | i_{t-1}\right), \quad t=1,2, \cdots, T$
  • 觀測獨立性假設,即假設任意時刻的觀測只依賴於該時刻的馬爾可夫鏈的狀態,與其餘的觀測和狀態無關,即:
    $P\left(o_{t} | i_{T}, o_{T}, i_{T-1}, o_{T-1}, \cdots, i_{t+1}, o_{t+1}, i_{t-1}, i_{t-1}, \cdots, i_{1}, o_{1}\right)=P\left(o_{t} | i_{t}\right)$

  隱馬爾可夫模型有3個基本問題: 

  一、機率計算問題  給定模型λ和觀測序列$O$,計算在模型$\lambda $下觀測序列$O$出現的慨率$P(O\mid \lambda)$。

  二、學習問題  已知觀測序列$O$,估計模型$\lambda $的參數,使得在該模型下觀測序列機率$P(O\mid \lambda)$最大。即用極大似然估計的方法估計參數。

  三、預測問題,也稱爲解碼問題  已知模型λ和觀測序列$O$,求對給定觀測序列條件機率$P(I\mid O)$最大的狀態序列。即給定觀測序列,求最有可能的對應的狀態序列。

 3、機率計算問題:機率計算方法 

     機率計算即給定模型$\lambda=(A, B, \pi)$和觀測序列$O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)$,計算在模型$\lambda $下,觀測序列$o$出現的機率$P(O | \lambda)$

  3.1 直接計算法

     直接計算法是經過列舉全部可能的長度爲$T$的狀態序列$I=\left(i_{1}, i_{2}, \cdots, i_{T}\right)$,求各個狀態序列I II和觀測序列$O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)$的聯合機率$P(O, I | \lambda)$,而後對全部可能的狀態序列求和,獲得$P(O | \lambda)$

    狀態序列$I=\left(i_{1}, i_{2}, \cdots, i_{T}\right)$的機率爲:

$P(I | \lambda)=\pi_{i_{1}} a_{i_{1} i_{2}} a_{i_{2} i_{3}} \cdots a_{i_{T-1} i_{T}}$

  對固定的狀態序列$I=\left(i_{1}, i_{2}, \cdots, i_{T}\right)$,觀測序列$O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)$的機率爲$P(O | I, \lambda)$

$P(O | I, \lambda)=b_{i_{1}}\left(o_{1}\right) b_{i_{2}}\left(o_{2}\right) \cdots b_{i_{T}}\left(o_{T}\right)$

  $O$和$I$同時出現的l聯合機率爲:

在這裏插入圖片描述

  對全部可能的狀態序列$I$求和,獲得觀測序列$O$的機率$P(O | \lambda)$,即:

在這裏插入圖片描述

  可是,經過這種計算方式的計算量很是大,其複雜度爲$O\left(T N^{r}\right)$,所以是不可行的。在真實狀況下,通常採用更有效的算法,即前向-後向算法。

  3.2 前向算法

    前向機率:給定隱馬爾可夫模型$\lambda$,定義到時刻$t$部分觀測序列爲$o_{1}, o_{2}, \cdots, o_{t}$且狀態爲$q_{i}$的機率爲前向機率,記做:
          $\alpha_{t}(i)=P\left(o_{1}, o_{2}, \cdots, o_{t}, i_{t}=q_{i} | \lambda\right)$

    觀測序列機率的前向算法:

  一、輸入:隱馬爾可夫模型$\lambda $,觀測序列$O$

  二、輸出:觀測序列機率$P(O | \lambda)$

  三、初值:

          $\alpha_{1}(i)=\pi_{i} b_{i}\left(o_{1}\right), \quad i=1,2, \cdots, N$
  四、遞推:對$t=1,2, \cdots, T-1$

          $\alpha_{t+1}(i)=\left[\sum_{j=1}^{N} \alpha_{t}(j) a_{j i}\right] b_{i}\left(o_{t+1}\right), \quad i=1,2, \cdots, N$

  五、終止:

          $P(O | \lambda)=\sum_{i=1}^{N} \alpha_{T}(i)$

    前向算法之因此能夠提升HMM的觀測序列機率計算速度,是由於在每個時刻計算時,均可以直接引用上一個時刻的計算結果,所以,其時間複雜度是$O(\left(N^{2} T\right)$,比直接計算法小不少。

  3.3 後向算法

    後向機率:給定隱馬爾可夫模型$\lambda$,定義在時刻$t$狀態爲$q_{i}$的條件下,從t+1到T的部分觀測序列爲$o_{t+1}, o_{t+2}, \cdots, o_{T}$的機率爲後向機率,記做

            $\beta_{t}(i)=P\left(o_{t+1}, o_{t+2}, \cdots, o_{T} | i_{t}=q_{i}, \lambda\right)$

    觀測序列機率的後向算法:

  一、輸入:隱馬爾可夫模型$\lambda $,觀測序列$O$

  二、輸出:觀測序列機率$P(O | \lambda)$

  三、初值:

            $\beta_{T}(i)=1, \quad i=1,2, \cdots, N$

  四、遞推:對$t=T-1, T-2, \cdots, 1$
            $\beta_{t}(i)=\sum_{j=1}^{N} a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j), \quad i=1,2, \cdots, N$

  五、終止:$P(O | \lambda)=\sum_{i=1}^{N} \pi_{i} b_{i}\left(o_{1}\right) \beta_{1}(i)$

    根據前向機率和後向機率的定義,能夠將觀測序列機率$P(O | \lambda)$統一寫成:
            $P(O | \lambda)=\sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j), \quad t=1,2, \cdots, T-1$

  3.4 一些機率值與指望的計算

    給定模型$\lambda$和觀測O,在時刻t處於狀態$q_{i}$的機率,記:
            $\gamma_{t}(i)=P\left(i_{t}=q_{i} | O, \lambda\right)=\frac{P\left(i_{t}=q_{i}, O | \lambda\right)}{P(O | \lambda)}$

  由前向機率和後向機率的定義可知:
            $\alpha_{t}(i) \beta_{t}(i)=P\left(i_{t}=q_{i}, O | \lambda\right)$

  所以有:
            $\gamma_{t}(i)=\frac{\alpha_{t}(i) \beta_{t}(i)}{P(O | \lambda)}=\frac{\alpha_{t}(i) \beta_{t}(i)}{\sum_{j=1}^{N} \alpha_{t}(j) \beta_{t}(j)}$

    給定模型$\lambda$和觀測O,在時刻t處於狀態$q_{i}$且在時刻t+1處於狀態$q_{j}$的機率,記爲:
            $\xi_{t}(i, j)=P\left(i_{t}=q_{i}, i_{t+1}=q_{j} | O, \lambda\right)$

  能夠經過前向後向機率計算:
            $\xi_{i}(i, j)=\frac{P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}{P(O | \lambda)}=\frac{P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}{\sum_{i=1}^{N} \sum_{j=1}^{N} P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}$

​  
            $P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)=\alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)$

  所以有
            $\xi_{t}(i, j)=\frac{\alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)}{\sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)}$

4、學習算法

    HMM的學習算法是指對模型的參數$\pi$、A、B進行估計,通常根據訓練數據是包括觀測序列和對應的狀態序列仍是隻包括觀測序列,能夠分別由監督學習和非監督學習實現。

  4.1 監督學習方法

    假設已給訓練數據集包含S個長度相同的觀測序列和對應的狀態序列$\left\{\left(O_{1}, I_{1}\right),\left(O_{2}, I_{2}\right), \cdots,\left(O_{s}, I_{s}\right)\right\}$,那麼能夠利用極大似然估計法來估計隱馬爾可夫模型的參數。具體的方法以下:

  一、轉移機率$a_{i j}$的估計:設樣本中時刻t處於狀態i ii時刻t+1轉移到狀態j的頻數爲$A_{i j}$,那麼狀態轉移機率$a_{i j}$的估計是:

            $\hat{a}_{i j}=\frac{A_{y}}{\sum_{j=1}^{N} A_{i j}}, \quad i=1,2, \cdots, N ; j=1,2, \cdots, N$

  二、觀測機率$b_{j}(k)$的估計:設樣本中狀態爲$jb$並觀測爲k的頻數是$B_{j k}$,那麼狀態爲j觀測爲k的機率$b_{j}(k)$的估計爲:

            $\hat{b}_{j}(k)=\frac{B_{j k}}{\sum_{k=1}^{M} B_{j k}}, \quad j=1,2, \cdots, N_{i} \quad k=1,2, \cdots, M$

  三、初始狀態機率$\pi_{i}$的估計$\hat{\pi}_{i}$S個樣本中初始狀態爲$q_{i}$的頻率。

  4.2  非監督學習方法——Baum-Welch算法

    因爲監督學習須要大量的標註數據,須要耗費不少的人力物力,所以,有時會採用非監督學習方法來進行參數估計。假設給定訓練數據集只包含S個長度爲T的觀測序列$\left\{O_{1}, O_{2}, \cdots, O_{s}\right\}$而沒有對應的狀態序列,咱們將觀測序列看做觀測數據O,而狀態序列看做不可觀測的隱數據I,這樣一來,HMM模型就能夠看做是一個含有隱變量的機率模型:
            $P(O | \lambda)=\sum_{I} P(O | I, \lambda) P(I | \lambda)$

  所以,能夠採用EM算法來進行參數估計。

  一、肯定徹底數據的對數似然函數:全部觀測數據寫成$O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)$,全部隱數據寫成$I=\left(i_{1}, i_{2}, \cdots, i_{T}\right)$,徹底數據爲$ (O, I)=\left(o_{1}, o_{2}, \cdots, o_{T}, i_{1}, i_{2}, \cdots, i_{T}\right)$,徹底數據的對數似然函數是$\log P(O, I | \lambda)$

  二、E步:求Q函數

            $Q(\lambda, \overline{\lambda})=\sum_{I} \log P(O, I | \lambda) P(O, I | \overline{\lambda})$

  其中,$\overline{\lambda}$是HMM模型參數的當前估計值,$\lambda$是要極大化的HMM模型參數。
在這裏插入圖片描述

  所以,Q函數能夠寫爲:
在這裏插入圖片描述

  三、M步:分別對參數進行極大化,第1項能夠寫爲:

            $\sum_{I} \log \pi_{i_{b}} P(O, I | \overline{\lambda})=\sum_{i=1}^{N} \log \pi_{i} P\left(O, i_{1}=i | \overline{\lambda}\right)$

  根據$\sum_{i=1}^{N} \pi_{i}=1$,利用拉格朗日乘子法,寫出拉格朗日函數:
            $\sum_{i=1}^{N} \log \pi_{i} P\left(O, i_{1}=i | \overline{\lambda}\right)+\gamma\left(\sum_{i=1}^{N} \pi_{i}-1\right)$

  對其求偏導並令其爲0可得:

            $\pi_{i}=\frac{P\left(O, i_{1}=i | \overline{\lambda}\right)}{P(O | \overline{\lambda})}$

  用$\gamma_{t}(i)$, $\quad \xi_{i}(i, j)$表示能夠寫爲:
            $\pi_{i}=\gamma_{1}(i)$

  同理,對轉移機率和觀測機率進行求偏導可得:
            $a_{i j}=\frac{\sum_{i=1}^{T-1} \xi_{i}(i, j)}{\sum_{i=1}^{T-1} \gamma_{i}(i)}$

            $b_{j}(k)=\frac{\sum_{t=1, o_{k}=v_{k}}^{T} \gamma_{t}(j)}{\sum_{t=1}^{T} \gamma_{t}(j)}$

5、預測算法

    預測算法是指當給定模型$\lambda$和觀測序列O,求機率最大的狀態序列。通常有兩種算法:近似算法和維特比算法。

  5.1 近似算法

    近似算法的思想是,在每一個時刻t tt選擇在該時刻最有可能出現的狀態$i_{t}^{*}$,從而獲得一個狀態序列$I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right)$,將它做爲預測的結果。

    給定HMM模型$\lambda$和觀測序列O,在時刻t處於狀態$q_{i}$的機率$\gamma_{t}(i)$爲:
            $\gamma_{t}(i)=\frac{\alpha_{t}(i) \beta_{t}(i)}{P(O | \lambda)}=\frac{\alpha_{t}(i) \beta_{t}(i)}{\sum_{j=1}^{N} \alpha_{t}(j) \beta_{t}(j)}$

  在每個時刻t最有可能的狀態:
            $i_{t}^{*}=\arg \max _{1 \leqslant i \leqslant N}\left[\gamma_{t}(i)\right], \quad t=1,2, \cdots, T$

  從而獲得狀態序列

            $I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right)$

    雖然近似計算思想簡單,可是預測的序列可能有實際不發生的部分,即有可能出現轉移機率爲0的相鄰狀態,無法保證總體上的狀態序列是最有可能的。

  5.2 維特比算法

    維特比算法則經過動態規劃求機率最大的路徑,每一條路徑即對應着一個狀態序列。維特比算法從時刻t=1開始,遞推地計算在時刻t狀態爲$i$的各條部分路徑的最大機率,直到獲得時刻t=T狀態爲$i$的各條路徑的最大機率,時刻t=T的最大機率記爲最優路徑的機率$P^{*}$,最優路徑的終結點$i_{T}^{*}$也同時獲得,以後,從終結點開始,由後向前逐步求得結點$i_{T-1}^{*}, \cdots, i_{1}^{*}$,最終獲得最優路徑$I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right)$

    首先定義兩個變量$\delta$和$\psi$,定義在時刻t狀態爲$i$的全部單個路徑$\left(i_{1}, i_{2}, \cdots, i_{t}\right)$中機率最大值爲

            $\delta_{t}(i)=\max _{i_{1}, i_{2}, \cdots,_{t-1}} P\left(i_{t}=i, i_{t-1}, \cdots, i_{1}, o_{t}, \cdots, o_{1} | \lambda\right), \quad i=1,2, \cdots, N$

  由定義可得$\delta$的遞推公式:

在這裏插入圖片描述
    
定義在時刻t狀態爲i的全部單個路徑$\left(i_{1}, i_{2}, \cdots, i_{t-1}, i\right)$中機率最大的路徑的第t1個結點爲:
            $\psi_{t}(i)=\arg \max _{1 \leqslant j \leqslant N}\left[\delta_{t-1}(j) a_{j i}\right], \quad i=1,2, \cdots, N$

    維特比算法:

  一、輸入:模型$\lambda=(A, B, \pi)$和觀測$O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)$

  二、輸出:最優路徑$I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right)$ 

  三、初始化:

              $\delta _{1}(i)=\pi _{i}b_{i}(o_{1})$,  $i=1,2,\cdots ,N$

              $\psi _{1}(i)=0$,          $i=1,2,\cdots ,N$

  四、遞推,對$t=2,3, \cdots, T$
在這裏插入圖片描述

  五、終止:
在這裏插入圖片描述  六、最終路徑回溯。對$t=T-1, T-2, \cdots, 1$

            $i_{t}^{*}=\psi_{t+1}\left(i_{t+1}^{*}\right)$

  求得最優路徑$I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right)$

 

參考

《統計學習方法(第2版)》 李航 著

https://blog.csdn.net/linchuhai/article/details/91542210

https://blog.csdn.net/zgcr654321/article/details/92639420

相關文章
相關標籤/搜索