(a)前向概率的递推 (b)后向概率的递推
图3-1前向概率和后向概率的递推
前向概率公式和后向概率公式巧妙地将整个观察序列对HMM模型的输出概率分成两个部分观察序列的输出概率的乘积,而且它们各自都有相应的递推公式,可以大大简化计算。经过分析,可以得到下面的输出概率计算公式:
P(O/
实际上,这就是HMM三个基本问题中第一个问题的解答。它的另一种常用的形式是:
P(O/
实际计算中首先计算出对于每个t和每个状态i的前向概率和后向概率,然后套用上面的公式,计算出该观察序列模型的输出概率。这两个公式也称为全概率公式。
3.4识别算法
Viterbi[8]算法是一种广泛用远通信领域中的动态规划算法。该手法在语音识别中也得到了应用。利用全概率公式,可以计算出系统的输出概率,但是无法找到一条最佳的状态转移路径。而用Viterbi算法,不仅可以找到一条足够好的状态转移路径,还可以得到该路径所对应的输出概率。同时,用Viterbi算法计算概率所需要的计算量要比全概率公式的计算量小很多。应该注意,这里是说“足够好”,而不是说“最优”,因为动态规划算法得到的结果通常是满意的,但并不保证它是最优的。
Viterbi算法也有递推的形式;
(1) 初始化
(2) 迭代计算
( 3)终止计算
(3) 回溯最佳路径
这里,
实际上,对于最常使用的状态转移只能局限于自身和下一个状态的HMM模型来说,在第二步计算中每次可能的路径选择只有两个,与全概率算法相比并没有减少多少计算量。实际使用中,通常用对数形式的Viterbi算法,这样将避免进行大量的乘法计算,真正地减少了计算量,同时还可以保证有很高的动态范围,而不会由于过多的连乘而导致溢出问题。对数形式的Viterbi算法如下:
(1) 预处理
(2) 初始化
(3) 递推
(4) 终止
(5) 回溯最佳路径
在识别阶,如果HMM模型为整词模型,就没有必要保持前续节点矩阵和状态转移路径,可以进一步减少计算量。
Baum-Welch[9]算法实际上是极大似然(ML)准则的一个应用,它采用了一种多次迭代的优化算法。用Langrange数乘法构造一个目标优化函数Q,其中包含了所有的HMM参数作为变量,然后令Q对各变量的偏导数为0,推导出Q达到极点时新的HMM参数相对于旧的模型参数之间的关系,从而得到HMM各参数的估计。用新旧HMM模型参数之间的函数关系反复迭代运算,直到HMM模型参数不再发生明显的变化为止。
这里不再详细讨论具体的公式推导工程,只考虑具体实现中的一个具体问题,也就是在计算过程中经常遇到的溢出问题。还记得前向概率的定义:
将其分解就可以看到,它饱含了很多项形如
得乘积项的和,其中每个乘积项都是小于1的。由于多项连乘,导致
引致人标定系数c,用
(1) 当t=1时,计算
(2) 对于2
标定前后的前向概率之间的关系为:
后向概率
(3-38)
(3-39)
也就是:
若图片无法显示请联系QQ752018766 (3-40)
(3-41)
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>