本来这章是要讲解条件随机场的,后来发现自己对于条件随机场中的维特比算法了解就不够,因此我们把条件随机场拆开来看。这里先看维特比算法。
维特比算法主要是求解一个最优序列的算法。但是它也是有条件的,那就是要知道所有应该知道的参数。
维特比算法实际是用动态规划解隐马尔科夫模型预测问题。其实就是求概率最大路径,这是一条路径对应着一个状态序列。
但是维特比算法直接讲是比较复杂的,我们可以以“前向算法”作为开胃菜。前向算法和维特比算法不同,但是又有联系,准确来说:
前向算法是求某一观察序列现象的概率大小。
维特比算法则是给出某一观察序列,并求发生这种观察序列的最可能状态并且回溯出这一序列路径发生的过程。
我们假设已经对于隐马尔科夫模型有一定的了解了,这里给出前向概率的定义:
给定隐马尔科夫模型 λ ,定义到时刻t部分观测序列为 o1,o2,...ot 且状态为 qi 的概率为前向概率,记作
αt(i)=P(o1,o2,...ot,it=qi|λ)
观测序列概率的前向算法
输入:隐马尔科夫模型 λ ,及观测序列概率 P(O|λ)
输出:观测序列概率 P(O|λ)
(1)初值
(2)递推 对t=1,2,…,T-1
(3)终止
P(O|α)=∑Ni=1αT(i)
注释:这里就是把所有出现这种可能的情况都加起来
这里有很多注释看的似懂非懂,不过不用担心,我们会在例题中详细讲解。总而言之,就是说对所有出现目标观测值的可能情况都计算一遍即可。
以李航的统计学习方法177页的例题为例,我们讲解一下前向算法。
题目略,但是需要对题目进行一些解读:
首先矩阵A是状态转移矩阵,他为什么是3*3的矩阵呢,那是由于状态集合Q为3个元素,也就是说有3种状态,对应盒子和球的模型就是有3个盒子。那么这个A矩阵该怎么解读呢?以第一行为例,则是表示第一个盒子从t时刻到t-1时刻转移到第一个盒子、第二个盒子、第三个盒子的概率是0.5,0.2,0.3,其他的类推即可。
其次矩阵B是发射矩阵,或者是混淆矩阵。它为什么是3*2的矩阵呢,是因为它是3个状态,2个观察结果(红,白)的展示。也就是说,第一行表示的是第一个盒子里摸出红色球的概率是0.5,白色球的概率是0.5。
剩下的就是 π 了,它表示的是初始选择概率分布,比如,刚开始的时候,选第一个盒子,第二个盒子、第三个盒子的概率为0.2,0.4,0.4。
那么对于最终的问题就是,在这种状态转移和混淆矩阵的情况下,出现观察序列{红,白,红}的概率是多少。
第一步,计算初值(只列出1个来解释):
第二步,递推计算。
第三步,终止。
把最后一步所有情况求和后,就是出现目标观察序列的概率值了。
这样一个过程下来,其结果的意义应该很清楚,那就是把所有出现这种观察序列的各种情况的概率求和。
那么维特比算法是什么呢?它是在给出观察序列情况下,求出概率最大的状态序列。也就是说它和前向算法还不一样,但是思想上是大致相同的,只不过它要的是整个过程中的一个可能路径,而并非最终的结果。它在计算出每一时刻时的最优值时,还要记住之前的路径中出现的情况,这样才能够回溯出整个状态序列。
它需要记住2个目标值 δ 和 ψ ,其中前者表示的最大概率,后者则是表示路径。
维特比算法:
输入:模型 λ=(A,B,π) 和观测 O(o1,o2,...,oT)
输出:最优路径 I∗=(i∗1,i∗2,...,i∗T)
(1)初始化
(2)递推,对t=2,3,…,T
(3)终止
(4)最优路径回溯,对t=T-1,T-2,…,1
还是以上面那个盒子和球模型,维特比算法就是要求出现这种观察球类后的盒子的顺序。
(1)初始化如前向算法一样。
(2)t=2时,注意到:
(3)这里不用多说
(4)然后逆向寻找即可。
好了,到这里为止,我们就给出维特比算法的手算的方法了,至于它的代码实现,可以参考《维特比算法之红白球示例》。这里只解决了隐马尔科夫模型的3个基本问题之一。剩下的两个我们会单独来讲解。