版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37334135/article/details/86265648
学习隐马尔可夫模型(HMM),主要就是学习三个问题:概率计算问题,学习问题和预测问题。概率计算问题主要是讲前向算法和后向算法,这两个算法可以说是隐马尔可夫的重中之重,接下来会依次介绍以下内容。
- 隐马尔可夫模型介绍
- 模型的假设
- 直接计算法,前向算法,后向算法的介绍与详细推导
- 根据前后向算法推出一些结论
补充:推导公式很依赖模型的假设与贝叶斯网络,所以在这之前最好了解贝叶斯网络,这两天会补充贝叶斯网络。
学习资料:《统计学习方法》,邹博老师的HMM的ppt,其他。
隐马尔可夫模型
隐马尔可夫模型是关于时序的概率模型。由一个隐藏的马尔可夫链随机生成的不可观测的状态随机序列(理解为隐变量),再由各个状态生成一个观测而产生观测随机序列(理解为显变量)的过程。如下图就是一个隐马尔可夫链,状态序列
{Z1,Z2,...,Zn+1},再由各个状态序列生成观测序列
{X1,X2,...,Xn+1},而每个节点(位置)对应一个时刻,从前往后就是时刻
t1,t2,...,tn+1。
隐马尔可夫模型由初始状态概率向量
π、状态转移矩阵
A和观测矩阵
B确定,称为隐马尔可夫三要素,表示为
λ=(π,A,B),关于具体的参数介绍如下:
记:
Q={q1,q2,...,qN}表示所有可能的状态集合,
V={v1,v2,...,vM}表示所有可能的观测集合。
I={i1,i2,...,iT} 表示状态序列,
O={o1,o2,...,oN} 为对应的观测序列。
状态转移矩阵
A:
令
aij=P(it+1=qj∣it=qi) 表示
t时刻状态为
qi,下一时刻(即
t+1)状态为
qj的概率,而状态转移矩阵
A=(aij)N×N,注意这里是
N×N的方阵。
观测矩阵
B:
令
bj(k)=P(ot=vk∣it=qj)表示
t时刻状态为
qj的条件下,观测值为
vk的概率,而观测矩阵
B=(bj(k))N×M。
初始状态概率向量
π:
πi=P(i1=qi)表示初始时刻(即
t=1)时状态为
qi的概率。
π,A决定状态序列,
B决定观测序列。
由以上定义知,隐马尔可夫做了如下两个假设(两个基本性质):
- 齐次马尔可夫假设:任意时刻
t的状态只与前一时刻
t−1的状态有关,而与其他时刻状态、观测记忆时刻无关,即:
P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1)
- 观测独立性假设: 任意时刻的状态只与该时刻马尔可夫链的状态有关,即:
P(ot∣iT,oT,...,i1,o1)=P(ot∣it)
下面给出《统计学习方法》上的盒子和球的例子
三个基本问题
隐马尔可夫模型有三个基本问题:
- 概率计算问题
- 学习问题
- 预测问题
在这里就只讲概率计算问题,后面会接着讲学习问题和预测问题。
概率计算问题指的是给定模型
λ=(π,A,B)和观测序列
O={o1,o2,...,oN},求在模型
λ下,观测序列
O出现的概率,即
P(O∣λ),下面会介绍三个方法来讲述,分别为
- 直接计算法
- 前向算法
- 后向算法
1、直接计算法
给定模型
λ=(π,A,B)和观测序列
O={o1,o2,...,oN},计算
P(O∣λ)。
P(O∣λ)=I∑P(I∣λ)P(O∣I,λ)
补充:根据贝叶斯网络,对于任意随机变量有
P(x1,x2,...,xN)=P(xN∣x1,...,XN−1)...P(x2∣x1)P(x1)
计算
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,λ)
由于状态2给定条件下,状态1和其它状态条件独立(这点由贝叶斯网络得出,或者根据HMM的齐次性假设,
i3,...,iT与
i1是相互独立的),所以
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−1iT
计算
P(O∣I,λ):
根据HMM的独立性假设得到如下的式子
P(O∣I,λ)=P(o1,o2,...,oT∣i1,i2,...,iT,λ)=bi1(o1)bi2(o2)...biT(oT)
最终得到
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)一共是
2T个因子,那么就是
2T−1个乘号,而外层求和符号是
T层,每个状态
i有
N种取法(状态),所以取法是
NT种,所以时间复杂度是
O((2T−1)NT) 即
O(TNT),这个时间复杂度是很恐怖的,并不可取,考虑以下的有效方法:前向算法、后向算法。
2、前向算法
前向算法实际上算作是动态规划算法,也就是将大问题分解分众多小问题,通过小问题的解来得到大问题的解。对各个小问题进行求解后,会将结果保存下来,下次要用的时候就不用再去计算而是直接拿来用了,这样能有效避免重复计算问题,基本上都会涉及到递推。具体的可以去leetcode上刷两题感受一下。
前向概率: 给定隐马尔科夫模型
λ,定义到时刻
t的观测序列为
o1,o2,...,ot 且状态为
it=qi的概率为前向概率,记做
at(i),表示如下:
αt(i)=P(o1,o2,...,ot,it=qi∣λ)
为什么要给这么个定义呢,因为我们要求的是
P(O∣λ)=P(o1,o2,...,oT∣λ)
α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∣λ)
最后一个等号根据全概率公式得来。
所以我们可以先对每个
i=1,2,...,N求出
α1(i),从而递推得到
αT(i),下面看递推公式是怎样的。即,对于每个
i=1,2,...,N求出了
αt(i),那么
αt+1(i)是怎么得到的。
前面说了根据贝叶斯网络有:
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∣λ)
由于
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∣λ)
表示在时刻
t生成的观测序列
o1,o2,...,ot且状态为
qj同时在
t+1时刻的状态为
qi的联合概率。(不写推导,直观上也能理解,在后面会不加解释的给出一些式子,因为直观上是容易理解的)。
从而
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,...,ot并且在时刻
t+1得到的状态为
qi的联合概率。
bi(ot+1)=P(ot+1∣it+1=qi,λ)
从而得到
(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λ),带入到上式同时根据贝叶斯网络得到:
(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)了,下面写出正式的流程。
前向算法:
输入:隐马尔可夫模型
λ,观测序列
O={o1,o2,...,oT}
输出: 观测序列的概率
P(O∣λ)
(1)、对于每个
i=1,2,...,N计算时刻
t=1 初值:
α1(i)=P(o1,i1=qi∣λ)=P(o1∣i1=qi,λ)P(i1=qi∣λ)=πibi(o1)
(2)、递推 对每个
t=1,2,...,T−1 计算
αt+1(i)=(j=1∑Nαt(j)aji)bi(ot+1),i=1,2,...,N
(3)、终止,计算最终结果:
P(O∣λ)=i=1∑NαT(i)
再来考虑前向算法的时间复杂度,看第二步就行,最外层对
t进行遍历,第二层对
i进行遍历,循环体粗略算是
N个乘号,所以最终时间复杂度为
TN2,相比于直接计算的方法时间复杂度降低了太多,那么再来看后向算法。
3、后向算法
后向算法就不写的那么详细了,具体的推导就不写的太详细了。
后向概率: 给定隐马尔可夫模型
λ,定义在时刻
t 状态为
qi的条件下,从
t+1 到
T 部分的概率为后向概率,记做
βt(i)
βt(i)=P(ot+1,...,oT∣it=qi,λ)
那么根据后向概率怎么得到观测序列的概率
P(O)呢?
π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∣λ)
根据全概率公式,那么有
i=1∑NP(o1,o2,...,oT,i1=qi∣λ)=P(o1,o2,...,oT∣λ)=P(O∣λ),这不就得到了么。
首先规定
βT(i)=1,那么主要是通过递推得到
β1(i)。也就是有
βt+1(i)怎么推到
βt(i)。
βt(i)=j=1∑Naijbj(ot+1)βt+1(j)
这个是怎么来的可以直观理解也可以推导试试,下面给出正式的算法。
后向算法:
输入:隐马尔可夫模型
λ,观测序列
O={o1,o2,...,oT}
输出: 观测序列的概率
P(O∣λ)
(1)、对于每个
i=1,2,...,N计算时刻
t=1 初值规定:
βT(i)=1
(2)、递推 对每个
t=T−1,T−2,...,1 计算
βt(i)=j=1∑Naijbj(ot+1)βt+1(j)
(3)、终止,计算最终结果:
P(O∣λ)=i=1∑Nπibi(o1)β1(i)
考虑时间复杂度,和前向算法是一样的。如果前向和后向算法放在一起的话,我们会得到下面的一些结论。
一些结论
结论1、
P(O,it=qi∣λ)=αt(i)βt(i)
P(O,it=qi∣λ)=P(o1,o2,...,ot,ot+1,...,oT∣it=qi,λ)P(it=qi∣λ)
由于给定
it=qi,那么序列
o1,o2,...,ot 和序列
ot+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,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),根据这个结论可以得到下面两个结论
结论2、
γt(i)=i=1∑Nαt(i)βt(i)αt(i)βt(i)
记
γt(i)=P(it=qi∣O,λ),即已知模型
λ,给定观测序列条件下,在
t 时刻状态为
qi 的概率。
γ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,λ),即已知模型
λ和观测
O,在时刻
t 处于
qi状态,时刻
t+1处于
qj 状态的概率。
根据后向算法的递推公式可以得到
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∣λ)
注意:第二个等号到第三个等号的成立的原因是在
it=qi的条件下,
o1,o2,...,ot和
ot+1,ot+2,...,oT,it+1=qj 是条件独立的。
ξ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)