我正在寻找 Rabiner 提出的前向算法的一些实际应用(维基百科上的前向算法)。
我更喜欢执行时间很重要的应用程序。
如果您指的是前向-后向算法,那是在用于训练 HMM 的Baum-Welch 算法中应用的,该算法用于 NLP(词性标注、语音识别)和生物信息学等各个领域。
实际上,前向算法不同于 Baum-Welch 中使用的前向-后向 (EM) 算法。前向算法用于确定在给定观察序列的状态下的概率。对于每个观察,您获取为前一个观察计算的状态的概率,然后使用转移概率表将其扩展一个步骤。前向算法基本上是一种有效的方法,因为它缓存了所有中间状态概率,因此它们只计算一次。(这是一种记忆或动态编程的形式......)
Baum-Welch 算法用于从数据中导出转移和发射概率,而前向算法(和 Viterbi 算法)使用该数据来计算状态概率和给定观察值的最可能状态。
为了澄清几点,我不同意 Wikipedia 对 Forward 算法的描述(参见 Durbin):
前向(以及单独的后向)用于在状态路径未知时计算一系列观察/发射的概率,此外,它比简单方法(很快以组合爆炸)。它们一起可以提供观测序列中每个位置的给定发射/观测的概率。正是根据这些信息计算出最可能的状态路径的版本(“后验解码”)。Viterbi 算法计算最可能状态路径的另一个版本。
实际上,与计算给定序列相对于其他状态路径的概率的麻烦相比,向前或向后的良好实现将为您节省大量时间。
您将看到这些应用在您想要将系统可能处于的状态与您可以测量的有关系统的可观察值分开的任何上下文中。最受雇(和复杂)的可能是财务问题。简单地说,假设您的状态路径由 [Bull, Bear] 中的元素组成,并且您在过去几个月中以与您所遇到的商业/地缘政治事件相关的分辨率对 VIX 或其他东西的状态路径进行了后解码试图捕捉。当您收到新的和更多的数据(通过 Baum-Welch 或更通用的 EM 算法)时,这种计算可用于训练您的模型,Forward 会告诉您何时获得数据(您的实时序列观察)相对于你的概率变得非常低 d 期望从您的模型中获得(到那时为止的训练)。从统计学上讲,那是您买入或卖出的时间。