前向算法在HMM模型的训练、解码和评估过程中都涉及到。掌握前向算法对彻底理解HMM非常必要。前向算法掌握之后,后向算法也就不再话下。
首先给出前向算法的公式,然后一步一步解析它的计算过程。
(1)
表示由代表的HMM模型,所有可能的状态下,在t时刻状态为j,且时间片1,2,…,t,产生的观察向量分别为的概率。现在就是要设计一个算法来计算该数值,并且时间和空间复杂度合理。利用动态规划法,通过一张表记录当前的计算结果,供下一时刻使用,避免了暴力求解的时间消耗。
(2)
公式(2)比较清晰的表示出了,当前t时刻的值依赖前一时刻的计算结果。其中比较特殊的一点是求t=1时刻,因为它的前一时刻未定义。因此公式(2)其实应该有个前提条件,就是t大于1,而当t=1时,需要另外给出计算结果。
j=1,2,...,N (3)
状态转移矩阵a,发射概率函数向量,是训练过程确立的,是HMM模型的主要参数。
由公式(3)得到时刻1时,也即矩阵第一列的数值,表示不同状态下产生观察向量的概率大小。
从t=2到t=T时刻,状态j=1到j=N可以通过迭代的方式,在矩阵里计算得到,避免了大量的重复计算。
当t=T时,,最后一步,计算整个前向算法的值时,通过可得,如上图的最后一列的箭头所示。
下面的截图是《Speech and Language Processing》351页关于前向算法的伪代码。