60分鐘看懂HMM的基本原理

2021-01-11 AI科技大本營

作者 | 梁雲1991

來源 | Python與算法之美

HMM模型,韓梅梅的中文拼音的縮寫,所以又叫韓梅梅模型,由於這個模型的作者是韓梅梅的粉絲,所以給這個模型取名為HMM。開玩笑!

HMM模型,也叫做隱馬爾科夫模型,是一種經典的機器學習序列模型,實現簡單,計算快速,廣泛用於語音識別,中文分詞等序列標註領域。

下面通過一個村民看病的故事理解什麼是HMM模型。

想像一個鄉村診所,村民的身體狀況要麼健康要麼發燒,他們只有問診所的醫生才能知道是否發燒。

醫生通過詢問村民的感覺去診斷他們是否發燒。村民自身的感覺有正常、頭暈或冷。

假設一個村民每天來到診所並告訴醫生他的感覺。村民的感覺只由他當天的健康狀況決定。

村民的健康狀態有兩種:健康和發燒,但醫生不能直接觀察到,這意味著健康狀態對醫生是不可見的。

每天村民會告訴醫生自己有以下幾種由他的健康狀態決定的感覺的一種:正常、冷或頭暈。

於是醫生會得到一個村民的感覺的觀測序列,例如這樣:{正常,冷,冷,頭暈,冷,頭暈,冷,正常,正常}。

但是村民的健康狀態這個序列是需要由醫生根據模型來推斷的,是不可直接觀測的。

這個村民看病的故事中由村民的健康狀態序列和村民的感覺序列構成的系統就是一個隱馬爾科夫模型(HMM)。

其中村民的健康狀態序列構成一個馬爾科夫鏈。其每個序列值只和前一個值有關,和其它值無關。由於這個馬爾科夫鏈是隱藏的,不可以被直接觀測到,只能由其關聯的村民的感覺序列來進行推斷,因此叫做隱馬爾科夫模型(HMM)。

HMM模型的上帝視角

HMM模型是一個生成模型,描述了兩個相關序列的依賴關係。

這兩個相關序列稱為狀態序列 和 觀測序列 .

其中狀態序列在t時刻的值只和t-1時刻狀態序列的取值有關,觀測序列在t時刻的值只和t時刻觀測序列的取值有關。

其聯合概率函數如下:

如果能夠確定聯合概率函數中的各個參數,那麼HMM模型也就完全地確定了,我們就擁有了HMM模型描述的這個體系的上帝視角,可以用來計算任何關心的事件的概率,從而解決我們感興趣的問題。

HMM的三大假設

1,馬爾科夫性假設:t時刻的狀態出現的概率只和t-1時刻的狀態有關。

2,齊次性假設:可以理解為時間平移不變性

3,觀測獨立性假設:某個時刻t的觀測值只依賴於該時刻的狀態值,與任何其它時刻的觀測值和狀態值無關。

上述HMM的聯合概率函數中,實際上就用到了HMM的三大假設。

HMM的三要素

觀察HMM的聯合概率函數:

可以看到只依賴於三種概率值參數

, ,

分別是初始狀態概率,狀態值轉移概率,觀測值輸出概率(發射概率)

這就是HMM的三要素,也就是HMM的全部參數,確定了這三種概率,HMM模型就完全確定下來了。

對於狀態值取值和觀測值取值為離散值的情況下,這三種概率可以表示為矩陣。

假定狀態值可能的取值為 ,一共有M種可能取值。觀測值可能的取值為 ,一共有N種可能取值。

則HMM的全部參數可以表示為三個矩陣

其中 叫做初始概率矩陣,是一個M維向量,

叫做轉移概率矩陣,是一個M×M維矩陣,

叫做發射概率矩陣,是一個M×N維矩陣,

以上面村民看病的例子為例,假設這三個矩陣分別為:

pi = {'Healthy': 0.6, 'Fever': 0.4} #初始狀態矩陣A = { 'Healthy' : {'Healthy': 0.7, 'Fever': 0.3}, 'Fever' : {'Healthy': 0.4, 'Fever': 0.6}, } #狀態矩陣B = { 'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1}, 'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6},} # 發射矩陣

HMM的三個基本問題

HMM模型相關的應用問題一般可以歸結為這三個基本問題中的一個:

1,評估問題:已知模型參數 ,和觀測序列 , 計算觀測序列出現的概率。以村民看病問題為例, 計算一個村民連續出現 {正常,冷,頭暈} 感覺的概率。評估問題一般使用前向算法或者後向算法進行解決,其中前向算法相對簡單,容易理解一些。後向算法較難理解。設想有兩個描述兩人語音的HMM模型,那麼給一個新的語音序列,利用前向算法或者後向算法就可以計算這個語音序列更可能是哪個人的。

2,預測問題:也叫做解碼問題。已知模型參數 ,和觀測序列 , 計算該觀測序列對應的最可能的狀態序列。以村民看病問題為例,假設一個病人連續出現 {正常,冷,頭暈} 的感覺,計算病人對應的最可能的健康狀態序列。預測問題一般使用貪心近似算法或者維特比算法解決。其中貪心近似算法相對簡單一些,但不一定能找到全局最優解。維特比算法可以找到全局最優,是一種動態規划算法。

3,學習問題:模型參數 未知,推斷模型參數。有兩種可能的場景,一種是監督學習的場景,已知諸多觀測序列和對應的狀態序列,推斷模型參數,第二種是非監督學習的場景,只知道諸多觀測序列,推斷模型參數。監督學習的場景,學習方法相對簡單。非監督學習的場景,一般使用EM期望最大化方法進行迭代求解。

三個基本問題的簡單解法

1,評估問題的簡單解法

已知模型參數 ,和觀測序列 , 計算觀測序列出現的概率。

評估問題一般使用前向算法或者後向算法進行解決,其中前向算法相對簡單。

如果暴力求解,這個概率可以計算如下:

計算複雜度大約為

前向算法是一種遞推算法,可以大大減少重複計算,降低計算複雜度。

構造序列

則初始值如下:

而:

不難發現存在遞推公式如下:

通過, 我們可以計算

計算複雜度已經降低為

2,預測問題的簡單解法

已知模型參數 ,和觀測序列 , 計算該觀測序列對應的最可能的狀態序列。

預測問題一般使用貪心近似算法或者維特比算法解決。較常用的是維特比算法。但貪心近似算法更加簡單,很多時候就已經足夠使用。

其基本思想是貪心思想,每一個步驟都取相應的, 使得對應輸出的概率最大。

3, 學習問題的簡單解法

模型參數 未知,推斷模型參數。監督學習的場景,學習方法相對簡單。已知諸多觀測序列和對應的狀態序列,推斷模型參數。

這種情況下可以統計相應的頻率作為, , 中各個概率的估計值。

三個基本問題的複雜解法

1,評估問題的複雜解法

已知模型參數 ,和觀測序列 , 計算觀測序列出現的概率。

除了前向算法,還有一種後向算法,功能和前向算法相當,也是使用遞推法實現的,但沒有前向算法那麼直觀。

構造序列

我們規定 對任何都成立。

類似地我們可以發現後向遞推關係:

通過, 我們可以計算

2,預測問題的複雜解法

已知模型參數 ,和觀測序列 , 計算該觀測序列對應的最可能的狀態序列。

解決這一預測問題較常用的方法是維特比算法,是一種動態規划算法,也可以理解成一種搜索空間的剪枝方法,可以保證找到全局最優路徑。

不同於貪心近似算法在每個步驟只保留一條當前最優路徑,維特比算法在每個步驟會保留若干條當前最優路徑,這些最優路徑和每個步驟的最後一個隱含狀態值的可能取值相對應,如果狀態值有M個可能取值,則每個步驟保留M條當前最優路徑。

由於HMM的馬爾科夫性質,之後的概率計算只和最後一個隱藏狀態取值相關,因此全局的最優路徑必定在這M條當前最優路徑中,如此遞推不斷向前尋找M個隱狀態值對應的M條當前最優路徑,最後取最終得到的M條當前最優路徑中概率最大的那條作為全局最優路徑。

3,學習問題的複雜解法

模型參數 未知,推斷模型參數。

這是一個存在隱變量的概率模型的參數估計問題,一般使用EM期望最大化算法進行求解。

原始問題可以定義為

根據期望最大化算法的算法原理,可以得到迭代條件如下:

於是可以得到三個參數 的 迭代條件:

其中 不含待優化參數,求導為0,考慮概率之和為1的約束,可以構造拉格朗日乘子法進行求解,過程較為繁瑣,從略。

參考文章:

《一站式解決:隱馬爾可夫模型(HMM)全過程推導及實現》:https://zhuanlan.zhihu.com/p/85454896

《機器學習:HMM原理及其實踐》:https://www.cnblogs.com/zhangxinying/p/12071061.html

《概率圖模型體系:HMM、MEMM、CRF》:https://zhuanlan.zhihu.com/p/33397147

相關焦點

  • R語言中的隱馬爾可夫HMM模型實例
    例子在介紹HMM背後的基本理論之前,這裡有一個示例,它將幫助您理解核心概念。有兩個骰子和一罐軟糖。B擲骰子,如果總數大於4,他會拿幾顆軟糖再擲一次。如果總數等於2,則他拿幾把軟糖,然後將骰子交給A。現在該輪到A擲骰子了。如果她的擲骰大於4,她會吃一些軟糖,但是她不喜歡黑色的其他顏色(兩極分化的看法),因此我們希望B會比A多。他們這樣做直到罐子空了。
  • 時間繼電器工作原理是怎麼樣的?三分鐘看懂時間繼電器原理
    上圖是我自己畫的一個時間繼電器結構,畫得不好,也百分百的不標準,但這樣方便大家理解,所以你當教材理解一下就可以了,不要當實物圖。左邊接線圖部分你只要看懂2和7是時間繼電器的供電電源就可以了,上圖中2是接零線,7是接火線這個應該都看得懂吧。  我們主要看右邊的延時範圍,2和4一組旁邊還有個1S意思是線接在2和4上延時一秒通電?舉個例子,還是單相電機的,我們把火線的一頭接在2的接線口上,另一頭接在4的接線口上,2就相當於我們剛才說的A點,4相當於B點,當時間繼電器通電後,一秒鐘電機啟動。
  • matlab代寫hmm算法程序(隱馬爾科夫模型)需要注意什麼?
    我要做的就是把svm/rf算法的輸出,作為hmm算法的輸入,然後來預測行為。1.Svm/rf算法的輸出也是預測意圖,我想通過hmm算法結合svm/rf的輸出得到更好的預測結果。2.組合各種意圖,比如通過svm/rf得到的意圖劃分為1-7個強度,我想用hmm將這個強度劃分為1,2兩個狀態。或者1,2,3 三個狀態,然後比較這些結果與svm/rf得到的預測結果3.直接運用特徵值用hmm來進行預測。
  • Gse v0.30.0 發布, Go 高性能分詞, 增加 hmm 支持
    v0.30.0 版本主要新增了 DAG 和 HMM (Viterbi) 算法分詞, 新增 API 基本和結巴分詞保持一致.支持普通、搜尋引擎、全模式、精確模式和 HMM模式多種分詞模式,支持用戶詞典、詞性標註,可運行JSON RPC服務。
  • 一文看懂鋰電池包基本結構、工作原理和組裝過程
    一文看懂鋰電池包基本結構、工作原理和組裝過程。鋰電池即鋰金屬電池,一般是指使用二氧化錳為正極材料、金屬鋰或其合金金屬為負極材料、使用非水電解質溶液的電池。隨著科學技術的高速發展,鋰電池包逐漸成為主流。本文小編就來和大家談談鋰電池包結構、工作原理和組裝過程,很棒的乾貨哦!
  • 乾貨|分分鐘帶你看懂 靜電紡絲
    乾貨|分分鐘帶你看懂 靜電紡絲 發表時間:2018/7/5
  • mmhmm重塑視頻會議、2020新款emoji可愛來襲、微軟將推雲遊戲服務x...
    mmhmm可在Zoom、Google Meet、YouTube以及其他影音串流服務上使用,它將用戶的房間轉換為虛擬舞臺,用戶自己也變成舞臺人物之一,可以被放大、縮小並淡出影音界面 。
  • 楚留香手遊義士怎麼玩 一分鐘看懂義士攻略玩法
    一分鐘看懂義士攻略玩法。義士是行當中沒那麼簡單的一個副職業,因為老是要去到處找人抓,有犯罪值的人還比較難打,但是玩得好的話可很舒服哦! 升級條件:義士一段 技能冷卻時間:150秒 技能存留時間:60秒
  • 一分鐘教你看懂驗光單
    通過以上說明相信大家已對驗光單有了基本了解,下面我們一起來做一下解讀,根據這張驗光單的驗光結果可知: 用於這種驗光的設備是光學、電子、機械三方面結合起來的儀器,其原理與視網膜檢影法基本相同,另外採用紅外線光源及自動霧視裝置達到放鬆眼球調節的目的,採用光電技術及自動控制技術檢查屈光度,並可自動顯示及列印出屈光度數。此法操作簡便,速度快,是驗光技術的一大進步。
  • 「圖解·汽車」3分鐘看懂「汽車電器系統」(終)
    本系列目錄:「圖解·汽車」了解發動機的基本構造「圖解·汽車」徹底看懂發動機內部結構「圖解·汽車」一篇看懂,發動機外部結構「圖解·汽車」變速箱結構,一篇看懂!「圖解·汽車」一篇看懂汽車「懸架系統」「圖解·汽車」一篇看懂「輪胎」、「轉向和制動系統」用最簡潔的圖片和最少的廢話,帶你看懂汽車!汽車電器由電源和用電設備兩大部分組成。電源包括蓄電池和發電機。
  • 一文看懂直流雙臂電橋使用方法和基本原理
    打開APP 一文看懂直流雙臂電橋使用方法和基本原理 發表於 2018-03-30 08:42:33   圖2直流雙臂電橋QJ103型面板圖   直流雙臂電橋的工作原理
  • 一站式解決:隱馬爾可夫模型(HMM)全過程推導及實現
    A = np.array([ [0, 1, 0, 0], [.4, 0, .6, 0], [0, .4, 0, .6], [0, 0, .5, .5]]) B = np.array([ [.5, .5], [.3, .7], [.6, .4], [.8, .2]]) hmm
  • 為什麼一分鐘60秒,一個小時60分鐘?
    「為什麼一分鐘60秒,為什麼一個小時60分鐘?」,筆者偶爾看到有網友提出這個問題,一下子還真難回答,這還是一個關於60進位的問題。筆者通過查找資料,終於知道了一分鐘60秒,一個小時60分鐘和60進位的來歷了:六十進位首先,六十是一個非常好的數字,是2、3、4、5、6的最小公倍數。
  • 10分鐘看懂CPU構造原理
    運算器 負責算術運算(+ - * / 基本運算和附加運算)和邏輯運算(包括 移位、邏輯測試或比較兩個值等)。控制器 則高級一點,負責應對所有的信息情況,調度運算器把計算做好。寄存器 就稍微複雜一點,既要對接控制器的命令,傳達命令給運算器;還要幫運算器記錄處理完或者將要處理的數據。
  • 一文看懂取樣電阻的工作原理
    打開APP 一文看懂取樣電阻的工作原理 發表於 2019-08-18 11:16:35   一,電流檢測電阻的基本原理   根據歐姆定律
  • 【視頻】三分鐘看懂MIM基本原理
  • 教你如何看懂超聲波圖片
    超聲波掃描技術是失效分析中必不可缺的一環,因此作為新入門的失效分析工程師必須能夠清晰的看懂超聲波報告。而看懂超聲波報告的前提是看懂超聲波圖片。下面,我就帶大家簡單的了解一下如何看懂超聲波圖片。oIpednc一.從封裝結構來看超聲波圖片首先在我們看懂超聲波圖片之前,要了解到料件本身的封裝結構。
  • 一圖讀懂:3分鐘教你看懂血常規
    一圖讀懂:3分鐘教你看懂血常規 華醫君教你3分鐘搞定!
  • 1分鐘教你看懂驗光單
    孩子的視力不好,家長手裡一定有很多驗光單,雖說小艾有專業的眼科醫生為大家解讀報告,大家也可以隨時購買醫生1VS1諮詢服務,可有時候還是覺得,若自己能看懂驗光單,掌握孩子的視力發展情況還是更方便。
  • 三步教你學會看懂施工圖,一分鐘就能學會的小技巧
    建築施工有很多需要我們進行學習的地方,看圖就是第一步要點難點,很多小夥伴前期入門看圖的時候都會有建築施工圖看不懂的煩惱,那麼應該如何看懂施工圖呢?想要看懂施工圖需要哪些小技巧呢?這裡就和大家分享如何三步看懂建築施工圖,教你如何一分鐘看懂施工圖。第一步:了解施工圖的組成部分具體需要你了解的有,施工圖都有哪些圖紙分享,什麼是總圖、建築專業圖、結構專業圖、設備專業圖、電氣專業圖。