摘自:https://www.zhihu.com/question/20962240/answer/64187492
隱形馬爾可夫模型,英文是 Hidden Markov Models,所以以下就簡稱 HMM。
既是馬爾可夫模型,就一定存在馬爾可夫鏈,該馬爾可夫鏈服從馬爾可夫性質:即無記憶性。也就是說,這一時刻的狀態,受且只受前一時刻的影響,而不受更往前時刻的狀態的影響。
在這里我們仍然使用非常簡單的天氣模型來做說明。
在這個馬爾可夫模型中,存在三個狀態,Sunny, Rainy, Cloudy,同時圖片上標的是各個狀態間的轉移概率(如果不明白什么是轉移概率,那建議先去學習什么是馬爾可夫再來看HMM)。
現在我們要說明什么是 HMM。既是隱形,說明這些狀態是觀測不到的,相應的,我們可以通過其他方式來『猜測』或是『推斷』這些狀態,這也是 HMM 需要解決的問題之一。
舉個例子,我女朋友現在在北京工作,而我還在法國讀書。每天下班之后,她會根據天氣情況有相應的活動:或是去商場購物,或是去公園散步,或是回家收拾房間。我們有時候會通電話,她會告訴我她這幾天做了什么,而閑着沒事的我呢,則要通過她的行為猜測這幾天對應的天氣最有可能是什么樣子的。
以上就是一個簡單的 HMM,天氣狀況屬於狀態序列,而她的行為則屬於觀測序列。天氣狀況的轉換是一個馬爾可夫序列。而根據天氣的不同,有相對應的概率產生不同的行為。在這里,為了簡化,把天氣情況簡單歸結為晴天和雨天兩種情況。雨天,她選擇去散步,購物,收拾的概率分別是0.1,0.4,0.5, 而如果是晴天,她選擇去散步,購物,收拾的概率分別是0.6,0.3,0.1。而天氣的轉換情況如下:這一天下雨,則下一天依然下雨的概率是0.7,而轉換成晴天的概率是0.3;這一天是晴天,則下一天依然是晴天的概率是0.6,而轉換成雨天的概率是0.4. 同時還存在一個初始概率,也就是第一天下雨的概率是0.6, 晴天的概率是0.4.
根據以上的信息,我們得到了 HMM的一些基本要素:初始概率分布 π,狀態轉移矩陣 A,觀測量的概率分布 B,同時有兩個狀態,三種可能的觀測值。
現在,重點是要了解並解決HMM 的三個問題。
問題1,已知整個模型,我女朋友告訴我,連續三天,她下班后做的事情分別是:散步,購物,收拾。那么,根據模型,計算產生這些行為的概率是多少。
問題2,同樣知曉這個模型,同樣是這三件事,我女朋友要我猜,這三天她下班后北京的天氣是怎么樣的。這三天怎么樣的天氣才最有可能讓她做這樣的事情。
問題3,最復雜的,我女朋友只告訴我這三天她分別做了這三件事,而其他什么信息我都沒有。她要我建立一個模型,晴雨轉換概率,第一天天氣情況的概率分布,根據天氣情況她選擇做某事的概率分布。(慘絕人寰)
而要解決這些問題,偉大的大師們分別找出了對應的算法。問題一,Forward Algorithm,向前算法,或者 Backward Algo,向后算法。 問題二,Viterbi Algo,維特比算法。問題三,Baum-Welch Algo,鮑姆-韋爾奇算法(中文好繞口)。
既是馬爾可夫模型,就一定存在馬爾可夫鏈,該馬爾可夫鏈服從馬爾可夫性質:即無記憶性。也就是說,這一時刻的狀態,受且只受前一時刻的影響,而不受更往前時刻的狀態的影響。
在這里我們仍然使用非常簡單的天氣模型來做說明。
在這個馬爾可夫模型中,存在三個狀態,Sunny, Rainy, Cloudy,同時圖片上標的是各個狀態間的轉移概率(如果不明白什么是轉移概率,那建議先去學習什么是馬爾可夫再來看HMM)。
現在我們要說明什么是 HMM。既是隱形,說明這些狀態是觀測不到的,相應的,我們可以通過其他方式來『猜測』或是『推斷』這些狀態,這也是 HMM 需要解決的問題之一。
舉個例子,我女朋友現在在北京工作,而我還在法國讀書。每天下班之后,她會根據天氣情況有相應的活動:或是去商場購物,或是去公園散步,或是回家收拾房間。我們有時候會通電話,她會告訴我她這幾天做了什么,而閑着沒事的我呢,則要通過她的行為猜測這幾天對應的天氣最有可能是什么樣子的。
以上就是一個簡單的 HMM,天氣狀況屬於狀態序列,而她的行為則屬於觀測序列。天氣狀況的轉換是一個馬爾可夫序列。而根據天氣的不同,有相對應的概率產生不同的行為。在這里,為了簡化,把天氣情況簡單歸結為晴天和雨天兩種情況。雨天,她選擇去散步,購物,收拾的概率分別是0.1,0.4,0.5, 而如果是晴天,她選擇去散步,購物,收拾的概率分別是0.6,0.3,0.1。而天氣的轉換情況如下:這一天下雨,則下一天依然下雨的概率是0.7,而轉換成晴天的概率是0.3;這一天是晴天,則下一天依然是晴天的概率是0.6,而轉換成雨天的概率是0.4. 同時還存在一個初始概率,也就是第一天下雨的概率是0.6, 晴天的概率是0.4.
根據以上的信息,我們得到了 HMM的一些基本要素:初始概率分布 π,狀態轉移矩陣 A,觀測量的概率分布 B,同時有兩個狀態,三種可能的觀測值。
現在,重點是要了解並解決HMM 的三個問題。
問題1,已知整個模型,我女朋友告訴我,連續三天,她下班后做的事情分別是:散步,購物,收拾。那么,根據模型,計算產生這些行為的概率是多少。
問題2,同樣知曉這個模型,同樣是這三件事,我女朋友要我猜,這三天她下班后北京的天氣是怎么樣的。這三天怎么樣的天氣才最有可能讓她做這樣的事情。
問題3,最復雜的,我女朋友只告訴我這三天她分別做了這三件事,而其他什么信息我都沒有。她要我建立一個模型,晴雨轉換概率,第一天天氣情況的概率分布,根據天氣情況她選擇做某事的概率分布。(慘絕人寰)
而要解決這些問題,偉大的大師們分別找出了對應的算法。問題一,Forward Algorithm,向前算法,或者 Backward Algo,向后算法。 問題二,Viterbi Algo,維特比算法。問題三,Baum-Welch Algo,鮑姆-韋爾奇算法(中文好繞口)。
作者:henry
鏈接:https://www.zhihu.com/question/20962240/answer/64187492
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
鏈接:https://www.zhihu.com/question/20962240/answer/64187492
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
問題1 的解決2:向前算法。
先計算 t=1時刻,發生『散步』一行為的概率,如果下雨,則為 P(散步,下雨)=P(第一天下雨)X P(散步 | 下雨)=0.6X0.1=0.06;晴天,P(散步,晴天)=0.4X0.6=0.24
t=2 時刻,發生『購物』的概率,當然,這個概率可以從 t=1 時刻計算而來。
如果t=2下雨,則 P(第一天散步,第二天購物, 第二天下雨)= 【P(第一天散步,第一天下雨)X P(第二天下雨 | 第一天下雨)+P(第一天散步,第一天晴天)X P(第二天下雨 | 第一天晴天)】X P(第二天購物 | 第二天下雨)=【0.06X0.7+0.24X0.3】X0.4=0.0552
如果 t=2晴天,則 P(第一天散步,第二天購物,第二天晴天)=0.0486 (同理可得,請自行推理)
如果 t=3,下雨,則 P(第一天散步,第二天購物,第三天收拾,第三天下雨)=【P(第一天散步,第二天購物,第二天下雨)X P(第三天下雨 | 第二天下雨)+ P(第一天散步,第二天購物,第二天天晴)X P(第三天下雨 | 第二天天晴)】X P(第三天收拾 | 第三天下雨)=【0.0552X0.7+0.0486X0.4】X0.5= 0.02904
如果t=3,晴天,則 P(第一天散步,第二天購物,第三天收拾,第三天晴天)= 0.004572
那么 P(第一天散步,第二天購物,第三天收拾),這一概率則是第三天,下雨和晴天兩種情況的概率和。0.02904+0.004572=0.033612.
以上例子可以看出,向前算法計算了每個時間點時,每個狀態的發生觀測序列的概率,看似繁雜,但在 T 變大時,復雜度會大大降低。
問題1的解決3:向后算法
顧名思義,向前算法是在時間 t=1的時候,一步一步往前計算。而相反的,向后算法則是倒退着,從最后一個狀態開始,慢慢往后推。
先計算 t=1時刻,發生『散步』一行為的概率,如果下雨,則為 P(散步,下雨)=P(第一天下雨)X P(散步 | 下雨)=0.6X0.1=0.06;晴天,P(散步,晴天)=0.4X0.6=0.24
t=2 時刻,發生『購物』的概率,當然,這個概率可以從 t=1 時刻計算而來。
如果t=2下雨,則 P(第一天散步,第二天購物, 第二天下雨)= 【P(第一天散步,第一天下雨)X P(第二天下雨 | 第一天下雨)+P(第一天散步,第一天晴天)X P(第二天下雨 | 第一天晴天)】X P(第二天購物 | 第二天下雨)=【0.06X0.7+0.24X0.3】X0.4=0.0552
如果 t=2晴天,則 P(第一天散步,第二天購物,第二天晴天)=0.0486 (同理可得,請自行推理)
如果 t=3,下雨,則 P(第一天散步,第二天購物,第三天收拾,第三天下雨)=【P(第一天散步,第二天購物,第二天下雨)X P(第三天下雨 | 第二天下雨)+ P(第一天散步,第二天購物,第二天天晴)X P(第三天下雨 | 第二天天晴)】X P(第三天收拾 | 第三天下雨)=【0.0552X0.7+0.0486X0.4】X0.5= 0.02904
如果t=3,晴天,則 P(第一天散步,第二天購物,第三天收拾,第三天晴天)= 0.004572
那么 P(第一天散步,第二天購物,第三天收拾),這一概率則是第三天,下雨和晴天兩種情況的概率和。0.02904+0.004572=0.033612.
以上例子可以看出,向前算法計算了每個時間點時,每個狀態的發生觀測序列的概率,看似繁雜,但在 T 變大時,復雜度會大大降低。
問題1的解決3:向后算法
顧名思義,向前算法是在時間 t=1的時候,一步一步往前計算。而相反的,向后算法則是倒退着,從最后一個狀態開始,慢慢往后推。
