隱馬爾可夫模型:HMM

隱馬爾可夫模型求解三大問題實例剖析算法

HMM 模型如圖所示:網絡

 

1、隱馬爾可夫模型定義學習

隱馬爾可夫模型由初始機率分佈狀態轉移機率分佈以及觀測機率分佈肯定。優化

設 Q(圖中的q)是全部可能的狀態的集合,V(圖中的O) 是全部可能的觀測的集合。ui

 

其中,N爲可能狀態數,M爲可能的觀測數。spa

I是長度爲T的隱藏狀態序列,O是對應的觀測序列。.net

 

如下三個參數(A、B、π):設計

A狀態轉移機率矩陣blog

 

其中,ci

 

表示在時刻t處於狀態qi的條件下在時刻t+1轉移到狀態qj的機率。

B觀測機率矩陣

 

其中,

 

表示在時刻t處於狀態qj 的條件下生成觀測vk的機率。

π初始狀態機率向量就是由空狀態轉換爲有狀態的一個機率

 

其中,

 

表示時刻t=1處於狀態qi的機率。

隱馬爾可夫模型由πAB決定。πA決定狀態序列,B決定觀測序列。

隱馬爾可夫模型 λ=( A, B,π),AB、π稱爲隱馬爾科夫模型的三要素

隱馬爾可夫模型的兩個基本假設:

1)齊次馬爾可夫性假設

 

2)觀測獨立性假設

 

 

2、隱馬爾可夫模型的三個基本問題

問題一:機率計算問題:觀察序列的機率

給定模型λ=( A, B,π)和觀測序列

 

 。計算在模型λ下觀測序列O出現的機率P(O|λ)。

解決此問題的方法爲前向、後向算法

 

問題二:預測問題:由觀察序列求隱藏序列

好比:HMM 寫的拼音輸入法

也稱爲解碼問題。已知模型λ=( A, B,π)和觀測序列

 

,求對給定觀測序列條件機率P(I|O)最大的狀態序列 。即給定觀測序列、

 

,求最有可能的對應隱藏狀態序列

 

解決此問題的方法爲維特比算法

 

問題三:學習問題:HMM參數估計

已知觀測序列

 

 ,估計模型λ=( A, B,π)參數,使得在該模型下觀測序列機率P(O|λ)最大。

當同時給定觀測序列和對應狀態序列時,使用極大似然估計方法估計參數。

當只給定觀測序列,沒有對應狀態序列時,基於EM算法進行參數估計。(Baum-Welch算法

 

3、隱馬爾可夫模型的實例

模型實例

  假設 S 是天氣情況的集合,分別是「晴天」、"多雲"、「下雨」, 

  其初始機率分佈爲,

晴天

多雲

下雨

0.63

0.17

0.20

  其狀態轉移機率矩陣爲:

-

0.500

0.375

0.125

0.250

0.125

0.625

0.250

0.375

0.325

  假設有一位盲人住在海邊,他不能經過直接觀察天氣的狀態來預報天氣。但他有一些水藻,所以能夠利用水藻的乾溼來預報天氣。水藻的乾溼與天氣情況之間的關係以下表:

-

乾燥

稍幹

潮溼

溼透

0.60

0.20

0.15

0.05

0.25

0.25

0.25

0.25

0.05

0.10

0.35

0.50

問題1:求解觀察序列的機率

  針對上述模型,咱們求p(乾燥,潮溼,溼透)。思路很簡單:

  1. 肯定隱狀態的初始機率分佈,這是已知的,參見下圖第一列。
  2. 根據隱狀態到觀測結果「乾燥」的發射機率(參見下圖第一列到第二列的箭頭標註),計算獲得「乾燥」這個觀測結果時,三個隱狀態的機率,參見下圖第二列。
  3. 根據隱狀態之間的轉移機率,從新肯定在觀測到「乾燥」結果後的次日,隱狀態的機率分佈,參見下圖第三列。圖中,我只標註了「晴」的計算過程,其餘兩天氣則省略沒畫,建議本身親自計算一下,驗證一下。

 

 

  這個時候再往下計算,方法就和第一步同樣了,再也不羅嗦了。

 

問題2:由觀察序列肯定隱狀態序列

例如用HMM 算法來寫中文輸入法

  咱們觀察到了「乾燥、潮溼、溼透」,那麼實際天氣變化的序列應該是什麼呢?會是憑直覺猜想的「晴、陰、雨」這個序列嗎? 

  解決這個問題的關鍵是,如何計算p(晴陰雨|乾燥 潮溼 溼透)?我畫了一張圖,只要把黑色路徑上標註的初始機率、轉移機率、發射機率連乘起來,就獲得這條路經的機率。 

 

  ok,如今問題變成了如何從開始到結束找到一條几率最大的路徑。問題轉化成了路徑最優化問題,能夠用動態規劃方法解決,我不想再囉嗦了,剩下的任務你們自行解決吧。

 

問題3:HMM參數估計

  假設隱馬爾可夫模型的觀測序列是「乾燥,潮溼,溼透,…」,那麼,隱馬爾可夫模型的參數A,B,π 如何設置,才能使這個觀測序列出現的機率最大?這就是所謂的隱馬爾可夫模型參數估計問題。 

  參照上圖,從起點到終點共計27條路徑,把這些路徑的機率所有加起來,就是「乾燥,潮溼,溼透」發生的機率。若是圖中箭頭隨對應的機率所有爲未知,能夠想一想,最終的結果就能夠用這些參數表示。所以問題可描述爲,這些參數取何值時,所求機率最大。 

  

上圖中的實例, 計算觀察序列的機率應該不須要遍歷27條路徑,這樣複雜度過高了。這個問題你們自行考慮吧。

  轉移機率矩陣和發射機率矩陣在多個環節重複出現,讓我聯想起卷積神經網絡的卷積層設計,扯得有點遠。可是,這個機率網絡求解總體過程的確與神經網絡相似。 

  一個很差的消息是,沒辦法用公式求解此最優化問題。一個稍好一點的消息是,能夠用梯度降低法,求局部極小解,這簡直是廢話。還有一個稍好點的消息,Baum-Welch算法能夠解決此問題,思路相似EM算法,思路也很簡單,

Baum-Welch算法

  好比,先假設狀態序列爲已知,參見下表。和EM算法套路同樣,能夠看看《簡析EM算法(最大指望算法)》

t

觀察值

晴朗

多雲

下雨

1

乾燥

1

0

0

2

潮溼

0

1

0

3

溼透

1

0

0

4

潮溼

0

0

1

5

乾燥

0

1

0

6

潮溼

1

0

0

7

溼透

0

0

1

   

  狀態的出現次數爲0或1,和EM算法是徹底同樣的套路。若是出現100次"晴朗" 

,其中對應70次「乾燥」,則能夠估計「晴朗」向「乾燥」發射機率爲70/100=0.7,如此類推,能夠求出模型中的全部機率值。 

  如今的問題是,狀態出現的次數是不知道的。依據EM算法思路,能夠隨機給模型參數賦值(固然要保證數據的合理性)。好比,根據「晴朗」、「陰天」、「下雨」向「乾燥」的發射機率,把狀態出現次數1按比例分配給三個狀態。這樣就能夠按照上面的方法從新計算模型的參數了。如此類推,直到模型參數收斂爲止。 

  狀態轉移機率,也能夠統計出來。好比從上表一、2兩行能夠獲得「晴天」到「多雲」轉移累計計數1次。在EM算法中,這個計數可能變成了用小數表示的模糊計數,不過不要緊,同樣能夠獲得這個累計計數。 

  初始機率計算也是一樣道理,用模糊計數方法能夠幫助估計機率分佈。

 

 參考博客和書籍:

http://www.javashuo.com/article/p-cuerkhbl-eq.html

https://blog.csdn.net/lrs1353281004/article/details/79417225

《統計學習方法》李航

相關文章
相關標籤/搜索