隐式马可夫模型(hidden markov model,HMM)
馬可夫的有關知識整理
1.馬可夫性
就是強調一個將來的狀態和現在狀態的一種無關性。“將來”和“過去”無關的這種特性就是強馬爾科夫性。
2.馬可夫夫過程
既然上面已經說出來了馬爾科夫性的定義了,這里我們就來搞懂馬爾科夫過程的事,馬爾科夫過程就是一個符合馬爾科夫性的過程。例如,我們已知一只青蛙是沒有記憶的,那么這個青蛙下一步跳向什么地方就一定是和之前跳過的地方是沒有關系的,那么青蛙第i次跳的位移就是一個馬爾科夫過程。
但是,這里我們只強調了一件事情就是將來和過去是沒有關系的,但是將來和現在可是有關系的哇,這就要求我們只要是知道了現在的過程就可以推出將來的情況,而不用關注過去的狀態中,到底經歷了什么東西。大致的過程我們可以描述為下圖:
也就是說我們只要是知道了當前我們處于一種什么狀態,接下來指向各種狀態的概率我們就知道了。
當然,說到這里我們熟知的泊松過程和維納過程自然而然就是馬爾科夫過程了。
3.隱馬可夫鏈
我們知道了上面的內容那么什么是隱馬可夫鏈呢?這里我們首先要理解這個隱的含義,所謂的隱,就是這種我們在馬可夫鏈上傳遞的過程是我們并不能直接進行觀測的,而是隱藏在我們觀測值得背后的。例如我們用股票來進行舉例,我們直接觀測到的是今天的結算價格是多少,但是我們并不能觀測到今天是處于一個熊市還是一個牛市,這就是一個隱狀態,隱藏在我們的觀測值之后。
這樣就產生了兩種不同的概率:1.transition Probabilities和emmission Probabilities也就是傳遞概率和發射概率,傳遞概率指的是隱狀態之間相互傳遞的一個過程,另外一個就是從這個隱狀態轉化到我們觀測狀態的概率的問題。
說到這里我們注意一個問題就是我們只要可以預測出隱狀態是什么情況,那么我們推算出我們當前的觀測狀態是什么的時候,我們就變得和其他時間節點沒有關系了。
總結一下,隱式馬可夫鏈的內容當中,我們其實有的是兩個內容:
1.我們在計算隱狀態的時候,就算我們知道所有的狀態,我們計算當前狀態也僅僅需要用到上一個狀態。
2.我們在計算觀測狀態的時候,就算我們知道所有狀態,我們計算當前狀態的觀測狀態也僅僅需要用到這個觀測狀態的隱狀態。
3.1哪些需要是離散的?
這里我們還要額外注意一個離散性的問題到底哪些是需要離散的?哪些不需要?:
1.隱狀態必須是一個離散的,如果不離散那么就不是我們當前的模型了。
2.但是我們的觀測狀態不一定是離散的,觀測狀態可能是連續的一個狀態。
3.2怎么記錄隱狀態之間的轉移概率
我們注意這樣的一個問題,我們不可能在計算的時候也畫一個圖,所以我們需要使用其他方式來記錄這種轉化關系,這就出現了一個新的東西,那就是轉移矩陣,需要我們轉移矩陣來存儲這種傳遞的關系。這里肯定是我們需要一個A(k×k)的矩陣來表示我們的轉化過程,這里的k自然而然就是我們隱狀態的種類數了。
3.3怎么記錄隱狀態到觀測值的轉移概率
這里有了之前的前車之鑒,我們處理起來就變得比較自然了。如果是離散的觀測值那么我們就直接使用一個矩陣就完成任務了。當然這里就變成了B(k×l)這里的k還是隱狀態的個數,l就成了觀測值的種類了。
當然還有很多情況是并不離散的,是一個連續的,這就要求我們使用連續的操作來完成了。
3.4有了上面的內容,我們又該怎么表示某個觀測值為Yi序列的概率呢?
我們這個上面所定義的一切,到底是為了什么?還不是為了寫出某個確定的序列觀測值的一個可能性問題。這就要求我們使用如下的方式:
我們看我們上面得到的式子:
1.第一個主要的問題就是,我們想要表示出這個序列的概率,我們遇見的第一個問題就是我們并不知道這個序列對應的隱狀態到底是哪些隱狀態,所以我們就得把所有的隱狀態都嘗試一次也就是上面所述的三個連加符號。
2.第二個問題就是P(y1,y2,y3,q1,q2,q3)這個東西沒有辦法進行直接計算,所以這就要求我們另外再進行一次操作,對這個東西進行化簡,這里我們只需要使用條件概率的計算式子拆開來進行計算,這里我們就可以使用上面說道的馬可夫鏈的性質進行化簡,這樣我們就可以完成化簡了。當然,上述其實只是完成了一個遞推的操作,這里我們顯然可以繼續推算完成。
好了這里,我們就順利完成了應該具有的推算,但是這里我們發現這里最后我們必須是使用一個P(q1)也就是一個初始狀態的概率。這個我們記成π。
所以我們這里要更新一下參數表,使其成為:
如下的三個參數。
3.5HMM可以做什么?(先感受一下)
我們先來簡單的看第一個例子,我們粗獷的理解一下這個東西的使用范圍,但是這個東西理解的也就是憑借感覺理解一下就好。
1.這樣,我們就可以想到類似的東西,我們可以將其應用在NLP當中進行使用,在NLP的過程中,我們說的內容就是觀測值,我們當前可能在表述的種類例如:一個原因、結果、邏輯等等,也就是我們的隱狀態了。
3.6HMM具體可以做什么?
好了我們應該從馬可夫的三個主要運算來理解一下這個東西,也就是下面的三個東西:
1.Evaluate評估的過程,這里就要求我們根據我們訓練完成的參數來選擇到底哪個更好?所謂哪個更好自然是誰的概率更加高一點的意思。
2.我們理解一下上面的東西:MLE(Maximum Likelihood Estimate,極大似然估計)當然這里寫的arg max也是相同的意思,我們這里我們可以理解為一個訓練的過程,因為當時的訓練的方法比較不發達,所以只能使用這個來進行訓練了。我們可以理解這個東西是一個訓練參數λ的過程。
3.第三個過程還是一個最大似然估計的過程,這個過程當中,我們是對Q(這個過程中的隱狀態)來完成,也就是我們找到的是一個對于當前情況下,最有可能的一個隱狀態序列。
談到這里我們搞一個實際的例子來感受一下,我們如何識別一個人說了什么?我們只實現一個比較簡單的情況,我們讓所有人都說一個單詞,之后對這個單詞進行訓練,找出這個單詞對應的參數λ,之后遇見需要判斷的數據集,我們只需要使用λ來完成對其的評估就行了。將所有單詞的λ代入都算一次,看看最后哪個高,自然而然就是哪個了。當然這個東西已經有點太老了,但是其想法對于我們今天的試驗還是具有很好的指導意義。
3.7參數矩陣對應關系的問題
我們應當注意在i的基礎上轉化為j我們應當讓i為行號j為列號,這個不是我們人為定義的情況,而是必須這樣進行操作,如果不這樣進行操作,那么我們將不能使用矩陣乘法來快速完成狀態轉化的操作。
所以這里的初始狀態i為行號,轉化狀態j為列號是被迫為之,而不是我們想這樣進行定義。
3.8計算的時候還有什么需要注意的
看到這里我們已經可以順利理解下面的例子了。但是我們仔細一看這里的計算量是非常巨大的,其計算量的級別大約是k的t(馬可夫鏈隱狀態傳遞的次數)次方的大小,也就是隨著傳遞次數的增加會進行指數級別的增長。當然這里我們處理的是評估的問題,當然其實這里不僅僅是一個評估的問題,我們其實在進行最大似然的時候也得使用這個評估。
3.8.1 forward algorithm
這里我們思考一下為什么這個東西會有這么大的計算量,那當然是我們重復計算了非常多的問題,沒有很好的利用之前的計算成功,這時候我們就應當想到我們的動態規劃操作。
說到動態規劃,我們其實最主要的任務就是尋找兩個問題之間的推導過程,也就是遞歸的方式。我們需要找兩個內容的推算方法。
這里我們定義一個α來幫助我們代替后面繁雜的概率式子,這樣我們經過推算就很簡答的可以獲得下面的內容,當然這里還有一個問題,就是我們概率和參數矩陣的對應關系的問題,對應關系是概率在后的表示行,概率在前的表示列。這個原因我們前面已經說過了。
當然我們就可以順利獲得我們需要的內容了,這里是在末尾狀態為i的情況下,我們獲得這個序列的可能性,我們接下來需要獲得整個序列的可能性,我們只需要進行一個累加就完事了。
3.8.2 backward algorithm
我們之前的推算是正向進行推算,其實反向也可以進行推算,所謂反向就是從后面開始推算,推算的內容是下面這個:
先理解一下這個東西干什么,這個東西就是我們需要使用在t處的隱狀態已知,來推算后面這一系列觀測狀態的概率問題,我們這里思考一下,其實這個過程也可以直接推算出來只是比較復雜,我們也應當使用上面的動歸思想,只是這次是從后向前進行動歸。
還是找一個遞歸的關系,我們之前是前向遞歸,我們需要的是利用之前的計算結果,我們這里是反向傳播,我們需要的是怎么把我們現在做的事情交給后面的人來做。
所以我們就得想一下怎么交給后面的人,我們自然而然需要將后面一個可以做的事情寫下來,看看我們還需要做什么事情,發現只需要完成下面兩個傳遞,我們就可以把任務交給下一個人了。
那么寫出推導的過程就比較自然了:
好了這樣就開始傳遞起來了。
3.8.3 forward和backward可以完成什么
當然這里和我們現在深度學習的backward和forward不是一個東西,這個是這里面專有的一個東西,大致將其理解成局部變量就可以吧。
這樣的話,我們就可以在λ確定的情況下,在第t個隱狀態為i的情況下,獲得這個序列的概率。其實就是序列和λ第t個狀態為i的該率為多少。
總結
以上是生活随笔為你收集整理的隐式马可夫模型(hidden markov model,HMM)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空间金字塔池化SPP
- 下一篇: conda下用prefix创建虚拟环境会