HMM 解碼問題描述如下:
給定HMM參數λ = (A,B) ,和觀測序列O = o1,o2,...,oT ,找到概率最大的隱藏狀態序列Q = q1q2q3 ...qT
解決以上問題,常用算法是Viterbi算法,或Viterbi解碼算法,描述如下所示:
vt ( j) 表示:在給定λ,,通過最大概率的隱藏狀態序列q0,q1,...,qt−1 ,且觀測到前t個觀測值,狀態在j的概率
即:
通過遞歸,可以展開如下:
其中:
vt−1(i) 爲t-1時刻 Viterbi路徑的概率
ai j 爲狀態qi 到q j 的狀態轉移概率
bj(ot) 爲狀態觀測似然
Viterbi算法描述如下所示:
首先定義一個回退指針bt,用來記錄最佳狀態序列
1.初始化:
bt1(j) = 0
2.遞歸計算:
3.終止:
Viterbi路徑最大概率:
回溯指針起始:
Viterbi算法僞代碼如下所示:
其中Viterbi計算過程如下黑色粗線所示:
其中Viterbi回溯指針,進行回溯的過程爲藍色虛線所示:
接下來一章爲HMM最後一個問題,如何進行訓練HMM。