在机器学习方面,我是个业余爱好者,我试图编写Baum算法,它是隐马尔可夫模型EM算法的派生。在我的程序中,我使用新模型中每个观测序列的概率来测试收敛性,然后在新模型小于或等于旧模型时终止。然而,当我运行该算法时,它似乎有点收敛,并给出了比随机结果好得多的结果,但在收敛时给出了的结果,在最后一次迭代上下降了。这是窃听器的迹象还是我做错了什么?
在我看来,我应该使用每个观测的概率的日志的求和来进行比较,因为它似乎是我正在最大化的函数。然而,我读到的这篇论文使用了概率之和的日志(我确信它与观测值(algorithm.pdf)的概率之和相同)。
我在另一个项目中修正了这个问题,我用前馈神经网络实现了反向传播,实现了一个具有预先设定的周期数的for循环,而不是一个while循环,其条件是新的迭代严格大于,但我想知道这是否是一个糟糕的实践。
我的代码位于https://github.com/icantrell/Natural-Language-Processing中的nlp.py文件中。
如有任何建议,将不胜感激。谢谢。
发布于 2018-01-18 21:58:39
对于EM迭代,或者任何其他的迭代被证明是不减少的,你应该看到增加的幅度比浮点误差小,在这个时候,浮点误差违反了证明中的假设,你可能不仅会看到增加的失败,而且会看到很小的减少--但是这应该很小。
检查这些基于概率的计算的一个好方法是创建一个小的测试问题,其中正确的答案是显而易见的--非常明显,您可以看到来自被测试代码的答案显然是正确的。
可能值得将您引用的论文与correctness进行比较。我认为像(11)和(12)这样的方程并不是为了让你实际计算,而是作为激发和证明最终结果的论据。我认为与传统EM步骤对应的方程是方程(15),它表示在每一步改变参数以增加期望的log-似然,这是根据旧参数计算的隐藏状态分布下的期望,这是标准的EM步骤。事实上,翻过来,我看到,这是明确说明在P8顶部。
https://stackoverflow.com/questions/48311021
复制相似问题