在講隱馬爾可夫模型前,先介紹一下什么是馬爾可夫鏈。
馬爾可夫鏈(Markov chain),又稱離散時間馬爾可夫鏈,因俄國數學家安德烈馬爾可夫St +1St 決定,與之前的狀態(tài)無關。
即:P(St +1 | S2, t) = P(St+1| St
符合該性質的隨機過程則稱為馬爾可夫過程,也稱為馬爾可夫鏈。
假設有一只程序猿,它每天心情狀態(tài)有三種:心情舒暢 goodnormal、心情bad。狀態(tài)間的轉移是存在某個概率的。如下圖所示:
圖 1 程序猿心情狀態(tài)圖
Sgood Snormal Sbad 代表心情糟糕狀態(tài)。
Sgood Snormal0.9Sgood 轉移到下一時刻狀態(tài)Sbad 的概率為0.1Snormal轉移到下一時刻還是自身的概率為0.7,當Snormal Sbad0.3Sbad轉移到下一時刻狀Snormal 1
一個含有 N 個狀態(tài)的馬爾可夫鏈有 N 2 個狀態(tài)轉移。這所有的 N 2 個概率可以用一個狀態(tài)轉移矩陣 A 來表示:
這個狀態(tài)轉移矩陣 A 表示,如果在t 時刻該程序猿的心情狀態(tài)是舒暢,則在 t+1 時刻的心情狀態(tài)是舒暢、一般、糟糕的概率分別為(0,0.9,0.1)。
隱馬爾可夫模型(Hidden Markov ModelsHMM)的出現,是為了彌補馬爾可夫模型的不足,在某些較為復雜的隨機過程中,任一時刻 t t 是不可見的。所以觀察者1, L , t ,但是隱馬爾可夫模型在每個時刻 t 態(tài)Ot ,而且Ot St 相關。這個被稱為獨立輸出假設。由此可生成一個觀測序列O1 , O2 , L , Ot 。
獨立輸出假設可記為:
P(Ot | O1, O2 ,L, Ot -1, S1, S2 ,L, St ) = P(Ot | St )
隱馬爾可夫模型的結構如下:
圖 2 隱馬爾可夫模型結構圖
隱馬爾可夫模型是由初始概率分布、狀態(tài)轉移概率分布以及觀測概率分布確定。隱馬爾可夫模型的形式定義如下:
Q 是所有可能的狀態(tài)的集合,V 是所有可能的觀測的集合。
S 是長度為T 的狀態(tài)序列,O 是對應的觀測序列。
A 是狀態(tài)轉移概率矩陣:
是在時刻t 處于狀態(tài)qi 的條件下,在時刻 t+1 轉移到狀態(tài)qj 的概率。
B 是觀測概率矩陣:
是在時刻t 處于狀態(tài)qj的條件下,生成觀測值Vk的概率。
π是初始狀態(tài)概率向量:
其中,
是時刻 t=1 處于狀態(tài)qj的概率。
隱馬爾可夫模型由初始狀態(tài)概率向量πA 和觀測概率矩陣 B 決定。πA 決定了狀態(tài)序列,B 決定觀測序列。因此,隱馬爾可夫模型λ可以用三元符號表示,即:
圍繞著隱馬爾可夫模型通常有 3 個基本問題需要解決:
1、模型評估問題(概率計算問題)
給定模型參數,計算某一觀測序列輸出的概率。
2、解碼問題(預測問題)
給定模型參數和某一觀測序列,計算得到最有可能輸出這一觀測序列的狀態(tài)序列。
3、參數估計問題(屬于非監(jiān)督學習算法)
給定足夠的觀測序列集,如何計算得到模型的所有參數。
講到這,隱馬爾可夫模型的理論定義和三個問題都介紹完畢。
可能有朋友會問,這個模型到底有什么用?
先假設我們已經解決了以上的 3 想必“隱馬爾可夫模型有什么用”這個問題便不攻自破了。
典型的通信系統(tǒng)(該案例參考自吳軍《數學之美》第二版,P51)
l 發(fā)送者(人或者機器)發(fā)送信息時,需要采用一種能在媒體中(比如空氣、電線) 傳播的信號,比如語音或者電話線的調制信號,這個過程就是廣義上的編碼。
l 然后通過媒體傳播到接收方,這個過程是信道傳輸。
l 在接收方,接收者(人或者機器根據事先約定好的方法,將這些信號還原成發(fā)送者的信息,這個過程是廣義上的解碼。
下圖表示了一個典型的通信系統(tǒng)。
圖 3 通信模型
, S2 , , Sn O2 , Om (比如另一部手機接收到的信號。通信中的解碼就是根據接收到的信號, O2 ,LOm S2 ,LSn 。
這跟自然語言處理又有什么關系?不妨換個角度來考慮這個問題,所謂的語音識別,就(機器去猜測說話者要表達的意思。這就像通信系統(tǒng)中,接收端根據收到的信號去還原出發(fā)送端發(fā)出的信號。
在通信中,如何根據接收端的觀測信號O1 , O2 , Om 來推測信號源發(fā)送的信息 S1 , S2 , L , Sn 呢?只需要從所有的源信息中找到最可能產生出觀測信號的那一個信息。即:
, S2 , , Sn
P(S1 , S2 , , Sn | O2 , Om )
達到最大值。
這個問題其實就是隱馬爾可夫模型所提出的第 2 某一觀測序列,計算得到最有可能輸出這一觀測序列的狀態(tài)序列。
接下來我們逐一解決以上 3 行了簡化,并修改成了符合隱馬爾可夫模型的案例。
圖 4 隱馬爾可夫模型“程序猿心情狀態(tài)”案例升級版
在該模型中,初始狀態(tài)概率向量p = {Sgood = 0.8, Sbad = 0.2},隱藏狀態(tài) N=2,可觀測狀態(tài) M=3,狀態(tài)轉移概率矩陣 A 和觀測概率矩陣 B 分別為:
在狀態(tài)轉移概率矩陣 A 1 行代表t 時刻心情舒暢狀態(tài),t+1 時刻心情狀態(tài)分別是舒暢、糟糕的概率為(0.7,0.3)2 行同理。
在觀測概率矩陣B 1 t 時刻心情為舒暢狀態(tài),t 時刻觀測到的程序猿行為狀態(tài)分別為出門旅游、在實驗室寫代碼、回寢室睡覺的概率分別為(0.3,0.5,0.2)2 行同理。
現在開始解決上述的 3 個問題。
1、模型評估問題(概率計算問題)
模型的各個參數現在已全部知道,假設連續(xù) 3 天該程序猿的行為分別是出門旅游→在實驗寫代碼→回寢室睡覺,計算產生這些行為的概率是多少?
解:
求解該問題可以使用遍歷法,即把所有可能的情況都計算出來,然后將概率相加。在該
案例中共有 3 種可觀測狀態(tài),2 種隱藏狀態(tài),所以共有23 = 8 種可能的情況。由于該算法較為笨拙且計算繁瑣,在此我就計算第一種情況,后面同理可得。其中一種:
第 1 天心情舒暢→第 1 天出門旅游→第 2 天心情舒暢→第 2 天在實驗室寫代碼→第 3 天心情舒暢→第 3 天回寢室睡覺。用符號表達即:
計算過程如下:
通常求解該問題,使用前向或后向算法,這樣計算復雜度會比遍歷法有所降低。以前向算法為例求解:
t=1 時,發(fā)生 trip 這一行為的概率為:
t=2 時,根據上述的獨立輸出假設,發(fā)生 lab 這一行為的概率為:
t=3 時,根據上述的獨立輸出假設,發(fā)生sleep 這一行為的概率為:
綜上,
2、解碼問題(預測問題)
解決該類問題,通常使用維特比算法。維特比算法是一種動態(tài)規(guī)劃算法,它用于尋找最有可能產生觀測序列的隱藏狀態(tài)序列。
回溯每一步的最大概率:
3、參數估計問題(屬于非監(jiān)督學習算法參數估計時,有兩種不同的估計情況。
第一種是,我們已知大量的隱藏狀態(tài)集和觀測狀態(tài)集,并且知道它們之間的對應關系, 這樣在訓練參數時,直接計算各個參數的相對頻度即可代替概率。這種情況的數據屬于
使用的是鮑姆-韋爾奇算法。
鮑姆-韋爾奇算法的思想是這樣的:
首先初始化各個參數的值,值的大小不重要,重要的是要保證這些參數在模型中時,可以輸出觀測序列。有了初始化的各個參數后,隱馬爾可夫模型就算初步齊全了,這時使用該模型輸出所有可能的觀測序列以及產生這些觀測序列的概率。有了這些初步得到的觀測序列和概率后,其實就相當于有了一定的人工標注數據,此時再去計算模型的參數, 一步步迭代,直到模型收斂到一個局部最優(yōu)點。
文章參考自:
吳軍《數學之美》;
李航《統(tǒng)計學習方法》; 周志華《機器學習》;
博客園,我是 8 位的,隱馬爾可夫模型(一)
http://www.cnblogs.com/bigmonkey/p/7230668.html;
博客園,bonelee,隱形馬爾可夫模型——前向算法就是條件概率
https://www.cnblogs.com/bonelee/p/7059082.html
聯系客服