前言
隐马尔科夫有三个基本问题:概率问题、学习问题、预测问题。本文主要讨论预测问题的解法——维特比算法。阅读本文的前提是已经明白什么是隐马尔科夫模型(三要素、基本假设)。本文的所有符号及解释,请查看上一篇博客:隐马尔科夫模型——基本概念
什么是预测问题##
预测问题又称之为解码问题,是指:已知状态转移矩阵、观测矩阵和观测序列,求该序列下最有可能的状态序列。
已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),求使条件概率 P ( I ∣ O ) P(I|O) P(I∣O)最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT)。
维特比算法
维特比算法实际是用动态规划解决预测问题——求概率最大的路径(最优路径)最优路径具有这样的特性:如果最优路径在t时刻经过状态节点i,那么该节点到状态序列终点所经过的路径也一定是最优路径。假如不是,那么从该节点到终点就会有另外一条更有路径存在,再连接上起点到该状态节点i,会产生一条新的最优路径,原路径就不是最优的了。这是矛盾的。个人觉得类似迪杰斯特拉求最短路算法。
首先,提到两个变量: δ \delta δ和 ψ \psi ψ
δ t ( i ) \delta_t(i) δt(i)代表在时刻t状态为i的所有路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it)中概率最大值。 δ t ( i ) = m a x P ( i t = i , i t − 1 , . . . , i 1 , o t , . . . , o 1 ∣ λ ) \delta_t(i)=maxP(i_t=i,i_{t-1},...,i_1,o_t,...,o_1|\lambda) δt(i)=maxP(it=i,it−1,...,i1,ot,...,o1∣λ)即时刻1到时刻t的观测状态已确定,时刻1到时刻t-1不可观测状态序列也已确定,时刻t的状态选定后,最大概率是多少。变量 δ \delta δ的递推公式为: δ t + 1 ( i ) = m a x [ δ t ( j ) a j i ] b i ( o t + 1 ) \delta_{t+1}(i)=max[\delta_t(j)a_{ji}]b_i(o_{t+1}) δt+1(i)=max[δt(j)aji]bi(ot+1)代表时刻t位于状态j,时刻t+1位于转移到状态i且观测到 o t + 1 o_{t+1} ot+1的最大概率。此时我们并没有找到那个时刻t的最可能状态j(使时刻1到t的观测序列确定,时刻1到t-1的不可观测状态确定条件下,使当前概率最大的状态),但我们找到了该最可能状态求得的最大概率是多少。我们递推计算直到时刻T状态为j的各条路径的最大概率,就得到了最优路径的概率P。从而最优路径的终点状态 i T ∗ i_T^* iT∗也同时得到。随后,为了求出最优路径上的各个节点,从最终节点开始,由后往前(利用下面的变量 ψ \psi ψ)逐步求得使下一个时刻概率最大的当前时刻状态,就可以得打最优路径各个节点,这就是维特比算法。
ψ \psi ψ代表时刻t状态为i所有单个路径 ( i 1 , i 2 , . . . , i t − 1 , i ) (i_1,i_2,...,i_{t-1},i) (i1,i2,...,it−1,i)中概率最大的路径的第t-1个节点为: ψ t ( i ) = a r g m a x [ ψ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \psi_t(i)=arg max[\psi_{t-1}(j)a_{ji}],i=1,2,...,N ψt(i)=argmax[ψt−1(j)aji],i=1,2,...,N代表从时刻t-1状态j转移到时刻t状态i概率最大时,时刻t-1的状态j是哪一个状态。
算法过程
通俗来说,每次计算当前观测下,最可能的状态序列。例如,整个模型序列有M个状态{1,2,…,M},N种观测结果,时刻1下,得到每种状态获得唯一确定观测结果的概率,计算得到M个概率值。到时刻2,对于M个状态的每一个状态,都计算所有时刻1状态转移到该状态且生成当前观测结果的概率,得到M个概率值,取其中最大的那个如M11,代表生成指定观测下状态序列是“11”的概率最大,并记录标号1,用来后续回溯找路径备用。这样时刻2最终也获得M个概率值,以此递归计算。最后一个时刻,取生成概率最大的状态序列即可。
- 初始化: δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , . . . , N \delta_1(i)=\pi_ib_i(o_1),i=1,2,...,N δ1(i)=πibi(o1),i=1,2,...,N ψ 1 ( i ) = 0 , i = 1 , 2 , . . . , N \psi_1(i)=0,i=1,2,...,N ψ1(i)=0,i=1,2,...,N
- 递推:对t=2,3,…,T δ t ( i ) = m a x [ δ t − 1 ( j ) a j i ] b i ( o t ) , i = 1 , 2 , . . , N \delta_t(i)=max[\delta_{t-1}(j)a_{ji}]b_i(o_{t}),i=1,2,..,N δt(i)=max[δt−1(j)aji]bi(ot),i=1,2,..,N ψ t ( i ) = a r g m a x [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \psi_t(i)=argmax[\delta_{t-1}(j)a_{ji}],i=1,2,...,N ψt(i)=argmax[δt−1(j)aji],i=1,2,...,N
- 终止 P ∗ = m a x δ T ( i ) P^*=max\delta_T(i) P∗=maxδT(i) i T ∗ = a r g m a x [ δ T ( i ) ] i_T^*=argmax[\delta_T(i)] iT∗=argmax[δT(i)]
- 最优路径回溯:对t=T-1,…,1 i t ∗ = ψ t + 1 ( i t + 1 ∗ ) i_t^*=\psi_{t+1}(i_{t+1}^*) it∗=ψt+1(it+1∗)求得最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)
举例计算##
应用问题已经在上一篇隐马尔科夫模型——基本概念中举过,不再重复描述。本例稍微在原来基础上改变实验次数为三次,转移矩阵概率和观测概率重新设置,具体如下: