1
先引入一個知乎上看到的例子:
假設你的手中有三個不同的骰子。
第一個是我們平常都能見到的骰子(稱其爲D6),6個面,每個面(1,2,3,4,5,6)出現的概率是1/6;
第二個有4個面(稱其爲D4),每個面(1,2,3,4)出現的概率是1/4;
第三個有8個面(稱其爲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)。
在上面的例子中,D6的下一個狀態是D4,D6,D8的概率都是1/3。D4,D8的下一個狀態是D4,D6,D8的轉換概率也都一樣是1/3。你可以更改轉換概率,那就是新的HMM了。
儘管可見狀態之間沒有轉換概率,但是隱含狀態和可見狀態之間有一個概率叫做輸出概率(emission probability)。
上面的例子中,六面骰(D6)產生1的輸出概率是1/6。產生2,3,4,5,6的概率也都是1/6。
而最開始抽到骰子的概率,則是初始狀態概率。這裏初始抽到三種骰子的概率分別都爲1/3.
而我們學習HMM模型,是因爲當一個系統可以作爲HMM被描述,那麼我們就能解決以下三種問題
1)預測問題:你知道了骰子有幾種(隱含狀態數量),每種骰子是什麼(轉換概率),骰子擲出的結果(可見狀態鏈),但你想知道每次擲出來的都是哪種骰子(隱含狀態鏈)。
也叫做解碼問題。
2)概率計算問題:你知道了骰子有幾種(隱含狀態數量),每種骰子是什麼(轉換概率),骰子擲出的結果(可見狀態鏈),但你想知道擲出這個結果的概率。
這個問題看似意義不大,但這個問題可以幫你驗證觀察到的結果和已知的模型是否吻合;因爲如果很多次結果都對應了比較小的概率,那麼就說明你已知的模型很有可能是錯的,有人偷偷把你的骰子給換了。
3)學習問題:你知道了骰子有幾種(隱含狀態數量),觀測到了很多次擲骰子的結果(可見狀態鏈),但你想反推出每種骰子是什麼(轉換概率)。
這個問題很重要,因爲這是最常見的情況。很多時候我們只有可見結果,不知道HMM模型裏的參數,我們需要從可見結果估計出這些參數,這是建模的一個必要步驟。
2
接下來要介紹上述三個問題的解決算法,所以需要一些符號來定義問題。
隱馬爾科夫模型可以用三元符號表示
#相關的問題求解
因爲有狀態qj到狀態qi有n種可能
在t時刻爲狀態qj 到 t+1時刻爲qi的概率爲aji t+1時刻狀態爲qi輸出爲o(t+1)的概率爲bi