維特比算法

維特比算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的預測問題中均用到了維特比算法。實際上,維特比算法不僅是很多自然語言處理的解碼算法,也是現代數字通信中使用最頻繁的算法。

以一個簡單的隱馬爾科夫模型爲例,
這裏寫圖片描述
x=(x1,x2,...,xN) 爲觀測符號,y=(y1,y2,...,yN) 爲隱狀態序列,要求的預測問題爲:


(y1,y2,...,yN)=argmaxP(y1,y2,...,yN|x1,x2,...,xN)

依據馬爾科夫假設,上式等價於:

argmaxi=1NP(xi|yi)P(yi|yi1)

在隱馬爾科夫鏈中,任意時刻t下狀態的值是有多個的,以拼音轉漢字爲例,輸入拼音“yike”,可能有的值爲一顆、一刻、一棵等等,用符號yij 表示狀態yi 的第j個可能值,將狀態序列按值展開,就得到了一個籬笆網絡,這也是維特比算法求解最優路徑的圖結構:

這裏寫圖片描述

隱馬爾科夫的預測問題就是要求圖中的一條路徑,使得該路徑對應的概率值最大。
對應上圖來講,如果直接求的話,有3N 的組合數,底數3爲籬笆網絡寬度,指數N爲籬笆網絡的長度,計算量非常大。維特比利用動態規劃的思想來求解概率最大路徑(可理解爲求圖最短路徑),使得複雜度正比於序列長度,複雜度爲O(ND2) ,N爲長度,D爲寬度,從而很好地解決了問題的求解。

維特比算法的基礎可以概括爲下面三點(吳軍:數學之美):
1、如果概率最大的路徑經過籬笆網絡的某點,則從開始點到該點的子路徑也一定是從開始到該點路徑中概率最大的。
2、假定第i時刻有k個狀態,從開始到i時刻的k個狀態有k條最短路徑,而最終的最短路徑必然經過其中的一條。
3、根據上述性質,我們在計算第i+1狀態的最短路徑時,只需要考慮從開始到當前的k個狀態值的最短路徑和當前狀態值到第i+1狀態值的最短路徑即可,如求t=3時的最短路徑,等於求t=2時的所有狀態結點y2i 的最短路徑加上t=2到t=3的各節點的最短路徑。

爲了記錄中間變量,引入變量δψ 。定義t時刻到狀態爲i的所有結點最大概率值(最短路徑):


δt(i)=maxP(it=i,it1,...,i1,ot,...,o1|λ),i=1,2,...,N

其中,it 表示最短路徑,ot 表示觀測符號,λ 表示模型參數。依據上式可以得出變量δ 的遞推式:

δt+1(i)=max[δt(j)aji]bi(ot+1)

i=1,2,...,N;t=1,2,...,T1
表示t時刻處於狀態j,t+1時刻轉移到狀態i且觀測到符號ot+1 的最大概率。
定義ψt(i) 爲時刻t到狀態爲i的概率最大路徑的前一個時刻經過的結點,即它保存了最短路徑所經過的結點:

ψt(i)=argmax1jN[δt1(j)aji]

使用維特比算法的一個例子(統計學習方法):
例:給出隱馬爾科夫模型參數λ=(A,B,π) ,
轉移矩陣

A=0.50.30.20.20.50.30.30.20.5

觀測概率矩陣
B=0.50.40.70.50.60.3

初始狀態矩陣
π=0.20.40.4

已知觀測序列O=(紅,白,紅),試求最優狀態序列。
求解過程如下:
(1)、計算t=1時刻的概率δ1(i) ,

δ1(i)=πibi(o1)=πibi()

即求t=1時刻觀測到紅球,對應的狀態i可能是1,2,3的概率,可解得
δ1(1)=0.2×0.5=0.1,
δ1(2)=0.4×0.4=0.16,
δ1(3)=0.4×0.7=0.28
(2)、計算t=2時刻的概率δ2(i)psi2(i) ,根據前面δ,ψ 定義來求:
δ2(1)=max1j3[δ1(j)aj1]bi(o2)
=max{0.1×0.5×0.5,0.16×0.3×0.5,0.28×0.2×0.5}
=0.028
ψ2(1)=3
同樣可求,
δ2(2)=0.0504,ψ2(2)=3
δ2(3)=0.042,ψ2(3)=3
(3)、計算t=3時刻的概率δ3(i)psi3(i)
計算過程與t=2時刻的計算過程相同,可得:
δ3(1)=0.00756,ψ3(1)=2
δ3(2)=0.01008,ψ3(2)=2
δ3(3)=0.0147,ψ3(3)=3
(4)、根據最短路徑回溯找到所經過的結點
由(3)可知,t=3時,最短路徑對應的最大概率爲0.0147,爲上一時刻t=2時結點3到達當前結點3所得到的概率;
t=2時,由ψ2(3)=3 可知,最短路徑由上一時刻t=1時結點3到當前結點3;
綜上,可得到當觀測序列爲(紅,白,紅)時最可能對應的狀態序列爲(3,3,3)。

發佈了50 篇原創文章 · 獲贊 229 · 訪問量 63萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章