隱馬爾可夫模型

隱馬爾可夫模型狀態變遷圖（例子）

x — 隱含狀態

y — 可觀察的輸出

a — 轉換機率（transition probabilities）

b — 輸出機率（output probabilities）

隱馬爾可夫模型（Hidden Markov Model；縮寫：HMM），或稱作隱性馬爾可夫模型，是統計模型，用來描述一個含有隱含未知引數的馬爾可夫過程。其難點是從可觀察的引數中確定該過程的隱含引數。然後利用這些引數來作進一步的分析，例如模式識別。

在正常的馬爾可夫模型中，狀態對於觀察者來說是直接可見的。這樣狀態的轉換機率便是全部的引數。而在隱馬爾可夫模型中，狀態並不是直接可見的，但受狀態影響的某些變數則是可見的。每一個狀態在可能輸出的符號上都有一機率分佈。因此輸出符號的序列能夠透露出狀態序列的一些資訊。

隱馬爾可夫模型在熱力學、統計力學、物理學、化學、經濟學、金融學、訊號處理、資訊理論、模式識別（如語音識別、手寫識別、手勢識別、詞性標記、樂譜跟隨）、區域性放電及生物資訊學等領域都有應用。

定義

令、為離散時間隨機過程， 。則是隱馬爾可夫模型的條件是：

是馬爾可夫過程，其行為不可直接觀測（“隱”）；

，且對每個博雷爾集。

令、為連續時間隨機過程。則是隱馬爾可夫模型的條件是：

是馬爾可夫過程，其行為不可直接觀測（“隱”）；
,

、每個博雷爾集且每族博雷爾集

1.1 術語

過程狀態（或）稱作隱狀態，（或）稱作條件機率或輸出機率。

馬爾可夫模型的演化

下邊的圖示強調了 HMM 的狀態變遷。有時，明確的表示出模型的演化也是有用的，我們用 x (t1) 與 x (t2) 來表達不同時刻 t1 和 t2 的狀態。

圖中箭頭方向則表示不同資訊間的關聯性，因此可以得知和有關，而又和有關。

而每個只和有關，其中我們稱為隱藏變數（hidden variable），是觀察者無法得知的變數。

隱性馬可夫模型常被用來解決有未知條件的數學問題。

假設隱藏狀態的值對應到的空間有個元素，也就是說在時間時，隱藏狀態會有種可能。

同樣的，也會有種可能的值，所以從到間的關係會有種可能。

除了間的關係外，每組間也有對應的關係。

若觀察到的有種可能的值，則從到的輸出模型複雜度為。如果是一個維的向量，則從到的輸出模型複雜度為。

在這個圖中，每一個時間塊（x (t), y (t)）都可以向前或向後延伸。通常，時間的起點被設定為 t=0 或 t=1.

馬爾可夫模型的機率

假設觀察到的結果為

隱藏條件為

長度為，則馬可夫模型的機率可以表達為：

由這個機率模型來看，可以得知馬可夫模型將該時間點前後的資訊都納入考量。

使用隱馬爾可夫模型

HMM 有三個典型 (canonical) 問題:

預測 (filter)：已知模型引數和某一特定輸出序列，求最後時刻各個隱含狀態的機率分佈，即求 。通常使用前向演算法解決。
平滑 (smoothing)：已知模型引數和某一特定輸出序列，求中間時刻各個隱含狀態的機率分佈，即求 。通常使用前向 - 後向演算法解決。
解碼 (most likely explanation)：已知模型引數，尋找最可能的能產生某一特定輸出序列的隱含狀態的序列，即求 。通常使用 Viterbi 演算法解決。

4.1 具體例項

假設你有一個住得很遠的朋友，他每天跟你打電話告訴你他那天做了什麼。你的朋友僅僅對三種活動感興趣：公園散步，購物以及清理房間。他選擇做什麼事情只憑天氣。你對於他所住的地方的天氣情況並不瞭解，但是你知道總的趨勢。在他告訴你每天所做的事情基礎上，你想要猜測他所在地的天氣情況。

你認為天氣的執行就像一個馬爾可夫鏈。其有兩個狀態「雨」和「晴」，但是你無法直接觀察它們，也就是說，它們對於你是隱藏的。每天，你的朋友有一定的機率進行下列活動：「散步」、「購物」、「清理」。因為你朋友告訴你他的活動，所以這些活動就是你的觀察資料。這整個系統就是一個隱馬爾可夫模型（HMM）。

你知道這個地區的總的天氣趨勢，並且平時知道你朋友會做的事情。也就是說這個隱馬爾可夫模型的引數是已知的。你可以用程式語言（Python）寫下來：

states = ('Rainy', 'Sunny')

observations = ('walk', 'shop', 'clean')

start_probability = {'Rainy': 0.6, 'Sunny': 0.4}

transition_probability = {'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},

'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},

}

emission_probability = {'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},

'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},

}

在這些程式碼中，start_probability 代表了你對於你朋友第一次給你打電話時的天氣情況的不確定性（你知道的只是那個地方平均起來下雨多些）。在這裡，這個特定的機率分佈並非平衡的，平衡機率應該接近（在給定變遷機率的情況下）{'Rainy': 0.571, 'Sunny': 0.429}。

transitionprobability 表示基於馬爾可夫鏈模型的天氣變遷，在這個例子中，如果今天下雨，那麼明天天晴的機率只有 30%。程式碼 emissionprobability 表示了你朋友每天做某件事的機率。如果下雨，有 50% 的機率他在清理房間；如果天晴，則有 60% 的機率他在外頭散步。

這個例子在維特比演算法頁上有更多的解釋。

結構架構

下圖展示了例項化 HMM 的一般結構。橢圓形代表隨機變數，可採用多個數值中的任意一種。隨機變數是 t 時刻的隱狀態（圖示模型中）；隨機變數 y (t) 是 t 時刻的觀測值；箭頭表示條件依賴關係。

圖中可清楚看出，給定隱變數在時間 t 的條件機率分佈只取決於隱變數的值，之前的則沒有影響，這就是所謂馬爾可夫性質。觀測變數同理，只取決於隱變數的值。

在本文所述標準 HMM 中，隱變數的狀態空間是離散的，而觀測值本身則可以離散（一般來自分類分佈）也可以連續（一般來自正態分佈）。HMM 引數有兩類：轉移機率與輸出機率，前者控制時刻的隱狀態下，如何選擇 t 時刻的隱狀態。

隱狀態空間一般假設包含 N 個可能值，以分類分佈為模型。這意味著，對隱變數在 t 時刻可能所處的 N 種狀態中的每種，都有到時刻可能的 N 種狀態的轉移機率，共有個轉移機率。注意從任意給定狀態轉移的轉移機率之和須為 1。於是，轉移機率構成了 N 階方陣，稱作馬爾可夫矩陣。由於任何轉移機率都可在已知其他機率的情形下確定，因此共有個轉移引數。

此外，對 N 種可能狀態中的每種，都有一組輸出機率，在給定隱狀態下控制著觀測變數的分佈。這組機率的大小取決於觀測變數的性質，例如，若觀測變數是離散的，有 M 種值、遵循分類分佈，則有個獨立引數，所有隱狀態下共有個輸出機率引數。若觀測向量是 M 維向量，遵循任意多元正態分佈，則將有 M 個引數控制均值，個引數控制協方差矩陣，共有個輸出引數。（這時，除非 M 很小，否則限制觀測向量各元素間協方差的性質可能更有用，例如假設各元素相互獨立，或假設除固定多相鄰元素外，其他元素相互獨立。）

學習

HMM 的引數學習任務是指在給定輸出序列或一組序列的情形下，找到一組最佳的狀態轉換和轉移機率。任務通常是根據一組輸出序列，得到 HMM 引數的最大似然估計值。目前還沒有精確解這問題的可行演算法，可用鮑姆 - 韋爾奇演算法或 Baldi–Chauvin 演算法高效地推匯出區域性最大似然。鮑姆 - 韋爾奇演算法是最大期望演算法的特例。

若將 HMM 用於時間序列預測，則更復雜的貝葉斯推理方法（如馬爾可夫鏈蒙特卡洛取樣法，MCMC 取樣法）已被證明在準確性和穩定性上都優於尋找單一的最大似然模型。由於 MCMC 帶來了巨大的計算負擔，在計算可擴充套件性也很重要時，也可採用貝葉斯推理的變分近似方法，如。事實上，近似變分推理的計算效率可與期望最大化相比，而精確度僅略遜於精確的 MCMC 型貝葉斯推理。

隱馬爾可夫模型的應用

語音識別、中文斷詞 / 分詞或光學字元識別
機器翻譯
生物資訊學 和 基因組學
基因組序列中蛋白質編碼區域的預測
對於相互關聯的 DNA 或蛋白質族的建模
從基本結構中預測第二結構元素
通訊中的譯碼過程
地圖匹配演算法
還有更多...

7.1 隱馬爾可夫模型在語音處理上的應用

因為馬可夫模型有下列特色：

時間點的隱藏條件和時間點的隱藏條件有關。因為人類語音擁有前後的關聯，可以從語義與發音兩點來看：
單字的發音擁有前後關聯：例如 "They are" 常常發音成 "They're"，或是 "Did you" 會因為 "you" 的發音受 "did" 的影響，常常發音成 "did ju"，而且語音辨識中用句子的發音來進行分析，因此需要考慮到每個音節的前後關係，才能夠有較高的準確率。
句子中的單字有前後關係：從英文文法來看，主詞後面常常接助動詞或是動詞，動詞後面接的會是受詞或介係詞。而或是從單一單字的使用方法來看，對應的動詞會有固定使用的介係詞或對應名詞。因此分析語音訊息時需要為了提升每個單字的準確率，也需要分析前後的單字。
馬可夫模型將輸入訊息視為一單位一單位，接著進行分析，與人類語音模型的特性相似。語音系統辨識的單位為一個單位時間內的聲音。利用梅爾倒頻譜等語音處理方法，轉換成一個發音單位，為離散型的資訊。而馬可夫模型使用的隱藏條件也是一個個被封包的，因此使用馬可夫模型來處理聲音訊號比較合適。

歷史

隱馬爾可夫模型最初是在 20 世紀 60 年代後半期 Leonard E. Baum 和其它一些作者在一系列的統計學論文中描述的。HMM 最初的應用之一是開始於 20 世紀 70 年代中期的語音識別。

在 1980 年代後半期，HMM 開始應用到生物序列尤其是 DNA 的分析中。此後，在生物資訊學領域 HMM 逐漸成為一項不可或缺的技術。