学习隐马尔可夫模型(HMM),主要就是学习三个问题:概率计算问题,学习问题和预测问题。概率计算问题主要是讲前向算法和后向算法,这两个算法可以说是隐马尔可夫的重中之重,接下来会依次介绍以下内容。
- 隐马尔可夫模型介绍
- 模型的假设
- 直接计算法,前向算法,后向算法的介绍与详细推导
- 根据前后向算法推出一些结论
补充:推导公式很依赖模型的假设与贝叶斯网络,所以在这之前最好了解贝叶斯网络,这两天会补充贝叶斯网络。
学习资料:《统计学习方法》,邹博老师的HMM的ppt,其他。
隐马尔可夫模型
隐马尔可夫模型是关于时序的概率模型。由一个隐藏的马尔可夫链随机生成的不可观测的状态随机序列(理解为隐变量),再由各个状态生成一个观测而产生观测随机序列(理解为显变量)的过程。如下图就是一个隐马尔可夫链,状态序列{Z1,Z2,...,Zn+1}\{Z_1,Z_2,...,Z_{n+1}\}{Z1,Z2,...,Zn+1},再由各个状态序列生成观测序列{X1,X2,...,Xn+1}\{X_1,X_2,...,X_{n+1}\}{X1,X2,...,Xn+1},而每个节点(位置)对应一个时刻,从前往后就是时刻t1,t2,...,tn+1t_1,t_2,...,t_{n+1}t1,t2,...,tn+1。
隐马尔可夫模型由初始状态概率向量π\piπ、状态转移矩阵AAA和观测矩阵BBB确定,称为隐马尔可夫三要素,表示为λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B),关于具体的参数介绍如下:
记:Q={q1,q2,...,qN}Q=\{q_1,q_2,...,q_N\}Q={q1,q2,...,qN}表示所有可能的状态集合,V={v1,v2,...,vM}V=\{v_1,v_2,...,v_M\}V={v1,v2,...,vM}表示所有可能的观测集合。
I={i1,i2,...,iT}I=\{i_1,i_2,...,i_T\}I={i1,i2,...,iT} 表示状态序列,O={o1,o2,...,oN}O=\{o_1,o_2,...,o_N\}O={o1,o2,...,oN} 为对应的观测序列。
状态转移矩阵AAA:
令 aij=P(it+1=qj∣it=qi)a_{ij}=P(i_{t+1}=q_j|i_{t}=q_i)aij=P(it+1=qj∣it=qi) 表示ttt时刻状态为qiq_iqi,下一时刻(即t+1t+1t+1)状态为qjq_jqj的概率,而状态转移矩阵 A=(aij)N×NA=(a_{ij})_{N×N}A=(aij)N×N,注意这里是N×NN×NN×N的方阵。
观测矩阵BBB:
令bj(k)=P(ot=vk∣it=qj)b_{j}(k)=P(o_t=v_k|i_t=q_j)bj(k)=P(ot=vk∣it=qj)表示ttt时刻状态为qjq_jqj的条件下,观测值为vkv_kvk的概率,而观测矩阵B=(bj(k))N×MB=(b_{j}(k))_{N×M}B=(bj(k))N×M。
初始状态概率向量π\piπ:
πi=P(i1=qi)\pi_i=P(i_1=q_i)πi=P(i1=qi)表示初始时刻(即t=1t=1t=1)时状态为qiq_iqi的概率。
π,A\pi,Aπ,A决定状态序列,BBB决定观测序列。
由以上定义知,隐马尔可夫做了如下两个假设(两个基本性质):
- 齐次马尔可夫假设:任意时刻ttt的状态只与前一时刻t−1t-1t−1的状态有关,而与其他时刻状态、观测记忆时刻无关,即:
P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1)P(i_t|i_{t-1},o_{t-1},...,i_1,o_1)=P(i_t|i_{t-1})P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1) - 观测独立性假设: 任意时刻的状态只与该时刻马尔可夫链的状态有关,即:
P(ot∣iT,oT,...,i1,o1)=P(ot∣it)P(o_t|i_{T},o_{T},...,i_1,o_1)=P(o_t|i_{t})P(ot∣iT,oT,...,i1,o1)=P(ot∣it)
下面给出《统计学习方法》上的盒子和球的例子
三个基本问题
隐马尔可夫模型有三个基本问题:
- 概率计算问题
- 学习问题
- 预测问题
在这里就只讲概率计算问题,后面会接着讲学习问题和预测问题。
概率计算问题指的是给定模型λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B)和观测序列O={o1,o2,...,oN}O=\{o_1,o_2,...,o_N\}O={o1,o2,...,oN},求在模型λ\lambdaλ下,观测序列OOO出现的概率,即P(O∣λ)P(O|\lambda)P(O∣λ),下面会介绍三个方法来讲述,分别为
- 直接计算法
- 前向算法
- 后向算法
1、直接计算法
给定模型λ=(π,A,B)\lambda=(\pi,A,B)λ=(π,A,B)和观测序列O={o1,o2,...,oN}O=\{o_1,o_2,...,o_N\}O={o1,o2,...,oN},计算P(O∣λ)P(O|\lambda)P(O∣λ)。
P(O∣λ)=∑IP(I∣λ)P(O∣I,λ)P(O|\lambda)=\sum\limits_{I}P(I|\lambda)P(O|I,\lambda)P(O∣λ)=I∑P(I∣λ)P(O∣I,λ)
补充:根据贝叶斯网络,对于任意随机变量有P(x1,x2,...,xN)=P(xN∣x1,...,XN−1)...P(x2∣x1)P(x1)P(x_1,x_2,...,x_N)=P(x_N|x_1,...,X_{N-1})...P(x_2|x_1)P(x_1)P(x1,x2,...,xN)=P(xN∣x1,...,XN−1)...P(x2∣x1)P(x1)
计算P(I∣λ)P(I|\lambda)P(I∣λ):
P(I∣λ)=P(i1,i2,...,iT∣λ)=P(i1∣λ)P(i2,...,iT∣i1,λ)=πi1P(i3,...,iT∣i2,i1,λ)P(i2∣i1,λ)=πi1ai1i2P(i3,...,iT∣i2,i1,λ)P(I|\lambda)=P(i_1,i_2,...,i_T|\lambda)=P(i_1|\lambda)P(i_2,...,i_T|i_1,\lambda)=\pi_{i_1}P(i_3,...,i_T|i_2,i_1,\lambda)P(i_2|i_1,\lambda)=\pi_{i_1}a_{i_1i_2}P(i_3,...,i_T|i_2,i_1,\lambda)P(I∣λ)=P(i1,i2,...,iT∣λ)=P(i1∣λ)P(i2,...,iT∣i1,λ)=πi1P(i3,...,iT∣i2,i1,λ)P(i2∣i1,λ)=πi1ai1i2P(i3,...,iT∣i2,i1,λ)
由于状态2给定条件下,状态1和其它状态条件独立(这点由贝叶斯网络得出,或者根据HMM的齐次性假设,i3,...,iTi_3,...,i_Ti3,...,iT与i1i_1i1是相互独立的),所以P(i3,...,iT∣i2,i1,λ)=P(i3,...,iT∣i2,λ)P(i_3,...,i_T|i_2,i_1,\lambda)=P(i_3,...,i_T|i_2,\lambda)P(i3,...,iT∣i2,i1,λ)=P(i3,...,iT∣i2,λ),所以有
P(I∣λ)=πi1ai1i2P(i3,...,iT∣i2,λ)=πi1ai1i2P(i4,...,iT∣i3,i2,λ)P(i3∣i2,λ)=πi1ai1i2ai2i3P(i4,...,iT∣i3,i2,λ)=...=πi1ai1i2ai2i3...aiT−1iTP(I|\lambda)=\pi_{i_1}a_{i_1i_2}P(i_3,...,i_T|i_2,\lambda)=\pi_{i_1}a_{i_1i_2}P(i_4,...,i_T|i_3,i_2,\lambda)P(i_3|i_2,\lambda)=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}P(i_4,...,i_T|i_3,i_2,\lambda)=...=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T}P(I∣λ)=πi1ai1i2P(i3,...,iT∣i2,λ)=πi1ai1i2P(i4,...,iT∣i3,i2,λ)P(i3∣i2,λ)=πi1ai1i2ai2i3P(i4,...,iT∣i3,i2,λ)=...=πi1ai1i2ai2i3...aiT−1iT
计算P(O∣I,λ)P(O|I,\lambda)P(O∣I,λ):
根据HMM的独立性假设得到如下的式子
P(O∣I,λ)=P(o1,o2,...,oT∣i1,i2,...,iT,λ)=bi1(o1)bi2(o2)...biT(oT)P(O|I,\lambda)=P(o_1,o_2,...,o_T|i_1,i_2,...,i_T,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T)P(O∣I,λ)=P(o1,o2,...,oT∣i1,i2,...,iT,λ)=bi1(o1)bi2(o2)...biT(oT)
最终得到 P(O∣λ)=∑IP(I∣λ)P(O∣I,λ)=∑i1,i2,...,iTπi1bi1(o1)ai1i2bi2(o2)ai2i3...aiT−1iTbiT(oT)P(O|\lambda)=\sum\limits_{I}P(I|\lambda)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_2i_3}...a_{i_{T-1}i_T}b_{i_T}(o_T)P(O∣λ)=I∑P(I∣λ)P(O∣I,λ)=i1,i2,...,iT∑πi1bi1(o1)ai1i2bi2(o2)ai2i3...aiT−1iTbiT(oT)
考虑以下时间复杂度:πi1bi1(o1)ai1i2bi2(o2)ai2i3...aiT−1iTbiT(oT)\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)a_{i_2i_3}...a_{i_{T-1}i_T}b_{i_T}(o_T)πi1bi1(o1)ai1i2bi2(o2)ai2i3...aiT−1iTbiT(oT)一共是2T2T2T个因子,那么就是2T−12T-12T−1个乘号,而外层求和符号是TTT层,每个状态iii有NNN种取法(状态),所以取法是NTN^TNT种,所以时间复杂度是O((2T−1)NT)O((2T-1)N^T)O((2T−1)NT) 即O(TNT)O(TN^T)O(TNT),这个时间复杂度是很恐怖的,并不可取,考虑以下的有效方法:前向算法、后向算法。
2、前向算法
前向算法实际上算作是动态规划算法,也就是将大问题分解分众多小问题,通过小问题的解来得到大问题的解。对各个小问题进行求解后,会将结果保存下来,下次要用的时候就不用再去计算而是直接拿来用了,这样能有效避免重复计算问题,基本上都会涉及到递推。具体的可以去leetcode上刷两题感受一下。
前向概率: 给定隐马尔科夫模型λ\lambdaλ,定义到时刻ttt的观测序列为o1,o2,...,oto_1,o_2,...,o_to1,o2,...,ot 且状态为it=qii_t=q_iit=qi的概率为前向概率,记做 at(i)a_t(i)at(i),表示如下:
αt(i)=P(o1,o2,...,ot,it=qi∣λ)\alpha_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda)αt(i)=P(o1,o2,...,ot,it=qi∣λ)
为什么要给这么个定义呢,因为我们要求的是P(O∣λ)=P(o1,o2,...,oT∣λ)P(O|\lambda)=P(o_1,o_2,...,o_T|\lambda)P(O∣λ)=P(o1,o2,...,oT∣λ)
αT(i)=P(o1,o2,...,oT,iT=qi∣λ)\alpha_T(i)=P(o_1,o_2,...,o_T,i_T=q_i|\lambda)αT(i)=P(o1,o2,...,oT,iT=qi∣λ),得到
αT(1)+αT(2)+...+αT(N)=P(o1,o2,...,oT,iT=q1∣λ)+P(o1,o2,...,oT,iT=q2∣λ)...+P(o1,o2,...,oT,iT=qN∣λ)=P(o1,o2,...,oT∣λ)\alpha_T(1)+\alpha_T(2)+...+\alpha_T(N)\\=P(o_1,o_2,...,o_T,i_T=q_1|\lambda)+P(o_1,o_2,...,o_T,i_T=q_2|\lambda)...+P(o_1,o_2,...,o_T,i_T=q_N|\lambda)\\=P(o_1,o_2,...,o_T|\lambda)αT(1)+αT(2)+...+αT(N)=P(o1,o2,...,oT,iT=q1∣λ)+P(o1,o2,...,oT,iT=q2∣λ)...+P(o1,o2,...,oT,iT=qN∣λ)=P(o1,o2,...,oT∣λ)
最后一个等号根据全概率公式得来。
所以我们可以先对每个i=1,2,...,Ni=1,2,...,Ni=1,2,...,N求出α1(i)\alpha_1(i)α1(i),从而递推得到 αT(i)\alpha_T(i)αT(i),下面看递推公式是怎样的。即,对于每个i=1,2,...,Ni=1,2,...,Ni=1,2,...,N求出了αt(i)\alpha_t(i)αt(i),那么αt+1(i)\alpha_{t+1}(i)αt+1(i)是怎么得到的。
前面说了根据贝叶斯网络有:P(A,B,C)=P(A∣B,C)P(B∣C)P(C)P(A,B,C)=P(A|B,C)P(B|C)P(C)P(A,B,C)=P(A∣B,C)P(B∣C)P(C)
αt(j)aji=P(o1,o2,...,ot,it=qj∣λ)P(it+1=qi∣it=qj,λ)=P(o1,o2,...,ot∣it=qj,λ)P(it+1=qi∣it=qj,λ)P(it=qj∣λ)\alpha_t(j)a_{ji}=P(o_1,o_2,...,o_t,i_t=q_j|\lambda)P(i_{t+1}=q_i|i_t=q_j,\lambda)=P(o_1,o_2,...,o_t|i_t=q_j,\lambda)P(i_{t+1}=q_i|i_t=q_j,\lambda)P(i_t=q_j|\lambda)αt(j)aji=P(o1,o2,...,ot,it=qj∣λ)P(it+1=qi∣it=qj,λ)=P(o1,o2,...,ot∣it=qj,λ)P(it+1=qi∣it=qj,λ)P(it=qj∣λ)
由于P(o1,o2,...,ot∣it=qjλ)=P(o1,o2,...,ot∣it=qj,it+1=qi,λ)P(o_1,o_2,...,o_t|i_t=q_j\lambda)=P(o_1,o_2,...,o_t|i_t=q_j,i_{t+1}=q_i,\lambda)P(o1,o2,...,ot∣it=qjλ)=P(o1,o2,...,ot∣it=qj,it+1=qi,λ)这个在前面的直接计算法中已经说了。所以有
αt(j)aji=P(o1,o2,...,ot∣it=qj,it+1=qi,λ)P(it+1=qi∣it=qj,λ)P(it=qj∣λ)=P(o1,o2,...,ot,it=qj,it+1=qi∣λ)\alpha_t(j)a_{ji}=P(o_1,o_2,...,o_t|i_t=q_j,i_{t+1}=q_i,\lambda)P(i_{t+1}=q_i|i_t=q_j,\lambda)P(i_t=q_j|\lambda)=P(o_1,o_2,...,o_t,i_t=q_j,i_{t+1}=q_i|\lambda)αt(j)aji=P(o1,o2,...,ot∣it=qj,it+1=qi,λ)P(it+1=qi∣it=qj,λ)P(it=qj∣λ)=P(o1,o2,...,ot,it=qj,it+1=qi∣λ)
表示在时刻ttt生成的观测序列 o1,o2,...,oto_1,o_2,...,o_to1,o2,...,ot且状态为qjq_jqj同时在t+1t+1t+1时刻的状态为qiq_iqi的联合概率。(不写推导,直观上也能理解,在后面会不加解释的给出一些式子,因为直观上是容易理解的)。
从而∑j=1Nαt(j)aji=∑j=1NP(o1,o2,...,ot,it=qj,it+1=qi∣λ)=P(o1,o2,...,ot,it+1=qi∣λ)\sum\limits_{j=1}^{N}\alpha_t(j)a_{ji}=\sum\limits_{j=1}^{N}P(o_1,o_2,...,o_t,i_t=q_j,i_{t+1}=q_i|\lambda)=P(o_1,o_2,...,o_t,i_{t+1}=q_i|\lambda)j=1∑Nαt(j)aji=j=1∑NP(o1,o2,...,ot,it=qj,it+1=qi∣λ)=P(o1,o2,...,ot,it+1=qi∣λ)
表示在时刻得到的观测序列为o1,o2,...,oto_1,o_2,...,o_to1,o2,...,ot并且在时刻t+1t+1t+1得到的状态为qiq_iqi的联合概率。
bi(ot+1)=P(ot+1∣it+1=qi,λ)b_i(o_{t+1})=P(o_{t+1}|i_{t+1}=q_i,\lambda)bi(ot+1)=P(ot+1∣it+1=qi,λ)
从而得到 (∑j=1Nαt(j)aji)bi(ot+1)=P(o1,o2,...,ot,it+1=qi∣λ)P(ot+1∣it+1=qi,λ)=P(o1,o2,...,ot∣it+1=qi,λ)P(ot+1∣it+1=qi,λ)P(it+1=qi∣λ)(\sum\limits_{j=1}^{N}\alpha_t(j)a_{ji})b_i(o_{t+1})=P(o_1,o_2,...,o_t,i_{t+1}=q_i|\lambda)P(o_{t+1}|i_{t+1}=q_i,\lambda)=P(o_1,o_2,...,o_t|i_{t+1}=q_i,\lambda)P(o_{t+1}|i_{t+1}=q_i,\lambda)P(i_{t+1}=q_i|\lambda)(j=1∑Nαt(j)aji)bi(ot+1)=P(o1,o2,...,ot,it+1=qi∣λ)P(ot+1∣it+1=qi,λ)=P(o1,o2,...,ot∣it+1=qi,λ)P(ot+1∣it+1=qi,λ)P(it+1=qi∣λ)
根据隐马尔可夫模型的独立性假设得到 P(o1,o2,...,ot∣it+1=qi,λ)=P(o1,o2,...,ot∣it+1=qi,ot+1λ)P(o_1,o_2,...,o_t|i_{t+1}=q_i,\lambda)=P(o_1,o_2,...,o_t|i_{t+1}=q_i,o_{t+1}\lambda)P(o1,o2,...,ot∣it+1=qi,λ)=P(o1,o2,...,ot∣it+1=qi,ot+1λ),带入到上式同时根据贝叶斯网络得到:
(∑j=1Nαt(j)aji)bi(ot+1)=P(o1,o2,...,ot∣it+1=qi,ot+1λ)P(ot+1∣it+1=qi,λ)P(it+1=qi∣λ)=P(o1,o2,...,ot,ot+1,it+1=qi)=αt+1(i)(\sum\limits_{j=1}^{N}\alpha_t(j)a_{ji})b_i(o_{t+1})=P(o_1,o_2,...,o_t|i_{t+1}=q_i,o_{t+1}\lambda)P(o_{t+1}|i_{t+1}=q_i,\lambda)P(i_{t+1}=q_i|\lambda)=P(o_1,o_2,...,o_t,o_{t+1},i_{t+1}=q_i)=\alpha_{t+1}(i)(j=1∑Nαt(j)aji)bi(ot+1)=P(o1,o2,...,ot∣it+1=qi,ot+1λ)P(ot+1∣it+1=qi,λ)P(it+1=qi∣λ)=P(o1,o2,...,ot,ot+1,it+1=qi)=αt+1(i)
到这里基本就知道前向算法怎么得到P(O)P(O)P(O)了,下面写出正式的流程。
前向算法:
输入:隐马尔可夫模型λ\lambdaλ,观测序列O={o1,o2,...,oT}O=\{o_1,o_2,...,o_T\}O={o1,o2,...,oT}
输出: 观测序列的概率P(O∣λ)P(O|\lambda)P(O∣λ)
(1)、对于每个i=1,2,...,Ni=1,2,...,Ni=1,2,...,N计算时刻 t=1t=1t=1 初值:
α1(i)=P(o1,i1=qi∣λ)=P(o1∣i1=qi,λ)P(i1=qi∣λ)=πibi(o1)\alpha_1(i)=P(o_1,i_1=q_i|\lambda)\\=P(o_1|i_1=q_i,\lambda)P(i_1=q_i|\lambda)\\=\pi_ib_i(o_1)α1(i)=P(o1,i1=qi∣λ)=P(o1∣i1=qi,λ)P(i1=qi∣λ)=πibi(o1)
(2)、递推 对每个t=1,2,...,T−1t=1,2,...,T-1t=1,2,...,T−1 计算
αt+1(i)=(∑j=1Nαt(j)aji)bi(ot+1),i=1,2,...,N\alpha_{t+1}(i)=(\sum\limits_{j=1}^{N}\alpha_t(j)a_{ji})b_i(o_{t+1}),i=1,2,...,Nαt+1(i)=(j=1∑Nαt(j)aji)bi(ot+1),i=1,2,...,N
(3)、终止,计算最终结果:
P(O∣λ)=∑i=1NαT(i)P(O|\lambda)=\sum\limits_{i=1}^{N}\alpha_T(i)P(O∣λ)=i=1∑NαT(i)
再来考虑前向算法的时间复杂度,看第二步就行,最外层对ttt进行遍历,第二层对iii进行遍历,循环体粗略算是NNN个乘号,所以最终时间复杂度为TN2TN^2TN2,相比于直接计算的方法时间复杂度降低了太多,那么再来看后向算法。
3、后向算法
后向算法就不写的那么详细了,具体的推导就不写的太详细了。
后向概率: 给定隐马尔可夫模型 λ\lambdaλ,定义在时刻ttt 状态为qiq_iqi的条件下,从t+1t+1t+1 到TTT 部分的概率为后向概率,记做 βt(i)\beta_t(i)βt(i)
βt(i)=P(ot+1,...,oT∣it=qi,λ)\beta_t(i)=P(o_{t+1},...,o_{T}|i_{t}=q_i,\lambda)βt(i)=P(ot+1,...,oT∣it=qi,λ)
那么根据后向概率怎么得到观测序列的概率P(O)P(O)P(O)呢?
πibi(o1)β1(i)=P(i1=qi∣λ)P(o1∣i1=qi,λ)P(o2,...,oT∣i1=qi,λ)\pi_i b_i(o_1)\beta_1(i)=P(i_1=q_i|\lambda)P(o_1|i_1=q_i,\lambda)P(o_{2},...,o_{T}|i_{1}=q_i,\lambda)πibi(o1)β1(i)=P(i1=qi∣λ)P(o1∣i1=qi,λ)P(o2,...,oT∣i1=qi,λ)
同样也是根据贝叶斯网络那个公式,以及HMM的假设得到:
πibi(o1)β1(i)=P(i1=qi∣λ)P(o1∣i1=qi,λ)P(o2,...,oT∣i1=qi,o1,λ)=P(o1,o2,...,oT,i1=qi∣λ)\pi_i b_i(o_1)\beta_1(i)=P(i_1=q_i|\lambda)P(o_1|i_1=q_i,\lambda)P(o_{2},...,o_{T}|i_{1}=q_i,o_1,\lambda)=P(o_1,o_{2},...,o_{T},i_1=q_i|\lambda)πibi(o1)β1(i)=P(i1=qi∣λ)P(o1∣i1=qi,λ)P(o2,...,oT∣i1=qi,o1,λ)=P(o1,o2,...,oT,i1=qi∣λ)
根据全概率公式,那么有∑i=1NP(o1,o2,...,oT,i1=qi∣λ)=P(o1,o2,...,oT∣λ)=P(O∣λ)\sum\limits_{i=1}^{N}P(o_1,o_{2},...,o_{T},i_1=q_i|\lambda)=P(o_1,o_{2},...,o_{T}|\lambda)=P(O|\lambda)i=1∑NP(o1,o2,...,oT,i1=qi∣λ)=P(o1,o2,...,oT∣λ)=P(O∣λ),这不就得到了么。
首先规定βT(i)=1\beta_T(i)=1βT(i)=1,那么主要是通过递推得到 β1(i)\beta_1(i)β1(i)。也就是有βt+1(i)\beta_{t+1}(i)βt+1(i)怎么推到βt(i)\beta_{t}(i)βt(i)。
βt(i)=∑j=1Naijbj(ot+1)βt+1(j)\beta_{t}(i)=\sum\limits_{j=1}^{N} a_{ij}b_j(o_{t+1})\beta_{t+1}(j)βt(i)=j=1∑Naijbj(ot+1)βt+1(j)
这个是怎么来的可以直观理解也可以推导试试,下面给出正式的算法。
后向算法:
输入:隐马尔可夫模型λ\lambdaλ,观测序列O={o1,o2,...,oT}O=\{o_1,o_2,...,o_T\}O={o1,o2,...,oT}
输出: 观测序列的概率P(O∣λ)P(O|\lambda)P(O∣λ)
(1)、对于每个i=1,2,...,Ni=1,2,...,Ni=1,2,...,N计算时刻 t=1t=1t=1 初值规定:
βT(i)=1\beta_T(i)=1βT(i)=1
(2)、递推 对每个t=T−1,T−2,...,1t=T-1,T-2,...,1t=T−1,T−2,...,1 计算
βt(i)=∑j=1Naijbj(ot+1)βt+1(j)\beta_{t}(i)=\sum\limits_{j=1}^{N} a_{ij}b_j(o_{t+1})\beta_{t+1}(j)βt(i)=j=1∑Naijbj(ot+1)βt+1(j)
(3)、终止,计算最终结果:
P(O∣λ)=∑i=1Nπibi(o1)β1(i)P(O|\lambda)=\sum\limits_{i=1}^{N}\pi_i b_i(o_1)\beta_1(i)P(O∣λ)=i=1∑Nπibi(o1)β1(i)
考虑时间复杂度,和前向算法是一样的。如果前向和后向算法放在一起的话,我们会得到下面的一些结论。
一些结论
结论1、 P(O,it=qi∣λ)=αt(i)βt(i)P(O,i_t=q_i|\lambda)=\alpha_t(i)\beta_t(i)P(O,it=qi∣λ)=αt(i)βt(i)
P(O,it=qi∣λ)=P(o1,o2,...,ot,ot+1,...,oT∣it=qi,λ)P(it=qi∣λ)P(O,i_t=q_i|\lambda)=P(o_1,o_2,...,o_t,o_{t+1},...,o_T|i_t=q_i,\lambda)P(i_t=q_i|\lambda)P(O,it=qi∣λ)=P(o1,o2,...,ot,ot+1,...,oT∣it=qi,λ)P(it=qi∣λ)
由于给定it=qii_t=q_iit=qi,那么序列 o1,o2,...,oto_1,o_2,...,o_to1,o2,...,ot 和序列 ot+1,...,oTo_{t+1},...,o_Tot+1,...,oT 是条件独立的,所以P(o1,o2,...,ot,ot+1,...,oT∣it=qi,λ)=P(o1,o2,...,ot∣it=qi,λ)P(ot+1,...,oT∣it=qi,λ)P(o_1,o_2,...,o_t,o_{t+1},...,o_T|i_t=q_i,\lambda)=P(o_1,o_2,...,o_t|i_t=q_i,\lambda)P(o_{t+1},...,o_T|i_t=q_i,\lambda)P(o1,o2,...,ot,ot+1,...,oT∣it=qi,λ)=P(o1,o2,...,ot∣it=qi,λ)P(ot+1,...,oT∣it=qi,λ),带入上式子得到
P(O,it=qi∣λ)=P(o1,o2,...,ot∣it=qi,λ)P(ot+1,...,oT∣it=qi,λ)P(it=qi∣λ)=P(o1,o2,...,ot,it=qi∣λ)P(ot+1,...,oT∣it=qi,λ)=αt(i)βt(i)P(O,i_t=q_i|\lambda)=P(o_1,o_2,...,o_t|i_t=q_i,\lambda)P(o_{t+1},...,o_T|i_t=q_i,\lambda)P(i_t=q_i|\lambda)\\=P(o_1,o_2,...,o_t,i_t=q_i|\lambda)P(o_{t+1},...,o_T|i_t=q_i,\lambda)\\=\alpha_t(i)\beta_t(i)P(O,it=qi∣λ)=P(o1,o2,...,ot∣it=qi,λ)P(ot+1,...,oT∣it=qi,λ)P(it=qi∣λ)=P(o1,o2,...,ot,it=qi∣λ)P(ot+1,...,oT∣it=qi,λ)=αt(i)βt(i)
得到的结论是 P(O,it=qi∣λ)=αt(i)βt(i)P(O,i_t=q_i|\lambda)=\alpha_t(i)\beta_t(i)P(O,it=qi∣λ)=αt(i)βt(i),根据这个结论可以得到下面两个结论
结论2、 γt(i)=αt(i)βt(i)∑i=1Nαt(i)βt(i)\gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{\sum\limits_{i=1}^{N}\alpha_t(i)\beta_t(i)}γt(i)=i=1∑Nαt(i)βt(i)αt(i)βt(i)
记 γt(i)=P(it=qi∣O,λ)\gamma_t(i)=P(i_t=q_i|O,\lambda)γt(i)=P(it=qi∣O,λ),即已知模型λ\lambdaλ,给定观测序列条件下,在 ttt 时刻状态为 qiq_iqi 的概率。
γt(i)=P(it=qi∣O,λ)=P(it=qi,O∣λ)P(O∣λ)=P(it=qi,O∣λ)∑i=1NP(it=qi,O∣λ)=αt(i)βt(i)∑i=1Nαt(i)βt(i)\gamma_t(i)=P(i_t=q_i|O,\lambda)\\=\frac{P(i_t=q_i,O|\lambda)}{P(O|\lambda)}\\=\frac{P(i_t=q_i,O|\lambda)}{\sum\limits_{i=1}^{N}P(i_t=q_i,O|\lambda)}\\=\frac{\alpha_t(i)\beta_t(i)}{\sum\limits_{i=1}^{N}\alpha_t(i)\beta_t(i)}γt(i)=P(it=qi∣O,λ)=P(O∣λ)P(it=qi,O∣λ)=i=1∑NP(it=qi,O∣λ)P(it=qi,O∣λ)=i=1∑Nαt(i)βt(i)αt(i)βt(i)
结论3、
记 ξt(i,j)=P(it=qi,it+1=qj∣O,λ)\xi_t(i,j)=P(i_t=q_i,i_{t+1}=q_j|O,\lambda)ξt(i,j)=P(it=qi,it+1=qj∣O,λ),即已知模型λ\lambdaλ和观测OOO,在时刻ttt 处于qiq_iqi状态,时刻t+1t+1t+1处于 qjq_jqj 状态的概率。
根据后向算法的递推公式可以得到
aijbj(ot+1)βt+1(i)=P(ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)=P(o_{t+1},o_{t+2},...,o_{T},i_{t+1}=q_j|i_t=q_i,\lambda)aijbj(ot+1)βt+1(i)=P(ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)
那么
αt(i)aijbj(ot+1)βt+1(i)=P(o1,o2,...,ot,it=qi∣λ)P(ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)=P(o1,o2,...,ot∣it=qi,λ)P(it=qi∣λ)P(ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)=P(o1,...,ot,ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)P(it=qi∣λ)=P(o1,...,ot,ot+1,ot+2,...,oT,it=qi,it+1=qj∣λ)=P(O,it=qi,it+1=qj∣λ)\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)\\=P(o_1,o_2,...,o_t,i_t=q_i|\lambda)P(o_{t+1},o_{t+2},...,o_{T},i_{t+1}=q_j|i_t=q_i,\lambda)\\=P(o_1,o_2,...,o_t|i_t=q_i,\lambda)P(i_t=q_i|\lambda)P(o_{t+1},o_{t+2},...,o_{T},i_{t+1}=q_j|i_t=q_i,\lambda)\\=P(o_1,...,o_t,o_{t+1},o_{t+2},...,o_{T},i_{t+1}=q_j|i_t=q_i,\lambda)P(i_t=q_i|\lambda)\\=P(o_1,...,o_t,o_{t+1},o_{t+2},...,o_{T},i_t=q_i,i_{t+1}=q_j|\lambda)\\=P(O,i_t=q_i,i_{t+1}=q_j|\lambda)αt(i)aijbj(ot+1)βt+1(i)=P(o1,o2,...,ot,it=qi∣λ)P(ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)=P(o1,o2,...,ot∣it=qi,λ)P(it=qi∣λ)P(ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)=P(o1,...,ot,ot+1,ot+2,...,oT,it+1=qj∣it=qi,λ)P(it=qi∣λ)=P(o1,...,ot,ot+1,ot+2,...,oT,it=qi,it+1=qj∣λ)=P(O,it=qi,it+1=qj∣λ)
注意:第二个等号到第三个等号的成立的原因是在it=qii_t=q_iit=qi的条件下,o1,o2,...,oto_1,o_2,...,o_to1,o2,...,ot和 ot+1,ot+2,...,oT,it+1=qjo_{t+1},o_{t+2},...,o_{T},i_{t+1}=q_jot+1,ot+2,...,oT,it+1=qj 是条件独立的。
ξt(i,j)=P(it=qi,it+1=qj∣O,λ)=P(it=qi,it+1=qj,O∣λ)P(O∣λ)=P(it=qi,it+1=qj,O∣λ)∑i=1N∑j=1NP(it=qi,it+1=qj,O∣λ)=αt(i)aijbj(ot+1)βt+1(i)∑i=1N∑j=1Nαt(i)aijbj(ot+1)βt+1(i)\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)}\\=\frac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}\\=\frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)}{\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(i)}ξt(i,j)=P(it=qi,it+1=qj∣O,λ)=P(O∣λ)P(it=qi,it+1=qj,O∣λ)=i=1∑Nj=1∑NP(it=qi,it+1=qj,O∣λ)P(it=qi,it+1=qj,O∣λ)=i=1∑Nj=1∑Nαt(i)aijbj(ot+1)βt+1(i)αt(i)aijbj(ot+1)βt+1(i)