我正在尝试为隐马尔可夫模型(HMM)实现前向算法,并且在填充 alpha 表时遇到了下溢问题。我使用此处第 6 节中描述的方法对 alpha 值进行了归一化,但现在最终 alpha 值(观察序列的概率)的总和始终等于 1。如何“撤消”归一化以获得实际概率?我的实现与此处的第 7.2 节非常相似。
最近对这个问题有一个答案,但我无法理解最后几个步骤,希望得到更详细的解释。谢谢!
更新:我想我终于理解了最近的答案,但希望能确认我的理解是正确的。这是我所做的(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;