接着上一节讲过的内容,我们沿用之前用过的冰淇淋例子

似然计算的目的是计算出一个模拟序列的概率。比如说我们用上面的冰淇淋模型模拟出了3,1,3的数据,代表小明在第一天吃了3个冰淇淋,第二天吃了1个,第三天吃了3个,那么这一序列发生的概率是多少呢? 这就是Likelihood Computation需要计算出来的数字。
因为状态是未知的,所以我们无法确定是状态的序列数据,在我们的例子中,有8种状态序列都可以生产出3,1,3的冰淇淋数据: HHH, HHC, HCH, HCC, CHH, CHC, CCH, CCC, 要计算313的概率,我们就需要把每一中可能出现的状态序列都计算在内:


然后我们把每一种状态的概率加起来,就得出了313的概率:

可想而知,当状态变的越来越多,可观察的结果越来越多的时候,这种计算方式非常花费时间,是不现实的,所以我们需要开发出一种更有效(O(N^2 * T)的计算方式:Forward Algorithm。
Forward algorithm 是动态规划的一种。Forward algorithm 把每一种可能生成出当前观察到序列的隐藏状态序列的概率相加起来。


其中,




根据上图所示,每一个节点出现的概率是之前节点概率的总和,在一层层的套用过程中,我们有效的计算出了最后的总概率。简单地说,Forward algorithm就是用一种非低效的动态规划方法把生成出观察到结果的每一种隐藏状态序列的概率相加起来,来求得出当前观察到结果的出现概率。
下面是个简化的pseudocode:

网友评论