前向后向算法

https://blog.csdn.net/Hearthougan/article/details/77930786

 本文是自己学习隐马尔科夫模型的一个总结,为了自己以后方便查阅,也算作是李航老师的《统计学习方法》的一个总结,若有疑问,欢迎讨论。

推荐阅读知乎上Yang Eninala写的《如何用简单易懂的例子解释隐马尔可夫模型?》,写的非常好。我会联系两者,来作为自己的一篇学习笔记。

    隐马尔可夫模型: 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence),每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequenoe )。序列的每一个位置又可以看作是一个时刻。

前向后向算法_第1张图片

前向后向算法_第2张图片

前向后向算法_第3张图片

隐马尔科夫模型的3个基本问题:

     (1)概率计算问题。给定模型和观测序列,计算在模型下的观测序列出现的概率

    (2)学习问题。已知观测序列,估计模型参数,使得在该模型下观测序列概率最大。

    (3)预测问题,也称为解码(decoding)问题。已知模型参数和观测序列,求对给定观测序列前提下,条件概率最大的状态序列。即给定观测序列,求最有可能的对应的状态序列。

概率计算问题:
1、 直接计算方法
    这种方法说白了就是暴力搜索,枚举每一种状态序列,然后在根据状态序列求出观测序列的概率。
    思想很简单,可以这么想:假如我们现在已知状态序列为,那么根据状态序列S,求观测序列的概率,不就是相应的输出概率的连乘么!满足假设的状态序列总共有种,然后对所有假设的状态得出的概率相加,即为。细化如下:

    状态序列的概率是

 


    对已经假设的状态序列,观测序列,的概率是

 

    观测序列O和状态序列S同时出现的概率是:

    最后,对所有的状态序列S求和,即可得到观测序列O的概率

    对于实现上式,很简单,个for循环即可枚举所有的状态,然后计算每种状态对应的观测概率,时间复杂度是O(T),因此要直接计算的话,总的时间复杂度为,当数据量稍微大一点,具体实施就不太可能,因此要实现HMM的第一个问题,就要换一种方法。

2、前向算法:

    给定隐马尔可夫模型,定义到时刻t部分观测序列且状态为的概率为前向概率,记作

    可以递推地求得前向概率及观测序列概率

    这个可以这么理解,已知选每种骰子的概率,每种骰子的输出概率,那么前t次掷骰子,掷出的点数为,并且第t用的骰子是,的概率是就是

(1)初值:

【第一次掷的是骰子是,掷出的点数为的概率,其中表示开始的时候选用骰子的概率】

 

(2)递推:

【第t+1次用骰子,掷出的概率】

    上式方括号中,表示第t次使用骰子掷出点数的的概率,,表示前t次掷出点数为的概率×第t+1次使用骰子的概率。

    由于第t次骰子的种类有N种,因此,第t+1次使用,而前一次,也就是第t次,使用的骰子有N种可能,即如下图:

前向后向算法_第4张图片

(3)终止:

    根据(2)的递推式子可以求出,表示第T次使用可以产生序列,i仍有N中可能所以相加即为最终的结果。

    例子1(前向算法):考虑盒子和球模型,状态集合,观测集合,并且有:

,试用前向算法计算

根据上面我们描述的算法,一步一步地计算,

(1)计算初值:

(2)递推:

     当时:

    当时:

3、后向算法

    给定隐马尔可夫模型,定义在时刻t部状态为的条件下,从的部分观测序列为的概率为后向概率,记作:

可以递推地求得后向概率及观测序列概率

   可以这么理解,已知第t次掷骰子所用的骰子是,那么它表示的就是从次到第次的看到的点数为:的概率。

(1)初值

【解释:已知最后一次所用的骰子为,那么第次之后,为任意值的概率,故而为1】

(2)递推

(3)终止

前向后向算法_第5张图片

    后向算法依旧是解决概率计算问题,只不过是两种计算方式,计算结果应该是和前向算法相同,可以用例1验证一下,如下:

    例2(后向算法),考虑盒子和球模型,状态集合,观测集合,并且有:

,试用后向算法计算。
    我们仍然根据上面的算法描述,一步一步地计算,

(1)计算初值

    当

(2)递推

    当时:

    当

(3)终止

 

可以根绝前向算法和后向算法的定义,将两种计算方式结合起来,如下:

 

https://blog.csdn.net/u012771351/article/details/53113377

那么前向算法和后向算法之间联系

我们来推导一下:

前向后向算法_第6张图片

从结论我们不难看出,在t时刻如果知道了状态为qi,那么可以将这个t之前和之后阻断,最后变换成前向概率和后向概率。

那么我们就可以求单个状态的概率了:

前向后向算法_第7张图片

这样的话我么你从t=1一直计算到t=T,我们就可以得到每个时刻最有可能的那个状态,但是这样子做对么?

我认为是不对的,原因是每一个时刻最有可能最终组成的状态序列是不一定存在的,打个比方说,全市高考,我选出每个学科的最高分,那么我就说这是第一名的各科成绩,显然是不一定的,那么正确的做法是什么呢?我们将在后边的Viterbi算法中介绍。

 

进一步思考:如果要求了t时刻状态为i,t+1时刻状态为j的联合概率呢?

前向后向算法_第8张图片

最终结果是:

这里把联合概率这块拿出来只是让大家更直观的感觉这个前后向概率而已,跟我们整体的HMM模型框架无关。

你可能感兴趣的:(机器学习)