我正在尝试实现隐马尔可夫模型(HMM)的前向算法,并且在填充alpha表时我遇到了下溢问题。我使用第6节here中描述的方法对alpha值进行了标准化,但现在最终alpha值的总和(观察序列的概率)始终等于1.如何“撤消”规范化以获取实际概率?我的实现与第7.2节here非常相似。
最近有answer同样的问题,但我无法理解最后几个步骤,并希望得到更详细的解释。谢谢!
更新:我想我终于理解了最近的答案,但我很高兴确认我的理解是正确的。这是我做的(c [k]是系数):
double sum = 0.0;
for (i = 0; i < 4; i ++) { // only 4 hidden states
sum += alpha[l-1][i]; // sum last column of alpha table (normalized)
}
double sumLogC = 0.0;
for (k = 0; k < l; k++) {
sumLogC += Math.log(c[k]);
}
probability = Math.log(sum) - sumLogC;
return probability;