0

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

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

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

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

任何意见,将不胜感激。谢谢你。

4

1 回答 1

1

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

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

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

于 2018-01-19T05:58:39.070 回答