Markov Model
程度★ 難度★★
First-order Markov Model
馬可夫模型大意是:選一個狀態作為起點,然後沿著邊隨意走訪任何一個狀態,一直走一直走,沿途累計機率,走累了就停在某個狀態。
熟悉「圖論」的讀者應該很快就能上手,馬可夫模型的外觀看起來就是圖──只不過代數符號多得令人生厭。
建議閱讀:L. Rabiner, A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition, Proceedings of the IEEE, vol. 77, No. 2, February 1989.
State, S
圖片中,每一個圓圈叫做一個「狀態」。馬可夫模型一共有N個狀態,通常標作s1到sN。N是我們自行設定的常數。
全部狀態構成的集合,標作大寫S。
Transition Probability, A
每一個狀態都會射出N條邊,這N條邊分別連向每一個狀態,這N條邊的數值都是機率,這N條邊的數值皆介於0到1,這N條邊的數值總和必為1,滿足機率公設。
一條由狀態si到狀態sj的邊,其數值通常標作aij。亦可標作條件機率P( sj | si ),意思是現在在狀態si、要來去狀態sj。亦可套用稍後提到的狀態序列,標作P( qt+1 = j | qt = i )。
全部邊構成的集合,標作A。通常把A看作一個N×N矩陣。
寫程式時,我們可以利用圖的資料結構adjacency matrix儲存全部的數值。當A有很多數值是零,去掉一些邊之後,也可以改用adjacency lists。
Initial Probability, Π
我們可以選擇任何一個狀態作為起點。機率總和為1。
繪製圖片時,我們可以設計一個虛幻狀態s0,讓s0射出N條虛幻邊,分別連向每一個狀態,其數值滿足機率公設。如此一來我們就可以從冥冥之中的s0開始行動。
這N條虛幻邊的數值通常標作π1到πN。亦可標作機率P( s1 )到P( sN )。亦可套用稍後提到的狀態序列,標作P( q1 = 1 )到P( q1 = N )。
這N條虛幻邊構成的集合,標作Π。通常把Π看作一個N維向量、一個N×1矩陣。
寫程式時,通常我們不會設計一個虛幻的狀態S0,而是把狀態s1到sN重新標作s0到sN-1。
State Sequence, q1 q2 ...... qT
選定起點後,可以沿著邊,到處走來走去,一路走過T個狀態以及T-1條邊之後,就停下來。T是我們自行設定的常數。
一條路徑,通常標作q1 q2 ...... qT,為途經的狀態編號。
一條路徑的機率,可以寫成πq1 × aq1q2 × ...... × aqT-1qT,也可以寫成P( sq1 ) × P( sq2 | sq1 ) × ...... × P( sqT-1 | sqT )。
Hidden Markov Model
程度★★ 難度★★★
Observation, V
隱藏馬可夫模型添加了一個新要素:每當造訪一個狀態,就立刻從M個值當中,噴出其中一個值。每一個狀態都是噴出相同的M種值,這M個值通常標作v1到vM。M是我們自行設定的常數。
全部觀察構成的集合,標作大寫V。
Observation Probability, B
每一個狀態噴出這M種值的機率都不相同。
狀態si噴出vk的機率,通常標作bi( k )或者簡單標作bik。亦可標作條件機率P( vk | si ),意思是現在在狀態si、噴出觀察vk。亦可套用狀態序列與觀察序列,標作P( ot = k | qt = i )。
每個狀態各自的噴出機率構成的集合,標作B。通常把B看作N個函數,或者簡單地看作一個N×M矩陣。
Observation Sequence, o1 o2 ...... oT
走T步後,一路上T個狀態個別噴出的值的編號。
有了狀態序列與觀察序列,一條路徑的機率,可以寫成πq1 × bq1( o1 ) × aq1q2 × bq2( o2 ) × ...... × aqT-1qT × bqT( oT ),也可以寫成P( sq1 ) × P( vo1 | sq1 ) × P( sq2 | sq1 ) × P( vo2 | sq2 ) × ...... × P( sqT-1 | sqT ) × P( voT | sqT )。我想各位差不多眼花撩亂了。名可名,非常名,若能領會原理就不用刻意背誦代數了。
Continuous Hidden Markov Model
程度★★ 難度★★
Guassian Mixture Model
之前說,每個狀態都會噴出M種固定的值。然而現實生活中,觀察值通常是實數,也通常有誤差,不見得恰好就是這M種值。
一個直覺的解決方案是假設誤差呈常態分布:以常態分布的平均值μ,代表正確的噴出數值;以常態分布的變異數σ2,控制誤差範圍。M個觀察值分別製作M個常態分布,標作N( v , μ1 , σ12 )到N( v , μM , σM2 )。
狀態不再噴出k種值,而是有k種噴出管道。觀察值不再是固定的、離散的數值v1到vM,而是變動的、連續的數值v。
使用第k個噴出管道的機率,仍標作bi( k )。在第k個噴出管道,噴出數值v的機率,是一個常態分布函數N( v , μk , σk2 );v代入一個實際數值,就能計算其噴出機率。
當各個常態分布的平均值很接近,或者變異數很大時,不同的噴出管道可能噴出相同數值。狀態si噴出數值v的機率,M個噴出管道都必須累計,為Σi=1~M [ bi( k ) × N( v , μk , σk2 ) ]。
綜觀整個過程,是把M個常態分布以不同比重疊加起來,合成一個分布──此概念稱作高斯混合模型,可以應用在許多地方,連續版本的HMM便是一例。另外,通常會將bi( k )重新標作cik,以呼應加權比重的概念。
寫程式時,我們不會真的疊加起來,而是分別紀錄M個高斯混合模型的平均值和變異數。
每個狀態噴出不同的觀察值
套用高斯混合模型,觀察值從原先的離散數值變成了連續數值。換個角度想,套用高斯混合模型,就能製造任何一種我們想要的連續分布。
每個狀態可以使用不同平均值、不同變異數的常態分布,甚至可以使用不同數量的常態分布。狀態si使用的常態分布,標作N( v , μik , σik2 )。
觀察值推廣到高維度
觀察值可以從一個值推廣為一個向量。其實也就是每個維度分開處理罷了。
至於Learning Problem,則要額外更新常態分布的平均值、變異數、加權比重了:
路徑第一步,穿過狀態si。 πi = γ1(i) 分子是穿過邊aij。分母是穿過狀態si。 Σt=1~T-1 [ ξt(i,j) ] aij = ————————————————————— Σt=1~T [ γt(i) ] 分子是穿過狀態si、使用第k個噴出管道。分母是穿過狀態si。 Σt=1~T [ γtk(i) ] cik = ———————————————————————— Σt=1~T Σk=1~M [ γtk(i) ] 分子是穿過狀態si、使用第k個噴出管道、噴出數值的平均值。 Σt=1~T [ γtk(i) ] * ot μik = ———————————————————————— Σt=1~T [ γtk(i) ] 分子是穿過狀態si、使用第k個噴出管道、噴出數值的共變異矩陣。 Σt=1~T [ γtk(i) ] * (ot - μik)(ot - μik)T Σik = —————————————————————————————————————————— Σt=1~T [ γtk(i) ]
至此產生了連續版本的HMM,已經可以應付各種情況了!