版权声明:本文为博主原创文章,转载请指明作者以及链接,并通知作者,谢谢。 https://blog.csdn.net/wshixinshouaaa/article/details/85701540
一、序言
重新复习隐马尔科夫模型,重点是HMM模型的三个问题及前向、后向和维特比算法。
二、基本概念
2.1 定义

隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的形式定义如下:
设Q是所有可能的状态的集合,V是所有可能的观测的集合。
Q=q1,q2,...,qn,V=v1,v2,...vm
其中,
n是可能的状态数,
m是可能的观测数。
设
I是长度为
t的状态序列,
O是对应的观测序列:
I=i1,i2,...,it,O=o1,o2,...,ot
A是状态转移概率矩阵:
A=[aij]n×n
其中,
aij=P(it=qj∣it−1=qi),i=1,...n;j=1,...,n
是在时刻
t−1处于状态
qi的条件下在时刻
t转移到状态
qj的概率。
B是观测概率矩阵:
B=[bjk]n×m
其中,
bkj=P(ot=vk∣it=qj),k=1,...m,j=1,...,n
是在时刻
t处于状态
qj的条件下生成观测
vk的概率。
π是初始状态概率向量:
π=πi
其中,
πi=P(i1=qi),i=1,...n
是初始时刻
t=1处于状态
qi的概率。

2.2 例子
举个例子,当观察到屋外艳阳高照,那么肯定是晴天;若是半乌云密布,则是阴天;若是电闪雷鸣,则是雨天。艳阳高照,乌云密布,电闪雷鸣是我们能直接观察到的,对应着上面定义的观测序列。
而它们对应的天气状态分别是晴天、阴天和雨天,则是状态序列,因为我们先观察到外边的环境是艳阳高照,乌云密布,电闪雷鸣,然后再推测出是晴天、阴天还是雨天。
如下图所示,上面的是一条隐马尔科夫链,下面对应着其随机生成的状态序列。

如下图所示,是一个完整的 HMM 模型。

状态集合
Q=q1,q2,q3,其中
q1=艳阳高照,
q2=乌云密布,
q3=电闪雷鸣。
观测集合
V=v1,v2,v3,其中
v1=晴天,
v2=阴天,
v3=雨天。
状态转移概率矩阵
A:

观测概率矩阵
B:

初始状态概率
π:

以上数据是随便写的。
2.3 基本假设

三、三个问题

只看这个可能有点晦涩,下面就例子说的通俗一下:
3.1 概率计算问题
评估问题,即概率计算问题,是三个问题中最简单的。给定 HMM 模型
λ,也就是已经知道状态转移概率矩阵
A、观测概率矩阵
B 和初始状态概率
π,同时给出观测序列
O=o1,o2,...,ot,求在该 HMM 模型下这个观测序列生成的概率。例如求接下来三天的观测天气是(阴天,雨天,晴天)的概率。解决算法:前向-后向算法。
3.2 学习问题
学习问题是三个问题中最复杂的一个。这个问题中只给出观测序列
O=o1,o2,...,ot,让求 HMM 模型
λ 的三个参数:
A、
B 和
π。例如,给出观测天气是(阴天,雨天,晴天),根据观测序列求一个 HMM 模型。解决算法:
Baum−Welch 算法(EM算法)。
3.3 预测问题
预测问题,也称为解码问题。给定 HMM 模型
λ 和观测序列
O=o1,o2,...,ot,求在该 HMM 模型下最有可能生成这个观测序列的隐状态序列。例如,观测天气是(阴天,雨天,晴天),求最有可能对应该观测序列的状态序列是(艳阳高照,乌云密布,电闪雷鸣),还是(乌云密布,电闪雷鸣,艳阳高照),或者是其他的某个状态序列。解决算法:
Viterbi 算法(一种动态规划)。
四、三个问题解决算法
4.1 概率计算算法
目的:给定 HMM 模型
λ=(A,B,π) 和观测序列
O=o1,o2,...,oT,求在该HMM 模型下生成该观测序列的概率
P(O∣λ)。
4.1.1 直接计算法(暴力法)
首先,在给定 HMM 模型下,生成 一个 隐状态序列
I=i1,i2,...,iT 的概率为:
P(I∣λ)=πi1ai1i2ai2i3...aiT−1iT
然后,在该状态序列,生成对应的观测序列
O=o1,o2,...,oT 的改立为:
P(O∣I,λ)=bi1o1bi2o2...biToT
最后,在给定 HMM 模型下,生成状态序列
I 和观测序列
O 的联合概率为:
P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1o1ai1i2bi2o2...aiT−1iTbiToT
综上是 HMM 模型生成一个状态序列,再生成观测序列的概率。只要对所有不同的状态序列
I 求和,就是要求的给定观测序列的概率
P(O∣λ):
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)=I1,I2,...∑πi1bi1o1ai1i2bi2o2...aiT−1iTbiToT
使用该算法原理简单,但是计算量巨大。时间复杂度:
O(TNT)。
4.1.2 前向算法
4.1.2.1 详解

前向概率
αt(i) 如下图所示:

其实,前向算法可以看做是动态规划。
注意看呦,
αt(i)=P(o1,o2,...,ot,it=qt∣λ) 这不就是 暴力法中第三步 求的状态序列
I 和观测序列
O 的联合概率吗?
我们只要把
t 时刻中所有状态序列
qi∈(q1,q2,...,qn) 做累加,然后乘上
t+1 时刻
qi 对应的观测概率,即
[∑j=1nαt(j)aji]biot+1,就得到
t+1 时刻的状态序列
I 和观测序列
O 的联合概率,即前向概率
αt+1(i)。
如下图所示:

所以,只要计算出
t=1 时刻的前向概率
α1(i),往后依次递推就可以了。例如
α1(i)=πi1bi1o1,
α2(i)=α1(1)b1oi+α1(2)b2oi+...+α1(n)bnoi。
综上:

4.1.2.2 例子

观测集合为:
V=(红,白)
状态集合为:
Q=(盒子1,盒子2,盒子3)
观测序列为:
O=(红,白,红)
状态转移概率矩阵为
A :
第
i 行表示选择第
i 个盒子,第
j 列表示转移到第
j 个盒子, 比如:
A23 表示上一次选择第二个盒子,这次选择第三个盒子的概率为 0.2。
观测概率矩阵
B:
第
i 行表示选择的是第
i 个盒子,第
j 列表示从该盒子取到
j 号球, 比如:
B31 表示从第二个盒子取出球的概率为 0.7。
(1) 计算初值
t=1
t=1 时刻取出红球,隐状态是盒子1的概率:
α1(1)=π1b1o1=0.2×0.5=0.10
t=1 时刻取出红球,隐状态是盒子2的概率:
α1(2)=π2b2o1=0.4×0.4=0.16
t=1 时刻取出红球,隐状态是盒子3的概率:
α1(3)=π3b3o1=0.4×0.7=0.28
(2) 递推计算
t=2
t=2 时刻取出白球,隐状态是盒子1的概率:
α2(1)=[i=1∑3α1(i)ai1]b1o2=(0.10×0.5+0.16×0.3+0.28∗0.2)×0.5=0.154×0.5=0.077
t=2 时刻取出白球,隐状态是盒子2的概率:
α2(2)=[i=1∑3α1(i)ai2]b2o2=(0.10×0.2+0.16×0.5+0.28∗0.3)×0.6=0.184×0.6=0.1104
t=2 时刻取出白球,隐状态是盒子3的概率:
α2(3)=[i=1∑3α1(i)ai3]b3o2=(0.10×0.3+0.16×0.2+0.28∗0.5)×0.3=0.202×0.3=0.0606
(3) 递推计算
t=3
t=3 时刻取出红球,隐状态是盒子1的概率:
α3(1)=[i=1∑3α2(i)ai1]b1o2=0.04187
t=3 时刻取出红球,隐状态是盒子2的概率:
α3(2)=[i=1∑3α2(i)ai2]b2o2=0.03551
t=3 时刻取出红球,隐状态是盒子2的概率:
α3(3)=[i=1∑3α2(i)ai3]b3o2=0.05284
(4) 终止
P(O∣λ)=i=1∑3α3(i)=0.13022
4.1.3 后向算法
其实后向算法和前向算法类似,只不过是从后往前递推。

后向概率
βt(i) 如下图所示:

首先,定义最后时刻的
βT(i)=1。
然后 ,对于
t=T−1,T−2,...,1,后向概率
βt(i) 就等于
t 时刻的状态
it=qi 转移到时刻
t+1 的状态
it+1=qj 的概率 ×
t+1 时刻状态
it+1 对应的观测状态
ot+1 的概率 ×
t+1 时刻的后向概率
βt+1(i)。即:
βt(i)=j=1∑naijbjot+1βt+1(i)
如下图所示:

最后,观测概率
P(O∣λ)=∑i=1nπibio1β1(i)。
其实,观测概率
P(O∣λ) 还可以这么写:
P(O∣λ)=i=1∑nj=1∑nαt(i)aijbjot+1βt+1(j)
是不是其实很好理解。
4.1.3 一些概率与期望的计算
利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
- 给定模型
λ 和观测
O,在时刻
t 处于状态
qi 的概率。记
γt(i)=P(it=qi∣O,λ)=P(O∣λ)P(it=qi,O∣λ)
由前向概率
αt(i) 和后向概率
βt(i) 定义可知:
αt(i)βt(i)=P(it=qt∣O,λ)
于是得到:
γt(i)=P(O∣λ)αt(i)βt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
- 给定模型
λ 和观测
O,在时刻
t 处于状态
qi 的概率。同时在时刻
t+1 处于状态
qj 的概率,记
ξt(i,j)=P(it=qi,it+1=qj∣O,λ)=∑i=1N∑j=1NP(it=qi,it+1=qj,O∣λ)P(it=qi,it+1=qj,O∣λ)
而
P(it=qi,it+1=qj,O∣λ)=αt(i)aijbjot+1βt+1(j)
所以
ξt(i,j)=qj,O∣λ)=∑i=1N∑j=1Nαt(i)aijbjot+1βt+1(j)αt(i)aijbjot+1βt+1(j)

4.2 学习算法
目的:
- 给定观测序列
O=o1,o2,...,oT 和状态序列
I=i1,i2,...,iT,求HMM 模型
λ=(A,B,π) 的三个参数。
- 给定观测序列
O=o1,o2,...,oT,求HMM 模型
λ=(A,B,π) 的三个参数。
解决方法:
- 监督算法
-
Baum−Welch 算法
4.2.1 监督算法

第二步求观测概率应该是
bjk,因为懒,就直接截图了。
4.2.2 Baum-Welch 算法

现在已经知道的是观测数据
O=o1,o2,...,oT, 设隐状态数据为
I=i1,i2,...,iT,那么完全数据是
(O,I)=(o1,o2,...,oT,i1,i2,...,iT)。完全数据的对数似然函数是
logP(O,I∣λ)。
既然
Baum−Welch 算法使用的就是
EM 算法,那么就要走两个步骤:
(1)
E 步
求出联合分布
P(O,I∣λ) 基于条件概率
(I∣O,λ) 的期望,其中
λ 为 HMM 模型参数的当前估计值,
λ 为极大化的 HMM 模型参数。
(2)
M 步
最大化这个期望,得到更新的模型参数λ。接着不停的进行EM迭代,直到模型参数的值收敛为止。
公式推导:
(1)
E 步:求
Q 函数
根据
EM 的
Q 函数定义,即这里要求的联合分布的期望为:
Q(λ,λ)=I∑P(I∣O,λ)lnP(O,I∣λ)=I∑lnP(O,I∣λ)P(O,λ)P(I,O∣λ)
P(O,λ) 表示上次求出的参数与观测数据的联合概率,没有什么影响,所以:
Q(λ,λ)=I∑lnP(O,I∣λ)P(I,O∣λ)
而
P(O,I∣λ)=πi1bi1o1ai1i2bi2o2...aiT−1iTbiToT
所以
Q(λ,λ)=I∑P(I,O∣λ)[lnπi1+ln(ai1i2+...+aiT−1iT+ln(bi1o1+...+biToT))]=式1
I∑lnπi1P(I,O∣λ)+式2
I∑(t=1∑T−1lnaitit+1)P(I,O∣λ)+式3
I∑(t=1∑Tlnbitot)P(I,O∣λ)
(2)
M 步:极大化
Q,求模型参数
A,B,π
1)求
πi:
既然是求极值,肯定是要求导了。对于
πi 来说,满足约束条件
∑t=1Nπi=1。现在就变成了带约束条件的求极值,直接上拉格朗日乘子法。
式 1 可以写成:
I∑lnπi1P(I,O∣λ)=i=1∑NlnπiP(O,i1=qi∣λ)
拉格朗日函数:
L=i=1∑NlnπiP(O,i1=qi∣λ)+γ(i=1∑Nπi−1)
首先把求和
∑ 去掉,只对单个的
πi 求偏导并等于 0:
∂πi∂L=πiP(O,i1=qi∣λ)+γ=0
等价于:
∂πi∂L=P(O,i1=qi∣λ)+γπi=0
然后再添上对
i 的求和
∑,可得到:
γ=−P(O∣λ)
带入到第三项公式,可得:
πi=P(O∣λ)P(O,i1=qi∣λ)
2)求
aij:
式 2 可以写成:
I∑(t=1∑T−1lnaitit+1)P(O,I∣λ)=i=1∑Nj=1∑Nt=1∑T−1lnaijP(O,it=qi,it+1=qj∣λ)
同样有约束条件
∑j=1Naij=1,最后可以得到:
aij=P(O,it=qi∣λ)∑t=1T−1P(O,i1=qi,it+1=qj∣λ)
3)求
bij:
式 3 可以写成:
I∑(t=1∑Tlnbitot)P(I,O∣λ)=j=1∑Nt=1∑T−1lnbjotP(O,it=qj∣λ)
同样有约束条件
∑k=1Mbjk=1,要注意的是只有在
ot=vk 时
bjot 对
bjk 的偏导数才不为 0,以
I(ot=vk) 表示,最后可以得到:
bjk=∑t=1TP(O,it=qj∣λ)∑t=1TP(O,it=qj∣λ)I(ot=vk)
参数估计公式:
得到参数后,可以用 4.1.3 节的
γt(i),ξt(i,j) 表示:

算法总结:

4.3 预测算法
目的:给定 HMM 模型
λ=(A,B,π) 和观测序列
O=o1,o2,...,oT,求在该观测序列下,最可能对应的状态序列
I∗=i1∗,i2∗,...,iT∗,也就是最大化
P(I∗∣O)。
解决:Viterbi 算法。
其实维特比算法就用动态规划的方法求概率最大路径,计算过程中的每条路径都对应着一个状态序列。计算过程中将最优路径经过的点都保存下来。得到最优路径后,由后向前逐步求得最优结点,这就是维特比算法。
过程:
因为计算过程很简单,就直接给出书中的截图了。
首先导入两个变量
δ和
ψ。定义在时刻
t 状态为
i 的所有单个路径
(i1,i2,...,it) 中概率最大值为:


过程是不是很好理解?如果还不好理解,就继续看个例子。
例子:

整个计算过程如下图所示,



Reference
统计学习方法 李航