HMM學習筆記1

HMM學習筆記1

周文鎧

最近在看HMM模型,先看了理論基礎的東西,寫了總結如下,大體就是把國內一些書上的概述和HMM學習範例結合在一起,自己以後看起來方便點。 


         衆所周知,定義一個一階馬爾科夫過程,可以由三個量來描述:

1)狀態:狀態個數(N)、狀態集();

2)π向量:系統初始化狀態向量;

3)狀態轉移矩陣(A):表示前一個狀態已知的情況下下一個狀態的發生概率。

         在某些情況下,馬爾科夫狀態並不能滿足模式描述的要求。典型的例子如語音識別,我們聽到的聲音是來自於聲帶、喉嚨大小、舌頭位置以及其他一些東西的組合結果。所有這些因素相互作用產生一個單詞的聲音,一套語音識別系統檢測的聲音就是來自於個人發音時身體內部物理變化所引起的不斷改變的聲音。這時我們定義兩類狀態:觀察狀態和隱藏狀態。語音識別裝置工作的原理是將內部的語音產出看作是隱藏的狀態,而將聲音結果作爲一系列觀察的狀態,這些由語音過程生成並且最好的近似了實際(隱藏)的狀態。

在這種情況下,觀察到的狀態序列與隱藏過程有一定的概率關係。我們使用隱馬爾科夫模型(HMM)對這樣的過程建模,這個模型包含了一個底層隱藏的隨時間改變的馬爾科夫過程,以及一個與隱藏狀態某種程度相關的可觀察到的狀態集合。

通常,定義一個HMM狀態 建模包含兩組狀態集合和三組概率集合:

1)觀察狀態集:M(可觀察到的符號數)、符號集V={ }、觀察序列O={ };

2)隱藏狀態集:狀態個數(N)、狀態集

3)隱藏狀態轉移概率分佈(矩陣):A=( );

4)觀察符號概率分佈(混淆矩陣):B=( )給定了HMM某一個隱藏狀態下,觀察到某個符號的概率;

5)π向量:Π=( )系統初始化狀態向量。

一旦一個系統可以作爲HMM被描述,就可以用來解決三個基本問題。其中前兩個是模式識別問題:給定HMM求一個觀察序列的概率(評估);搜索最有可能生成一個觀察序列的隱藏狀態序列(解碼)。第三個問題是給定觀察序列生成一個HMM(學習)。

1、評估:

已知一個特定的觀察序列O和一些HMM模型( 的集合),求,最有可能產生該觀察序列的HMM模型。即求每個HMM模型產生此觀察序列的概率 ,取最大值。

方法:

窮舉搜索:

找到每一個可能的隱藏狀態,並且將這些隱藏狀態下的觀察序列概率相加。用這種方式計算觀察序列概率極爲昂貴,特別對於大的模型或較長的序列,因此我們可以利用這些概率的時間不變性來減少問題的複雜度。

前向算法:

給定一個隱馬爾科夫模型(HMM),我們將考慮遞歸地計算一個觀察序列的概率。我們首先定義局部概率а,它是到達網格中的某個中間狀態時的概率。

第一步:計算t=1時刻所有狀態的局部概率,爲初始概率乘以觀察概率分佈

第二步:計算t=2,3,…,T時每個狀態的局部概率,根據前一時刻的狀態不變性,進行迭代計算:

=P(觀察狀態|隱藏狀態j)*P(t時刻所有指向j狀態的路徑)

第三步:對於給定HMM,觀察序列的概率等於T時刻所有局部概率之和:

使用前向算法來計算給定隱馬爾科夫模型(HMM)後的一個觀察序列的概率。它在計算中利用遞歸避免對網格所有路徑進行窮舉計算。給定這種算法,可以直接用來確定對於已知的一個觀察序列,在一些隱馬爾科夫模型(HMMs)中哪一個HMM最好的描述了它——先用前向算法評估每一個(HMM),再選取其中概率最高的一個。

總結:在語音識別中,我們可以通過計算比較 ,從多個模型中選擇出與觀察序列匹配的最好的那個模型。

2、解碼:

已知一個特定的HMM以及一個相應的觀察序列,找到生成此觀察序列最可能的隱藏狀態序列,即找出從初始時刻到結束時刻的最佳狀態轉移路徑。

方法:

窮舉搜索:

可以通過列出所有可能的隱藏狀態序列並且計算對於每個組合相應的觀察序列的概率來找到最可能的隱藏狀態序列。最可能的隱藏狀態序列是使下面這個概率最大的組合:

P(觀察序列|隱藏狀態的組合)

這種方法是可行的,但是通過窮舉計算每一個組合的概率找到最可能的序列是極爲昂貴的。與前向算法類似,我們可以利用這些概率的時間不變性來降低計算複雜度。

Viterbi算法:

我們首先定義局部概率δ,它是到達網格中的某個特殊的中間狀態時的概率。對於網格中的每一箇中間及終止狀態,都有一個到達該狀態的最可能路徑。我們稱這些路徑爲局部最佳路徑( 。其中每個局部最佳路徑都有一個相關聯的概率,即局部概率與前向算法中的局部概率不同,是到達該狀態(最可能)的一條路徑的概率,而不是所有路徑概率的總和。

因而 是t時刻到達狀態i的所有序列概率中最大的概率,而局部最佳路徑是得到此最大概率的隱藏狀態序列。對於每一個可能的i和t值來說,這一類概率(及局部路徑)均存在。特別地,在t =T時每一個狀態都有一個局部概率和一個局部最佳路徑。這樣我們就可以通過選擇此時刻包含最大局部概率的狀態及其相應的局部最佳路徑來確定全局最佳路徑(最佳隱藏狀態序列)。

第一步:通過隱藏狀態的初始概率和相應的觀察概率之積計算t=1時刻的局部概率。

  1≤ ≤N

第二步:回顧一下馬爾科夫假設:給定一個狀態序列,一個狀態發生的概率只依賴於前n個狀態。特別地,在一階馬爾可夫假設下,當前狀態在一個狀態序列後發生的概率只取決於之前的一個狀態(迭代計算)

在每一箇中間及終止狀態我們都知道了局部概率 。然而我們的目標是在給定一個觀察序列的情況下尋找網格中最可能的隱藏狀態序列。因此,我們需要一些方法來記住網格中的局部最佳路徑。回顧一下我們是如何計算局部概率的,計算t時刻的δ時,我們僅僅需要知道t-1時刻的δ。在這個局部概率計算之後,就有可能記錄前一時刻哪個狀態生成了 。也就是說,在t-1時刻系統必須處於某個狀態,該狀態導致了系統在t時刻到達狀態i是最優的。這種記錄(記憶)是通過對每一個狀態賦予一個反向指針完成的,這個指針指向最優的引發當前狀態的前一時刻的某個狀態。形式上,我們可以寫成如下的公式:

其中arg max運算符是用來計算使括號中表達式的值最大的索引j的。

這樣就確定了到達下一個狀態的最可能路徑,並對如何到達下一個狀態做了記錄。具體來說首先通過考察所有的轉移概率與上一步獲得的最大的局部概率之積,然後記錄下其中最大的一個,同時也包含了上一步觸發此概率的狀態。

第三步:確定系統完成時(t=T)最可能的隱藏狀態:


第四步:通過回溯確定最終路徑:


3、學習:

根據觀察序列生成隱馬爾科夫模型。在以上兩個問題當中,我們都是已知一個固定的HMM( )來進行計算,在一些情況中,如一個龐大的語音處理數據庫,其隱層的語音可能由一個馬爾可夫過程基於已知的音素建模的,而其可以觀察的部分可能由可識別的狀態(可能通過一些矢量數據表示)建模的,但是沒有直接的方式來獲取隱馬爾科夫模型(HMM)參數。這時就需要通過學習讓系統自己尋找最優參數。通常用Baum-Waich算法來實現這一目的。

定義兩個相關的概率模型:

表示給定觀察序列O和模型 的情況下,t時刻處於狀態i,t+1時刻處於狀態j的概率,歸一化表示:

表示給定觀察序列O和模型 的情況下,t時刻處於狀態i的概率,歸一化表示:

表示觀察序列中,從狀態i出發的狀態轉移次數的期望。

表示觀察序列中,從狀態i到j的狀態轉移次數的期望。

Baum-Waich算法的基本思想就是,先任意指定參數模型 ,通過特定的參數重估公式根據現有的模型 得到新的參數 ,保證 ,然後將新的參數 重複上述過程,直到參數模型處於收斂狀態,即得到最大似然模型。

重構公式的推導過程忽略,最後得到的結果是:

在限制條件:

下:

總結來說重估的步驟就是EM算法的一種特殊情況,按照E步M步計算即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章