所以我在机器学习方面有点像业余爱好者,我正在尝试编写 Baum Welch 算法,这是 EM 算法的隐马尔可夫模型的推导。在我的程序中,我正在使用新模型中每个观察序列的概率测试收敛性,然后在新模型小于或等于旧模型时终止。但是,当我运行该算法时,它似乎会收敛一些,并给出比随机更好的结果,但是在收敛时它会在最后一次迭代中下降。这是错误的迹象还是我做错了什么?
在我看来,我应该使用每个观察概率的对数总和来进行比较,因为这似乎是我正在最大化的函数。但是,我读到的论文说要使用观察的概率总和(我很确定与概率总和相同)的对数(https://www.cs.utah.edu/~piyush /teaching/EM_algorithm.pdf)。
我在另一个项目中解决了这个问题,在该项目中,我通过实现一个具有预设时期数的 for 循环而不是一个 while 循环,使用前馈神经网络实现了反向传播,其中新迭代的条件严格大于但我想知道是否这是一个不好的做法。
我的代码位于 nlp.py 文件中的https://github.com/icantrell/Natural-Language-Processing 。
任何意见,将不胜感激。谢谢你。