Baum Welch(EM 算法)似然 (P(X)) 不是单调收敛的

Baum Welch (EM Algorithm) likelihood (P(X)) is not monotonically converging

所以我在机器学习方面有点业余,我正在尝试编写 Baum Welch 算法,它是隐马尔可夫模型的 EM 算法的派生。在我的程序中,我正在使用新模型中每个观察序列的概率来测试收敛性,然后在新模型小于或等于旧模型时终止。然而,当我 运行 算法时,它似乎有点收敛并给出比随机更好的结果,但 当收敛时它在最后一次迭代 上下降。这是错误的迹象还是我做错了什么?

在我看来,我应该使用每个观察概率 的对数的 求和来进行比较,因为它似乎是我正在最大化的函数。然而,我读过的论文说要使用 log of probabilities(我很确定它与概率之和相同)的观察结果(https://www.cs.utah.edu/~piyush/teaching/EM_algorithm.pdf).

我在另一个项目中解决了这个问题,在该项目中,我通过使用预设轮数的 for 循环而不是 while 循环来实现前馈神经网络的反向传播,条件是新迭代严格大于但我想知道这是否是一种不好的做法。

我的代码在 https://github.com/icantrell/Natural-Language-Processing 在 nlp.py 文件中。

如有任何建议,我们将不胜感激。 谢谢。

对于 EM 迭代,或任何其他被证明是非递减的迭代,您应该看到增加,直到增加的大小与浮点误差相比变小,此时浮点误差违反了证明中的假设,你可能会看到不仅没有增加,而且减少得非常小——但这应该只是非常小的。

检查这类基于概率的计算的一个好方法是创建一个小的测试问题,其中正确的答案非常明显 - 非常明显,您可以看到被测代码的答案是否明显正确.

可能值得将您引用的论文与 https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm#Proof_of_correctness 进行比较。我认为像(11)和(12)这样的方程不是为了让你实际计算,而是作为论据来激励和证明最终结果。我认为与您计算的传统 EM 步骤对应的方程是方程 (15),它表示您在每一步更改参数以增加预期的对数似然,这是计算的隐藏状态分布下的期望根据旧参数,这是标准的 EM 步骤。其实翻翻我看到P 8上面已经明确说明了这一点