【问题标题】:Underflow in Forward Algorithm for HMMsHMM 前向算法中的下溢
【发布时间】:2023-03-12 08:18:01
【问题描述】:

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

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

【问题讨论】:

    标签: algorithm probability underflow


    【解决方案1】:

    在参考文献末尾的公式 32 中,您将每个概率值 alpha_t(i) 乘以 C_t。所以最后你将最终概率乘以所有 C_t 的乘积。您可以通过跟踪 log(C_t) 的总和来跟踪所有这些。然后最后你可以计算出 log(alpha_t(i)) - SUM_(j

    【讨论】:

    • 我可能在这里复活死者,但是前向归纳步骤取决于i,因此在您的动态规划矩阵中,​​您在t + i * lenght of sequnece th 步骤中有alpha[i][t],但不要'还没有alpha[i+1][t],这使得无法计算$C_t$,或者您只是使用前向算法并在最后对其进行缩放?
    • 使用 alpha[i][t](对于所有 i)和为时间 t 计算的其他信息计算出 alpha[i][t+1](对于 i 的所有值)。当担心溢出时,此处的 alpha[i][t] 值将按 C_t 缩放。在计算 alpha[i][t+1] 之后,我们可以使用这些值来计算 C_{t+1},然后使用它来计算 alpha[i][t+1] 的缩放值。 C_{t+1} 是计算的最后一个未缩放的值,在用于缩放 alpha 值之前不需要它。 (请记住,i 在内部循环中变化,而 t 在外部循环中变化)。
    猜你喜欢
    • 2018-01-07
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 2019-04-27
    • 2019-03-05
    • 2011-01-25
    相关资源
    最近更新 更多