日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

隐马尔可夫(HMM)

發(fā)布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 隐马尔可夫(HMM) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


一、概述
計算機科學(xué)中所談的模式通常指按照一定順序發(fā)生的事件序列,比如機器翻譯和自然語言處理中的文字(詞)序列,程序設(shè)計中的指令序列,模式則體現(xiàn)了序列中事件的相關(guān)性。

舉一個簡單的例子,傳說可以通過觀察海草來預(yù)測天氣,比如濕潤(soggy)的海草意味著雨天(rainy),干燥(dry)的海草則意味著晴天(sunny)。可以再加入一個中間的狀態(tài)潮濕(dump,同時引入陰天(cloudy)。當(dāng)然,這種關(guān)系并不是永遠成立,因此他們之間存在著一個概率分布。

而預(yù)測天氣的另外一個線索是:先前的天氣,這很容易理解。那么,現(xiàn)在開始,我們將用這些已知條件來預(yù)測天氣。

首先,我們會引入一個通過上述的關(guān)系預(yù)測出天氣轉(zhuǎn)換模型。然后,我們將引入系統(tǒng)的概念,隱系統(tǒng)相對于觀察到的結(jié)果,在這個例子中,海草的干濕是觀察結(jié)果,而實際的天氣就是一個隱系統(tǒng),因為我們看不到它。最后,我們會利用建立起來的整個系統(tǒng)模型去解決一些問題,比如通過海草來預(yù)測一周的天氣,甚至來判斷當(dāng)時的季節(jié)(直覺上,夏天海草會干,而冬天會濕)。

二、轉(zhuǎn)換模型(Generateing Pattern,轉(zhuǎn)移網(wǎng)絡(luò))

1)決定性的(Deterministic

決定性的轉(zhuǎn)換模型,例如交通燈,紅-紅/黃-綠-黃(amber),狀態(tài)之間的轉(zhuǎn)換在滿足條件的狀態(tài)下只有一種可能性,顯然這不能應(yīng)用在天氣的預(yù)測上。

2
)非決定性的(Non-Deterministic

在馬爾可夫假設(shè)(Markov Assumption)中,當(dāng)前狀態(tài)只與前面的若干個狀態(tài)有關(guān),這使得模型可以大大簡化。雖然這會導(dǎo)致預(yù)測的錯誤(顯然,在天氣的預(yù)測中,只考慮到前幾天是晴天還是雨天并不明智,還應(yīng)當(dāng)考慮氣流,氣壓,風(fēng)速等等),但這種錯誤通常是可以接受的。

若馬爾可夫模型中,當(dāng)前狀態(tài)只與前n個狀態(tài)有關(guān),則稱之為n序模型(order n)。在本例中,假設(shè)當(dāng)前天氣只與頭天天氣有關(guān)(n1),那么三種天氣狀態(tài)(M3)間存在3^29種轉(zhuǎn)換。(表項的列和為1,是為了對應(yīng)后面的條件概率計算)

?

Weather-> Sun Cloud Rain
Sun 0.5 0.25 0.25
Cloud 0.375 0.125 0.375
Rain 0.125 0.625 0.375

?

于是,我們有了一個簡單的一階馬爾可夫過程(first order Markov Process),它包括:

1
)初始化向量(Π向量),代表系統(tǒng)的初始狀態(tài)

Sun Cloud Rain
1.0 0.0 0.0

2)狀態(tài)集:SunnyCloudyRainy

3
)狀態(tài)轉(zhuǎn)移矩陣(表1

三、隱模型(Hidden Patten

通常,馬爾可夫過程是不夠的,因為它并沒有利用其他條件(如海草的干濕)。如果同時考慮海草的干濕,我們可以得到兩個狀態(tài)集,即觀察結(jié)果集(海草)和狀態(tài)集(天氣)。之后我們將利用這兩個狀態(tài)集,通過算法預(yù)測未來的天氣。

一個更實際的例子是語音識別,實際的語音序列是一系列隱狀態(tài)的組合,而系統(tǒng)識別出的語音序列則是觀察結(jié)果狀態(tài)。同時,觀察結(jié)果狀態(tài)的個數(shù)和隱狀態(tài)的個數(shù)不一定總相同,正如我們可以再給海草一個dryish狀態(tài),而實際的80個語素對應(yīng)的發(fā)音也很可能不止80個。

這種對應(yīng)關(guān)系也是有一定概率的,為此,我們使用隱馬爾可夫模型來描述。

從上圖中可以看出,觀察狀態(tài)的變化之下隱藏著實際狀態(tài)的更改,而其中的概率關(guān)系可以用Pr(Obv|Weather)表示,其觀察狀態(tài)矩陣(confusion matrix)為:(我認為這個矩陣的值有問題,應(yīng)當(dāng)是列和為1,這樣更符合后面以觀察結(jié)果為依據(jù)計算天氣)

? Dry Dryish Damp Soggy
Sun 0.60 0.20 0.15 0.05
Cloud 0.25 0.25 0.25 0.25
Rain 0.05 0.10 0.35 0.50

可見,一個隱馬爾可夫模型由5部分組成:

?1)隱藏狀態(tài);2)觀察狀態(tài);3Π向量;4)狀態(tài)轉(zhuǎn)移矩陣;5)狀態(tài)矩陣。

四、隱馬爾可夫模型(Hidden Markov Models

隱馬爾可夫模型可以由一個三元組(ΠAB)描述:

1
Π = (πi)是初始化向量;
2
A = (aij)是狀態(tài)轉(zhuǎn)移矩陣,元素為Pr(xj(t))|xi(t-1)),相當(dāng)于頭天天氣xi,今天天氣是xj的概率;(這是一個條件概率,列和為1,因此以列(今天)為前置條件)
3
B = (bij)是觀察狀態(tài)矩陣,元素為Pr(yj|xi),相當(dāng)于海草狀態(tài)為yj時,天氣是xi時概率。

它主要有三個方面的用途:

1
)評價(Evaluation),從多個隱馬爾可夫模型中選出一個最符合當(dāng)前觀察結(jié)果的。比如海草與天氣的模型,在冬天和夏天應(yīng)當(dāng)是不同的。那么給出一個海草干濕狀態(tài)變化的序列,就可以評估出哪個模型更合適,同時也就可以推斷出這個序列出現(xiàn)在冬天還是夏天。

我們使用前向算法(Forward Algo)去計算一個序列在不同模型中的概率,從而取得最大可能的模型。語音識別中,同樣使用這種方法去計算一個發(fā)音在不同模型(每個模型針對不同的詞)中的概率,從而取得最大可能的詞。

2
)解碼(Decoding),給定一個隱馬爾可夫模型和觀察結(jié)果序列,計算出可能性最大的隱狀態(tài)序列,也可以認為是預(yù)測。
我們使用維特比算法(Viterbi Algo)進行解碼計算,一個很大的用途就是自然語言處理中的詞性標(biāo)注。這里,句子中的詞是觀察結(jié)果,而詞性則是隱狀態(tài)(因為一個詞可能對應(yīng)多個詞性)。通過對整個句子(觀察結(jié)果序列)語法(隱狀態(tài)序列)的識別,就可以確定詞性。

3
)學(xué)習(xí)(Learning),根據(jù)一系列的觀察結(jié)果構(gòu)建隱馬爾可夫模型。
這也是最難的一種應(yīng)用,我們使用前向-后向算法(Forward-Backward Algo)來進行計算。
?

?

、前向算法(Forward Algo

評價(Evaluation)的基本方法就是計算隱馬爾可夫模型產(chǎn)生一個序列的概率(能力)。概率越大,這個序列就越可能是該隱馬爾可夫模型生成的。
比如我們給定一個海草變化的序列:drydumpsoggy。在隱模型(狀態(tài)轉(zhuǎn)換模型)中,可能存在273^3)個對應(yīng)的天氣變化序列,分別是sunsunsunsuncloudsun...rainrainrain
也就是說, Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) + Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy) + . . . . Pr(dry,damp,soggy | rainy,rainy ,rainy)
但是這個計算太復(fù)雜了,當(dāng)序列長度增加時,運算復(fù)雜度呈指數(shù)增長。于是,我們要想辦法降低復(fù)雜度,可以考慮動態(tài)規(guī)劃的方法:
對于序列中的第 i 項,對應(yīng) 3 種狀態(tài)(suncloudrain)。

分別求出到達每種狀態(tài)的概率,于是

pr(dry, damp, soggy | HMM) = Pr(x, y, sun) + Pr(x, y, cloud) + Pr(x, y, rain)Pr(x, y, sun)

???????????????????????????????????????? = Pr(x, sun, sun) + Pr(x, cloud, sun) + Pr(x, rain, sun)

?????????????????????????????????????????= Pr(x, sun) * Pr(sun, sun) + Pr(x, cloud) * Pr(cloud, sun) + Pr(x, rain) * Pr(rain, sun)。???? 注意,Pr(x, sun)在計算Pr(x, y, sun)Pr(x, y, cloud)Pr(x, y, rain)中都會用到,這樣就通過填表的方式降低了運算復(fù)雜度,計算量約為 k*n^2 k 為序列長度,n 為狀態(tài)個數(shù)。
對于每個時間 t 下的每個狀態(tài) j ,公式為:x( t )( j )= Pr( observation | hidden state is j ) x Pr(all paths to state j at time t)。需要說明的時,t = 1 時,Pr 為初始化向量對應(yīng)的值。也可以描述為:x(t+1)(j) = b(j)(k(t+1)) * (Σx(t)(i)*a(i)(j))k 為觀察狀態(tài)序列,t 為序列中的位置,i 1 n
而總的概率為:Pr = Σx(T)(j)j 1 n
原文給出了Π = <0.63, 0.17, 0.20>時的模擬計算(一個Java Applet),AB矩陣則都已經(jīng)在前文中給出。ttp://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/forward_algorithm/s3_pg1.html

?

?六、維特比算法(Viterbi Algo)
解碼(Decoding)是指:給定一個隱馬爾可夫模型(HMM)和觀察序列,求得可能性最大(見下文說明)的狀態(tài)序列。其經(jīng)典算法是維特比算法。
同樣,對于這樣一個海草變化的序列:dry,dump,soggy。在隱模型(狀態(tài)轉(zhuǎn)換模型)中,可能存在27(3^3)個對應(yīng)的天氣變化序列,分別是sun,sun,sun;sun,cloud,sun;...;rain,rain,rain。
也就是求出Max( Pr(dry,damp,soggy | sunny,sunny,sunny), Pr(dry,damp,soggy | sunny,sunny,cloudy), Pr(dry,damp,soggy | sunny,sunny,rainy), . . . . , Pr(dry,damp,soggy | rainy,rainy,rainy)),這同樣是一個很復(fù)雜的計算過程。
維特比算法的思想在于動態(tài)規(guī)劃和剪枝:對于每個時間 t 下的狀態(tài) i ,只保留概率最大的一枝:Pr(i at time t) = Max(Pr(j at time(t-1)) * Pr(i|j) * Pr(obv. at time t|i),同時,記錄這個最大值對應(yīng)的 x(i) = j (填表),再通過 n 個這樣的最大值計算 t+1 時的最大值。當(dāng) t = 1 時,Pr(i) = Max(Pr(obv. | i) * Π(i))。其復(fù)雜度和前向算法相同,都是 k*n^2。
說明,維特比算法是填一個 n*k 大小的表,每個表項由兩部分組成,第一部分為 t 時刻到達 i 狀態(tài)的概率 Pr ,另一部分為產(chǎn)生該概率的前序狀態(tài) j 。
這樣,從Max(Pr(i at time T))求得產(chǎn)生該觀察序列的最大可能的狀態(tài)序列的最后一個狀態(tài) i(T) ,再從這個狀態(tài) i(T) 開始,在表中向前回溯,i(t-1) = x(i(t)),即可求得完整的序列。
維特比算法的優(yōu)勢在于不僅僅考察前后兩個觀察狀態(tài)的關(guān)系,而是全面考察整個觀察序列,得出一個“最大似然”的結(jié)果。這在語音識別,通信領(lǐng)域有著巨大的意義——即使序列中有一兩個誤碼,還是能夠根據(jù)整個序列給出正確的解碼。
原文給出的模擬計算有問題,因此不再給出鏈接。

七、前向-后向算法(Forward-Backward Algo)
前向算法和維特比算法都是基于隱馬爾可夫模型的應(yīng)用,前提是隱馬爾可夫模型已知。但是,在很多情況下,模型是未知的,這就是學(xué)習(xí)(Learning)問題。前項后向算法通過分析由觀察狀態(tài)集中的狀態(tài)組成的一系列的觀察序列和隱狀態(tài)集,給出隱馬爾可夫模型。
比如語音識別中,通常需要針對某個人的聲音進行訓(xùn)練,才能更好地識別出這個人說的話。
但是,到目前為止,學(xué)習(xí)問題還沒有解析解法。傳統(tǒng)的方法是先給出一組初始化參數(shù)(也許完全是錯誤的),然后使用觀察序列進行訓(xùn)練——修正其中的錯誤,或使錯誤最小化。
在前向-后向算法中,同樣要先給出一組初始化參數(shù),其基本原理是同時計算達到某個狀態(tài)的概率(前向)和由這個狀態(tài)到終止?fàn)顟B(tài)的概率(后向),并以此為依據(jù)對參數(shù)進行調(diào)整。

八、總結(jié)(Summary)
通常,模式不會孤立的存在,它往往以時間或空間為順序,和它前面或后面的模式相關(guān)。因此,可以利用模式間的關(guān)系進行模式識別。
我們假設(shè)模式間的關(guān)系不隨時間/空間的變化而變化,并假設(shè)第 n 個模式只與它前面的 k 個模式有關(guān)(最簡單的是 k=1 ),這就構(gòu)成了 k 階馬爾可夫過程。
又,模式并不一定存在于表面,它很有可能存在于某種現(xiàn)象之下,但現(xiàn)象和模式間存在某種聯(lián)系,這就構(gòu)成了隱馬爾可夫模型。
隱馬爾可夫模型主要解決三方面的問題:
1)給定觀察序列和模型,求該模型生成該觀察序列的概率:評估(Evaluation);
2)給定觀察序列和模型,求該模型下最可能生成該觀察序列的狀態(tài)序列:解碼(Decoding);
3)給定觀察狀態(tài)集和隱狀態(tài)集,以及若干觀察序列,求模型:學(xué)習(xí)(Learning)。

總結(jié)

以上是生活随笔為你收集整理的隐马尔可夫(HMM)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。