維特比演算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的**問題中均用到了維特比演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演算法。
以乙個簡單的隱馬爾科夫模型為例,
n)為觀測符號,y=
(y1,
y2,.
..,y
n)為隱狀態序列,要求的**問題為: (y
1,y2
,...
,yn)
=arg
maxp
(y1,
y2,.
..,y
n|x1
,x2,
...,
xn)
依據馬爾科夫假設,上式等價於: ar
gmax
∏i=1
np(x
i|yi
)⋅p(
yi|y
i−1)
在隱馬爾科夫鏈中,任意時刻t下狀態的值是有多個的,以拼音轉漢字為例,輸入拼音「yike」,可能有的值為一顆、一刻、一棵等等,用符號yi
j 表示狀態yi
的第j個可能值,將狀態序列按值展開,就得到了乙個籬笆網路,這也是維特比演算法求解最優路徑的圖結構:
隱馬爾科夫的**問題就是要求圖中的一條路徑,使得該路徑對應的概率值最大。
對應上圖來講,如果直接求的話,有3n
的組合數,底數3為籬笆網路寬度,指數n為籬笆網路的長度,計算量非常大。維特比利用動態規劃的思想來求解概率最大路徑(可理解為求圖最短路徑),使得複雜度正比於序列長度,複雜度為o(
n⋅d2
) ,n為長度,d為寬度,從而很好地解決了問題的求解。
維特比演算法的基礎可以概括為下面三點(吳軍:數學之美):
1、如果概率最大的路徑經過籬笆網路的某點,則從開始點到該點的子路徑也一定是從開始到該點路徑中概率最大的。
2、假定第i時刻有k個狀態,從開始到i時刻的k個狀態有k條最短路徑,而最終的最短路徑必然經過其中的一條。
3、根據上述性質,我們在計算第i+1狀態的最短路徑時,只需要考慮從開始到當前的k個狀態值的最短路徑和當前狀態值到第i+1狀態值的最短路徑即可,如求t=3時的最短路徑,等於求t=2時的所有狀態結點y2
i 的最短路徑加上t=2到t=3的各節點的最短路徑。
為了記錄中間變數,引入變數δ和
ψ 。定義t時刻到狀態為i的所有結點最大概率值(最短路徑): δt
(i)=
maxp
(it=
i,it
−1,.
..,i
1,ot
,...
,o1|
λ),i
=1,2
,...
,n其中,it
表示最短路徑,ot
表示觀測符號,
λ 表示模型引數。依據上式可以得出變數
δ 的遞推式: δt
+1(i
)=ma
x[δt
(j)a
ji]b
i(ot
+1)
i=1,
2,..
.,n;
t=1,
2,..
.,t−
1 。
表示t時刻處於狀態j,t+1時刻轉移到狀態i且觀測到符號ot
+1的最大概率。 定義ψ
t(i)
為時刻t到狀態為i的概率最大路徑的前乙個時刻經過的結點,即它儲存了最短路徑所經過的結點: ψt
(i)=
argm
ax1≤
j≤n[
δt−1
(j)a
ji]
使用維特比演算法的乙個例子(統計學習方法):
例:給出隱馬爾科夫模型引數λ=
(a,b
,π) ,
轉移矩陣a=
⎡⎣⎢0.5
0.30.2
0.20.5
0.30.3
0.20.5⎤⎦
⎥ 觀測概率矩陣 b=
⎡⎣⎢0.5
0.40.7
0.50.6
0.3⎤⎦⎥
初始狀態矩陣 π=
⎡⎣⎢0.2
0.40.4⎤⎦
⎥ 已知觀測序列o=(紅,白,紅),試求最優狀態序列。
求解過程如下:
(1)、計算t=1時刻的概率δ1
(i) , δ1
(i)=
πibi
(o1)
=πib
i(紅)
即求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)=
max1
≤j≤3
[δ1(
j)aj
1]bi
(o2)
=max
=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)。
維特比演算法
維特比演算法主要用來解決籬笆網路,老實講我第一次聽到這個名字是發懵的,網路我是知道的,說白了就是圖 迪傑特斯拉演算法 但是,籬笆網路是值下面這種一列一列的圖,只會前面連線到後面,而且不會跳層連線,可以說是一種非常特殊且友好的圖了 正常的圖能逼死強迫症 x max xx x x x xma x x 這...
維特比演算法 python 維特比演算法實現分詞
維特比演算法原理可以參考以下文章,講解的非常詳細,那麼接下來將講解維特比演算法如何應用到分詞演算法中,並如何用python 實現。如何通俗地講解 viterbi 演算法?www.zhihu.com 一 過程分析 句子 經常有意見分歧 詞典 經常 經 有 有意見 意見 分歧 見 意 見分歧 分 概率 ...
維特比解碼演算法
實現 4,1,6 卷積碼的維特比解碼源程式,採用了最大似然演算法 介紹了軟判決維特比解碼演算法過程的三個步驟 初始化,度量更新和回溯解碼 include define data length 4000000 define traceback length 48 解碼回溯深度,一般為m的5 10倍,m...