一、EM算法的介紹
1.什么是EM算法?
EM算法(Expectation-Maximization algorithm)是一種迭代算法,用于求解含有隱變量(latent variable)的概率模型參數(shù)估計(jì)問(wèn)題。它是一個(gè)基礎(chǔ)算法,是很多機(jī)器學(xué)習(xí)領(lǐng)域算法的基礎(chǔ),比如隱式馬爾科夫算法(HMM)等等。它被廣泛應(yīng)用于統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)中,特別是在無(wú)監(jiān)督學(xué)習(xí)中,如聚類、混合高斯模型等問(wèn)題。
EM算法的目標(biāo)是通過(guò)迭代優(yōu)化的方式,最大化觀測(cè)數(shù)據(jù)的似然函數(shù)(或最大化似然函數(shù)的對(duì)數(shù)),從而估計(jì)模型的參數(shù)。在這個(gè)過(guò)程中,存在隱變量,即一些無(wú)法直接觀測(cè)到的變量。EM算法通過(guò)迭代的方式,通過(guò)先計(jì)算隱變量的期望(E步驟),然后調(diào)整模型參數(shù)以最大化似然函數(shù)(M步驟),不斷更新參數(shù)估計(jì)值。
2.EM算法的計(jì)算步驟
- 初始化模型參數(shù)。
- E步驟(Expectation Step):根據(jù)當(dāng)前參數(shù)估計(jì)值,計(jì)算隱變量的后驗(yàn)概率或期望。
- M步驟(Maximization Step):利用E步驟計(jì)算得到的隱變量的期望,更新模型參數(shù),最大化似然函數(shù)。
- 重復(fù)執(zhí)行E步驟和M步驟,直到滿足停止條件(如達(dá)到最大迭代次數(shù)或參數(shù)收斂)。
- 輸出最終的參數(shù)估計(jì)值。
EM算法的關(guān)鍵在于在E步驟中計(jì)算隱變量的期望,以及在M步驟中通過(guò)最大化似然函數(shù)來(lái)更新模型參數(shù)。這種迭代的過(guò)程可以逐步提高參數(shù)估計(jì)的準(zhǔn)確性,從而得到更好的模型擬合結(jié)果。
3.什么是極大似然估計(jì)?
極大似然估計(jì)(Maximum Likelihood Estimation,MLE)是一種參數(shù)估計(jì)方法,用于從觀測(cè)數(shù)據(jù)中估計(jì)出最有可能產(chǎn)生這些觀測(cè)數(shù)據(jù)的模型參數(shù)。它基于概率論的思想,假設(shè)觀測(cè)數(shù)據(jù)是從某個(gè)概率分布中獨(dú)立地抽取得到的,并且通過(guò)最大化觀測(cè)數(shù)據(jù)的似然函數(shù)來(lái)確定模型的參數(shù)值。
具體而言,假設(shè)我們有一組觀測(cè)數(shù)據(jù),要估計(jì)的是概率分布的參數(shù)(如均值、方差等)。極大似然估計(jì)的目標(biāo)是找到能夠使得觀測(cè)數(shù)據(jù)的出現(xiàn)概率最大化的參數(shù)值。
假設(shè)觀測(cè)數(shù)據(jù)為 X = {x?, x?, …, x?},概率分布的參數(shù)為 θ。觀測(cè)數(shù)據(jù)的似然函數(shù) L(θ|X) 表示在給定參數(shù)值 θ 下,觀測(cè)數(shù)據(jù) X 出現(xiàn)的概率。MLE的目標(biāo)是找到最大化似然函數(shù)的參數(shù)值,即使得 L(θ|X) 最大的 θ。
通常情況下,為了方便計(jì)算,我們對(duì)似然函數(shù)取對(duì)數(shù)得到對(duì)數(shù)似然函數(shù)。因?yàn)閷?duì)數(shù)函數(shù)是單調(diào)遞增的,最大化似然函數(shù)等價(jià)于最大化對(duì)數(shù)似然函數(shù)。因此,MLE的目標(biāo)可以轉(zhuǎn)化為找到最大化對(duì)數(shù)似然函數(shù)的參數(shù)值。
一旦得到最大化似然函數(shù)的參數(shù)估計(jì)值,就可以使用這些參數(shù)進(jìn)行預(yù)測(cè)或其他進(jìn)一步的分析。
4.極大似然估計(jì)公式
給定獨(dú)立同分布的觀測(cè)數(shù)據(jù) X?, X?, …, X?,來(lái)自于具有參數(shù) θ 的概率分布,極大似然估計(jì)(Maximum Likelihood Estimation,MLE)的公式可以表示為:
似然函數(shù) L(θ) 定義為觀測(cè)數(shù)據(jù)的聯(lián)合概率密度函數(shù)(或概率質(zhì)量函數(shù)):
L(θ) = f(X?; θ) * f(X?; θ) * … * f(X?; θ)
其中 f(X?; θ) 表示觀測(cè)數(shù)據(jù) X? 的概率密度函數(shù)(或概率質(zhì)量函數(shù))。
通常使用對(duì)數(shù)似然函數(shù)來(lái)替代似然函數(shù),以便于計(jì)算和優(yōu)化。對(duì)數(shù)似然函數(shù)定義為似然函數(shù)的自然對(duì)數(shù):
log L(θ) = log(f(X?; θ)) + log(f(X?; θ)) + … + log(f(X?; θ))
極大似然估計(jì)的目標(biāo)是找到最大化似然函數(shù)(或?qū)?shù)似然函數(shù))的參數(shù)值 θ?。換句話說(shuō):
θ? = argmax L(θ) 或 θ? = argmax log L(θ)
可以通過(guò)對(duì)似然函數(shù)(或?qū)?shù)似然函數(shù))對(duì)參數(shù) θ 求導(dǎo)并令導(dǎo)數(shù)為零,然后解方程得到 θ?。在某些情況下,可以使用數(shù)值優(yōu)化方法來(lái)找到最大似然估計(jì)。
最大似然估計(jì) θ? 被認(rèn)為是對(duì)于給定觀測(cè)數(shù)據(jù)和假設(shè)的概率分布,最好的參數(shù)估計(jì)值。它提供了一個(gè)使得觀測(cè)數(shù)據(jù)在指定模型下似然最大化的點(diǎn)估計(jì)。
5.極大似然估計(jì)的案例
假設(shè)我們有一枚硬幣,我們想要估計(jì)這枚硬幣正面朝上的概率 p。我們進(jìn)行了一系列的投擲實(shí)驗(yàn),記錄下每次投擲的結(jié)果,1 表示正面朝上,0 表示反面朝上。我們得到了一組觀測(cè)數(shù)據(jù) X = {1, 0, 1, 1, 0, 1}。
在這個(gè)例子中,我們假設(shè)每次投擲是獨(dú)立的,并且符合二項(xiàng)分布。二項(xiàng)分布是一種離散概率分布,表示在 n 次獨(dú)立的二元試驗(yàn)中成功的次數(shù),其中每次試驗(yàn)的成功概率為 p。
現(xiàn)在,我們的目標(biāo)是通過(guò)觀測(cè)數(shù)據(jù) X 來(lái)估計(jì)硬幣正面朝上的概率 p。我們可以使用極大似然估計(jì)來(lái)找到最有可能產(chǎn)生這些觀測(cè)數(shù)據(jù)的參數(shù)值。
假設(shè)觀測(cè)數(shù)據(jù) X 的長(zhǎng)度為 n,其中正面朝上的次數(shù)為 m。那么,觀測(cè)數(shù)據(jù)的似然函數(shù)為:
L(p|X) = p^m * (1-p)^(n-m)
我們的目標(biāo)是找到使得似然函數(shù) L(p|X) 最大化的 p 值。為了方便計(jì)算,我們通常對(duì)似然函數(shù)取對(duì)數(shù),得到對(duì)數(shù)似然函數(shù):
log L(p|X) = m * log§ + (n-m) * log(1-p)
現(xiàn)在,我們的任務(wù)是找到最大化對(duì)數(shù)似然函數(shù)的 p 值。這可以通過(guò)求導(dǎo)或者通過(guò)觀察函數(shù)的形狀來(lái)得到。對(duì)于二項(xiàng)分布的情況,我們可以發(fā)現(xiàn)對(duì)數(shù)似然函數(shù)在 p = m/n 處取得最大值。
因此,通過(guò)極大似然估計(jì),我們得到了硬幣正面朝上的概率 p 的估計(jì)值為 m/n,其中 m 是觀測(cè)數(shù)據(jù)中正面朝上的次數(shù),n 是觀測(cè)數(shù)據(jù)的總數(shù)。
通過(guò)這個(gè)簡(jiǎn)單的例子,我們可以看到極大似然估計(jì)的基本思想:尋找能夠最大化觀測(cè)數(shù)據(jù)的似然函數(shù)(或?qū)?shù)似然函數(shù))的參數(shù)值,從而估計(jì)出最有可能產(chǎn)生這些觀測(cè)數(shù)據(jù)的模型參數(shù)。在實(shí)際應(yīng)用中,極大似然估計(jì)可以應(yīng)用于更復(fù)雜的概率模型和更多的觀測(cè)數(shù)據(jù),用于參數(shù)估計(jì)和統(tǒng)計(jì)推斷。
二、HMM模型的介紹
1.馬爾科夫鏈
在機(jī)器學(xué)習(xí)中,馬爾科夫鏈(Markov Chain)是個(gè)很重要的概念。馬爾科夫鏈(Markov Chain),又稱離散時(shí)間馬爾科夫鏈(discrete-time Markov chain),因俄國(guó)數(shù)學(xué)家安德烈·馬爾可夫得名。
馬爾科夫鏈(Markov Chain)是一種數(shù)學(xué)模型,用于描述具有馬爾科夫性質(zhì)的隨機(jī)過(guò)程。馬爾科夫性質(zhì)指的是在給定當(dāng)前狀態(tài)的情況下,未來(lái)狀態(tài)的概率只依賴于當(dāng)前狀態(tài),而與過(guò)去狀態(tài)無(wú)關(guān)。
馬爾科夫鏈由一組狀態(tài)和狀態(tài)之間的轉(zhuǎn)移概率組成。每個(gè)狀態(tài)代表系統(tǒng)或過(guò)程可能處于的一個(gè)特定情況,轉(zhuǎn)移概率表示在某個(gè)狀態(tài)下,系統(tǒng)轉(zhuǎn)移到其他狀態(tài)的概率。
馬爾科夫鏈的特點(diǎn)是具有無(wú)記憶性,即未來(lái)狀態(tài)的概率只取決于當(dāng)前狀態(tài),與過(guò)去的狀態(tài)序列無(wú)關(guān)。這意味著馬爾科夫鏈的演化過(guò)程是按照一步一步的轉(zhuǎn)移進(jìn)行的,每一步的轉(zhuǎn)移僅依賴于當(dāng)前狀態(tài)。
馬爾科夫鏈的數(shù)學(xué)表示為:
P
(
x
(
t
+
1
)丨
?
?
?
,
x
(
t
?
2
),
x
(
t
?
1
),
x
(
t
))
=
P
(
x
(
t
+
1
)丨
x
(
t
))
P(x(t+1)丨···,x(t-2),x(t-1),x(t))=P(x(t+1)丨x(t))
P(x(t+1)丨???,x(t?2),x(t?1),x(t))=P(x(t+1)丨x(t))
既然某一時(shí)刻狀態(tài)轉(zhuǎn)移的概率只依賴前一個(gè)狀態(tài),那么只需要求出系統(tǒng)中任意兩個(gè)狀態(tài)之間的轉(zhuǎn)移概率,這個(gè)馬爾科夫鏈的模型就定了。
馬爾科夫鏈在許多領(lǐng)域有廣泛的應(yīng)用,包括自然語(yǔ)言處理、圖像處理、機(jī)器學(xué)習(xí)等。通過(guò)對(duì)馬爾科夫鏈進(jìn)行建模和分析,可以研究系統(tǒng)的狀態(tài)演化、預(yù)測(cè)未來(lái)狀態(tài)、計(jì)算平穩(wěn)分布等問(wèn)題。
2.舉例說(shuō)明馬爾科夫鏈
當(dāng)我們考慮一個(gè)簡(jiǎn)單的天氣模型時(shí),我們可以將天氣分為兩種狀態(tài):晴天(Sunny)和雨天(Rainy)。我們將這兩種狀態(tài)作為馬爾科夫鏈的狀態(tài)。
假設(shè)我們有以下?tīng)顟B(tài)轉(zhuǎn)移矩陣 P:
Sunny Rainy
Sunny 0.8 0.2
Rainy 0.4 0.6
這意味著在晴天的情況下,下一天是晴天的概率為 0.8,是雨天的概率為 0.2。同樣,在雨天的情況下,下一天是晴天的概率為 0.4,是雨天的概率為 0.6。
假設(shè)我們的初始狀態(tài)概率分布為:
- 初始天氣為晴天的概率為 0.6,為雨天的概率為 0.4。
現(xiàn)在,可以使用這些信息來(lái)模擬天氣的狀態(tài)。假設(shè)今天是晴天(初始狀態(tài)),我們可以根據(jù)狀態(tài)轉(zhuǎn)移矩陣計(jì)算明天的天氣狀態(tài)。
在第一天晴天的情況下,下一天是晴天的概率為 0.8,是雨天的概率為 0.2。因此,明天是晴天的概率為 0.8,是雨天的概率為 0.2。
我們可以繼續(xù)進(jìn)行類似的計(jì)算來(lái)預(yù)測(cè)未來(lái)的天氣狀態(tài)。每一天的天氣狀態(tài)僅依賴于前一天的天氣狀態(tài),而與更早的天氣狀態(tài)無(wú)關(guān)。
這就是一個(gè)簡(jiǎn)單的馬爾科夫鏈模型,它描述了天氣狀態(tài)的轉(zhuǎn)移概率。通過(guò)觀察一系列天氣狀態(tài),我們可以利用馬爾科夫鏈來(lái)推斷未來(lái)的天氣狀態(tài)或分析天氣狀態(tài)之間的關(guān)聯(lián)性。
3.什么是HMM模型?
HMM(Hidden Markov Model)模型是一種統(tǒng)計(jì)模型,用于建模和分析由隱含的狀態(tài)序列生成的可觀測(cè)序列的概率模型。HMM模型假設(shè)系統(tǒng)中存在一個(gè)不可見(jiàn)的狀態(tài)序列,每個(gè)狀態(tài)生成一個(gè)可觀測(cè)的輸出。
HMM模型由兩個(gè)基本部分組成:狀態(tài)轉(zhuǎn)移概率和觀測(cè)概率(輸出概率)
- 狀態(tài)轉(zhuǎn)移概率:描述了在給定狀態(tài)下系統(tǒng)從一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài)的概率。
- 觀測(cè)概率(輸出概率):描述了在給定狀態(tài)下系統(tǒng)生成特定觀測(cè)的概率。
HMM模型需要具備的要素:
- 狀態(tài)集合:表示系統(tǒng)可能處于的狀態(tài)的集合。
- 初始狀態(tài)概率分布:表示系統(tǒng)的初始狀態(tài)的概率分布。
- 狀態(tài)轉(zhuǎn)移概率矩陣:描述系統(tǒng)從一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài)的概率。
- 觀測(cè)集合:表示系統(tǒng)可能生成的觀測(cè)的集合。
- 觀測(cè)概率矩陣:描述系統(tǒng)在給定狀態(tài)下生成特定觀測(cè)的概率。
HMM模型常用于序列數(shù)據(jù)的建模和分析,如語(yǔ)音識(shí)別、自然語(yǔ)言處理、手寫(xiě)識(shí)別等領(lǐng)域。在HMM模型中,通過(guò)觀測(cè)序列來(lái)推斷最可能的狀態(tài)序列,或者根據(jù)狀態(tài)序列生成對(duì)應(yīng)的觀測(cè)序列。
4.什么樣的問(wèn)題需要HMM模型
使用HMM模型時(shí)我們的問(wèn)題一般有這兩個(gè)特征:
-
我們的問(wèn)題是基于序列的,比如時(shí)間序列,或者狀態(tài)序列。
-
我們的問(wèn)題中有兩類數(shù)據(jù):
- 一類序列數(shù)據(jù)是可以觀測(cè)到的,即觀測(cè)序列
- 另一類數(shù)據(jù)是不能觀測(cè)到的,即隱藏狀態(tài)序列簡(jiǎn)稱狀態(tài)序列
有了這兩個(gè)特征,那么這個(gè)問(wèn)題一般可以用HMM模型來(lái)嘗試解決。這樣的問(wèn)題在實(shí)際生活中是很多的。
- 比如:在鍵盤(pán)上敲出來(lái)的一系列字符就是觀測(cè)序列,而我實(shí)際想寫(xiě)的一段話就是隱藏狀態(tài)序列,輸入法的任務(wù)就是從敲入的一系列字符盡可能的猜測(cè)我要寫(xiě)的一段話,并把最可能的詞語(yǔ)放在最前面讓我選擇,這就可以看做一個(gè)HMM模型。
5.HMM模型的兩個(gè)重要假設(shè)
-
齊次馬爾科夫鏈假設(shè)
- 即任意時(shí)刻的隱藏狀態(tài)只依賴于它前一個(gè)隱藏狀態(tài)。
- 當(dāng)然這樣假設(shè)有點(diǎn)極端,因?yàn)楹芏鄷r(shí)候我們的某一個(gè)隱藏狀態(tài)不僅僅只依賴于前一個(gè)隱藏狀態(tài),可能是前兩個(gè)或者是前三個(gè)。
- 但是這樣假設(shè)的好處就是模型簡(jiǎn)單,便于求解。
- 即任意時(shí)刻的隱藏狀態(tài)只依賴于它前一個(gè)隱藏狀態(tài)。
-
觀測(cè)獨(dú)立性假設(shè)
- 即任意時(shí)刻的觀察狀態(tài)只僅僅依賴于當(dāng)前時(shí)刻的隱藏狀態(tài),這也是一個(gè)為了簡(jiǎn)化模型的假設(shè)。
一個(gè)HMM模型,可以由隱藏狀態(tài)初始概率分布π,狀態(tài)轉(zhuǎn)移概率矩陣A和觀測(cè)狀態(tài)概率矩陣B決定
6.HMM模型實(shí)例
當(dāng)我們考慮一個(gè)簡(jiǎn)單的語(yǔ)音識(shí)別問(wèn)題時(shí),我們可以使用HMM模型來(lái)建模和解決這個(gè)問(wèn)題。假設(shè)我們有一個(gè)包含三個(gè)狀態(tài)的HMM模型,表示三個(gè)可能的語(yǔ)音信號(hào):靜音(Silent)、輔音(Consonant)和元音(Vowel)。
目標(biāo)是根據(jù)觀測(cè)到的語(yǔ)音信號(hào)序列,推斷出最可能的隱藏狀態(tài)序列,即最可能的語(yǔ)音信號(hào)類型序列。
假設(shè)我們有以下HMM模型的參數(shù):
-
狀態(tài)集合:{Silent, Consonant, Vowel}
-
初始狀態(tài)概率分布:π = [0.4, 0.3, 0.3],表示初始時(shí)處于靜音狀態(tài)的概率為 0.4,輔音狀態(tài)的概率為 0.3,元音狀態(tài)的概率為 0.3。
-
狀態(tài)轉(zhuǎn)移概率矩陣A:
Silent Consonant Vowel Silent 0.6 0.4 0 Consonant 0.3 0.6 0.1 Vowel 0 0.4 0.6
這表示在當(dāng)前狀態(tài)下,轉(zhuǎn)移到其他狀態(tài)的概率。
-
觀測(cè)集合:{A, B, C},表示觀測(cè)到的語(yǔ)音信號(hào)的集合。
-
觀測(cè)概率矩陣B:
A B C Silent 0.1 0.3 0.6 Consonant 0.4 0.4 0.2 Vowel 0.6 0.3 0.1
這表示在給定狀態(tài)下,生成不同觀測(cè)的概率。
假設(shè)我們觀測(cè)到一個(gè)語(yǔ)音信號(hào)序列為 {B, C, A},我們想要根據(jù)這個(gè)觀測(cè)序列推斷最可能的隱藏狀態(tài)序列。
可以使用維特比算法來(lái)計(jì)算最可能的隱藏狀態(tài)序列。維特比算法使用動(dòng)態(tài)規(guī)劃的方式,在每個(gè)時(shí)間步驟上計(jì)算最可能的狀態(tài)序列。
根據(jù)觀測(cè)到的語(yǔ)音信號(hào)序列 {B, C, A},我們可以計(jì)算每個(gè)時(shí)間步驟的最可能狀態(tài)。通過(guò)比較每個(gè)時(shí)間步驟的狀態(tài)概率,可以確定最可能的狀態(tài)序列。
在這個(gè)例子中,根據(jù)維特比算法的計(jì)算,我們可以得到最可能的隱藏狀態(tài)序列為 {Consonant, Vowel, Vowel}。這表示在給定觀測(cè)序列的情況下,最可能的語(yǔ)音信號(hào)類型序列是輔音、元音、元音。
7.HMM模型中,常見(jiàn)的問(wèn)題分類:
- 評(píng)估問(wèn)題(Evaluation Problem)-----前向后向的概率計(jì)算:給定一個(gè)觀測(cè)序列和模型參數(shù),計(jì)算觀測(cè)序列出現(xiàn)的概率。也就是說(shuō),我們需要計(jì)算給定觀測(cè)序列 O 的條件下,模型參數(shù) θ=(A, B, π) 下的 P(O|θ)。
- 解碼問(wèn)題(Decoding Problem)-----維特比算法求解:給定一個(gè)觀測(cè)序列和模型參數(shù),找到最可能的隱藏狀態(tài)序列。也就是說(shuō),我們需要找到使得 P(Q|O, θ) 最大的隱藏狀態(tài)序列 Q,其中 Q 表示隱藏狀態(tài)序列,O 表示觀測(cè)序列,θ 表示模型參數(shù)。
- 學(xué)習(xí)問(wèn)題(Learning Problem)-----鮑姆-韋爾奇算法求解:給定一個(gè)觀測(cè)序列,通過(guò)對(duì)觀測(cè)序列的觀察來(lái)估計(jì)模型的參數(shù)。也就是說(shuō),我們需要估計(jì)模型參數(shù) θ=(A, B, π) 的值,使得在給定觀測(cè)序列 O 下的 P(O|θ) 達(dá)到最大。
這三類問(wèn)題在HMM中都具有重要的意義,評(píng)估問(wèn)題用于計(jì)算觀測(cè)序列的概率,解碼問(wèn)題用于推斷最可能的隱藏狀態(tài)序列,學(xué)習(xí)問(wèn)題用于估計(jì)模型參數(shù)。解決這些問(wèn)題的方法包括維特比算法、前向-后向算法、Baum-Welch算法等。
三、前向后向算法評(píng)估觀察序列概率
1.前向算法的基本流程
前向算法本質(zhì)上屬于動(dòng)態(tài)規(guī)劃的算法,也就是我們要通過(guò)找到局部狀態(tài)遞推的公式,這樣一步步地從子問(wèn)題的最優(yōu)解拓展到整個(gè)問(wèn)題的最優(yōu)解。前向算法的時(shí)間復(fù)雜度為:O(TN2),暴力求解的時(shí)間復(fù)雜度為:O(TNT)。
前向算法是用于解決隱馬爾可夫模型(HMM)中的評(píng)估問(wèn)題,即給定一個(gè)觀測(cè)序列和模型參數(shù),計(jì)算觀測(cè)序列的概率。下面是前向算法的基本流程:
- 初始化:對(duì)于時(shí)間步驟 t=1,計(jì)算初始狀態(tài)的概率。即計(jì)算每個(gè)狀態(tài) i 的初始概率值,即 π[i] * 觀測(cè)概率矩陣[i, O[1]],其中 π[i] 是初始狀態(tài)概率分布,O[1] 是觀測(cè)序列中的第一個(gè)觀測(cè)值。
- 遞推:對(duì)于每個(gè)時(shí)間步驟 t>1,遞歸地計(jì)算每個(gè)狀態(tài) i 的前向概率。具體步驟如下:
- 對(duì)于每個(gè)狀態(tài) i,在上一個(gè)時(shí)間步驟 t-1 的每個(gè)狀態(tài) j 上計(jì)算概率值。即計(jì)算上一步的前向概率乘以狀態(tài)轉(zhuǎn)移概率和觀測(cè)概率,即 α[t-1, j] * 狀態(tài)轉(zhuǎn)移矩陣[j, i] * 觀測(cè)概率矩陣[i, O[t]]。
- 將上述計(jì)算結(jié)果累加得到當(dāng)前時(shí)間步驟 t 的前向概率,即 α[t, i] = Σ(α[t-1, j] * 狀態(tài)轉(zhuǎn)移矩陣[j, i] * 觀測(cè)概率矩陣[i, O[t]])。
- 終止:計(jì)算觀測(cè)序列的概率。將最后一個(gè)時(shí)間步驟的前向概率進(jìn)行累加,即 P(O) = Σ(α[T, i]),其中 T 是觀測(cè)序列的長(zhǎng)度。
通過(guò)前向算法,可以有效計(jì)算出給定觀測(cè)序列的概率。該概率可以用于模型選擇、序列比較等應(yīng)用。
2.前向算法的實(shí)例
假設(shè)我們有一個(gè)隱馬爾可夫模型(HMM),包含三個(gè)隱藏狀態(tài) {A, B, C} 和三個(gè)觀測(cè)值 {1, 2, 3}。給定觀測(cè)序列 O = [1, 2, 3],我們要計(jì)算該觀測(cè)序列出現(xiàn)的概率。
首先,我們需要定義模型的參數(shù),包括初始狀態(tài)概率分布 π,狀態(tài)轉(zhuǎn)移概率矩陣 A,和觀測(cè)概率矩陣 B。假設(shè)參數(shù)如下:
初始狀態(tài)概率分布 π = [0.3, 0.4, 0.3] 狀態(tài)轉(zhuǎn)移概率矩陣 A = [[0.2, 0.5, 0.3], [0.4, 0.1, 0.5], [0.3, 0.6, 0.1]] 觀測(cè)概率矩陣 B = [[0.6, 0.4, 0.0], [0.1, 0.7, 0.2], [0.3, 0.3, 0.4]]
接下來(lái),我們可以使用前向算法計(jì)算觀測(cè)序列的概率。
-
初始化:計(jì)算初始狀態(tài)的概率。根據(jù)初始狀態(tài)概率分布 π 和觀測(cè)序列的第一個(gè)觀測(cè)值 O[1] = 1,我們可以計(jì)算每個(gè)狀態(tài)的初始概率值:
- α[1, A] = π[A] * B[A, 1] = 0.3 * 0.6 = 0.18
- α[1, B] = π[B] * B[B, 1] = 0.4 * 0.1 = 0.04
- α[1, C] = π[C] * B[C, 1] = 0.3 * 0.3 = 0.09
-
遞推:根據(jù)狀態(tài)轉(zhuǎn)移概率矩陣和觀測(cè)概率矩陣,遞歸地計(jì)算每個(gè)時(shí)間步驟的前向概率。對(duì)于時(shí)間步驟 t>1,我們可以使用以下公式計(jì)算前向概率:
- α[t, i] = Σ(α[t-1, j] * A[j, i] * B[i, O[t]])
根據(jù)上述公式,我們可以計(jì)算出每個(gè)時(shí)間步驟的前向概率:
- α[2, A] = α[1, A] * A[A, A] * B[A, 2] + α[1, B] * A[B, A] * B[A, 2] + α[1, C] * A[C, A] * B[A, 2] = 0.18 * 0.2 * 0.4 + 0.04 * 0.4 * 0.4 + 0.09 * 0.3 * 0.4 = 0.0468
- α[2, B] = α[1, A] * A[A, B] * B[B, 2] + α[1, B] * A[B, B] * B[B, 2] + α[1, C] * A[C, B] * B[B, 2] = 0.18 * 0.5 * 0.7 + 0.04 * 0.1 * 0.7 + 0.09 * 0.6 * 0.7 = 0.0804
- α[2, C] = α[1, A] * A[A, C] * B[C, 2] + α[1, B] * A[B, C] * B[C, 2] + α[1, C] * A[C, C] * B[C, 2] = 0.18 * 0.3 * 0.0 + 0.04 * 0.5 * 0.0 + 0.09 * 0.1 * 0.0 = 0.0
- α[3, A] = α[2, A] * A[A, A] * B[A, 3] + α[2, B] * A[B, A] * B[A, 3] + α[2, C] * A[C, A] * B[A, 3] = …
- α[3, B] = …
- α[3, C] = …
-
終止:計(jì)算觀測(cè)序列的概率。將最后一個(gè)時(shí)間步驟的前向概率進(jìn)行累加,即 P(O) = Σ(α[T, i]),其中 T 是觀測(cè)序列的長(zhǎng)度。
通過(guò)以上計(jì)算,我們可以得到觀測(cè)序列 O = [1, 2, 3] 的概率 P(O)。在本例中,通過(guò)前向算法計(jì)算得到的觀測(cè)序列的概率為 P(O) = α[3, A] + α[3, B] + α[3, C] = 0.0648 + 0.1044 + 0.0 = 0.1692。
3.后向算法的基本流程
后向算法用于計(jì)算給定觀測(cè)序列的概率。下面是后向算法的流程:
-
初始化:將所有時(shí)間步驟的后向概率初始化為1,即 β[T, i] = 1,其中 T 是觀測(cè)序列的長(zhǎng)度。
-
遞推:從倒數(shù)第二個(gè)時(shí)間步驟開(kāi)始,遞歸地計(jì)算每個(gè)時(shí)間步驟的后向概率。對(duì)于時(shí)間步驟 t<T,可以使用以下公式計(jì)算后向概率:
- β[t, i] = Σ(β[t+1, j] * A[i, j] * B[j, O[t+1]])
根據(jù)上述公式,我們可以計(jì)算出每個(gè)時(shí)間步驟的后向概率:
- β[T-1, A] = β[T, A] * A[A, A] * B[A, O[T]] + β[T, B] * A[A, B] * B[B, O[T]] + β[T, C] * A[A, C] * B[C, O[T]] = …
- β[T-1, B] = …
- β[T-1, C] = …
- β[T-2, A] = β[T-1, A] * A[A, A] * B[A, O[T-1]] + β[T-1, B] * A[A, B] * B[B, O[T-1]] + β[T-1, C] * A[A, C] * B[C, O[T-1]] = …
- β[T-2, B] = …
- β[T-2, C] = …
依此類推,遞推計(jì)算每個(gè)時(shí)間步驟的后向概率。
-
終止:計(jì)算觀測(cè)序列的概率。將初始狀態(tài)概率分布與第一個(gè)時(shí)間步驟的觀測(cè)概率矩陣相乘,再與第一個(gè)時(shí)間步驟的后向概率向量相乘,即可得到觀測(cè)序列的概率:
- P(O) = Σ(π[i] * B[i, O[1]] * β[1, i])
通過(guò)以上計(jì)算,我們可以得到觀測(cè)序列 O 的概率 P(O)。
四、維特比算法解碼隱藏狀態(tài)序列
1.維特比算法的基本流程
維特比算法是一個(gè)通用的求序列最短路徑的動(dòng)態(tài)規(guī)劃算法,也可用于很多其他問(wèn)題。
維特比算法用于解碼隱藏狀態(tài)序列,即找到最可能的隱藏狀態(tài)序列。下面是維特比算法的流程:
-
初始化:將初始時(shí)間步驟的最大概率路徑的概率初始化為1,即 δ[1, i] = π[i],其中 π 是初始狀態(tài)概率分布。
-
遞推:從第二個(gè)時(shí)間步驟開(kāi)始,遞歸地計(jì)算每個(gè)時(shí)間步驟的最大概率路徑的概率和路徑。對(duì)于時(shí)間步驟 t>1,可以使用以下公式計(jì)算最大概率路徑:
- δ[t, j] = max(δ[t-1, i] * A[i, j] * B[j, O[t]]),其中 i 是前一個(gè)時(shí)間步驟的隱藏狀態(tài),j 是當(dāng)前時(shí)間步驟的隱藏狀態(tài)。
根據(jù)上述公式,我們可以計(jì)算出每個(gè)時(shí)間步驟的最大概率路徑的概率和路徑:
- δ[2, A] = max(δ[1, A] * A[A, A] * B[A, O[2]], δ[1, B] * A[B, A] * B[A, O[2]], δ[1, C] * A[C, A] * B[A, O[2]]) = …
- δ[2, B] = …
- δ[2, C] = …
- δ[3, A] = max(δ[2, A] * A[A, A] * B[A, O[3]], δ[2, B] * A[B, A] * B[A, O[3]], δ[2, C] * A[C, A] * B[A, O[3]]) = …
- δ[3, B] = …
- δ[3, C] = …
依此類推,遞推計(jì)算每個(gè)時(shí)間步驟的最大概率路徑的概率和路徑。
-
終止:找到最后一個(gè)時(shí)間步驟的最大概率路徑的概率和路徑。最終的隱藏狀態(tài)序列是具有最大概率路徑的隱藏狀態(tài)序列。
通過(guò)以上計(jì)算,我們可以找到最可能的隱藏狀態(tài)序列。
2.維特比算法的實(shí)例
假設(shè)我們有一個(gè)隱馬爾可夫模型(HMM),其中隱藏狀態(tài)是晴天(Sunny)和雨天(Rainy),觀測(cè)狀態(tài)是散步(Walk)和購(gòu)物(Shop)。我們的目標(biāo)是根據(jù)觀測(cè)序列來(lái)解碼隱藏狀態(tài)序列。
給定以下參數(shù)和觀測(cè)序列:
隱藏狀態(tài)轉(zhuǎn)移矩陣 A:
Sunny Rainy
Sunny 0.7 0.3
Rainy 0.4 0.6
觀測(cè)狀態(tài)概率矩陣 B:
Walk Shop
Sunny 0.8 0.2
Rainy 0.3 0.7
初始狀態(tài)概率分布 π:
Sunny 0.6
Rainy 0.4
觀測(cè)序列 O:Walk, Walk, Shop
現(xiàn)在我們將使用維特比算法來(lái)解碼隱藏狀態(tài)序列。
- 初始化:將初始時(shí)間步驟的最大概率路徑的概率初始化為1,即 δ[1, i] = π[i]。
- 遞推:從第二個(gè)時(shí)間步驟開(kāi)始,遞歸地計(jì)算每個(gè)時(shí)間步驟的最大概率路徑的概率和路徑。
- 對(duì)于時(shí)間步驟 t=2:
- δ[2, Sunny] = max(δ[1, Sunny] * A[Sunny, Sunny] * B[Sunny, Walk], δ[1, Rainy] * A[Rainy, Sunny] * B[Sunny, Walk]) = 0.6 * 0.7 * 0.8 = 0.336
- δ[2, Rainy] = max(δ[1, Sunny] * A[Sunny, Rainy] * B[Rainy, Walk], δ[1, Rainy] * A[Rainy, Rainy] * B[Rainy, Walk]) = 0.6 * 0.3 * 0.3 = 0.054
- 對(duì)于時(shí)間步驟 t=3:
- δ[3, Sunny] = max(δ[2, Sunny] * A[Sunny, Sunny] * B[Sunny, Shop], δ[2, Rainy] * A[Rainy, Sunny] * B[Sunny, Shop]) = 0.336 * 0.7 * 0.2 = 0.04704
- δ[3, Rainy] = max(δ[2, Sunny] * A[Sunny, Rainy] * B[Rainy, Shop], δ[2, Rainy] * A[Rainy, Rainy] * B[Rainy, Shop]) = 0.336 * 0.3 * 0.7 = 0.07056
- 對(duì)于時(shí)間步驟 t=2:
- 終止:找到最后一個(gè)時(shí)間步驟的最大概率路徑的概率和路徑。
- 最后一個(gè)時(shí)間步驟是 t=3:
- 最大概率路徑的概率是 max(δ[3, Sunny], δ[3, Rainy]) = max(0.04704, 0.07056) = 0.07056
- 當(dāng)時(shí)間步驟為3時(shí),最大概率路徑對(duì)應(yīng)的隱藏狀態(tài)是 Rainy
- 時(shí)間步驟是 t=2:
- 最大概率路徑的概率是 max(δ[2, Sunny], δ[2, Rainy]) = max(0.336, 0.054)
- 當(dāng)時(shí)間步驟為2時(shí),最大概率路徑對(duì)應(yīng)的隱藏狀態(tài)是 Sunny
- 時(shí)間步驟是 t=1:
- 最大概率路徑的概率是 max(δ[1, Sunny], δ[1, Rainy] = max(0.6, 0.4)
- 當(dāng)時(shí)間步驟為1時(shí)。最大概率路徑對(duì)應(yīng)的隱藏狀態(tài)是 Sunny
- 最后一個(gè)時(shí)間步驟是 t=3:
因此,根據(jù)觀測(cè)序列 Walk, Walk, Shop,使用維特比算法解碼得到的最可能的隱藏狀態(tài)序列是 Sunny, Sunny, Rainy。
五、鮑姆-韋爾奇算法簡(jiǎn)介
1.鮑姆-韋爾奇算法的基本流程
鮑姆-韋爾奇算法,其實(shí)就是基于EM算法的求解,只不過(guò)鮑姆-韋爾奇算法出現(xiàn)的時(shí)代,EM算法還沒(méi)有被抽象出來(lái),所以被叫為鮑姆-韋爾奇算法。
鮑姆-韋爾奇算法(Baum-Welch algorithm)是用于無(wú)監(jiān)督學(xué)習(xí)的隱馬爾可夫模型(HMM)參數(shù)估計(jì)的一種算法。其基本流程如下:
- 初始化:隨機(jī)初始化隱藏狀態(tài)轉(zhuǎn)移矩陣 A、觀測(cè)狀態(tài)概率矩陣 B、初始狀態(tài)概率分布 π,或者使用先驗(yàn)知識(shí)進(jìn)行初始化。
- E步驟(Expectation step):
- 使用前向算法計(jì)算在當(dāng)前參數(shù)下觀測(cè)序列的前向概率 α 和后向概率 β。
- 使用 α 和 β 計(jì)算在每個(gè)時(shí)間步驟 t 和隱藏狀態(tài) i 下,隱藏狀態(tài)為 i 的概率作為后驗(yàn)概率 γ。
- M步驟(Maximization step):
- 使用觀測(cè)序列和后驗(yàn)概率 γ 更新隱藏狀態(tài)轉(zhuǎn)移矩陣 A、觀測(cè)狀態(tài)概率矩陣 B、初始狀態(tài)概率分布 π。
- 計(jì)算在當(dāng)前參數(shù)下觀測(cè)序列的似然函數(shù),并檢查是否達(dá)到收斂條件。如果未達(dá)到收斂條件,則返回第2步。
- 重復(fù)第2步和第3步,直到達(dá)到收斂條件(例如,參數(shù)變化小于給定閾值)或達(dá)到最大迭代次數(shù)。
最終,鮑姆-韋爾奇算法通過(guò)迭代優(yōu)化參數(shù),使得隱馬爾可夫模型的參數(shù)逼近最優(yōu)值,從而更好地描述觀測(cè)數(shù)據(jù)的生成過(guò)程。
六、HMM模型API介紹
1.API的安裝
pip3 install hmmlearn
2.hmmlearn介紹
hmmlearn實(shí)現(xiàn)了三種HMM模型類,按照觀測(cè)狀態(tài)是連續(xù)狀態(tài)還是離散狀態(tài),可分為兩類。
GaussianHMM 和 GMMHMM 是連續(xù)觀測(cè)狀態(tài)的 HMM 模型,而 MultinomialHMM 和 CategoricalHMM 是離散觀測(cè)狀態(tài)的模型,也是我們?cè)贖MM原理系列篇里使用的模型。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-474203.html
對(duì)于 CategoricalHMM 的模型,使用比較簡(jiǎn)單,文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474203.html
- “startprob_”:對(duì)應(yīng)我們的隱藏狀態(tài)初始分布 π。
- “transmat_”:對(duì)應(yīng)狀態(tài)轉(zhuǎn)移矩陣A。
- “emissionprob_”:對(duì)應(yīng)觀測(cè)狀態(tài)概率矩陣B。
- “n_features”:觀測(cè)序列的種類
3.CategoricalHMM 代碼實(shí)例
import numpy as np
from hmmlearn import hmm
# 設(shè)定隱藏狀態(tài)的集合
states = ["box1", "box2", "box3"]
n_states = len(states)
# 設(shè)定觀測(cè)狀態(tài)的集合
observations = ["red", "white"]
n_observations = len(observations)
# 設(shè)定初始狀態(tài)概率分布 π
start_probability = np.array([0.2, 0.4, 0.4])
# 設(shè)定隱藏狀態(tài)轉(zhuǎn)移矩陣 A
transition_probability = np.array([
[0.5, 0.2, 0.3],
[0.3, 0.5, 0.2],
[0.2, 0.3, 0.5]])
# 設(shè)定觀測(cè)狀態(tài)概率矩陣 B
emission_probability = np.array([
[0.5, 0.5],
[0.4, 0.6],
[0.7, 0.3]])
# 設(shè)定參數(shù)模型
model = hmm.CategoricalHMM(n_components=n_states)
# 設(shè)定初始狀態(tài)概率分布
model.startprob_ = start_probability
# 設(shè)定隱藏狀態(tài)轉(zhuǎn)移矩陣A
model.transmat_ = transition_probability
# 設(shè)定觀測(cè)狀態(tài)概率矩陣B
model.emissionprob_ = emission_probability
# 設(shè)定觀測(cè)序列的種類
model.n_features = n_observations
# 設(shè)定觀測(cè)序列,根據(jù)維特比算法解碼隱藏狀態(tài)序列
seen = np.array([[0, 1, 0, 1, 1]]).T
# 將觀測(cè)序列轉(zhuǎn)化成 red white 形式
tran_seen = [observations[x] for x in seen.flatten()]
tran_seen = ",".join(tran_seen)
print("球的觀測(cè)序列為:\n",tran_seen)
# 維特比模型訓(xùn)練,解碼隱藏狀態(tài)序列
box = model.predict(seen)
tran_box = ",".join([states[x] for x in box])
print("盒子最可能的隱藏狀態(tài)序列為:\n",tran_box)
到了這里,關(guān)于EM算法和HMM模型的介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!