前言
隐马尔科夫有三个基本问题:概率问题、学习问题、预测问题。本文主要讨论预测问题的解法——维特比算法。阅读本文的前提是已经明白什么是隐马尔科夫模型(三要素、基本假设)。本文的所有符号及解释,请查看上一篇博客:隐马尔科夫模型——基本概念
什么是预测问题##
预测问题又称之为解码问题,是指:已知状态转移矩阵、观测矩阵和观测序列,求该序列下最有可能的状态序列。
已知模型
λ=(A,B,π)和观测序列
O=(o1,o2,...,oT),求使条件概率
P(I∣O)最大的状态序列
I=(i1,i2,...,iT)。
维特比算法
维特比算法实际是用动态规划解决预测问题——求概率最大的路径(最优路径)最优路径具有这样的特性:如果最优路径在t时刻经过状态节点i,那么该节点到状态序列终点所经过的路径也一定是最优路径。假如不是,那么从该节点到终点就会有另外一条更有路径存在,再连接上起点到该状态节点i,会产生一条新的最优路径,原路径就不是最优的了。这是矛盾的。个人觉得类似迪杰斯特拉求最短路算法。
首先,提到两个变量:
δ和
ψ
δt(i)代表在时刻t状态为i的所有路径
(i1,i2,...,it)中概率最大值。
δt(i)=maxP(it=i,it−1,...,i1,ot,...,o1∣λ)即时刻1到时刻t的观测状态已确定,时刻1到时刻t-1不可观测状态序列也已确定,时刻t的状态选定后,最大概率是多少。变量
δ的递推公式为:
δt+1(i)=max[δt(j)aji]bi(ot+1)代表时刻t位于状态j,时刻t+1位于转移到状态i且观测到
ot+1的最大概率。此时我们并没有找到那个时刻t的最可能状态j(使时刻1到t的观测序列确定,时刻1到t-1的不可观测状态确定条件下,使当前概率最大的状态),但我们找到了该最可能状态求得的最大概率是多少。我们递推计算直到时刻T状态为j的各条路径的最大概率,就得到了最优路径的概率P。从而最优路径的终点状态
iT∗也同时得到。随后,为了求出最优路径上的各个节点,从最终节点开始,由后往前(利用下面的变量
ψ)逐步求得使下一个时刻概率最大的当前时刻状态,就可以得打最优路径各个节点,这就是维特比算法。
ψ代表时刻t状态为i所有单个路径
(i1,i2,...,it−1,i)中概率最大的路径的第t-1个节点为:
ψ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)=πibi(o1),i=1,2,...,N
ψ1(i)=0,i=1,2,...,N
- 递推:对t=2,3,…,T
δt(i)=max[δt−1(j)aji]bi(ot),i=1,2,..,N
ψt(i)=argmax[δt−1(j)aji],i=1,2,...,N
- 终止
P∗=maxδT(i)
iT∗=argmax[δT(i)]
- 最优路径回溯:对t=T-1,…,1
it∗=ψt+1(it+1∗)求得最优路径
I∗=(i1∗,i2∗,...,iT∗)
举例计算##
应用问题已经在上一篇隐马尔科夫模型——基本概念中举过,不再重复描述。本例稍微在原来基础上改变实验次数为三次,转移矩阵概率和观测概率重新设置,具体如下: