一、引言
这篇blog主要讲序列问题和其解法——维特比算法。
二、HMM中的第二个基本问题
序列问题:给定一个观察序列 O=O1O2…OT 和模型 u=(A,B,π) ,如何快速有效地选择在一定意义下”最优”的状态序列 Q=q1q2…qT ,使得该状态序列“最好地解释”观察序列?
三、定义最优状态序列
序列问题的答案并不是唯一的,那是因为它取决于对“最优状态序列的理解”。
定义 最优状态序列 在给定模型
u
和观察序列
Q^=argmaxQP(Q|O,u)
四、维特比算法
维特比算法运用动态规划的搜索算法求解这种最优状态序列。为了实现这种搜索,首先定义一个维特比变量
δt(i)
。
定义 维特比变量
δt(i)
是在时间
t
时,HMM沿着某一条路径到达状态
δt(i)=maxq1,q2,…,qt−1P(q1,q2,…,qt=si,O1O2…Ot|u)
与前向变量类似, δt(i) 有如下递推关系:
δt+1(i)=maxj[δt(j)aji]bi(Ot+1)
为了记录在时间 t 时,HMM通过哪一条概率最大的路径到达状态
维特比算法
1. 初始化
δ1(i)=πibi(O1),1≤i≤Nψ1(i)=0
2. 归纳计算
δt(j)=max1≤i≤N[δt−1(i)aij]bj(Ot),2≤t≤T;1≤j≤N记忆回退路径:ψt(j)=argmax1≤i≤N[δt−1(i)aij]bj(Ot),2≤t≤T;1≤i≤N
3. 终结
QT^=argmax1≤i≤N[δT(i)]P^(QT^)=max1≤i≤N[δT(i)]
4. 路径(状态序列)回溯
qt^=ψt+1(q^t+1),t=T−1,T−2,…,1
维特比算法的时间复杂度也是 O(N2T) 。