隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(一)HMM模型

    隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO)

    隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO)

    在隐马尔科夫模型HMM(一)HMM模型中,我们讲到了HMM模型的基础知识和HMM的三个基本问题,本篇我们就关注于HMM第一个基本问题的解决方法,即已知模型和观测序列,求观测序列出现的概率。

1. 回顾HMM问题一:求观测序列的概率

    首先我们回顾下HMM模型的问题一。这个问题是这样的。我们已知HMM模型的参数$\lambda = (A, B, \Pi)$。其中$A$是隐藏状态转移概率的矩阵,$B$是观测状态生成概率的矩阵, $\Pi$是隐藏状态的初始概率分布。同时我们也已经得到了观测序列$O =\{o_1,o_2,...o_T\}$,现在我们要求观测序列$O$在模型$\lambda$下出现的条件概率$P(O|\lambda)$。

    乍一看,这个问题很简单。因为我们知道所有的隐藏状态之间的转移概率和所有从隐藏状态到观测状态生成概率,那么我们是可以暴力求解的。

    我们可以列举出所有可能出现的长度为$T$的隐藏序列$I = \{i_1,i_2,...,i_T\}$,分布求出这些隐藏序列与观测序列$O =\{o_1,o_2,...o_T\}$的联合概率分布$P(O,I|\lambda)$,这样我们就可以很容易的求出边缘分布$P(O|\lambda)$了。

    具体暴力求解的方法是这样的:首先,任意一个隐藏序列$I = \{i_1,i_2,...,i_T\}$出现的概率是:$$P(I|\lambda) = \pi_{i_1} a_{i_1i_2} a_{i_2i_3}... a_{i_{T-1}\;\;i_T}$$

    对于固定的状态序列$I = \{i_1,i_2,...,i_T\}$,我们要求的观察序列$O =\{o_1,o_2,...o_T\}$出现的概率是:$$P(O|I, \lambda) = b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T)$$

    则$O$和$I$联合出现的概率是:$$P(O,I|\lambda) = P(I|\lambda)P(O|I, \lambda) = \pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}\;\;i_T}b_{i_T}(o_T)$$

    然后求边缘概率分布,即可得到观测序列$O$在模型$\lambda$下出现的条件概率$P(O|\lambda)$:$$P(O|\lambda) = \sum\limits_{I}P(O,I|\lambda)  = \sum\limits_{i_1,i_2,...i_T}\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}\;\;i_T}b_{i_T}(o_T)$$

    虽然上述方法有效,但是如果我们的隐藏状态数$N$非常多的那就麻烦了,此时我们预测状态有$N^T$种组合,算法的时间复杂度是$O(TN^T)$阶的。因此对于一些隐藏状态数极少的模型,我们可以用暴力求解法来得到观测序列出现的概率,但是如果隐藏状态多,则上述算法太耗时,我们需要寻找其他简洁的算法。

    前向后向算法就是来帮助我们在较低的时间复杂度情况下求解这个问题的。

2. 用前向算法求HMM观测序列的概率

    前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率。我们先来看看前向算法是如何求解这个问题的。

    前向算法本质上属于动态规划的算法,也就是我们要通过找到局部状态递推的公式,这样一步步的从子问题的最优解拓展到整个问题的最优解。

    在前向算法中,通过定义“前向概率”来定义动态规划的这个局部状态。什么是前向概率呢, 其实定义很简单:定义时刻$t$时隐藏状态为$q_i$, 观测状态的序列为$o_1,o_2,...o_t$的概率为前向概率。记为:$$\alpha_t(i) = P(o_1,o_2,...o_t, i_t =q_i | \lambda)$$

    既然是动态规划,我们就要递推了,现在我们假设我们已经找到了在时刻$t$时各个隐藏状态的前向概率,现在我们需要递推出时刻$t+1$时各个隐藏状态的前向概率。

    从下图可以看出,我们可以基于时刻$t$时各个隐藏状态的前向概率,再乘以对应的状态转移概率,即$\alpha_t(j)a_{ji}$就是在时刻$t$观测到$o_1,o_2,...o_t$,并且时刻$t$隐藏状态$q_j$, 时刻$t+1$隐藏状态$q_i$的概率。如果将想下面所有的线对应的概率求和,即$\sum\limits_{j=1}^N\alpha_t(j)a_{ji}$就是在时刻$t$观测到$o_1,o_2,...o_t$,并且时刻$t+1$隐藏状态$q_i$的概率。继续一步,由于观测状态$o_{t+1}$只依赖于$t+1$时刻隐藏状态$q_i$, 这样$[\sum\limits_{j=1}^N\alpha_t(j)a_{ji}]b_i(o_{t+1})$就是在在时刻$t+1$观测到$o_1,o_2,...o_t,o_{t+1}$,并且时刻$t+1$隐藏状态$q_i$的概率。而这个概率,恰恰就是时刻$t+1$对应的隐藏状态$i$的前向概率,这样我们得到了前向概率的递推关系式如下:$$\alpha_{t+1}(i) = \Big[\sum\limits_{j=1}^N\alpha_t(j)a_{ji}\Big]b_i(o_{t+1})$$

    我们的动态规划从时刻1开始,到时刻$T$结束,由于$\alpha_T(i)$表示在时刻$T$观测序列为$o_1,o_2,...o_T$,并且时刻$T$隐藏状态$q_i$的概率,我们只要将所有隐藏状态对应的概率相加,即$\sum\limits_{i=1}^N\alpha_T(i)$就得到了在时刻$T$观测序列为$o_1,o_2,...o_T$的概率。

    下面总结下前向算法。

    输入:HMM模型$\lambda = (A, B, \Pi)$,观测序列$O=(o_1,o_2,...o_T)$

    输出:观测序列概率$P(O|\lambda)$

    1) 计算时刻1的各个隐藏状态前向概率:$$\alpha_1(i) = \pi_ib_i(o_1),\; i=1,2,...N$$

    2) 递推时刻$2,3,...T$时刻的前向概率:$$\alpha_{t+1}(i) = \Big[\sum\limits_{j=1}^N\alpha_t(j)a_{ji}\Big]b_i(o_{t+1}),\; i=1,2,...N$$

    3) 计算最终结果:$$P(O|\lambda) = \sum\limits_{i=1}^N\alpha_T(i)$$

    从递推公式可以看出,我们的算法时间复杂度是$O(TN^2)$,比暴力解法的时间复杂度$O(TN^T)$少了几个数量级。

3. HMM前向算法求解实例

    这里我们用隐马尔科夫模型HMM(一)HMM模型中盒子与球的例子来显示前向概率的计算。

    我们的观察集合是:$$V=\{红,白\},M=2$$

    我们的状态集合是:$$Q =\{盒子1,盒子2,盒子3\}, N=3 $$

    而观察序列和状态序列的长度为3.

    初始状态分布为:$$\Pi = (0.2,0.4,0.4)^T$$

    状态转移概率分布矩阵为:

$$A = \left( \begin{array} {ccc} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 &0.5 \end{array} \right) $$

    观测状态概率矩阵为:

$$B = \left( \begin{array} {ccc} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{array} \right) $$

    球的颜色的观测序列:$$O=\{红,白,红\}$$

    按照我们上一节的前向算法。首先计算时刻1三个状态的前向概率:

    时刻1是红色球,隐藏状态是盒子1的概率为:$$\alpha_1(1) = \pi_1b_1(o_1) = 0.2 \times 0.5 = 0.1$$

    隐藏状态是盒子2的概率为:$$\alpha_1(2) = \pi_2b_2(o_1) = 0.4 \times 0.4 = 0.16$$

    隐藏状态是盒子3的概率为:$$\alpha_1(3) = \pi_3b_3(o_1) = 0.4 \times 0.7 = 0.28$$

    现在我们可以开始递推了,首先递推时刻2三个状态的前向概率:

    时刻2是白色球,隐藏状态是盒子1的概率为:$$\alpha_2(1) =  \Big[\sum\limits_{i=1}^3\alpha_1(i)a_{i1}\Big]b_1(o_2) = [0.1*0.5+0.16*0.3+0.28*0.2 ] \times 0.5 = 0.077$$

    隐藏状态是盒子2的概率为:$$\alpha_2(2) =  \Big[\sum\limits_{i=1}^3\alpha_1(i)a_{i2}\Big]b_2(o_2) = [0.1*0.2+0.16*0.5+0.28*0.3 ] \times 0.6 = 0.1104$$

    隐藏状态是盒子3的概率为:$$\alpha_2(3) =  \Big[\sum\limits_{i=1}^3\alpha_1(i)a_{i3}\Big]b_3(o_2) = [0.1*0.3+0.16*0.2+0.28*0.5 ] \times 0.3 = 0.0606$$

    继续递推,现在我们递推时刻3三个状态的前向概率:

    时刻3是红色球,隐藏状态是盒子1的概率为:$$\alpha_3(1) =  \Big[\sum\limits_{i=1}^3\alpha_2(i)a_{i1}\Big]b_1(o_3) = [0.077*0.5+0.1104*0.3+0.0606*0.2 ] \times 0.5 = 0.04187$$

    隐藏状态是盒子2的概率为:$$\alpha_3(2) =  \Big[\sum\limits_{i=1}^3\alpha_2(i)a_{i2}\Big]b_2(o_3) = [0.077*0.2+0.1104*0.5+0.0606*0.3 ] \times 0.4 = 0.03551$$

    隐藏状态是盒子3的概率为:$$\alpha_3(3) =  \Big[\sum\limits_{i=1}^3\alpha_3(i)a_{i3}\Big]b_3(o_3) = [0.077*0.3+0.1104*0.2+0.0606*0.5 ] \times 0.7 = 0.05284$$

    最终我们求出观测序列:$O=\{红,白,红\}$的概率为:$$P(O|\lambda) = \sum\limits_{i=1}^3\alpha_3(i) = 0.13022 $$

4. 用后向算法求HMM观测序列的概率

    熟悉了用前向算法求HMM观测序列的概率,现在我们再来看看怎么用后向算法求HMM观测序列的概率。

    后向算法和前向算法非常类似,都是用的动态规划,唯一的区别是选择的局部状态不同,后向算法用的是“后向概率”,那么后向概率是如何定义的呢?

    定义时刻$t$时隐藏状态为$q_i$, 从时刻$t+1$到最后时刻$T$的观测状态的序列为$o_{t+1},o_{t+2},...o_T$的概率为后向概率。记为:$$\beta_t(i) = P(o_{t+1},o_{t+2},...o_T, i_t =q_i | \lambda)$$

    后向概率的动态规划递推公式和前向概率是相反的。现在我们假设我们已经找到了在时刻$t+1$时各个隐藏状态的后向概率$\beta_{t+1}(j)$,现在我们需要递推出时刻$t$时各个隐藏状态的后向概率。如下图,我们可以计算出观测状态的序列为$o_{t+2},o_{t+3},...o_T$, $t$时隐藏状态为$q_i$, 时刻$t+1$隐藏状态为$q_j$的概率为$a_{ij}\beta_{t+1}(j)$, 接着可以得到观测状态的序列为$o_{t+1},o_{t+2},...o_T$, $t$时隐藏状态为$q_i$, 时刻$t+1$隐藏状态为$q_j$的概率为$a_{ij}b_j(o_{t+1})\beta_{t+1}(j)$, 则把下面所有线对应的概率加起来,我们可以得到观测状态的序列为$o_{t+1},o_{t+2},...o_T$, $t$时隐藏状态为$q_i$的概率为$\sum\limits_{j=1}^{N}a_{ij}b_j(o_{t+1})\beta_{t+1}(j)$,这个概率即为时刻$t$的后向概率。

    这样我们得到了后向概率的递推关系式如下:$$\beta_{t}(i) = \sum\limits_{j=1}^{N}a_{ij}b_j(o_{t+1})\beta_{t+1}(j)$$

    现在我们总结下后向算法的流程,注意下和前向算法的相同点和不同点:

    输入:HMM模型$\lambda = (A, B, \Pi)$,观测序列$O=(o_1,o_2,...o_T)$

    输出:观测序列概率$P(O|\lambda)$

    1) 初始化时刻$T$的各个隐藏状态后向概率:$$\beta_T(i) = 1,\; i=1,2,...N$$

    2) 递推时刻$T-1,T-2,...1$时刻的后向概率:$$\beta_{t}(i) = \sum\limits_{j=1}^{N}a_{ij}b_j(o_{t+1})\beta_{t+1}(j),\; i=1,2,...N$$

    3) 计算最终结果:$$P(O|\lambda) = \sum\limits_{i=1}^N\pi_ib_i(o_1)\beta_1(i)$$

    此时我们的算法时间复杂度仍然是$O(TN^2)$。

5. HMM常用概率的计算

    利用前向概率和后向概率,我们可以计算出HMM中单个状态和两个状态的概率公式。

    1)给定模型$\lambda$和观测序列$O$,在时刻$t$处于状态$q_i$的概率记为:$$\gamma_t(i) = P(i_t = q_i | O,\lambda) = \frac{P(i_t = q_i ,O|\lambda)}{P(O|\lambda)} $$

    利用前向概率和后向概率的定义可知:$$P(i_t = q_i ,O|\lambda) = \alpha_t(i)\beta_t(i)$$

    于是我们得到:$$\gamma_t(i) = \frac{ \alpha_t(i)\beta_t(i)}{\sum\limits_{j=1}^N \alpha_t(j)\beta_t(j)}$$

    2)给定模型$\lambda$和观测序列$O$,在时刻$t$处于状态$q_i$,且时刻$t+1$处于状态$q_j$的概率记为:$$\xi_t(i,j) = P(i_t = q_i, i_{t+1}=q_j | O,\lambda) = \frac{ P(i_t = q_i, i_{t+1}=q_j , O|\lambda)}{P(O|\lambda)} $$

    而$P(i_t = q_i, i_{t+1}=q_j , O|\lambda)$可以由前向后向概率来表示为:$$P(i_t = q_i, i_{t+1}=q_j , O|\lambda) = \alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)$$

    从而最终我们得到$\xi_t(i,j)$的表达式如下:$$\xi_t(i,j) = \frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum\limits_{r=1}^N\sum\limits_{s=1}^N\alpha_t(r)a_{rs}b_s(o_{t+1})\beta_{t+1}(s)}$$

    3) 将$\gamma_t(i)$和$\xi_t(i,j)$在各个时刻$t$求和,可以得到:

    在观测序列$O$下状态$i$出现的期望值$\sum\limits_{t=1}^T\gamma_t(i)$

    在观测序列$O$下由状态$i$转移的期望值$\sum\limits_{t=1}^{T-1}\gamma_t(i)$

    在观测序列$O$下由状态$i$转移到状态$j$的期望值$\sum\limits_{t=1}^{T-1}\xi_t(i,j)$

    上面这些常用的概率值在求解HMM问题二,即求解HMM模型参数的时候需要用到。我们在这个系列的第三篇来讨论求解HMM参数的问题和解法。

(欢迎转载,转载请注明出处。欢迎沟通交流: [email protected])

时间: 2024-10-12 18:09:48

隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率的相关文章

隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇里会用到.在李航的<统计学习方法>中,这个算法的讲解只考虑了单个观测

隐马尔科夫模型HMM(一)HMM模型

隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率(TODO) 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用.当然,随着目前深度学习的崛起,尤其是RNN,LSTM等神经网络序列模型的火热,HMM的地位有所下

隐马尔科夫模型HMM

隐马尔科夫模型HMM 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第十七次课在线笔记.隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔科夫过程.其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步的分析.在早些年HMM模型被非常广泛的应用,而现在随着机器学习的发展HMM模型的应用场景越来越小然而在图像识别等领域HMM依然起着重要的作用. 引言: 隐马尔科夫模型是马尔科夫链的一种,它

隐马尔科夫模型 HMM(Hidden Markov Model)

本科阶段学了三四遍的HMM,机器学习课,自然语言处理课,中文信息处理课:如今学研究生的自然语言处理,又碰见了这个老熟人: 虽多次碰到,但总觉得一知半解,对其了解不够全面,借着这次的机会,我想要直接搞定这个大名鼎鼎的模型,也省着之后遇到再费心. Outline 模型引入与背景介绍 从概率图讲起 贝叶斯网络.马尔科夫模型.马尔科夫过程.马尔科夫网络.条件随机场 HMM的形式化表示 Markov Model的形式化表示 HMM的形式化表示 HMM的两个基本假设 HMM的三个基本问题 Evalution

【ML-13-1】隐马尔科夫模型HMM

[ML-13-1]隐马尔科夫模型HMM [ML-13-2]隐马尔科夫模型HMM--前向后向算法 [ML-13-3]隐马尔科夫模型HMM--Baum-Welch(鲍姆-韦尔奇) [ML-13-4]隐马尔科夫模型HMM--预测问题Viterbi(维特比)算法 目录 基础知识-马尔可夫链 HMM简介 HMM定义 HMM模型的三个基本问题 举例 一.基础知识-马尔可夫链 1.1 马尔可夫性质 设{X(t), t ∈ T}是一个随机过程,E为其状态空间,若对于任意的t1<t2< ...<tn<

七月算法-12月机器学习在线班--第十七次课笔记-隐马尔科夫模型HMM

七月算法-12月机器学习--第十七次课笔记-隐马尔科夫模型HMM 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 隐马尔科夫模型 三个部分:概率计算,参数估计,模型预测 1,HMM定义 HMM由初始概率分布π.状态转移概率分布A以及观测概率分布B确定. Eg:以中文分词为例子 隐状态为="2",是不是终止字,是/否?(Y/N)即是不是最后一个字. A矩阵:第一个:当前是终止字,下一个也是终止字的概率 B是当前的隐状态是终止词,

隐马尔科夫模型(HMM)

基本概念 1Markov Models 2Hidden Markov Models 3概率计算算法前向后向算法 1-3-1直接计算 1-3-2前向算法 1-3-3后向算法 4学习问题Baum-Welch算法也就是EM算法 5预测算法 基本概念 1.1Markov Models 处理顺序数据的最简单的方式是忽略顺序的性质,将观测看做独立同分布,然而这样无法利用观测之间的相关性.例如:预测下明天是否会下雨,所有数据看成独立同分布只能得到雨天的相对频率,而实际中,我们知道天气会呈现持续若干天的趋势,观

通俗理解隐马尔科夫模型HMM(转载)

作者:Yang Eninala 链接:https://www.zhihu.com/question/20962240/answer/33438846 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 隐马尔可夫(HMM)好讲,简单易懂不好讲.我认为 @者也的回答没什么错误,不过我想说个更通俗易懂的例子.我希望我的读者不是专家,而是对这个问题感兴趣的入门者,所以我会多阐述数学思想,少写公式.霍金曾经说过,你多写一个公式,就会少一半的读者.所以时间简史这本关于物理的书和麦当娜关于性的书卖的一样

隐马尔可夫模型HMM与维特比Veterbi算法(二)

隐马尔可夫模型HMM与维特比Veterbi算法(二) 主要内容: 前向算法(Forward Algorithm) 穷举搜索( Exhaustive search for solution) 使用递归降低问题复杂度 前向算法的定义 程序实现前向算法 举例说明前向算法 一.前向算法(Forward Algorithm) 目标:计算观察序列的概率(Finding the probability of an observed sequence) 1. 穷举搜索( Exhaustive search fo