Algorithm 用HMM前向算法处理下溢

Algorithm 用HMM前向算法处理下溢,algorithm,probability,forward,hidden-markov-models,underflow,Algorithm,Probability,Forward,Hidden Markov Models,Underflow,我正在尝试实现隐马尔可夫模型(HMM)的正向算法,在填充alpha表时,我面临下溢问题。我使用第6节中描述的方法对α值进行了归一化,但现在最终α值的结果总和(观测序列的概率)始终等于1。如何“撤销”标准化以获得实际概率?我的实现与第7.2节非常相似 同样的问题,最近也有人问过,但我不明白最后几个步骤,我希望能得到更详细的解释。谢谢 更新:我想我终于理解了最近的答案,但如果能确认我的理解是正确的,我将不胜感激。下面是我所做的(c[k]是系数): double sum=0.0; 对于(i=0;i

我正在尝试实现隐马尔可夫模型(HMM)的正向算法,在填充alpha表时,我面临下溢问题。我使用第6节中描述的方法对α值进行了归一化,但现在最终α值的结果总和(观测序列的概率)始终等于1。如何“撤销”标准化以获得实际概率?我的实现与第7.2节非常相似

同样的问题,最近也有人问过,但我不明白最后几个步骤,我希望能得到更详细的解释。谢谢

更新:我想我终于理解了最近的答案,但如果能确认我的理解是正确的,我将不胜感激。下面是我所做的(c[k]是系数):

double sum=0.0;
对于(i=0;i<4;i++){//仅4个隐藏状态
sum+=alpha[l-1][i];//对alpha表的最后一列求和(标准化)
}
双sumLogC=0.0;
对于(k=0;k
根据这一点:,概率仅为-1*sumLogC。i、 e.取每个系数c(i)的对数之和(以10为基数),最后乘以-1。我希望这有帮助。
    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;