我已根据本教程http://cs229.stanford.edu/section/cs229-hmm.pdf实现了离散HMM
本教程和其他教程经常谈到在给定观察序列的情况下训练HMM。
当我有多个训练序列时会怎样?我是否应该按顺序运行它们,依次训练模型?
另一种选择是将序列连接成一个序列并对其进行训练,但是然后我将进行从一个序列的结尾到下一个序列的开头的状态转换,这是不真实的。
hmmlearn
HMM 的实现已经支持使用多个序列训练HMM。刚刚看到训练HMM具有多个序列
我已根据本教程http://cs229.stanford.edu/section/cs229-hmm.pdf实现了离散HMM
本教程和其他教程经常谈到在给定观察序列的情况下训练HMM。
当我有多个训练序列时会怎样?我是否应该按顺序运行它们,依次训练模型?
另一种选择是将序列连接成一个序列并对其进行训练,但是然后我将进行从一个序列的结尾到下一个序列的开头的状态转换,这是不真实的。
hmmlearn
HMM 的实现已经支持使用多个序列训练HMM。刚刚看到训练HMM具有多个序列
Answers:
串联或以不同的顺序运行每次训练迭代都不是正确的事情。正确的方法需要一些解释:
通常使用EM算法训练HMM。这由几个迭代组成。每次迭代都有一个“估计”和一个“最大化”步骤。在“最大化”步骤中,将每个观察向量x与模型中的状态s对齐,以使某些似然性度量最大化。在“估计”步骤中,对于每个状态s,您估计(a)与s对齐的x向量的统计模型的参数,以及(b)状态转换概率。在接下来的迭代中,最大化步骤将使用更新的统计模型等再次运行。此过程将重复设置一定的次数,或者在似然性度量不再显着上升时(即,模型收敛到稳定的解决方案)。最后,(至少在语音识别中)HMM通常具有指定的“开始”
因此,如果您有多个训练序列,则应在估计步骤上运行每个序列,以使其初始观察向量与初始状态对齐。这样,将从所有观察序列中的第一个观察中收集有关该初始状态的统计信息,并且一般而言,观察向量与每个序列中最可能的状态对齐。只有在所有序列都已提供训练之后,您才可以执行最大化步骤(以及将来的迭代)。在下一次迭代中,您将执行完全相同的操作。
通过将每个观察序列的开始与初始状态对齐,可以避免将序列连接在一起的问题,因为这样会错误地模拟一个序列的末尾与下一个序列的末尾之间的过渡。而且,通过在每次迭代中使用所有序列,您可以避免为每次迭代提供不同的序列,正如响应者指出的那样,这将无法保证收敛。
劳伦斯·拉宾纳(Lawrence Rabiner)在本教程中根据IEEE 77描述了一种数学上有根据的方法。该教程还是Rabiner和Juang 所著《语音识别基础》一书的第六章。
RIA Davis等。等 在本文中提供了一些其他建议。
我还没有对数学进行彻底的研究,但是对我来说,拉宾纳的方法听起来最有前途,而戴维斯的方法似乎缺乏数学基础。
如果您遵循数学,则添加额外的训练示例将意味着重新计算您计算可能性的方式。除了总结尺寸之外,您还总结训练示例。
如果您先训练一个模型又一个模型,则不能保证每个训练示例都会覆盖EM,并且最终将得到错误的估计。
这是一篇针对卡尔曼过滤器(具有高斯概率的HMM)所做的文章,它可以使您了解如何修改代码,从而可以支持更多示例。
http://ntp-0.cs.ucl.ac.uk/staff/S.Prince/4C75/WellingKalmanFilter.pdf
他也有关于HMM的讲座,但是逻辑很简单。
这更多是对Bittenus引用的RIA Davis论文的评论(上)。我将不得不同意Bittenus,在本文中提出的技术背后没有太多的数学支持-它更多是经验比较。
本文仅考虑HMM具有受限拓扑(前馈)的情况。(在我的情况下,我有一个标准的拓扑,通过对使用Baum-Welch训练的所有模型进行非加权平均,可以找到最一致的结果。本文中提到了此方法,但仅在边际结果中引用了该方法)。
RIA Davis在期刊文章中详细介绍了另一种模型平均训练类型,它使用Vitterbi训练而不是Baum-Welch 使用训练,测试和条件数准则比较和评估HMM集合训练算法。但是,本文仅探讨具有相同受限前馈拓扑的HMM。(我计划探索这种方法,并将用我的发现更新这篇文章。)