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

时间:2018-01-17 22:26:23

标签: python algorithm machine-learning nlp expectation-maximization

因此,在进行机器学习时我是一个业余爱好者,我正在尝试编程Baum Welch算法,这是隐马尔可夫模型的EM算法的推导。在我的程序中,我使用新模型中每个观察序列的概率测试收敛,然后在新模型小于或等于旧模型时终止。然而,当我运行算法时,它似乎有点收敛并且给出的结果远比随机好,但是当收敛时在最后一次迭代时下降。这是一个错误的标志还是我做错了什么?

在我看来,我应该使用每个观察概率日志的总和进行比较,因为它看起来像我正在最大化的功能。然而,我读过的论文说使用概率总和的对数(我很确定它与概率的总和相同)(https://www.cs.utah.edu/~piyush/teaching/EM_algorithm.pdf)。

我在另一个项目中修复了这个问题,我实现了一个前馈神经网络的反向传播,实现了一个带有预设数量的纪元而不是一个while循环的for循环,其中新迭代的条件严格大于但我我想知道这是不好的做法。

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

任何建议都将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:1)

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

检查这些基于概率的计算的一个好方法是创建一个小的测试问题,其中正确的答案非常明显 - 很明显,你可以看到被测代码的答案是否显然是正确的。< / p>

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