HMM—解码问题(维特比(Viterbi)、A*、beam search )

已知模型\lambda = \left ( \pi ,A,B \right )和观测序列O = \left \{o_{1},o_{2} ,...,o_{T} \right \}求状态序列,使得P(I|O,\lambda )最大

1.维特比(Viterbi)算法:

        方法:记录每个时刻的每个可能状态的之前最优路径的概率,同时记录最优路径的前一个状态,不断向后迭代,找到最后一个时间点的最大概率值对应的状态,回溯找到最优路径(也叫 Token pass算法)。

        定义对于 t 时刻,隐藏状态为 i,所有可能路径的最大值为: \delta _{t}\left ( i \right )

        由于状态只与前一状态有关,则可得递推公式:

        \delta _{t+1}\left ( i \right )=\frac{MAX}{i<j<N}\left [\delta _{t}\left ( j \right )a_{ji}\right ]b_{i}\left ( o_{t+1} \right )

        定义在概率最大的路径中, t - 1 时刻的状态:

\varphi _{t}\left ( i \right )=j\in \frac{MAX}{i<j<N}\left [\delta _{t-1}\left ( j \right )a_{ji}\right ]

        采用动态规划算法即可得到最优路径。

        注意:Viterbi算法前向时只是计算概率,后向回溯时才得到最优路径。

        举例如下:

2.A*算法

        方法:每一步只走最好走的路(目光短浅)

        优点:计算快,而且这种贪心或者说启发式的算法,通常情况下,效果还是不错的。

        缺点:很难找到最优解,陷入局部最优

3.beam search (波束搜索)

        方法:每一步只走最好走的前N条路。这里的N也叫Beam Width。是A*算法的改进,当N=1时,退化为A*算法,当N=N时,退化为穷举法。

        优点:N设置良好的话效果不错。

        缺点:Beam Width越大,找到最优解的概率越大,相应的计算复杂度也越大。

        

        

        

        

猜你喜欢

转载自blog.csdn.net/weixin_43284996/article/details/127339869