我目前正在使用Viterbi 训练来解决图像分割问题。我想知道使用 Baum-Welch 算法而不是 Viterbi 训练的优点/缺点是什么。
Baum-Welch 算法和 Viterbi 训练有什么区别?
Baum-Welch 算法和 Viterbi 算法计算不同的东西。
如果您知道模型隐藏部分的转移概率和模型可见输出的发射概率,那么 Viterbi 算法会根据您的输出和模型规范为您提供最可能的隐藏状态完整序列。
Baum-Welch 算法为您提供最可能的隐藏转移概率以及最可能的发射概率集,仅给出模型的观察状态(通常是隐藏状态数量的上限)。您还可以获得隐藏状态中的“逐点”最高似然点,这通常与总体上最有可能的单个隐藏序列略有不同。
如果您知道您的模型并且只想要潜在状态,那么没有理由使用 Baum-Welch 算法。如果你不知道你的模型,那么你就不能使用维特比算法。
编辑添加:见 Peter Smit 的评论;命名法有一些重叠/含糊不清。一些闲逛让我看到了 Luis Javier Rodrıguez 和 Ines Torres 在“模式识别和图像分析”(ISBN 978-3-540-40217-6, pp 845-857)中的一章,其中讨论了速度与准确性的权衡两种算法。
简而言之,Baum-Welch 算法本质上是应用于 HMM 的期望最大化 (EM) 算法;作为严格的 EM 类型算法,您可以保证至少收敛到局部最大值,因此对于单峰问题,请找到 MLE。但是,每一步都需要对数据进行两次遍历,并且数据长度和训练样本数量的复杂性变得非常大。但是,您最终会得到隐藏参数的完整条件似然。
Viterbi 训练算法(与“Viterbi 算法”相反)逼近 MLE,以牺牲准确性为代价来提高速度。它对数据进行分段,然后应用 Viterbi 算法(据我了解)以获取分段中最可能的状态序列,然后使用最可能的状态序列重新估计隐藏参数。这与 Baum-Welch 算法不同,它没有给出隐藏参数的完整条件似然性,因此最终会降低准确性,同时节省大量的计算时间(本章报告了 1 到 2 个数量级)。
当您想计算“看不见的东西”时,使用向前-向后。例如,当使用 EM 通过无监督数据改进模型时。我认为彼得罗夫的论文就是一个例子。在我正在考虑的技术中,您首先使用带有相当粗略注释的注释数据训练模型(例如,“动词”的标签)。然后,您将该状态的概率质量任意拆分为两个稍微不等的数量,然后重新训练,通过在两个状态之间重新分配质量来向前向后运行以最大化可能性。