隐马尔科夫模型——维特比算法

前言

隐马尔科夫有三个基本问题:概率问题、学习问题、预测问题。本文主要讨论预测问题的解法——维特比算法。阅读本文的前提是已经明白什么是隐马尔科夫模型(三要素、基本假设)。本文的所有符号及解释,请查看上一篇博客:隐马尔科夫模型——基本概念

什么是预测问题##

预测问题又称之为解码问题,是指:已知状态转移矩阵、观测矩阵和观测序列,求该序列下最有可能的状态序列。

已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) ,求使条件概率 P ( I O ) P(I|O) 最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T)

维特比算法

维特比算法实际是用动态规划解决预测问题——求概率最大的路径(最优路径)最优路径具有这样的特性:如果最优路径在t时刻经过状态节点i,那么该节点到状态序列终点所经过的路径也一定是最优路径。假如不是,那么从该节点到终点就会有另外一条更有路径存在,再连接上起点到该状态节点i,会产生一条新的最优路径,原路径就不是最优的了。这是矛盾的。个人觉得类似迪杰斯特拉求最短路算法。

首先,提到两个变量: δ \delta ψ \psi

δ t ( i ) \delta_t(i) 代表在时刻t状态为i的所有路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) 中概率最大值。 δ 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) 即时刻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位于状态j,时刻t+1位于转移到状态i且观测到 o t + 1 o_{t+1} 的最大概率。此时我们并没有找到那个时刻t的最可能状态j(使时刻1到t的观测序列确定,时刻1到t-1的不可观测状态确定条件下,使当前概率最大的状态),但我们找到了该最可能状态求得的最大概率是多少。我们递推计算直到时刻T状态为j的各条路径的最大概率,就得到了最优路径的概率P。从而最优路径的终点状态 i T i_T^* 也同时得到。随后,为了求出最优路径上的各个节点,从最终节点开始,由后往前(利用下面的变量 ψ \psi )逐步求得使下一个时刻概率最大的当前时刻状态,就可以得打最优路径各个节点,这就是维特比算法。

ψ \psi 代表时刻t状态为i所有单个路径 ( i 1 , i 2 , . . . , i t 1 , i ) (i_1,i_2,...,i_{t-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-1状态j转移到时刻t状态i概率最大时,时刻t-1的状态j是哪一个状态。

算法过程

通俗来说,每次计算当前观测下,最可能的状态序列。例如,整个模型序列有M个状态{1,2,…,M},N种观测结果,时刻1下,得到每种状态获得唯一确定观测结果的概率,计算得到M个概率值。到时刻2,对于M个状态的每一个状态,都计算所有时刻1状态转移到该状态且生成当前观测结果的概率,得到M个概率值,取其中最大的那个如M11,代表生成指定观测下状态序列是“11”的概率最大,并记录标号1,用来后续回溯找路径备用。这样时刻2最终也获得M个概率值,以此递归计算。最后一个时刻,取生成概率最大的状态序列即可。

  1. 初始化: δ 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 ) = 0 i = 1 , 2 , . . . , N \psi_1(i)=0,i=1,2,...,N
  2. 递推:对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 ) = 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
  3. 终止 P = m a x δ T ( i ) P^*=max\delta_T(i) i T = a r g m a x [ δ T ( i ) ] i_T^*=argmax[\delta_T(i)]
  4. 最优路径回溯:对t=T-1,…,1 i t = ψ t + 1 ( i t + 1 ) i_t^*=\psi_{t+1}(i_{t+1}^*) 求得最优路径 I = ( i 1 , i 2 , . . . , i T ) I^*=(i_1^*,i_2^*,...,i_T^*)

举例计算##

应用问题已经在上一篇隐马尔科夫模型——基本概念中举过,不再重复描述。本例稍微在原来基础上改变实验次数为三次,转移矩阵概率和观测概率重新设置,具体如下:这里写图片描述
这里写图片描述

发布了164 篇原创文章 · 获赞 69 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/wqy20140101/article/details/78866911
今日推荐