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

2024-05-17 13:42:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在我看来,我应该用每个观察值概率的对数的和来进行比较,因为它看起来像是我正在最大化的函数。然而,我读到的那篇文章说要使用观测值(https://www.cs.utah.edu/~piyush/teaching/EM_algorithm.pdf)的概率和的对数(我很确定它与概率之和相同)。在

我在另一个项目中修复了这个问题,我在另一个项目中使用前馈神经网络实现反向传播,方法是实现一个具有预先设置的时代数的for循环,而不是一个while循环,条件是新迭代严格大于,但我想知道这是否是一个坏的做法。在

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

如有任何建议,将不胜感激。 谢谢您。在


Tags: 项目https模型程序算法机器编程对数
1条回答
网友
1楼 · 发布于 2024-05-17 13:42:50

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

检查这些基于概率的计算的一个好方法是创建一个小的测试问题,在这个问题中正确的答案非常明显-如此明显以至于你可以看到来自被测试代码的答案是否明显正确。在

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

相关问题 更多 >