目錄
闡述
隱馬爾可夫模型(Hidden Markov Model,HMM)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。
用一個簡單的例子來闡述:
假設我手裏有三個不同的骰子。
第一個骰子6個面(稱這個骰子爲D6),每個面(1,2,3,4,5,6)出現的概率是1/6。
第二個骰子是個四面體(稱這個骰子爲D4),每個面(1,2,3,4)出現的概率是1/4。
第三個骰子有八個面(稱這個骰子爲D8),每個面(1,2,3,4,5,6,7,8)出現的概率是1/8。
假設開始擲骰子,先從三個骰子裏挑一個,挑到每一個骰子的概率都是1/3。然後擲骰子,得到一個數字:1,2,3,4,5,6,7,8中的一個。不停的重複上述過程,會得到一串數字,每個數字都是1,2,3,4,5,6,7,8中的一個。例如可能得到這麼一串數字(擲骰子10次):1 6 3 5 2 7 3 5 2 4
這串數字叫做可見狀態鏈(書中的觀測數據)。但是在隱馬爾可夫模型中,不僅僅有這麼一串可見狀態鏈,還有一串隱含狀態鏈(狀態序列)。在這個例子裏,這串隱含狀態鏈就是你用的骰子的序列。比如,隱含狀態鏈有可能是:D6 D8 D8 D6 D4 D8 D6 D6 D4 D8
一般來說,HMM中說到的馬爾可夫鏈其實是指隱含狀態鏈,因爲隱含狀態(骰子)之間存在轉換概率(transition probability)。
可見狀態之間沒有轉換概率,但是隱含狀態和可見狀態之間有一個概率叫做輸出概率(emission probability)。就我們的例子來說,六面骰(D6)產生1的輸出概率是1/6。
採用《統計學習方法》書上的定義,將上述描述定義如下:
Q爲所有可能發生的狀態序列(共N個),V是所有可能的觀測數列集合(共M個)。
I是長度爲T的狀態序列,O是對應的觀測數據序列。
A是狀態轉移概率矩陣:
其中,,是在時刻t處於狀態的條件下在時刻t+1轉移到狀態的概率。
B是觀測概率矩陣:
其中,,是在時刻t處於狀態的條件下生成觀測序列的概率。
是初始狀態概率向量:
其中,,是時刻t=1處於狀態的概率。
隱馬爾可夫模型由初始狀態概率向量,狀態轉移概率矩陣A和觀測概率矩陣B決定。和A決定狀態序列,B決定觀測序列。因此,隱馬爾可夫模型可以用三元符號表示,即
隱馬爾可夫模型有3個基本問題:
(1)概率計算問題,在給定模型和觀測序列O的情況下,計算在模型下觀測序列O出現的概率;知道骰子有幾種(隱含狀態數量),也知道每種骰子擲出來數字的概率(觀測概率矩陣),骰子之間如何轉換比如現在是D4,下一個是D4,D6,D8的概率(狀態轉移概率矩陣),根據擲骰子擲出的結果(觀測序列),想知道擲出這個結果(觀測序列)的概率。
(2)預測問題(解碼問題),已知模型和觀測序列O,求給定觀測序列條件概率最大的狀態序列I ,即給定觀測序列,求最有可能的對應的狀態序列;骰子有幾種(隱含狀態數量),也知道每種骰子擲出來數字的概率(觀測概率矩陣),骰子之間如何轉換(狀態轉移概率矩陣),根據擲骰子擲出的結果(觀測序列),想知道每次(骰子共擲了10次)擲出來的都是哪種骰子(狀態序列)
(3)學習問題,已知觀測序列O,估計模型參數參數,使得在該模型下觀測序列概率最大,用極大似然估計的方法估計參數;知道骰子有幾種(隱含狀態數量),觀測到很多次擲骰子的結果(觀測序列),想反推出每種骰子擲出來數字的概率(觀測概率矩陣),骰子之間如何轉換(狀態轉移概率矩陣)
1.1 觀測序列O出現的概率
1.1.1 窮舉法(直接計算法)
通過列舉所有可能產生觀測序列O的狀態,對於各個狀態下求解產生觀測序列的概率。然後對所有可能的概率求和,可以得到。
拿上面的骰子舉例子,求最終觀測預測爲1 6 3 5 2 7 3 5 2 4的概率。
第一步:列舉出可能產生此序列的狀態,(1)可能序列:D4 D6 D4 D6 D4 D8 D8 D6 D4 D4(2)可能序列:D4 D6 D6 D8 D8 D8 D4 D6 D6 D4....
第二步:計算出產生這些狀態的概率,然後在求出這些狀態產生1 6 3 5 2 7 3 5 2 4的概率,將對應的狀態和產生1 6 3 5 2 7 3 5 2 4的概率相乘(聯合概率)
第三步:將所有可能概率求和,得到
上述過程用公式表示爲:
狀態序列I的概率爲:
這個狀態下,觀測序列O的概率爲:
O和I同時出現的概率爲:
再對所有可能的狀態序列I求和,得到觀測序列O的概率
但是這樣做工作量很大,是階的,所以利用前向-後向算法。
1.1.2前向算法
這個前向算法的意思就是每次一個狀態一個狀態的來,假設初始狀態爲D4,那麼下一個狀態爲D4,D6,D8,的概率分別爲1/3,1/3,1/3,下下一個狀態爲D4的概率爲:D4->D4+D6->D4+D8->D4=(1/3)*(1/3)+(1/3)*(1/3)+(1/3)*(1/3)
以此類推,在上述骰子問題中,第n次轉移都是計算前n-1次狀態累加而成的,所以避免了求解所有的狀態概率,節約時間,所以前向算法的複雜度爲,簡要說明問題可以看下圖。
(第一個狀態爲D4,第二個狀態爲D4、D6、D8的概率在第一次的基礎上計算,第三次的狀態爲D4、D6、D8又在前一次的基礎上計算)
上述過程,用公式表述如下:
首先定義前向概率:(t時刻的部分觀測序列爲,且狀態爲的概率爲前向概率)
可以遞推求出前向概率和觀測序列
遞推算法如下:
1,初值:
2,遞推,對於t=1,2,3,...,T-1
3,終止
1.1.3 後向算法
後向算法和前向算法差不多的道理,只不過這是從後往前推導,從最後一個觀測序列開始。
定義後向概率:(在t時刻狀態爲的,從t+1到T的部分觀測序列爲的概率爲後向概率)
(1)最後時刻的所有狀態規定爲
(2)對於t=T-1,T-2,...,1
(3)最終求得的觀測概率爲
1.2 根據觀測序列預測狀態序列
繼續拿上面的骰子舉例子,假設最終觀測預測爲1 6 3 5 2 7 3 5 2 4,求解這個序列所對應的最有可能的狀態序列是什麼?
1.2.1 維特比算法(動態規劃)
維特比算法實際上是用動態規劃解馬爾科夫模型預測問題,即用動態規劃求解概率最大的路徑(最優路徑)。最優路徑求解,必須保證每個路徑之間都必須是最優的,否則其中就會有一條路徑代替它。
以上面的骰子序列作爲例子,假設D4、D6、D8產生1的概率分別爲:1/4,1/6,1/8,故1對應的狀態序列最優爲D4,假設骰子之間轉移概率相同,那麼6爲D6、D8的概率分別爲1/6,1/8,因此第二個狀態爲D6,(如果狀態轉移概率不同,那麼有可能第二個篩子狀態爲D8的可能性更大),順着這樣的思想依次求解,最終求得最後的狀態序列。
上述描述過程,也就是維特比算法的過程,在這個過程中,既求解到了最優路徑,又求解到了最大概率。
首先定義兩個變量和,定義在時刻t狀態爲i的所有單個路徑中概率最大值的爲
由上述推導過程可知變量的遞推公式爲,
定義在時刻t狀態爲i的所有單個路徑中概率最大的路徑的第t-1個結點爲:
維特比算法過程如下:
(1)初始化(初始狀態向量乘以第一個觀測):
(2)遞推,對於t=2,3,...,T
(說明一下:t-1時刻狀態[假設D4]乘以轉移概率(0.1,0.2, 0.7)那麼t時刻的概率分別爲0.1,0.2, 0.7;再用t時刻的狀態去乘以觀測概率矩陣(0.8,0.1,0.1)這個的聯合概率乘積中最大才是t時刻的最終狀態,因爲可能小狀態概率對應大觀測概率)
記錄當前狀態:
(3)終止:
(4)最優路徑回溯.對於
求得的最優路徑也就是最可能的狀態序列爲:
解釋一下這裏爲什麼是最優路徑回溯:
因爲記錄的是當前t時刻、狀態爲i時,第t-1個結點是哪個的狀態。用骰子距離,假設t-1時刻D4、D6、D8的狀態概率分別爲(0.1,0.4,0.5),max[(0.1,0.4,0.5)*(D4->D4的轉化概率、D6->D4的轉化概率、D8->D4的轉化概率)],假設這個過程中,D6->D4轉化概率最大,故D6;當計算t時刻,狀態爲D6的上一個結點時,同理但是此時可能等於D8。因此僅是記錄上一結點到這一節點最大的概率。
當通過公式,計算出T時刻,狀態爲i時,就可以利用公式,計算出每一次迭代過程存儲的最大概率下的上一結點信息,因此這裏涉及到一個回溯的過程。
1.3 估計模型參數
用的EM算法。因爲狀態序列看不見(隱藏變量),只能用觀測序列(觀測數據)去推導。
先求解函數Q(E步),再極大化求解參數(M步)。
由EM算法的Q函數可以寫出如下推導:
由於對於是一個常數,故(其中是上一次迭代出來的,是一個常數,是一個變量):
由於:
故:
至此E步完成。構造出來了Q函數,下面就是對Q函數極大化然後更新參數(M步)。
M步:由於模型中有三個參數要求解,。並且Q函數裏面三個參數是求和的形式,所以求解只取其中一部分就行了。
《統計學習方法》書中給出了的求解,所以我列一個a的求解。
由於(爲什麼是j不是i呢?可以看一下a狀態轉移概率矩陣,每一行都是一個狀態(t-1時刻)向下一個時刻(t時刻)所有狀態轉移的概率,所以概率爲1)
利用拉格朗日函數求解,構造的拉格朗日函數形式如下:
對上式求導數得,
即
(1)
對上式所有j求和可得:
把上述結果帶入(1)可得:
以上述同樣的方法也可以求解出其他兩個變量:
、
擴展:
(1)給定模型和觀測序列O,在時刻t處於狀態的概率,記爲:
由前向概率和後向概率定義可知,
故
即利用刻畫,單個時刻的狀態概率。
(2)給定模型和觀測序列O,在時刻t處於狀態的概率,t+1時刻處於的狀態概率爲:
利用上述方法有,
因此在利用學習算法(EM)算法求解出各個參數後,
可以進行進一步化簡表示,即
(1)
(2)
(3)
故學習問題可以利用骰子模型,這樣做實驗。
(1)給定初始參數:,,
(2)
A.開始擲篩子,記錄觀測序列(1次實驗,擲10次),得到10組觀測序列如下:
第一組:1,3,5,7,3,1,3,2,6,8
第二組:2,3,6,4,1,8,7,5,3,4
第三組:6,3,1,5,3,2,7,2,1,5
以此類推......
B.利用給定初始參數,計算10組觀測序列對應的最可能的狀態序列(D4簡寫爲4)如下:
第一組:4,6,4,4,8,4,6,4,6,8
第二組:4,6,8,4,6,8,8,4,4,6
第三組:6,4,4,4,6,4,8,4,4,6
以此類推.....
C.根據B步驟得到的狀態序列,和公式(1)(2)(3)更新參數,,
(3) 重複步驟(2),直至參數穩定在某一數值,或者兩次參數更新小於某一接受範圍。
上述實驗思想原理產生於鮑姆-韋爾奇算法(Baum-Welch Algorithm),每一次迭代都是估計新的模型參數,使得輸出的概率最大化,因此這個過程叫做期望最大化(Expectation-Maximization)簡稱EM。
通過上述實驗步驟,就可以利用EM算法,得到HMM的學習參數。
上述實驗步驟,是我自己想出來的,不具有特別嚴謹性。(如有不妥,歡迎指教)
參考文獻:
列舉的模型來自:https://blog.csdn.net/zxm1306192988/article/details/78595933
公式來自:《統計學習方法》-李航