5 HMM的实现问题
前面两节的讨论主要是关于HMM的理论以及模型的变体。这一节我们会讨论HMM的实现问题,包括放大、多观测序列、初始参数估计、数据丢失、模型大小以及类型的选择。对其中一些实现问题,我们可得到精确解析解;而对于其他问题,我们只能给出一些经验建议。
5.1 放大
为了理解在HMM参数估计过程中为什么需要放大,考虑(18)中定义的
αt(i)
。可以看到
αt(i)
包含很多项的和,每一项的形式为
其中
qt=Si
。由于每个
a
和
基本的放大步骤是把
αt(i)
乘以一个放大系数并且这个放大系数是独立于
i
的(即只依赖于t),使得放大后的
为了更好地理解放大过程,考虑状态转移系数
aij
的估计公式。如果我们把估计公式(41)直接写成前向变量和后项变量的形式。可以得到
(原文中的符号表示有些混乱,下面做了些修改。)
首先令 α¯1(i)=α1(i) 。
对每个
t
,我们首先根据递推公式(20)计算
于是,对固定的
t
,我们首先计算
然后计算放大
α^t(i)
:
通过递推,可以把
α^t−1(j)
写成
于是有
下一步我们用后向地推计算
βt(i)
。这里我们在每个
t
上仍然使用计算
因为每个放大因子把
α
放大到和为1,由于
α
和
β
项的值是相近的,使用同样的放大因子可以把
β
放大到有效范围。而且,参数估计公式(90)现在变成
而每个
α^t(i)
可以写成
每个
β^t+1(j)
可以写成
于是(95)可以写成
而
CtDt+1
项可以写作
和
t
无关。于是(98)分子分母中的
显然,上面的放大过程同样适用于
π
和
B
的估计。缩放过程(92)不需要在每个时刻
由放大导致的唯一变化是
P(O|λ)
的计算过程。我们不能只对
α^T(i)
进行求和,因为这些值是放大后的值。但是我们可以利用性质
于是有
于是得到
P
的log值,但是不是
最后我们注意到当使用Viterbi算法来得到似然最大的状态序列时,如果我们按下面的算法计算那么不需要放大过程。定义
初始值
递推步骤
以及终止步骤
这样我们得到 logP∗ 而非 P∗ ,而计算量大大减少了并且没有数值问题。读者应该注意到(105b)中的 logaij 项可以事先计算。并且,当观测值有限时 log[bj(Ot)] 项也可以事先计算。