1.定義
有向圖模型又分爲,靜態貝葉斯網絡和動態貝葉斯網絡, 動態貝葉斯網絡再具體細分就是 隱馬爾科夫模型 和 卡爾曼濾波器
無向圖模型分爲馬爾科夫網絡,馬爾科夫網絡分成,吉布斯/波爾茲曼機和條件隨機場
隱馬爾可夫模型(Hidden Markov Model,HMM)是關於時序的概率模型,它用來描述一個含有隱含未知參數的馬爾可夫過程
,即由一個隱藏的馬爾科夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生隨機序列的過程。其難點是從可觀察的參數中確定該過程的隱含參數。然後利用這些參數來作進一步的分析,HMM屬於典型的生成式模型
,各種參數定義如下,共有5要素:
-
N,隱藏狀態集 , 隱藏節點不能隨意取,只能限定取包含在隱藏狀態集中的符號。
-
M,觀測集 , 觀測節點不能隨意取,只能限定取包含在觀測狀態集中的符號。
-
A,狀態轉移概率矩陣,這個就是其中一個概率分佈。他是個矩陣, (N爲隱藏狀態集元素個數),其中 即第i個隱狀態節點,即從一個隱藏狀態轉移到另一個隱藏狀態的轉移概率。
-
B,觀測概率矩陣,這個就是另一個概率分佈。他是個矩陣, (N爲隱藏狀態集元素個數,M爲觀測集元素個數),其中 ,即第i個觀測節點, 即第i個隱狀態節點,即隱藏狀態到觀測的概率(發射概率)。
-
,初始狀態概率向量,在第一個隱狀態節點,第一個隱狀態節點的隱狀態是N中的每一個的概率分別是多少,然後就是其概率分佈。
隱馬爾科夫模型由初始狀態概率向量,狀態轉移概率矩陣A和觀測概率矩陣矩陣B決定。
隱馬爾科夫模型的兩個假設:
(1)隱藏狀態只依賴於前一時刻的隱藏狀態,與其他時刻的隱藏狀態無關。
(2)觀測狀態只依賴於該時刻的隱藏狀態,與其他時刻的觀測狀態和隱藏狀態無關。
如圖,我的模型先去學習要確定以上5要素
,之後在inference階段的工作流程是:首先,隱狀態節點是不能直接觀測到的數據節點,纔是能觀測到的節點,並且注意箭頭的指向表示了依賴生成條件關係,在A的指導下生成下一個隱狀態節點,並且在B的指導下生成依賴於該的觀測節點, 並且我只能觀測到序列。
2.隱馬爾科夫模型的三個問題
(1)概率計算問題
給定模型和觀測序列,計算在模型下觀測序列O出現的概率。
(2)學習問題
已知觀測序列,估計模型的參數,使得在該模型下觀測序列概率最大,即用極大似然估計的方法估計參數。
(3)預測問題,也稱爲解碼(decoding)問題。
已知模型和觀測序列,求對給定觀測序列條件概率最大的狀態序列,即給定觀測序列,求最有可能的對應的狀態序列。
3.例子
我們拋開教材上拗口的紅球白球與盒子模型吧,來看一個簡單的擲骰子的例子。
示例說明
假設我手裏有三個不同的骰子。第一個骰子是我們平常見的骰子(稱這個骰子爲D6),6個面,每個面(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
這串數字叫做可見狀態鏈(對應上面公式的觀察到的結果爲 Y)。但是在隱馬爾可夫模型中,我們不僅僅有這麼一串可見狀態鏈,還有一串隱含狀態鏈(對應上面公式的隱藏的爲X)。
在這個例子裏,這串隱含狀態鏈就是你用的骰子的序列。比如,隱含狀態鏈有可能是:D6 D8 D8 D6 D4 D8 D6 D6 D4 D8
一般來說,
HMM中說到的馬爾可夫鏈其實是指隱含狀態鏈,隱含狀態(骰子)之間存在轉換概率(transition probability)。
在我們這個例子裏,D6的下一個狀態是D4,D6,D8的概率都是1/3。D4的下一個狀態是D4,D6,D8的轉換概率也都一樣是1/3。這樣設定是爲了最開始容易說清楚,但是我們其實是可以隨意設定轉換概率的。比如,我們可以這樣定義,D6後面不能接D4,D6後面是D6的概率是0.9,是D8的概率是0.1,這樣就是一個新的HMM,一般情況權重設定也確實是不一樣的。
同樣的,
儘管可見狀態之間沒有轉換概率,但是隱含狀態和可見狀態之間有一個概率叫做輸出概率(emission probability)。
就我們的例子來說,六面骰(D6)產生1的輸出概率是1/6。產生2,3,4,5,6的概率也都是1/6。我們同樣可以對輸出概率進行其他定義。比如,我有一個被賭場動過手腳的六面骰子
,擲出來是1的概率更大,是1/2,擲出來是2,3,4,5,6的概率是1/10。
而三個骰子之間也是可以相互轉換的,其轉換關係示意圖如下所示。
其實對於HMM來說,如果提前知道所有隱含狀態之間的轉換概率和所有隱含狀態到所有可見狀態之間的輸出概率,做模擬是相當容易的。
但是應用HMM模型時候呢,往往是缺失了一部分信息的
,有時候你知道骰子有幾種,每種骰子是什麼,但是不知道擲出來的骰子序列;有時候你只是看到了很多次擲骰子的結果,剩下的什麼都不知道。
如果應用算法去估計這些缺失的信息,就成了一個很重要的問題。這應該如何做呢?下面就來說明。
3.1.描述問題
這裏就要順帶着說明與HMM模型相關的算法了,算法分爲三類,分別對應着解決三種問題:
3.1.1.評估問題
知道骰子有幾種(隱含狀態數量),每種骰子是什麼(轉換概率),根據擲骰子擲出的結果(可見狀態鏈),我想知道擲出這個結果的概率
。
這個問題看似意義不大,因爲你擲出來的結果很多時候都對應了一個比較大的概率,問這個問題的目的呢,其實是檢測觀察到的結果和已知的模型是否吻合
。如果很多次結果都對應了比較小的概率,那麼就說明我們已知的模型很有可能是錯的,有人偷偷把我們的骰子給換了。通常利用前向算法,分別計算每個產生給定觀測序列的概率,然後從中選出最優的HMM模型。
3.1.2.解碼問題
知道骰子有幾種(隱含狀態數量),隱藏狀態是什麼不重要,每種骰子是什麼(轉換概率),根據擲骰子擲出的結果(可見狀態鏈),我想知道每次擲出來的都是哪種骰子(隱含狀態鏈),這幾種隱含狀態的編號的序列。
3.1.3.學習問題
知道骰子有幾種(隱含狀態數量),不知道每種骰子是什麼(轉換概率),觀測到很多次擲骰子的結果(可見狀態鏈),我想反推出每種骰子是什麼(轉換概率)。
這個問題很重要,因爲這是最常見的情況。很多時候我們只有可見結果,不知道HMM模型裏的參數,我們需要從可見結果估計出這些參數,這是建模的一個必要步驟,通常使用Baum-Welch算法解決。
3.2.解決方案
3.2.1.計算結果概率
知道骰子有幾種,每種骰子是什麼,每次擲的都是什麼骰子,根據擲骰子擲出的結果,求產生這個結果的概率。
已知條件:
轉移概率:1/3
發射概率:D6:1/6,D4:1/4,D8:1/8,
解法無非就是概率相乘:
3.2.2.計算隱含狀態概率
計算不可見的隱含狀態概率,破解骰子序列,這裏有兩種解法。
第一種解法,解最大似然路徑問題
舉個栗子:
我知道我有三個骰子,六面骰,四面骰,八面骰。我也知道我擲了十次的結果(1 6 3 5 2 7 3 5 2 4)
,我不知道每次用了那種骰子,我想知道最有可能的骰子序列。
其實最簡單而暴力的方法就是窮舉所有可能的骰子序列,然後依照第零個問題的解法把每個序列對應的概率算出來。然後我們從裏面把對應最大概率的序列挑出來就行了。如果馬爾可夫鏈不長,當然可行。如果長的話,窮舉的數量太大,就很難完成了。
第二種解法,維特比算法(Viterbi algorithm)
維特比(Viterbi)算法實際是用動態規劃解隱馬爾可夫模型預測問題,即用動態規劃(dynamic programming)求概率最大路徑(最優路徑)。這時一條路徑對應着一個狀態序列。
請不太理解動態規劃算法的同學查看我之前的動態規劃算法博文,現在我們來看看如何利用Vertibi算法計算骰子出現的概率。
轉移概率:1/3
發射概率:D6:1/6,D4:1/4,D8:1/8,
還是舉個栗子:
首先,如果我們只擲一次骰子:
看到結果爲1。對應的最大概率骰子序列就是D4,因爲D4產生1的概率是1/4,高於1/6和1/8。
把這個情況拓展,我們擲兩次骰子:
結果爲1,6。這時問題變得複雜起來,我們要計算三個值,分別是第二個骰子是D6,D4,D8的最大概率。顯然,要取到最大概率,第一個骰子必須爲D4。這時,第二個骰子取到D6的最大概率是:
同樣的,我們可以計算第二個骰子是D4或D8時的最大概率。我們發現,第二個骰子取到D6的概率最大。而使這個概率最大時,第一個骰子爲D4。所以最大概率骰子序列就是D4 D6。
繼續拓展,我們擲三次骰子:
同樣,我們計算第三個骰子分別是D6,D4,D8的最大概率。我們再次發現,要取到最大概率,第二個骰子必須爲D6。這時,第三個骰子取到D4的最大概率是
同上,我們可以計算第三個骰子是D6或D8時的最大概率。我們發現,第三個骰子取到D4的概率最大。而使這個概率最大時,第二個骰子爲D6,第一個骰子爲D4。所以最大概率骰子序列就是D4 D6 D4。