維特比算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的預測問題中均用到了維特比算法。實際上,維特比算法不僅是很多自然語言處理的解碼算法,也是現代數字通信中使用最頻繁的算法。
以一個簡單的隱馬爾科夫模型爲例,
x=(x1,x2,...,xN) 爲觀測符號,y=(y1,y2,...,yN) 爲隱狀態序列,要求的預測問題爲:
(y1,y2,...,yN)=argmaxP(y1,y2,...,yN|x1,x2,...,xN)
依據馬爾科夫假設,上式等價於:
argmax∏i=1NP(xi|yi)⋅P(yi|yi−1)
在隱馬爾科夫鏈中,任意時刻t下狀態的值是有多個的,以拼音轉漢字爲例,輸入拼音“yike”,可能有的值爲一顆、一刻、一棵等等,用符號
yij 表示狀態
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時的所有狀態結點y2i 的最短路徑加上t=2到t=3的各節點的最短路徑。
爲了記錄中間變量,引入變量δ和ψ 。定義t時刻到狀態爲i的所有結點最大概率值(最短路徑):
δt(i)=maxP(it=i,it−1,...,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,...,T−1 。
表示t時刻處於狀態j,t+1時刻轉移到狀態i且觀測到符號
ot+1 的最大概率。
定義
ψt(i) 爲時刻t到狀態爲i的概率最大路徑的前一個時刻經過的結點,即它保存了最短路徑所經過的結點:
ψt(i)=argmax1≤j≤N[δt−1(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)=max1≤j≤3[δ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)。