维特比算法
维特比算法实际是用动态规划解决 HMM 预测问题的,即用动态规划求概率最大的路径(最优路径),每一条路径对应一个状态序列。
动态规划的核心是将问题分解为子问题,每一步求子问题的最优解(局部最优解)以达到整体最优的目的。
据此,我们只需从时刻 t=1 开始,递推地计算在时刻 t 状态为 i 的各条部分路径的最大概率,直至得到时刻 t=T 状态为 i 的各条路径的最大概率。之后从后向前逐步求得结点
iT−1∗,iT−2∗,...,i1∗,得到最优路径。
引入两个变量 δ 和 ψ:
定义在时刻 t 状态为 i 的所有单个路径
(i1,i2,...,it) 中概率最大值为:
δt(i)=i1,i2,...,it−1maxP(it=i,it+1,...,i1,ot,...,o1∣λ),i=1,2,...,N
由定义可得变量
δ 的递推公式:
δt+1(i)==i1,i2,...,it−1maxP(it+1=i,it,...,i1,ot+1,...,o1∣λ)1≤j≤Nmax[δt(j)aji]bi(ot+1),i=1,2,...,N;t=1,2,...,T−1
定义在时刻 t 状态为 i 的所有单个路径
(i1,i2,...,it−1) 中概率最大的路径的第 t-1 个结点为:
ψt(i)=1≤j≤Narg max[δt−1(j)aji],i=1,2,...,N
-
算法过程
输入:模型
λ=(A,B,Π) 和观测
O=(o1,o2,...,oT)
输出: 最优路径
I∗=(i1∗,i2∗,...,iT∗)
1)初始化
δ1(i)=πibi(o1),i=1,2,...,N
ψ1(i)=0,i=1,2,...,N
2)递推,对 t=2,3,…,T
δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot),i=1,2,...,N
(计算由 t-1 时刻的状态 1,2,…,N,在 t 时刻转移到状态 i 的各最大概率的路径,即固定时刻 t 的状态 qi,计算由时刻 t-1 不同状态转移到状态 qi 且观测为 ot 的概率,并选出最大值)
ψt(i)=1≤j≤Narg max[δt−1(j)aji],i=1,2,...,N
(选出 t-1 时刻最有可能的状态)
3)终止
P∗=1≤j≤NmaxδT(i)
iT∗=1≤j≤Narg max[δT(i)]
4)回溯最优路径,对 t=T-1,T-2,…,1
it∗=ψt+1(it+1∗)
5)求得最优路径
I∗=(i1∗,i2∗,...,iT∗)
-
举例
模型
λ=(A,B,Π),已知观测序列
O=(红,白,红)
A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤,B=⎣⎢⎢⎡(红)0.50.40.7(白)0.50.60.3⎦⎥⎥⎤,Π=(0.2,0.4,0.4)
1)初始化
在 t=1 时刻,
δ1(i)=πibi(o1)=πibi(红),i=1,2,3
δ1(1)=0.5∗0.2=0.1,δ1(2)=0.4∗0.4=0.16,δ1(3)=0.28
ψ1(i)=0,i=1,2,3
2)递推
对 t=2 时:
由状态 1,2,3 转移到状态 1 的最大概率:
δ2(1)====1≤j≤3max[0.1∗0.5,0.16∗0.3,0.28∗0.2]∗0.51≤j≤3max[0.05,0.048,0.056]∗0.50.056∗0.50.028
ψ2(1)=3
由状态 1,2,3 转移到状态 2 的最大概率:
δ2(2)=0.0504,ψ2(2)=3
由状态 1,2,3 转移到状态 3 的最大概率:
δ2(3)=0.042,ψ2(3)=3
对 t=3 时:
由状态 1,2,3 转移到状态 1 的最大概率:
δ3(1)=0.00756,ψ3(1)=2
由状态 1,2,3 转移到状态 2 的最大概率:
δ3(2)=0.01008,ψ3(2)=2
由状态 1,2,3 转移到状态 3 的最大概率:
δ3(3)=0.0147,ψ3(3)=3
3)终止
以 P* 表示最优路径的概率:
P∗===1≤j≤Nmaxδ3(i)max[0.00756,0.01008,0.0147]0.0147
最优路径的终点是:
i3∗=iarg max[δ3(i)]=3
4)回溯最优路径
由最优路径终点
i3∗,逆向找到
i2∗,i1∗:
在 t=2 时:
i2∗=ψ3(i3∗)=ψ3(3)=3
在 t=1 时:
i1∗=ψ2(i2∗)=ψ2(3)=3
5)得到最优路径
I∗=(i1∗,i2∗,i3∗)=(3,3,3)