HMM前向算法的下溢

时间:2012-11-15 04:35:05

标签: algorithm probability underflow

我正在实施HMM的前向算法,以计算给定HMM发出给定观察序列的概率。我希望我的算法能够强大到下溢。我无法在对数空间中工作,因为前向算法需要乘法和加法概率。避免下溢的最佳方法是什么?

我已经阅读了一些有关此问题的消息来源,但我得到的最好建议是在每个时间步Section 6 Here缩放概率。在算法结束时,您将不会得到您想要的确切概率(观察序列)。另外,除非我弄错了,如果你按照上面参考文献的建议在每个时间步骤缩放概率,你就不能对来自两个不同HMM的给定观察序列的概率进行有意义的比较(找出哪个一个人更有可能输出序列)。有什么建议吗?

1 个答案:

答案 0 :(得分:8)

在参考结束时的等式32中,将每个概率值alpha_t(i)乘以C_t。所以最后你将最终概率乘以所有C_t的乘积。您可以通过跟踪日志总和(C_t)来跟踪所有这些。然后在最后你可以计算出log(alpha_t(i)) - SUM_(j <= t)log(C_j),它将给出最终alpha_t(i)或log(SUM_t alpha_t(i)的对数概率)) - SUM_(j <= t)log(C_j),它将为您提供整个序列的对数概率。