hmm和Veterbi演算法(一)

2022-01-22 13:06:05 字數 4120 閱讀 4253

只是略微的看了些,有點感覺,還未深入,做個記錄。

參考: 隱馬爾可夫 (hmm)、前 / 後向演算法、viterbi 演算法 再次總結

誰能通俗的講解下 viterbi 演算法?

數學之美第二版的第 26 章

1.hmm三要素

2.維特比演算法

3.簡明例子

1.初始概率分布π

z1 可能是狀態 1,狀態 2 ... 狀態 n,於是 z1 就有個 n 點分布:

z1狀態 1

狀態 2

...狀態 n

概率p1

p2...

pn即:z1 對應個 n 維的向量。

上面這個 n 維的向量就是初始概率分布,記做π。

2.狀態轉移矩陣 a

但 z2 就不能簡單的 「同上」 完事了,因為 z2 和 z1 不獨立,所以 z2 是狀態 1 的概率有:z1 是狀態 1 時 z2 是狀態 1,z1 是狀態 2 時 z2 是狀態 1,..., z1 是狀態 n 時 z2 是狀態 1,於是就是下面的表

z2z1

狀態 1

狀態 2

...狀態 n

狀態 1

p11p12

...p1n

狀態 2

p21p22

...p2n

......

......

...狀態 n

pn1pn2

...pnn

即:z1->z2 對應個 n*n 的矩陣。

同理:zi -> zi+1 對應個 n*n 的矩陣。

上面這些 n*n 的矩陣被稱為狀態轉移矩陣,用 an*n 表示。

當然了,真要說的話,zi -> zi+1 的狀態轉移矩陣一定都不一樣,但在實際應用中一般將這些狀態轉移矩陣定為同乙個,即:只有乙個狀態轉移矩陣

3.觀測矩陣 b

如果對於 zi 有:狀態 1, 狀態 2, ..., 狀態 n,那 zi 的每乙個狀態都會從下面的 m 個觀測中產生乙個:觀測 1, 觀測 2, ..., 觀測 m,所以有如下矩陣:xz

觀測 1

觀測 2

...觀測 m

狀態 1

p11p12

...p1m

狀態 2

p21p22

...p2m

......

......

...狀態 n

pn1pn2

...pnm

這可以用乙個 n*m 的矩陣表示,也就是觀測矩陣,記做 bn*m。

由於 hmm 用上面的π,a,b 就可以描述了,於是我們就可以說:hmm 由初始概率分布π、狀態轉移概率分布 a 以及觀測概率分布 b 確定,為了方便表達,把 a, b, π 用 λ 表示,即:

λ = (a, b, π)

維特比演算法是乙個特殊但應用最廣的動態規劃演算法,它是針對籬笆網路的有向圖(lattice)的最短路徑問題而提出的。凡是使用隱含馬爾可夫模型描述的問題都可以用維特比演算法來解碼,包括今天的數字通訊、語音識別、機器翻譯、拼音轉漢字、分詞等。

1.基礎概括

(2)從 s 到 e 的路徑必定經過第 i 時刻的某個狀態,假定第 i 時刻有 k 個狀態,那麼如果記錄了從 s 到第 i 個狀態的所有 k 個節點的最短路徑,最終的最短路徑必經過其中的一條。這樣,在任何時刻,只需要考慮非常有限條最短路徑即可。

(3)結合上述兩點,假定當我們從狀態 i 進入狀態 i+1 時,從 s 到狀態 i 上各個節點的最短路徑已經找到,並且記錄在這些節點上,那麼在計算從起點 s 到前乙個狀態 i 所有的 k 個結點的最短路徑,以及從這 k 個節點到 xi+1,j 的距離即可。

2.總結

(1)從點 s 出發,對於第乙個狀態 x1 的各個節點,不妨假定有 n1 個,計算出 s 到它們的距離 d(s,x1i),其中 x1i 代表任意狀態 1 的節點。因為只有一步,所以這些距離都是 s 到它們各自的最短距離。

(2)對於第二個狀態 x2 的所有節點,要計算出從 s 到它們的最短距離。對於特點的節點 x2i,從 s 到它的路徑可以經過狀態 1 的 n1 中任何乙個節點 x1i,對應的路徑長度就是 d(s,x2i) = d(s,x1i) + d(x1i,x2i)。由於 j 有 n1 種可能性,我們要一一計算,找出最小值。即:

d(s,x2i) = mini=1

,n1 d(s,x1i) + d(x1i,x2i)

這樣對於第二個狀態的每個節點,需要 n1 次乘法計算。假定這個狀態有 n2 個節

點,把 s 這些節點的距離都算一遍,就有 o(n1·n2) 次計算。

(3)接下來,類似地按照上述方法從第二個狀態走到第三個狀態,一直走到最後乙個狀態,就得到了整個網格從頭到尾的最短路徑。每一步計算的複雜度都和相鄰兩個狀態 si 和 si+1 各自的節點數目 ni,ni+1 的乘積成正比,即 o(ni·ni+1)

(4)假設這個隱含馬爾可夫鏈中節點最多的狀態有 d 個節點,也就是說整個網格的寬度為 d,那麼任何一步的複雜度不超過 o(d2),由於網格長度是 n,所以整個維特比演算法的複雜度是 o(n·d2)。

1. 題目背景:

2. 已知情況:

隱含的身體狀態 =                     q 所有可能的狀態集合

可觀察的感覺狀態 =                  v 所有可能的觀測的集合

月兒預判的阿驢身體狀態的概率分布 =       pai 初始概率分布

這就是初始狀態序列。

月兒認為的阿驢身體健康狀態的轉換概率分布 =

這樣就可以列出相應的狀態轉移矩陣。

月兒認為的在相應健康狀況條件下,阿驢的感覺的概率分布 =

這樣就可以列出相應的觀測矩陣。

由上面我們可以發現,hmm 的三要素都齊備了,下面就是解決問題了。

阿驢連續三天的身體感覺依次是: 正常、冷、頭暈 。          o是對應的觀測序列

3. 題目:

已知如上,求:阿驢這三天的身體健康狀態變化的過程是怎麼樣的?即已知觀測序列和 hmm 模型的情況下,求狀態序列。要求解的是   i,狀態序列

4. 過程:

p(第一天健康) = p(正常 | 健康)*p(健康 | 初始情況) = 0.5 * 0.6 =0.3

p(第一天發燒) = p(正常 | 發燒)*p(發燒 | 初始情況) = 0.1 * 0.4 =0.04

p(第二天健康) = max*0.4=0.3*0.7*0.4=0.084此時我們需要記錄概率最大的路徑的前乙個狀態,即 0.084 路徑的前乙個狀態,我們在小本本上記下,第一天健康。

p(第二天發燒)=max*0.3=0.027, 同樣的在 0.027 這個路徑上,第一天也是健康的。

p(第三天健康)=max*0.1=0.00588,在這條路徑上,第二天是健康的。

p(第三天發燒)=max*0.6=0.01512, 在這條路徑上,第二天是健康的。

這兒的箭頭指向就是乙個回溯查詢小本本的過程,我們在編寫演算法的時候,其實也得注意,每乙個概率最大的單條路徑上都要把前乙個狀態記錄下來。

了解 HMM 演算法

回答 2 什麼是hmm模型?隱馬爾可夫模型 hmm 可以用五個元素來描述,包括2個狀態集合和3個概率矩陣 1.隱含狀態 s 這些狀態之間滿足馬爾可夫性質,是馬爾可夫模型中實際所隱含的狀態。這些狀態通常無法通過直接觀測而得到。例如s1 s2 s3等等 2.可觀測狀態 o 在模型中與隱含狀態相關聯,可通...

HMM向前演算法

1.hmm的第乙個問題 已知乙個hmm模型 2.演算法思路 實質上是動態規劃演算法,關鍵是找到遞推公式 2.1 計算時刻1的各種狀態的向前概率 2.2 遞推2,3.t時刻的概率 2.3 計算最終結果 3.c 已知 hmm隱含狀態數量,狀態轉換概率,狀態的發射概率,以及初始狀態概率分布,根據指定可見狀...

理解HMM演算法

1 狀態 生成觀測值的變數 上圖中的 吃 和 睡 2 觀測值 狀態乘上輸出概率對應的輸出 上圖中的橙色節點 3 輸出概率 輸出概率矩陣裡面的某個元素 狀態和觀測值兩層之間的某個權重引數 4 輸出概率矩陣 由輸出概率組成的矩陣。5 bi 第i個狀態 比如 睡 輸出所有觀測值對應的概率構成的行向量 上圖...