相信你們都看過上一節我講得貝葉斯網絡,都明白了機率圖模型是怎樣構造的,若是如今還沒明白,請看我上一節的總結:貝葉斯網絡git
這一節咱們重點來說一下馬爾可夫,正如題目所示,看了會一臉矇蔽,好在咱們會一點一點的來解釋上面的概念,請你們按照順序往下看就會徹底弄明白了,這裏我給一個通俗易懂的定義,後面咱們再來一個個詳解。github
如下共分六點說明這些概念,分紅條目只是方便邊閱讀邊思考,這6點是依次遞進的,不要跳躍着看。面試
馬爾可夫過程(Markov process)是一類隨機過程。它的原始模型馬爾可夫鏈,由俄國數學家A.A.馬爾可夫於1907年提出。該過程具備以下特性:在已知目前狀態(如今)的條件下,它將來的演變(未來)不依賴於它以往的演變 (過去 )。例如森林中動物頭數的變化構成——馬爾可夫過程。在現實世界中,有不少過程都是馬爾可夫過程,如液體中微粒所做的布朗運動、傳染病受感染的人數、車站的候車人數等,均可視爲馬爾可夫過程。算法
每一個狀態的轉移只依賴於以前的n個狀態,這個過程被稱爲1個n階的模型,其中n是影響轉移狀態的數目。最簡單的馬爾可夫過程就是一階過程,每個狀態的轉移只依賴於其以前的那一個狀態,這個也叫做馬爾可夫性質。用數學表達式表示就是下面的樣子:網絡
假設這個模型的每一個狀態都只依賴於以前的狀態,這個假設被稱爲馬爾科夫假設,這個假設能夠大大的簡化這個問題。顯然,這個假設多是一個很是糟糕的假設,致使不少重要的信息都丟失了。dom
\[P(X_{n+1}|X_1=x_1,X_2=x_2,...,X_n=x_n)=P(X_{n+1}=x|X_n=x_n)\]函數
假設天氣服從馬爾可夫鏈:工具
從上面這幅圖能夠看出:學習
晴 | 陰 | |
---|---|---|
晴 | 0.9 | 0,1 |
陰 | 0.5 | 0.5 |
由上表咱們能夠獲得馬爾可夫鏈的狀態轉移矩陣:spa
所以,一階馬爾可夫過程定義瞭如下三個部分:
馬爾可夫模型(Markov Model)是一種統計模型,普遍應用在語音識別,詞性自動標註,音字轉換,機率文法等各個天然語言處理等應用領域。通過長期發展,尤爲是在語音識別中的成功應用,使它成爲一種通用的統計工具。到目前爲止,它一直被認爲是實現快速精確的語音識別系統的最成功的方法。
在某些狀況下馬爾科夫過程不足以描述咱們但願發現的模式。回到以前那個天氣的例子,一個隱居的人可能不能直觀的觀察到天氣的狀況,可是有一些海藻。民間的傳說告訴咱們海藻的狀態在某種機率上是和天氣的狀況相關的。在這種狀況下咱們有兩個狀態集合,一個能夠觀察到的狀態集合(海藻的狀態)和一個隱藏的狀態(天氣的情況)。咱們但願能找到一個算法能夠根據海藻的情況和馬爾科夫假設來預測天氣的情況。
而這個算法就叫作隱馬爾可夫模型(HMM)。
隱馬爾可夫模型 (Hidden Markov Model) 是一種統計模型,用來描述一個含有隱含未知參數的馬爾可夫過程。它是結構最簡單的動態貝葉斯網,這是一種著名的有向圖模型,主要用於時序數據建模,在語音識別、天然語言處理等領域有普遍應用。
前兩個問題是模式識別的問題:1) 根據隱馬爾科夫模型獲得一個可觀察狀態序列的機率(評價);2) 找到一個隱藏狀態的序列使得這個序列產生一個可觀察狀態序列的機率最大(解碼)。第三個問題就是根據一個能夠觀察到的狀態序列集產生一個隱馬爾科夫模型(學習)。
對應的三大問題解法:
下面咱們以一個場景來講明這些問題的解法究竟是什麼?
小明如今有三天的假期,他爲了打發時間,能夠在每一天中選擇三件事情來作,這三件事情分別是散步、購物、打掃衛生(對應着可觀測序列),但是在生活中咱們所作的決定通常都受到天氣的影響,可能晴天的時候想要去購物或者散步,可能下雨天的時候不想出門,留在家裏打掃衛生。而天氣(晴天、下雨天)就屬於隱藏狀態,用一幅機率圖來表示這一馬爾可夫過程:
那麼,咱們提出三個問題,分別對應馬爾可夫的三大問題:
下面咱們就依據這個場景來一一解答這些問題。
遍歷算法:
這個是最簡單的算法了,假設第一天(T=1 時刻)是晴天,想要購物,那麼就把圖上的對應機率相乘就可以獲得了。
次日(T=2 時刻)要作的事情,在第一天的機率基礎上乘上次日的機率,依次類推,最終獲得這三天(T=3 時刻)所要作的事情的機率值,這就是遍歷算法,簡單而又粗暴。但問題是用遍歷算法的複雜度會隨着觀測序列和隱藏狀態的增長而成指數級增加。
複雜度爲:\(2TN^T\)
因而就有了第二種算法
前向算法:
細心的讀者已經發現了,第二步中要求的機率能夠在第一步的基礎上進行,一樣的,第三步也會依賴於第二步的計算結果。那麼這樣作就可以節省不少計算環節,相似於動態規劃。
這種算法的複雜度爲:\(N^2T\)
後向算法
跟前向算法相反,咱們知道總的機率確定是1,那麼B_t=1,也就是最後一個時刻的機率合爲1,先計算前三天的各類可能的機率,在計算前兩天、前一天的數據,跟前向算法相反的計算路徑。
維特比算法(Viterbi)
提及安德魯·維特比(Andrew Viterbi),通訊行業以外的人可能知道他的並很少,不過通訊行業的從業者大多知道以他的名字命名的維特比算法(ViterbiAlgorithm)。維特比算法是現代數字通訊中最經常使用的算法,同時也是不少天然語言處理採用的解碼算法。能夠絕不誇張地講,維特比是對咱們今天的生活影響力最大的科學家之一,由於基於CDMA的3G移動通訊標準主要就是他和厄文·雅各布(Irwin Mark Jacobs)創辦的高通公司(Qualcomm)制定的,而且高通公司在4G時代依然引領移動通訊的發展。
維特比算法是一個特殊但應用最廣的動態規劃算法。利用動態規劃,能夠解決任何一個圖中的最短路徑問題。而維特比算法是針對一個特殊的圖—籬笆網絡(Lattice)的有向圖最短路徑問題而提出的。它之因此重要,是由於凡是使用隱含馬爾可夫模型描述的問題均可以用它來解碼,包括今天的數字通訊、語音識別、機器翻譯、拼音轉漢字、分詞等。
維特比算法通常用於模式識別,經過觀測數據來反推出隱藏狀態,下面一步步講解這個算法。
由於是要根據觀測數據來反推,因此這裏要進行一個假設,假設這三天所作的行爲分別是:散步、購物、打掃衛生,那麼咱們要求的是這三天的天氣(路徑)分別是什麼。
初始計算第一天下雨和第一天晴天去散步的機率值:
\(\bigtriangleup_1(R)\) 表示第一天下雨的機率
\(\pi_R\) 表示中間的狀態(下雨)s機率
\(b_R(O_1=w)\) 表示下雨而且散步的機率
\(a_{R-R}\) 表示下雨天到下雨天的機率
\(\bigtriangleup_1(R)=\pi_R*b_R(O_1=w)=0.6*0.1=0.06\)
\(\bigtriangleup_1(S)=\pi_S*b_S(O_1=w)=0.4*0.6=0.24\)
初始路徑爲:
\(\phi_1(R)=Rainy\)
\(\phi_1(S)=Sunny\)
計算次日下雨和次日晴天去購物的機率值:
對應路徑爲:
計算第三天下雨和第三天晴天去打掃衛生的機率值:
對應路徑爲:
比較每一步中 \(\bigtriangleup\) 的機率大小,選取最大值並找到對應的路徑,依次類推就能找到最有可能的隱藏狀態路徑。
第一天的機率最大值爲 \(\bigtriangleup_1S\),對應路徑爲Sunny,
次日的機率最大值爲 \(\bigtriangleup_2S\),對應路徑爲Sunny,
第三天的機率最大值爲 \(\bigtriangleup_3R\),對應路徑爲Rainy。
合起來的路徑就是Sunny->Sunny->Rainy,這就是咱們所求。
以上是比較通俗易懂的維特比算法,若是須要嚴謹表述,能夠查看《數學之美》這本書的第26章,講的就是維特比算法,很詳細。附:《數學之美》下載地址,點擊下載
鮑姆-韋爾奇算法(Baum-Welch Algorithm) (約等於EM算法),詳細講解請見:監督學習方法與Baum-Welch算法
wikipedia上是這樣定義因子圖的:將一個具備多變量的全局函數因子分解,獲得幾個局部函數的乘積,以此爲基礎獲得的一個雙向圖叫作因子圖(Factor Graph)。
通俗來說,所謂因子圖就是對函數進行因子分解獲得的一種機率圖。通常內含兩種節點:變量節點和函數節點。咱們知道,一個全局函數經過因式分解可以分解爲多個局部函數的乘積,這些局部函數和對應的變量關係就體如今因子圖上。
舉個例子,如今有一個全局函數,其因式分解方程爲:
\[g(x_1,x_2,x_3,x_4,x_5)=f_A(x_1)f_B(x_2)f_C(x1,x2,x3)f_D(x_3,x_4)f_E(x_3,x_5)\]
其中fA,fB,fC,fD,fE爲各函數,表示變量之間的關係,能夠是條件機率也能夠是其餘關係。其對應的因子圖爲:
咱們已經知道,有向圖模型,又稱做貝葉斯網絡,但在有些狀況下,強制對某些結點之間的邊增長方向是不合適的。使用沒有方向的無向邊,造成了無向圖模型(Undirected Graphical Model,UGM), 又被稱爲馬爾可夫隨機場或者馬爾可夫網絡(Markov Random Field, MRF or Markov network)。
設X=(X1,X2…Xn)和Y=(Y1,Y2…Ym)都是聯合隨機變量,若隨機變量Y構成一個無向圖 G=(V,E)表示的馬爾可夫隨機場(MRF),則條件機率分佈P(Y|X)稱爲條件隨機場(Conditional Random Field, 簡稱CRF,後續新的博客中可能會闡述CRF)。以下圖所示,即是一個線性鏈條件隨機場的無向圖模型:
在機率圖中,求某個變量的邊緣分佈是常見的問題。這問題有不少求解方法,其中之一就是把貝葉斯網絡或馬爾可夫隨機場轉換成因子圖,而後用sum-product算法求解。換言之,基於因子圖能夠用sum-product 算法高效的求各個變量的邊緣分佈。
詳細的sum-product算法過程,請查看博文:從貝葉斯方法談到貝葉斯網絡
一個通俗的例子
假設你有許多小明同窗一天內不一樣時段的照片,從小明提褲子起牀到脫褲子睡覺各個時間段都有(小明是照片控!)。如今的任務是對這些照片進行分類。好比有的照片是吃飯,那就給它打上吃飯的標籤;有的照片是跑步時拍的,那就打上跑步的標籤;有的照片是開會時拍的,那就打上開會的標籤。問題來了,你準備怎麼幹?
一個簡單直觀的辦法就是,無論這些照片之間的時間順序,想辦法訓練出一個多元分類器。就是用一些打好標籤的照片做爲訓練數據,訓練出一個模型,直接根據照片的特徵來分類。例如,若是照片是早上6:00拍的,且畫面是黑暗的,那就給它打上睡覺的標籤;若是照片上有車,那就給它打上開車的標籤。
乍一看能夠!但實際上,因爲咱們忽略了這些照片之間的時間順序這一重要信息,咱們的分類器會有缺陷的。舉個例子,假若有一張小明閉着嘴的照片,怎麼分類?顯然難以直接判斷,須要參考閉嘴以前的照片,若是以前的照片顯示小明在吃飯,那這個閉嘴的照片極可能是小明在咀嚼食物準備下咽,能夠給它打上吃飯的標籤;若是以前的照片顯示小明在唱歌,那這個閉嘴的照片極可能是小明唱歌瞬間的抓拍,能夠給它打上唱歌的標籤。
因此,爲了讓咱們的分類器可以有更好的表現,在爲一張照片分類時,咱們必須將與它相鄰的照片的標籤信息考慮進來。這——就是條件隨機場(CRF)大顯身手的地方!這就有點相似於詞性標註了,只不過把照片換成了句子而已,本質上是同樣的。
如同馬爾可夫隨機場,條件隨機場爲具備無向的圖模型,圖中的頂點表明隨機變量,頂點間的連線表明隨機變量間的相依關係,在條件隨機場中,隨機變量Y 的分佈爲條件機率,給定的觀察值則爲隨機變量 X。下圖就是一個線性連條件隨機場。
條件機率分佈P(Y|X)稱爲條件隨機場。
EM算法是用於含有隱變量模型的極大似然估計或者極大後驗估計,有兩步組成:E步,求指望(expectation);M步,求極大(maxmization)。本質上EM算法仍是一個迭代算法,經過不斷用上一代參數對隱變量的估計來對當前變量進行計算,直到收斂。注意:EM算法是對初值敏感的,並且EM是不斷求解下界的極大化逼近求解對數似然函數的極大化的算法,也就是說EM算法不能保證找到全局最優值。對於EM的導出方法也應該掌握。
隱馬爾可夫模型是用於標註問題的生成模型。有幾個參數(π,A,B):初始狀態機率向量π,狀態轉移矩陣A,觀測機率矩陣B。稱爲馬爾科夫模型的三要素。馬爾科夫三個基本問題:
機率計算問題:給定模型和觀測序列,計算模型下觀測序列輸出的機率。–》前向後向算法
學習問題:已知觀測序列,估計模型參數,即用極大似然估計來估計參數。–》Baum-Welch(也就是EM算法)和極大似然估計。
預測問題:已知模型和觀測序列,求解對應的狀態序列。–》近似算法(貪心算法)和維比特算法(動態規劃求最優路徑)
條件隨機場CRF,給定一組輸入隨機變量的條件下另外一組輸出隨機變量的條件機率分佈密度。條件隨機場假設輸出變量構成馬爾科夫隨機場,而咱們平時看到的大可能是線性鏈條隨機場,也就是由輸入對輸出進行預測的判別模型。求解方法爲極大似然估計或正則化的極大似然估計。
之因此總把HMM和CRF進行比較,主要是由於CRF和HMM都利用了圖的知識,可是CRF利用的是馬爾科夫隨機場(無向圖),而HMM的基礎是貝葉斯網絡(有向圖)。並且CRF也有:機率計算問題、學習問題和預測問題。大體計算方法和HMM相似,只不過不須要EM算法進行學習問題。
HMM和CRF對比:其根本仍是在於基本的理念不一樣,一個是生成模型,一個是判別模型,這也就致使了求解方式的不一樣。
HMM詞性標註,GitHub:點擊進入
做者:@mantchs