隐马尔科夫链
馬爾科夫鏈回顧
馬爾科夫鏈是以俄國數學家安德烈?\cdot?馬爾科夫命名,以紀念其首次提出馬爾可夫鏈和對其收斂性質所做的研究。馬爾科夫鏈是指數學中具有馬爾科夫性質的離散事件隨機過程。在給定當前知識或信息的情況下,過去(即當前以前的歷史狀態)對于預測將來(即當前以后的未來狀態)是無關的,即過去與將來是獨立的。
每個狀態的轉移只依賴于之前的nnn個狀態,這個過程稱為1個nnn階的模型,其中nnn是影響轉移狀態的數目。最簡單的馬爾科夫過程就是一階過程,每個狀態的轉移只依賴于之前的那一個狀態。用數學表達式表示就是下面這個式子:P(Xn+1=x∣X1=x1,X2=x2,...,Xn=xn)=P(Xn+1=x∣Xn=xn)P(X_{n+1}=x|X_1=x_1,X_2=x_2,...,X_n=x_n)=P(X_{n+1}=x|X_n=x_n)P(Xn+1?=x∣X1?=x1?,X2?=x2?,...,Xn?=xn?)=P(Xn+1?=x∣Xn?=xn?)
用轉移矩陣表示:P(k)=[p11kp12k?p1nkp21kp22k?p2nk????pm1kpm2k?pmnk]\mathtt{P^{(k)}}=\begin{bmatrix} p_{11}^k&p_{12}^k&\cdots&p_{1n}^k\\ p_{21}^k&p_{22}^k&\cdots&p_{2n}^k\\ \vdots&\vdots&\vdots&\vdots\\ p_{m1}^k&p_{m2}^k&\cdots&p_{mn}^k \end{bmatrix}P(k)=??????p11k?p21k??pm1k??p12k?p22k??pm2k???????p1nk?p2nk??pmnk????????
其中pijp_{ij}pij?就是根據上面那個公式計算出來的概率值。
k=1k=1k=1時為一步轉移矩陣,當k>1k>1k>1時有Pk=Pk?1P\mathtt{P^k}=\mathtt{P^{k-1}}\mathtt{P}Pk=Pk?1P。經過多次迭代后,狀態轉移矩陣會趨于平衡,即當前時段和下一個時段的狀態概率一定相同。
但是這并不是一個完美的模型。因為前后關系的缺失,導致信息的缺失。
比如我們的股市,如果只是觀測市場,我們只知道當天的價格、成交量等信息,但是我們并不知道當前股市處于什么樣的一個狀態(牛市、熊市、震蕩、反彈等等)。在這樣的情況下,我們有兩個集合,一個是可觀測到的集合(股市價格成交量等信息),另一個是隱藏的狀態集合(股市的狀態)。
在這樣的情況下,可以觀察到的狀態序列和隱藏的狀態序列是概率相關的。于是我們可以將這種類型的過程建模為有一個隱藏的馬爾科夫過程和一個與這個隱藏馬爾科夫過程概率相關的并且可以觀察到的狀態集合,這就是隱馬爾科夫模型。
隱馬爾科夫鏈
下面給出隱馬爾科夫鏈的定義。摘抄自李航的統計學習方法
隱馬爾科夫模型是關于時序的概率模型,描述由一個隱藏的馬爾科夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程。隱藏的馬爾科夫鏈隨機生成的狀態的序列,稱為狀態序列;每個狀態生成一個觀測,而由此產生的觀測的隨機序列,稱為觀測序列。序列的每一個位置又可以看做是一個時刻。
隱馬爾科夫模型由初始概率分布、狀態轉移概率分布以及觀測概率分布確定。隱馬爾科夫模型的形式定義如下:
設QQQ是所有可能的狀態的集合,VVV是所有可能的觀測的集合。Q={q1,q2,...,qN},V={v1,v2,...,vM}Q={q_1,q_2,...,q_N},V={v_1,v_2,...,v_M}Q={q1?,q2?,...,qN?},V={v1?,v2?,...,vM?}其中,NNN是可能的狀態數,MMM是可能的觀測數。III是長度為TTT的狀態序列,OOO是對應的觀測序列。I={i1,i2,...,iT},O={o1,o2,...,oT}I={i_1,i_2,...,i_T},O={o_1,o_2,...,o_T}I={i1?,i2?,...,iT?},O={o1?,o2?,...,oT?}AAA是狀態轉移概率矩陣:A=[aij]N×NA=[a_{ij}]_{N\times N}A=[aij?]N×N?其中,aij=P(it+1=qj∣it=qi),i,j=1,2,...,Na_{ij}=P(i_{t+1}=q_j|i_{t}=q_i),i,j=1,2,...,Naij?=P(it+1?=qj?∣it?=qi?),i,j=1,2,...,N是在時刻ttt處于狀態qiq_iqi?的條件下在時刻t+1t+1t+1轉移到狀態qjq_jqj?的概率。
BBB是觀測概率矩陣:B=[bj(k)]N×MB=[b_j(k)]_{N\times M}B=[bj?(k)]N×M?其中,bj(k)=P(ot=vk∣it=qj),k=1,2,...,M;j=1,2,...,Nb_j(k)=P(o_t=v_k|i_t=q_j), k=1,2,...,M;j=1,2,...,Nbj?(k)=P(ot?=vk?∣it?=qj?),k=1,2,...,M;j=1,2,...,N是時刻ttt處于狀態qiq_iqi?的條件下生成觀測vkv_kvk?的概率。
π\piπ是初始狀態概率向量:π=(πi)\pi=(\pi_i)π=(πi?)其中,πi=P(i1=qi),i=1,2,...,N\pi_i=P(i_1=q_i),i=1,2,...,Nπi?=P(i1?=qi?),i=1,2,...,N是時刻t=1t=1t=1處于狀態qiq_iqi?的概率。
隱馬爾科夫模型由初始狀態概率向量π\piπ、狀態轉移概率矩陣AAA以及觀測概率矩陣BBB決定。π\piπ和AAA決定狀態序列,BBB決定觀測序列。因此,隱馬爾科夫模型λ\lambdaλ可用三元符號表示,即λ=(A,B,π)\lambda=(A,B,\pi)λ=(A,B,π)AAA、BBB、π\piπ稱為隱馬爾科夫模型的三要素。
狀態轉移概率矩陣AAA與初始狀態概率向量π\piπ確定了隱藏的馬爾科夫鏈,生成不可觀測的狀態序列。觀測概率矩陣BBB確定了如何從狀態生成觀測,與狀態序列綜合確定了如何產生觀測序列。
簡單總結一下,隱馬爾科夫模型是用來描述一個含有隱含未知參數的馬爾科夫過程。其難點在于從可觀察的參數中確定該過程的隱含參數。
簡單例子
假設我手中有三個骰子,第一個骰子是常見的骰子(D6),6個面,每個面(1,2,3,4,5,6)出現的概率都是16\frac{1}{6}61?;第二個骰子是個四面體(D4),4個面,每個面(1,2,3,4)出現的概率都是14\frac{1}{4}41?;第三個骰子有八個面,每個面(1,2,3,4,5,6,7,8)出現的概率都是18\frac{1}{8}81?。
假設我們開始擲骰子,我們先從D6、D4、D8之間選擇一個,每一個骰子被挑到的概率都是13\frac{1}{3}31?。然后我們擲骰子,得到一個數字,1,2,3,4,5,6,7,8中的一個。不停地重復,我們會得到一串數字,每個數字都是1~8中的一個。例如我們可能得到這么一串數字(擲骰子10次):1,6,3,5,2,7,3,5,2,4。
這串數字叫做可見狀態鏈。但是在隱馬爾科夫模型中,我們不僅僅有這么一串可見狀態鏈,還有一串隱含狀態鏈。在這個例子里,隱含狀態鏈就是用骰子的先后序列。比如可以是:D6,D8,D8,D6,D4,D8,D6,D6,D4,D8。
一般來講,隱馬爾科夫鏈中說到的馬爾科夫鏈其實是指隱含狀態鏈,因為隱含狀態(骰子)之間存在轉換概率。在這個例子里,D6下面一個狀態是D6、D4、D8的概率都是13\frac{1}{3}31?,同樣對于D4和D8也是一樣。
隱馬爾科夫模型示意圖:
隱含狀態轉換示意圖:
我們其實可以隨意設定轉換概率。比方說,D6后面是D6的概率是0.9,是D8的概率是0.1,但是D6后面不能出現D4,所以D6后面是D4的概率是0。
同樣的,盡管可見狀態之間沒有轉換概率,但是隱含狀態和可見狀態之間有一個概率叫輸出概率。比如說在我們這個例子,D6產生1的輸出概率是16\frac{1}{6}61?,同樣產生2,3,4,5,6的輸出概率也是16\frac{1}{6}61?。我們同樣可以人為定義輸出概率,比如D6被人動過手腳,輸出1的概率比較大是12\frac{1}{2}21?,輸出其他數字的概率是110\frac{1}{10}101?。
我們可以模擬一下這個過程。假設PPP是D6、D4、D8之間轉換的轉換概率矩陣,Qi(i=6,4,8)Q_i(i=6,4,8)Qi?(i=6,4,8)表示D6、D4、D8輸出(1,2,3,4,5,6,7,8)(1,2,3,4,5,6,7,8)(1,2,3,4,5,6,7,8)的概率矩陣。現在有一個初始狀態π=[1,0,0]\pi=[1,0,0]π=[1,0,0](π\piπ的列標簽是按照D6、D4、D8這個順序來的),表示初始狀態拿出的骰子是D6,則最終輸出(1,2,3,4,5,6,7,8)(1,2,3,4,5,6,7,8)(1,2,3,4,5,6,7,8)的概率矩陣XXX應該等于:X=π(PQ)(PQ)?X=\pi (PQ)(PQ)\cdotsX=π(PQ)(PQ)?這樣就模擬出了整個擲骰子的過程。
但是在實際過程中,并不會這么簡單,有可能不知道骰子的數目,或者這些骰子之間轉換的概率,又或者這些骰子輸出這些數字的概率是多少。比如在上面提到的股市,我們知道當天的價格成交量等信息,但是我們不知道當前股市處于什么樣的一個狀態。這就是一個典型的已知可見狀態,未知隱含狀態的問題。
隱馬爾科夫鏈的三大問題
(1)已知觀測序列O={o1,o2,...,oT}O={o_1,o_2,...,o_T}O={o1?,o2?,...,oT?}和模型λ=(A,B,π)\lambda=(A,B,\pi)λ=(A,B,π),計算在該模型λ\lambdaλ下觀測序列OOO出現的概率P(O∣λ)P(O|\lambda)P(O∣λ)。
這是一個驗證問題,就是說我們已經知道模型是什么樣的,我們把觀測數據給驗證一下是否符合這個模型。
(2)已知觀測序列O={o1,o2,...,oT}O={o_1,o_2,...,o_T}O={o1?,o2?,...,oT?}和模型λ=(A,B,π)\lambda=(A,B,\pi)λ=(A,B,π),求給定觀測序列條件概率P(I∣λ)P(I|\lambda)P(I∣λ)最大的狀態序列I={i1,i2,...,iT}I={i_1,i_2,...,i_T}I={i1?,i2?,...,iT?}。即給定觀測序列,求最有可能的對應的狀態序列。
這是一個識別問題,我們從能觀測的點識別出隱藏的狀態,就是找到能夠得到觀測序列OOO的最優隱藏狀態序列,即最優路徑。
(3)已知觀測序列O={o1,o2,...,oT}O={o_1,o_2,...,o_T}O={o1?,o2?,...,oT?},估計模型λ=(A,B,π)\lambda=(A,B,\pi)λ=(A,B,π)的參數,使得在該模型下觀測序列概率P(O∣λ)P(O|\lambda)P(O∣λ)最大。
這是一個訓練學習的問題,就是說我們已經知道最終的結果是什么,但是我們不知道模型的參數,通過訓練學習的方式,找到模型的參數最優解,使得觀測序列概率P(O∣λ)P(O|\lambda)P(O∣λ)最大。
三大問題的英文描述:
關于解決這三大問題的方法,這里挖個坑,等之后有機會在回來填。
總結
- 上一篇: 科技部高新司副司长杨咸武:物联网前景广阔
- 下一篇: 必读2022年最新西藏水利水电施工安全员