HMM原理2:decoding問題解法(維特比算法,近似算法)

1. 維特比算法

1.1 前提概要

我們知道HMM需要解決三個問題,其中的decoding問題需要用維特比算法,那麼什麼是維特比呢?維特比算法是一種動態規劃算法,在學xgboost的時候我們使用了一個技巧,t+1時刻的預測值爲t時刻的預測值加上t+1時刻的預測值。維特比有點相似。

先來回顧下,維特比解決的什麼問題,已知觀測序列和參數,求隱藏序列。注意重點是求隱藏序列,所以問題的本質是找到隱藏序列。
舉個例子:盒子和球模型(來自小藍書),已知如下:
在這裏插入圖片描述
我們知道觀測序列爲{紅,白},求的是隱藏序列(來自哪個盒子),可能的結果爲{1,1}、{1,2}、{1,3}、{2,1}、{2,2}、{2,3}、{3,1}、{3,2}、{3,3},問題的本質是求這9種可能哪個概率最大,概率最大的那個就是我們的答案。將所有可能的結果呈現在二維圖中:
在這裏插入圖片描述
對上圖進行闡釋:在已知第一次爲紅色時,可以選擇第1、第2、第3個盒子;第二次爲白色亦同。由此從第一次紅色到第二次白色就有9條路徑可以選擇。
假如第一次和第二次結果對應的盒子分別是盒子1和盒子2,也就是說選擇了路徑2。那麼我們如果確保圖中的路徑2概率最大呢?
從第二次結果考慮,只要從開始到第一次結果選擇的路徑正確,且從第一次結果到第二次結果的轉移正確(即第二次正確選擇了盒子2),就能保證我們整個路徑正確。
廣泛地講:只要從開始到第t次結果選擇的路徑是正確的,且第t+1時刻正確選擇(t時刻到t+1時刻轉移正確)就能保證直到t+1時刻我們的選擇都是對的,得到的答案就是最優答案。此外t時刻的結果又和t-1時刻的正確路徑有關,因此可以一直向前推,就是維特比算法的思想。
還是以上圖中的小藍書爲例。直接通過例子感受維特比算法的過程。

1.2 實例計算1

我們從最終的t=2時刻開始看

  • t=2時刻的概率記做δ2\delta_2依賴於三部分:
    • 一:t=1時刻的概率δ1\delta_1
    • 二:t=1時刻從狀態j轉移到狀態i的概率,即轉移矩陣中的ajia_{ji}
    • 三:t=2時刻狀態爲i(盒子爲i),觀測o2o_2爲白的概率,其實就是B中的bi(k=o2)b_i(k=o_2),即發射矩陣中的bi(o2)b_i(o_2)
  • t=1時刻的概率記做δ1\delta_1依賴於三部分:
    • 一:t=0時刻的概率δ0=1\delta_0=1
    • 二:t=0時刻從狀態j(對於t=0時刻,只有狀態0)轉移到狀態i的概率,即π中的πi\pi_i
    • 三:t=1時刻狀態爲i(盒子爲i),觀測o1o_1爲紅的概率,其實就是B中的bi(k=o1)b_i(k=o_1),即發射矩陣中的bi(o2)b_i(o_2)

上述介紹了計算的組成部分,或者說大致思想,但是具體怎麼算呢,下面將會仔細講解。

  • t=2時:
    • 一:δ1\delta_1,該值是什麼,我們先放下,繼續看第二、第三部分
    • 二:t=1時刻從隱藏狀態j轉移到隱藏狀態i的概率,我們知道t=1時刻的隱藏狀態j有三種(j爲盒子1,盒子2,盒子3),同時t=2時的隱藏狀態i(i爲盒子1,盒子2,盒子3)有三種情況,也就是說第二部分可以計算出九個取值
    • 三:t=2時刻狀態爲i(盒子爲i),觀測o2o_2爲白的概率,其實就是B中的bi(k=o2)b_i(k=o_2),即發射矩陣中的bi(o2)b_i(o_2),i有三種情況,故有三個取值
    • 二有9種取值,三有三種取值,因此我們可以根據三中的i將二也分成三大類(每個大類包含三個小類)
    • 綜上,我們可以得到δ2(i)=δ1(j)aj1b1(o2),i=1,2,3;j=1,2,3\delta_2(i)=\delta_1(j)a_{j1}b_1(o_2), i=1,2,3;j=1,2,3。具體來講,得到的三個取值爲δ2(1)=δ1(j)aj1b1(o2),j=1,2,3\delta_2(1)=\delta_1(j)a_{j1}b_1(o_2), j=1,2,3δ2(2)=δ1(j)aj2b1(o2),j=1,2,3\delta_2(2)=\delta_1(j)a_{j2}b_1(o_2), j=1,2,3δ2(3)=δ1(j)aj3b1(o2),j=1,2,3\delta_2(3)=\delta_1(j)a_{j3}b_1(o_2), j=1,2,3
    • 對於t=2時刻,隱藏狀態就是δ2(1),δ2(2),δ2(3)\delta_2(1),\delta_2(2),\delta_2(3)三個數中最大那個數對應的隱藏狀態,記做i2i_2^*(最終的隱藏序列I=(i1,i2)I^*=(i_1^*,i_2^*)),(ps:對於t=2時刻,選擇哪個隱藏狀態呢,那就分別計算三種隱藏狀態的概率吧,選擇概率最大的那個)假如\delta_2(3)最大,那麼第二步的隱藏狀態就是3,然而還有一個問題,因爲j有三種取值,故\delta_2(3)也有三種取值,那麼\delta_2(3)到底是什麼呢?其實也是這三種結果中的最大的那個。
    • 綜上所述,可以得到兩個結論,i2=argmax1i3(δ2(i))1i_2^*=arg\max\limits_{1\le i\le3}(\delta_2(i))公式1δ2(i)=max1j3δ1(j)ajibi(o2)2\delta_2(i)=\max\limits_{1\le j\le3}\delta_1(j)a_{ji}b_i(o_2)公式2對於其他時刻,公式2依舊成立,公式1只有在最後一個時刻才用得到。不過也看到一個事實,t=2時刻的結果不能立馬算出來,因爲他還取決於t=1時刻,因此,計算時,我們要先從t=1時刻開始算。下面就講如何計算

在這裏插入圖片描述
在這裏插入圖片描述

1.3 實例計算2

上文中小藍書A,B,π不變,但是觀測序列變爲{紅,白,紅},計算過程如下:
在這裏插入圖片描述
在這裏插入圖片描述

1.4 公式總結

第2章和第3章我們使用了實例講解維特比算法的求解過程,現在將上述過程總結爲公式。

  • 輸入:模型λ=(A,B,π)\lambda=(A,B,\pi)和觀測O=(o1,o2,...,oT)O=(o_1,o_2,...,o_T)
  • 輸出:最優路徑I=(i1,i2,...iT)I^*=(i_1^*,i_2^*,...i_T^*)
  1. 初始化:δ(i)=πibi(oi)\delta(i)=\pi_ib_i(o_i)ψ(i)=0\psi(i)=0
  2. 遞推,對於t=2,3,…Tδt(i)=max1jN[δt1(j)aji]bi(ot)N\delta_t(i) = \max\limits_{1\le j\le N}[\delta_{t-1}(j)a_{ji}]b_i(o_t),其中N指隱藏狀態的個數ψt(i)=argmax1jN[δt1(j)aji]\psi_t(i) = arg \max\limits_{1\le j\le N}[\delta_{t-1}(j)a_{ji}]
  3. 終止P=max1iNδT(i)P^* = \max\limits_{1\le i\le N}\delta_T(i)iT=argmax1iNδT(i)i_T^*=arg\max\limits_{1\le i\le N}\delta_T(i)
  4. 最終路徑回溯對於t=T-1,T-2,…1it=ψt+1(it+1)i_t^*=\psi_{t+1}(i_{t+1}^*)求得最優路徑I=(i1,i2,...iT)I^*=(i_1^*,i_2^*,...i_T^*)

ps:由於例子中沒有提到ψ(i)\psi(i),先說明一下:ψt(i)=argmax1jN[δt1(j)aji]\psi_t(i) = arg \max\limits_{1\le j\le N}[\delta_{t-1}(j)a_{ji}]其實就是t時刻,隱態爲i時,t-1時刻選擇的隱藏狀態,很有可能就是最終的it1i_{t-1}^*,爲什麼是很有可能,因爲t時刻,隱態爲i時,δt(i)\delta_t(i)不一定是最大的。

1.5 ps

ps:上述文字部分在表述上可能有所問題,但是是爲了理解,其中圖片的計算部分,以及第4章公式總結部分是正確的

2. 近似算法

理解了維特比算法,再來看近似算法的公式,可能就比較容易理解了,再此不再展開來講,附上小藍書關於近似算法的描述:
在這裏插入圖片描述
其中αβ\alpha和\beta是前後向算法中引入的變量,具體可見HMM原理3:前後向算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章