必要的數學知識
1.聯合概率與邊緣概率
聯合概率是指多維隨機變量中同時滿足多個變量時候的概率,也就是共同發生的概率。A,B的聯合概率通常寫成 P(A∩B)或 P(AB)或 P(AB)。對於離散的變量,聯合概率可以用表格形式表示或者求和表示,連續的變量可以使用積分表示(若是二維就一個二重積分)
邊緣概率是指多維隨機變量中只滿足部分變量時的概率。圖片幫助理解:
聯合概率與邊緣概率的關係:
邊緣概率分佈公式
聯合概率的條件概率鏈式法則
舉例:P(a,b,c)=P(a|b,c)*P(b,c)=P(a|b,c)*P(b|c)*P(c)
條件概率
獨立性(XY相互獨立)
P(X,Y)=P(X) *P(Y)
條件獨立性
P(X,Y|Z)=P(X|Z)*P(Y|Z)
2.EM算法
關於EM算法利用jensen不等式近似實現極大似然估計的推導過程:https://zhuanlan.zhihu.com/p/36331115
隱馬爾可夫模型(HMM)
1.基本模型樣式
上圖中,白圈代表狀態變量,藍圈代表觀測變量。所以白圈那一行是狀態序列(隱狀態),而白圈這一行是觀測序列。
2.模型的數學表達
HMM由隱含狀態S、可觀測狀態O、初始狀態概率矩陣pi、隱含狀態概率轉移矩陣A、可觀測值轉移矩陣B(混淆矩陣)組成,可以使用一個三元組進行表述:
3.Markov兩個假設
(1)齊次假設:表示 t 時刻的狀態只與 t-1 時刻的狀態有關
(2) 觀測獨立性假設:表示 t 時刻的觀測變量只與 t 時刻的狀態有關
4.解決三個問題
(1)概率計算問題(Evalution ):前向後向算法,已知模型 λ = (A, B, π)和觀測序列O={o1, o2, o3 ...},計算模型λ下觀測O出現的概率P(O | λ);
(2)學習問題(learning):EM算法,已知觀測序列O={o1, o2, o3 ...},計算估計模型λ = (A, B, π)的參數即推斷狀態的轉移情況,使得在該參數下該模型的觀測序列P(O | λ)最大;
(3)預測問題(Decoding):Viterbi算法,已知模型λ = (A, B, π)和觀測序列O={o1, o2, o3 ...},求給定觀測序列條件概率P(I | O,λ)最大的狀態序列 I;
4.1HMM模型的實質
HMM實際上就是建立建模 P(O,Q),對於給定的lamda 進行建模:
5.關於轉移矩陣AB及Pai的定義
5.1狀態轉移矩陣A
根據Markov齊次假設去定義狀態轉移矩陣是一個NxN的矩陣,表示一個狀態有N種可能性,前一個狀態也有N種可能性。aij表示狀態從前一個的 i 狀態轉變爲現在的 j 狀態的概率。
上述式中 q 表示狀態,所以 qt 表示 t 時刻的轉態。
5.2 觀測概率矩陣B(混淆矩陣):
根據Markov 觀測獨立性假設定義觀測概率矩陣B是一個NxM的矩陣,表示對於N種狀態,在這N種狀態下對應的M個可觀測變量的概率(比如說在晴天狀態下,觀測到的溼度、溫度、風速等觀測量的概率)。bj(k)表示 j 狀態下的第 k 個觀測量的 概率。
上式中P(ot=vk|it=qj)表示t 時刻狀態爲 qj 的情況下,t 時刻觀察量爲 vk的概率。
5.3 隱藏狀態概率分佈 pai(t=1時刻的狀態)
舉例總結:
針對上述將的幾個轉移矩陣概念和初始狀態pai,舉出一個盒子中摸球的例子幫助理解。
摸球規則:
開始的時候,從第一個盒子抽球的概率是0.2,從第二個盒子抽球的概率是0.4,從第三個盒子抽球的概率是0.4。以這個概率抽一次球后,將球放回。然後從當前盒子轉移到下一個盒子進行抽球。規則是:如果當前抽球的盒子是第一個盒子,則以0.5的概率仍然留在第一個盒子繼續抽球,以0.2的概率去第二個盒子抽球,以0.3的概率去第三個盒子抽球。如果當前抽球的盒子是第二個盒子,則以0.5的概率仍然留在第二個盒子繼續抽球,以0.3的概率去第一個盒子抽球,以0.2的概率去第三個盒子抽球。如果當前抽球的盒子是第三個盒子,則以0.5的概率仍然留在第三個盒子繼續抽球,以0.2的概率去第一個盒子抽球,以0.3的概率去第二個盒子抽球。
從紫色背景的摸球規則中,可以推斷出初始矩陣:
從綠色背景的摸球規則中,可以推斷出狀態轉移矩陣爲(矩陣的行列表示盒子123,數據表示轉移概率)
從數據表格中可以推斷出觀測概率矩陣爲:(矩陣的2列標識對應的觀測結果,3行表示該觀測結果下來自於不同盒子的概率)
【注】集合與序列的問題,集合不重複,所以這個案例中,觀測集合爲 {紅,白},狀態集合爲{盒子1,盒子2,盒子3}。所以M=2,N=3.但是觀測序列可以是[紅,白,紅]等非2個元素的組成
概率計算問題
在給定模型 λ和 觀測序列 O的情況下計算 P(O|λ)
思路:
- 列舉所有可能的長度爲T的狀態序列I = {i1, i2, ..., iT};每個i都有N個可能的取值。
- 求各個狀態序列I與觀測序列 的聯合概率P(O,I|λ);
- 所有可能的狀態序列求和∑_I P(O,I|λ)得到P(O|λ)。
用到的公式:邊緣概率公式 和條件概率的鏈式法則
∵ P(O|λ)=ΣIP(O,I|λ) ←邊緣概率公式
P(O,I|λ)= P(O|I, λ)P(I|λ) ←鏈式法則
第一步:
P(I|λ)= P(i1,i2, ..., iT |λ)
= P(i1 |λ)P(i2 | i1, λ)P(i3 | i2, λ)...P(iT | iT-1, λ) ←鏈式法則
上面的P(i1 |λ) 是初始爲狀態i1的概率,P(i2 | i1, λ) 是從狀態 i1轉移到 i2的概率,其他同理,於是分別使用初始概率分佈π 和狀態轉移矩陣A,就得到結果:
∴
第二步:
P(O|I, λ) 在序列 I的條件下觀測,所以
於是帶入求和可得:
複雜度爲:aij 的複雜度爲NT,b的複雜度爲 T,所以總的複雜度 O(TnT)
前向算法(Forwarding)/後向算法
1 定義
前後向算法的區別之處:
在概念的定義上:
前向算法:當第t個時刻的狀態爲i時,前面的時刻分別觀測到y1,y2, ..., yt的概率,即:
後向算法:當第t個時刻的狀態爲i時,後面的時刻分別觀測到yt+1,yt+2, ..., yT的概率,即:
2 推導過程
前向算法推導過程:在給定模型 λ和 觀測序列 O的情況下計算 P(O|λ)
在上面的粗暴概率計算中,複雜度大,所以我們可以使用遞推公式來降低複雜度,於是在這裏就是構造一個遞推。
又因αt(i)=P(o1,o2,o3...ot,it=qi|λ),P(it+1=qj|it=qi)=aij,然後初P(ot+1|it+1=qj)=bj(ot+1)
所以整個遞推公式爲
後向算法類似於前向算法:
Baum Welch-EM算法
已知觀測序列O={o1, o2, o3 ...},計算估計模型λ = (A, B, π)的參數即推斷狀態的轉移情況,使得在該參數下該模型的觀測序列P(O | λ)最大
而我們知道,觀測O由對應的狀態決定,所以這裏還隱含了狀態這個未知變量,所以這個求解問題實際是一個隱變量求解問題,於是需要使用EM算法解決
1.求Q函數
因爲,其中 O與 λ 已知,所以P(O| λ) 可以看成一個常數。
於是
2.求解Q函數
因爲完全數據對數似然:
所以 Q函數可以寫成:
求解最大化的過程參考此貼:https://blog.csdn.net/u014688145/article/details/53046765
Viterbi(維特比)算法
已知模型與觀測序列,求取最大的 狀態序列。也就是求取 ,但是由於,並且這邊觀測O與模型λ處於已知狀態,所以可以認爲是一個常數,於是這個問題就等價於求取,所以引入δ變量的時候按照這個求取就行了。
維特比算法的流程:
對於這個流程的理解可以看https://zhuanlan.zhihu.com/p/41864904上面的例子,實際在維特比算法的計算過程中存在兩個T分別保存最大概率和最大概率的那個來自那個狀態。
還有https://zhuanlan.zhihu.com/p/63087935幫助理解(感覺這個更直觀)
參考:
https://www.cnblogs.com/sddai/p/8475424.html