隐马尔科夫HMM
一、序言
重新复习隐马尔科夫模型,重点是HMM模型的三个问题及前向、后向和维特比算法。
二、基本概念
2.1 定义
隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的形式定义如下:
设Q是所有可能的状态的集合,V是所有可能的观测的集合。
Q
=
q
1
,
q
2
,
.
.
.
,
q
n
,
V
=
v
1
,
v
2
,
.
.
.
v
m
Q={q_{1},q_{2},...,q_{n}}, \quad V={v_{1},v_{2},...v_{m}}
Q=q1,q2,...,qn,V=v1,v2,...vm
其中,
n
n
n是可能的状态数,
m
m
m是可能的观测数。
设
I
I
I是长度为
t
t
t的状态序列,
O
O
O是对应的观测序列:
I
=
i
1
,
i
2
,
.
.
.
,
i
t
,
O
=
o
1
,
o
2
,
.
.
.
,
o
t
I={i_{1},i_{2},...,i_{t}}, \quad O={o_{1},o_{2},...,o_{t}}
I=i1,i2,...,it,O=o1,o2,...,ot
A
A
A是状态转移概率矩阵:
A
=
[
a
i
j
]
n
×
n
A=[a_{ij}]_{n×n}
A=[aij]n×n
其中,
a
i
j
=
P
(
i
t
=
q
j
∣
i
t
−
1
=
q
i
)
,
i
=
1
,
.
.
.
n
;
j
=
1
,
.
.
.
,
n
a_{ij}=P(i_{t}=q_{j}|i_{t-1}=q_{i}), \quad i=1,...n;j=1,...,n
aij=P(it=qj∣it−1=qi),i=1,...n;j=1,...,n
是在时刻
t
−
1
t-1
t−1处于状态
q
i
q_{i}
qi的条件下在时刻
t
t
t转移到状态
q
j
q_{j}
qj的概率。
B
B
B是观测概率矩阵:
B
=
[
b
j
k
]
n
×
m
B=[b_{jk}]_{n×m}
B=[bjk]n×m
其中,
b
k
j
=
P
(
o
t
=
v
k
∣
i
t
=
q
j
)
,
k
=
1
,
.
.
.
m
,
j
=
1
,
.
.
.
,
n
b_{kj}=P(o_{t}=v_{k}|i_{t}=q_{j}), \quad k=1,...m,j=1,...,n
bkj=P(ot=vk∣it=qj),k=1,...m,j=1,...,n
是在时刻
t
t
t处于状态
q
j
q_{j}
qj的条件下生成观测
v
k
v_{k}
vk的概率。
π
\pi
π是初始状态概率向量:
π
=
π
i
\pi=\pi_{i}
π=πi
其中,
π
i
=
P
(
i
1
=
q
i
)
,
i
=
1
,
.
.
.
n
\pi_{i}=P(i_{1}=q_{i}), \quad i=1,...n
πi=P(i1=qi),i=1,...n
是初始时刻
t
=
1
t=1
t=1处于状态
q
i
q_{i}
qi的概率。
2.2 例子
举个例子,当观察到屋外艳阳高照,那么肯定是晴天;若是半乌云密布,则是阴天;若是电闪雷鸣,则是雨天。艳阳高照,乌云密布,电闪雷鸣是我们能直接观察到的,对应着上面定义的观测序列。
而它们对应的天气状态分别是晴天、阴天和雨天,则是状态序列,因为我们先观察到外边的环境是艳阳高照,乌云密布,电闪雷鸣,然后再推测出是晴天、阴天还是雨天。
如下图所示,上面的是一条隐马尔科夫链,下面对应着其随机生成的状态序列。
如下图所示,是一个完整的 HMM 模型。
状态集合
Q
=
q
1
,
q
2
,
q
3
Q={q_{1},q_{2},q_{3}}
Q=q1,q2,q3,其中
q
1
=
艳
阳
高
照
q_{1}=艳阳高照
q1=艳阳高照,
q
2
=
乌
云
密
布
q_{2}=乌云密布
q2=乌云密布,
q
3
=
电
闪
雷
鸣
q_{3}=电闪雷鸣
q3=电闪雷鸣。
观测集合
V
=
v
1
,
v
2
,
v
3
V={v_{1},v_{2},v_{3}}
V=v1,v2,v3,其中
v
1
=
晴
天
v_{1}=晴天
v1=晴天,
v
2
=
阴
天
v_{2}=阴天
v2=阴天,
v
3
=
雨
天
v_{3}=雨天
v3=雨天。
状态转移概率矩阵
A
A
A:
观测概率矩阵
B
B
B:
初始状态概率
π
\pi
π:
以上数据是随便写的。
2.3 基本假设
三、三个问题
只看这个可能有点晦涩,下面就例子说的通俗一下:
3.1 概率计算问题
评估问题,即概率计算问题,是三个问题中最简单的。给定 HMM 模型 λ \lambda λ,也就是已经知道状态转移概率矩阵 A A A、观测概率矩阵 B B B 和初始状态概率 π \pi π,同时给出观测序列 O = o 1 , o 2 , . . . , o t O={o_{1},o_{2},...,o_{t}} O=o1,o2,...,ot,求在该 HMM 模型下这个观测序列生成的概率。例如求接下来三天的观测天气是(阴天,雨天,晴天)的概率。解决算法:前向-后向算法。
3.2 学习问题
学习问题是三个问题中最复杂的一个。这个问题中只给出观测序列 O = o 1 , o 2 , . . . , o t O={o_{1},o_{2},...,o_{t}} O=o1,o2,...,ot,让求 HMM 模型 λ \lambda λ 的三个参数: A A A、 B B B 和 π \pi π。例如,给出观测天气是(阴天,雨天,晴天),根据观测序列求一个 HMM 模型。解决算法: B a u m − W e l c h Baum-Welch Baum−Welch 算法(EM算法)。
3.3 预测问题
预测问题,也称为解码问题。给定 HMM 模型 λ \lambda λ 和观测序列 O = o 1 , o 2 , . . . , o t O={o_{1},o_{2},...,o_{t}} O=o1,o2,...,ot,求在该 HMM 模型下最有可能生成这个观测序列的隐状态序列。例如,观测天气是(阴天,雨天,晴天),求最有可能对应该观测序列的状态序列是(艳阳高照,乌云密布,电闪雷鸣),还是(乌云密布,电闪雷鸣,艳阳高照),或者是其他的某个状态序列。解决算法: V i t e r b i Viterbi Viterbi 算法(一种动态规划)。
四、三个问题解决算法
4.1 概率计算算法
目的:给定 HMM 模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = o 1 , o 2 , . . . , o T O={o_{1},o_{2},...,o_{T}} O=o1,o2,...,oT,求在该HMM 模型下生成该观测序列的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
4.1.1 直接计算法(暴力法)
首先,在给定 HMM 模型下,生成 一个 隐状态序列
I
=
i
1
,
i
2
,
.
.
.
,
i
T
I={i_{1},i_{2},...,i_{T}}
I=i1,i2,...,iT 的概率为:
P
(
I
∣
λ
)
=
π
i
1
a
i
1
i
2
a
i
2
i
3
.
.
.
a
i
T
−
1
i
T
P(I|\lambda) = \pi_{i_{1}}a_{i_{1}i_{2}}a_{i_{2}i_{3}}...a_{i_{T-1}i_{T}}
P(I∣λ)=πi1ai1i2ai2i3...aiT−1iT
然后,在该状态序列,生成对应的观测序列
O
=
o
1
,
o
2
,
.
.
.
,
o
T
O={o_{1},o_{2},...,o_{T}}
O=o1,o2,...,oT 的改立为:
P
(
O
∣
I
,
λ
)
=
b
i
1
o
1
b
i
2
o
2
.
.
.
b
i
T
o
T
P(O|I,\lambda) = b_{i_{1}o_{1}}b_{i_{2}o_{2}}...b_{i_{T}o_{T}}
P(O∣I,λ)=bi1o1bi2o2...biToT
最后,在给定 HMM 模型下,生成状态序列
I
I
I 和观测序列
O
O
O 的联合概率为:
P
(
O
,
I
∣
λ
)
=
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
π
i
1
b
i
1
o
1
a
i
1
i
2
b
i
2
o
2
.
.
.
a
i
T
−
1
i
T
b
i
T
o
T
P(O,I|\lambda) = P(O|I,\lambda)P(I|\lambda) = \pi_{i_{1}}b_{i_{1}o_{1}}a_{i_{1}i_{2}}b_{i_{2}o_{2}}...a_{i_{T-1}i_{T}}b_{i_{T}o_{T}}
P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1o1ai1i2bi2o2...aiT−1iTbiToT
综上是 HMM 模型生成一个状态序列,再生成观测序列的概率。只要对所有不同的状态序列
I
I
I 求和,就是要求的给定观测序列的概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ):
P
(
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
∑
I
1
,
I
2
,
.
.
.
π
i
1
b
i
1
o
1
a
i
1
i
2
b
i
2
o
2
.
.
.
a
i
T
−
1
i
T
b
i
T
o
T
P(O|\lambda) = \sum_{I}P(O|I,\lambda)P(I|\lambda) = \sum_{I_{1},I_{2},...}\pi_{i_{1}}b_{i_{1}o_{1}}a_{i_{1}i_{2}}b_{i_{2}o_{2}}...a_{i_{T-1}i_{T}}b_{i_{T}o_{T}}
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)=I1,I2,...∑πi1bi1o1ai1i2bi2o2...aiT−1iTbiToT
使用该算法原理简单,但是计算量巨大。时间复杂度:
O
(
T
N
T
)
O(TN^{T})
O(TNT)。
4.1.2 前向算法
4.1.2.1 详解
前向概率
α
t
(
i
)
\alpha_{t}(i)
αt(i) 如下图所示:
其实,前向算法可以看做是动态规划。
注意看呦,
α
t
(
i
)
=
P
(
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
t
∣
λ
)
\alpha_{t}(i) = P(o_{1},o_{2},...,o_{t},i_{t}=q_{t}|\lambda)
αt(i)=P(o1,o2,...,ot,it=qt∣λ) 这不就是 暴力法中第三步 求的状态序列
I
I
I 和观测序列
O
O
O 的联合概率吗?
我们只要把
t
t
t 时刻中所有状态序列
q
i
∈
(
q
1
,
q
2
,
.
.
.
,
q
n
)
q_{i} \in (q_{1},q_{2},...,q_{n})
qi∈(q1,q2,...,qn) 做累加,然后乘上
t
+
1
t+1
t+1 时刻
q
i
q_{i}
qi 对应的观测概率,即
[
∑
j
=
1
n
α
t
(
j
)
a
j
i
]
b
i
o
t
+
1
[\sum_{j=1}^n \alpha_{t}(j)a_{ji}]b_{i}o_{t+1}
[∑j=1nαt(j)aji]biot+1,就得到
t
+
1
t+1
t+1 时刻的状态序列
I
I
I 和观测序列
O
O
O 的联合概率,即前向概率
α
t
+
1
(
i
)
\alpha_{t+1}(i)
αt+1(i)。
如下图所示:
所以,只要计算出
t
=
1
t=1
t=1 时刻的前向概率
α
1
(
i
)
\alpha_{1}(i)
α1(i),往后依次递推就可以了。例如
α
1
(
i
)
=
π
i
1
b
i
1
o
1
\alpha_{1}(i) = \pi_{i_{1}}b_{i_{1}o_{1}}
α1(i)=πi1bi1o1,
α
2
(
i
)
=
α
1
(
1
)
b
1
o
i
+
α
1
(
2
)
b
2
o
i
+
.
.
.
+
α
1
(
n
)
b
n
o
i
\alpha_{2}(i) = \alpha_{1}(1)b_{1}o_{i} + \alpha_{1}(2)b_{2}o_{i} +...+\alpha_{1}(n)b_{n}o_{i}
α2(i)=α1(1)b1oi+α1(2)b2oi+...+α1(n)bnoi。
综上:
4.1.2.2 例子
观测集合为:
V
=
(
红
,
白
)
V=(红,白)
V=(红,白)
状态集合为:
Q
=
(
盒
子
1
,
盒
子
2
,
盒
子
3
)
Q=(盒子1,盒子2,盒子3)
Q=(盒子1,盒子2,盒子3)
观测序列为:
O
=
(
红
,
白
,
红
)
O=(红,白,红)
O=(红,白,红)
状态转移概率矩阵为
A
A
A :
第
i
i
i 行表示选择第
i
i
i 个盒子,第
j
j
j 列表示转移到第
j
j
j 个盒子, 比如:
A
23
A_{23}
A23 表示上一次选择第二个盒子,这次选择第三个盒子的概率为 0.2。
观测概率矩阵
B
B
B:
第
i
i
i 行表示选择的是第
i
i
i 个盒子,第
j
j
j 列表示从该盒子取到
j
j
j 号球, 比如:
B
31
B_{31}
B31 表示从第二个盒子取出球的概率为 0.7。
(1) 计算初值
t
=
1
t=1
t=1
t
=
1
t=1
t=1 时刻取出红球,隐状态是盒子1的概率:
α
1
(
1
)
=
π
1
b
1
o
1
=
0.2
×
0.5
=
0.10
\alpha_{1}(1) = \pi_{1}b_{1o_{1}} = 0.2×0.5=0.10
α1(1)=π1b1o1=0.2×0.5=0.10
t
=
1
t=1
t=1 时刻取出红球,隐状态是盒子2的概率:
α
1
(
2
)
=
π
2
b
2
o
1
=
0.4
×
0.4
=
0.16
\alpha_{1}(2) = \pi_{2}b_{2o_{1}} = 0.4×0.4=0.16
α1(2)=π2b2o1=0.4×0.4=0.16
t
=
1
t=1
t=1 时刻取出红球,隐状态是盒子3的概率:
α
1
(
3
)
=
π
3
b
3
o
1
=
0.4
×
0.7
=
0.28
\alpha_{1}(3) = \pi_{3}b_{3o_{1}} = 0.4×0.7=0.28
α1(3)=π3b3o1=0.4×0.7=0.28
(2) 递推计算
t
=
2
t=2
t=2
t
=
2
t=2
t=2 时刻取出白球,隐状态是盒子1的概率:
α
2
(
1
)
=
[
∑
i
=
1
3
α
1
(
i
)
a
i
1
]
b
1
o
2
=
(
0.10
×
0.5
+
0.16
×
0.3
+
0.28
∗
0.2
)
×
0.5
=
0.154
×
0.5
=
0.077
\alpha_{2}(1) = [\sum_{i=1}^3 \alpha_{1}(i)a_{i1}]b_{1o_{2}} = (0.10×0.5+0.16×0.3+0.28*0.2)×0.5=0.154×0.5=0.077
α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
t=2
t=2 时刻取出白球,隐状态是盒子2的概率:
α
2
(
2
)
=
[
∑
i
=
1
3
α
1
(
i
)
a
i
2
]
b
2
o
2
=
(
0.10
×
0.2
+
0.16
×
0.5
+
0.28
∗
0.3
)
×
0.6
=
0.184
×
0.6
=
0.1104
\alpha_{2}(2) = [\sum_{i=1}^3 \alpha_{1}(i)a_{i2}]b_{2o_{2}} = (0.10×0.2+0.16×0.5+0.28*0.3)×0.6=0.184×0.6=0.1104
α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
t=2
t=2 时刻取出白球,隐状态是盒子3的概率:
α
2
(
3
)
=
[
∑
i
=
1
3
α
1
(
i
)
a
i
3
]
b
3
o
2
=
(
0.10
×
0.3
+
0.16
×
0.2
+
0.28
∗
0.5
)
×
0.3
=
0.202
×
0.3
=
0.0606
\alpha_{2}(3) = [\sum_{i=1}^3 \alpha_{1}(i)a_{i3}]b_{3o_{2}} = (0.10×0.3+0.16×0.2+0.28*0.5)×0.3=0.202×0.3=0.0606
α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
t=3
t
=
3
t=3
t=3 时刻取出红球,隐状态是盒子1的概率:
α
3
(
1
)
=
[
∑
i
=
1
3
α
2
(
i
)
a
i
1
]
b
1
o
2
=
0.04187
\alpha_{3}(1) = [\sum_{i=1}^3 \alpha_{2}(i)a_{i1}]b_{1o_{2}}=0.04187
α3(1)=[i=1∑3α2(i)ai1]b1o2=0.04187
t
=
3
t=3
t=3 时刻取出红球,隐状态是盒子2的概率:
α
3
(
2
)
=
[
∑
i
=
1
3
α
2
(
i
)
a
i
2
]
b
2
o
2
=
0.03551
\alpha_{3}(2) = [\sum_{i=1}^3 \alpha_{2}(i)a_{i2}]b_{2o_{2}}=0.03551
α3(2)=[i=1∑3α2(i)ai2]b2o2=0.03551
t
=
3
t=3
t=3 时刻取出红球,隐状态是盒子2的概率:
α
3
(
3
)
=
[
∑
i
=
1
3
α
2
(
i
)
a
i
3
]
b
3
o
2
=
0.05284
\alpha_{3}(3) = [\sum_{i=1}^3 \alpha_{2}(i)a_{i3}]b_{3o_{2}}=0.05284
α3(3)=[i=1∑3α2(i)ai3]b3o2=0.05284
(4) 终止
P
(
O
∣
λ
)
=
∑
i
=
1
3
α
3
(
i
)
=
0.13022
P(O|\lambda) =\sum_{i=1}^3 \alpha_{3}(i)=0.13022
P(O∣λ)=i=1∑3α3(i)=0.13022
4.1.3 后向算法
其实后向算法和前向算法类似,只不过是从后往前递推。
后向概率
β
t
(
i
)
\beta{t}(i)
βt(i) 如下图所示:
首先,定义最后时刻的
β
T
(
i
)
=
1
\beta_{T}(i) = 1
βT(i)=1。
然后 ,对于
t
=
T
−
1
,
T
−
2
,
.
.
.
,
1
t = T-1,T-2,...,1
t=T−1,T−2,...,1,后向概率
β
t
(
i
)
\beta_{t}(i)
βt(i) 就等于
t
t
t 时刻的状态
i
t
=
q
i
i_{t} = q_{i}
it=qi 转移到时刻
t
+
1
t+1
t+1 的状态
i
t
+
1
=
q
j
i_{t+1} = q_{j}
it+1=qj 的概率 ×
t
+
1
t+1
t+1 时刻状态
i
t
+
1
i_{t+1}
it+1 对应的观测状态
o
t
+
1
o_{t+1}
ot+1 的概率 ×
t
+
1
t+1
t+1 时刻的后向概率
β
t
+
1
(
i
)
\beta_{t+1}(i)
βt+1(i)。即:
β
t
(
i
)
=
∑
j
=
1
n
a
i
j
b
j
o
t
+
1
β
t
+
1
(
i
)
\beta_{t}(i) = \sum_{j=1}^n a_{ij}b_{jo_{t+1}}\beta_{t+1}(i)
βt(i)=j=1∑naijbjot+1βt+1(i)
如下图所示:
最后,观测概率
P
(
O
∣
λ
)
=
∑
i
=
1
n
π
i
b
i
o
1
β
1
(
i
)
P(O|\lambda) = \sum_{i=1}^n \pi_{i}b_{io_{1}}\beta_{1}(i)
P(O∣λ)=∑i=1nπibio1β1(i)。
其实,观测概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ) 还可以这么写:
P
(
O
∣
λ
)
=
∑
i
=
1
n
∑
j
=
1
n
α
t
(
i
)
a
i
j
b
j
o
t
+
1
β
t
+
1
(
j
)
P(O|\lambda) = \sum_{i=1}^n \sum_{j=1}^n \alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)
P(O∣λ)=i=1∑nj=1∑nαt(i)aijbjot+1βt+1(j)
是不是其实很好理解。
4.1.3 一些概率与期望的计算
利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
- 给定模型
λ
\lambda
λ 和观测
O
O
O,在时刻
t
t
t 处于状态
q
i
q_{i}
qi 的概率。记
γ t ( i ) = P ( i t = q i ∣ O , λ ) = P ( i t = q i , O ∣ λ ) P ( O ∣ λ ) \gamma_{t}(i) = P(i_{t}=q_{i}|O,\lambda) = \frac{P(i_{t}=q_{i},O|\lambda)}{P(O|\lambda)} γt(i)=P(it=qi∣O,λ)=P(O∣λ)P(it=qi,O∣λ)
由前向概率 α t ( i ) \alpha_t(i) αt(i) 和后向概率 β t ( i ) \beta_t(i) βt(i) 定义可知:
α t ( i ) β t ( i ) = P ( i t = q t ∣ O , λ ) \alpha_{t}(i)\beta_t(i) = P(i_{t}=q_{t}|O,\lambda) αt(i)βt(i)=P(it=qt∣O,λ)
于是得到:
γ t ( i ) = α t ( i ) β t ( i ) P ( O ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) \gamma_{t}(i) = \frac{\alpha_{t}(i)\beta_t(i)}{P(O|\lambda)} = \frac{\alpha_{t}(i)\beta_t(i)}{\sum_{j=1}^N \alpha_{t}(j)\beta_t(j)} γt(i)=P(O∣λ)αt(i)βt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i) - 给定模型
λ
\lambda
λ 和观测
O
O
O,在时刻
t
t
t 处于状态
q
i
q_{i}
qi 的概率。同时在时刻
t
+
1
t+1
t+1 处于状态
q
j
q_{j}
qj 的概率,记
ξ t ( i , j ) = P ( i t = q i , i t + 1 = q j ∣ O , λ ) = P ( i t = q i , i t + 1 = q j , O ∣ λ ) ∑ i = 1 N ∑ j = 1 N P ( i t = q i , i t + 1 = q j , O ∣ λ ) \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)}{\sum_{i=1}^N \sum_{j=1}^N P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda)} ξ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 ( i t = q i , i t + 1 = q j , O ∣ λ ) = α t ( i ) a i j b j o t + 1 β t + 1 ( j ) P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda) = \alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j) P(it=qi,it+1=qj,O∣λ)=αt(i)aijbjot+1βt+1(j)
所以
ξ t ( i , j ) = q j , O ∣ λ ) = α t ( i ) a i j b j o t + 1 β t + 1 ( j ) ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j o t + 1 β t + 1 ( j ) \xi_{t}(i,j) = q_{j},O|\lambda) = \frac{\alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{\sum_{i=1}^N \sum_{j=1}^N \alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{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 = o 1 , o 2 , . . . , o T O={o_{1},o_{2},...,o_{T}} O=o1,o2,...,oT 和状态序列 I = i 1 , i 2 , . . . , i T I={i_{1},i_{2},...,i_{T}} I=i1,i2,...,iT,求HMM 模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 的三个参数。
- 给定观测序列 O = o 1 , o 2 , . . . , o T O={o_{1},o_{2},...,o_{T}} O=o1,o2,...,oT,求HMM 模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 的三个参数。
解决方法:
- 监督算法
- B a u m − W e l c h Baum-Welch Baum−Welch 算法
4.2.1 监督算法
第二步求观测概率应该是 b j k b_{jk} bjk,因为懒,就直接截图了。
4.2.2 Baum-Welch 算法
现在已经知道的是观测数据 O = o 1 , o 2 , . . . , o T O={o_{1},o_{2},...,o_{T}} O=o1,o2,...,oT, 设隐状态数据为 I = i 1 , i 2 , . . . , i T I={i_{1},i_{2},...,i_{T}} I=i1,i2,...,iT,那么完全数据是 ( O , I ) = ( o 1 , o 2 , . . . , o T , i 1 , i 2 , . . . , i T ) (O,I)=(o_{1},o_{2},...,o_{T},i_{1},i_{2},...,i_{T}) (O,I)=(o1,o2,...,oT,i1,i2,...,iT)。完全数据的对数似然函数是 l o g P ( O , I ∣ λ ) logP(O,I|\lambda) logP(O,I∣λ)。
既然
B
a
u
m
−
W
e
l
c
h
Baum-Welch
Baum−Welch 算法使用的就是
E
M
EM
EM 算法,那么就要走两个步骤:
(1)
E
E
E 步
求出联合分布
P
(
O
,
I
∣
λ
)
P(O,I|\lambda)
P(O,I∣λ) 基于条件概率
(
I
∣
O
,
λ
‾
)
(I|O,\overline \lambda)
(I∣O,λ) 的期望,其中
λ
‾
\overline \lambda
λ 为 HMM 模型参数的当前估计值,
λ
\lambda
λ 为极大化的 HMM 模型参数。
(2)
M
M
M 步
最大化这个期望,得到更新的模型参数λ。接着不停的进行EM迭代,直到模型参数的值收敛为止。
公式推导:
(1)
E
E
E 步:求
Q
Q
Q 函数
根据
E
M
EM
EM 的
Q
Q
Q 函数定义,即这里要求的联合分布的期望为:
Q
(
λ
,
λ
‾
)
=
∑
I
P
(
I
∣
O
,
λ
‾
)
l
n
P
(
O
,
I
∣
λ
)
=
∑
I
l
n
P
(
O
,
I
∣
λ
)
P
(
I
,
O
∣
λ
‾
)
P
(
O
,
λ
‾
)
Q(\lambda,\overline \lambda) = \sum_{I}P(I|O,\overline \lambda)lnP(O,I|\lambda) = \sum_{I}lnP(O,I|\lambda)\frac{P(I,O|\overline \lambda)}{P(O,\overline \lambda)}
Q(λ,λ)=I∑P(I∣O,λ)lnP(O,I∣λ)=I∑lnP(O,I∣λ)P(O,λ)P(I,O∣λ)
P
(
O
,
λ
‾
)
P(O,\overline \lambda)
P(O,λ) 表示上次求出的参数与观测数据的联合概率,没有什么影响,所以:
Q
(
λ
,
λ
‾
)
=
∑
I
l
n
P
(
O
,
I
∣
λ
)
P
(
I
,
O
∣
λ
‾
)
Q(\lambda,\overline \lambda) = \sum_{I}lnP(O,I|\lambda)P(I,O|\overline \lambda)
Q(λ,λ)=I∑lnP(O,I∣λ)P(I,O∣λ)
而
P
(
O
,
I
∣
λ
)
=
π
i
1
b
i
1
o
1
a
i
1
i
2
b
i
2
o
2
.
.
.
a
i
T
−
1
i
T
b
i
T
o
T
P(O,I|\lambda) = \pi_{i_{1}}b_{i_{1}o_{1}}a_{i_{1}i_{2}}b_{i_{2}o_{2}}...a_{i_{T-1}i_{T}}b_{i_{T}o_{T}}
P(O,I∣λ)=πi1bi1o1ai1i2bi2o2...aiT−1iTbiToT
所以
Q
(
λ
,
λ
‾
)
=
∑
I
P
(
I
,
O
∣
λ
‾
)
[
l
n
π
i
1
+
l
n
(
a
i
1
i
2
+
.
.
.
+
a
i
T
−
1
i
T
+
l
n
(
b
i
1
o
1
+
.
.
.
+
b
i
T
o
T
)
)
]
=
∑
I
l
n
π
i
1
P
(
I
,
O
∣
λ
‾
)
⏟
式
1
+
∑
I
(
∑
t
=
1
T
−
1
l
n
a
i
t
i
t
+
1
)
P
(
I
,
O
∣
λ
‾
)
⏟
式
2
+
∑
I
(
∑
t
=
1
T
l
n
b
i
t
o
t
)
P
(
I
,
O
∣
λ
‾
)
⏟
式
3
Q(\lambda,\overline \lambda) = \sum_{I}P(I,O|\overline \lambda) [ln \pi_{i_{1}} + ln(a_{i_{1}i_{2}}+...+a_{i_{T-1}i_{T}} + ln(b_{i_{1}o_{1}}+...+b_{i_{T}o_{T}}))] \\ = \underbrace{ \sum_{I} ln \pi_{i_{1}} P(I,O|\overline \lambda)}_{式1} + \underbrace{ \sum_{I} (\sum_{t=1}^{T-1} ln a_{i_{t}i_{t+1}}) P(I,O|\overline \lambda)}_{式2} + \underbrace{ \sum_{I} (\sum_{t=1}^{T} ln b_{i_{t}o_{t}}) P(I,O|\overline \lambda)}_{式3}
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
M
M 步:极大化
Q
Q
Q,求模型参数
A
,
B
,
π
A,B,\pi
A,B,π
1)求
π
i
\pi_{i}
πi:
既然是求极值,肯定是要求导了。对于
π
i
\pi_{i}
πi 来说,满足约束条件
∑
t
=
1
N
π
i
=
1
\sum_{t=1}^N \pi_{i}=1
∑t=1Nπi=1。现在就变成了带约束条件的求极值,直接上拉格朗日乘子法。
式 1 可以写成:
∑
I
l
n
π
i
1
P
(
I
,
O
∣
λ
‾
)
=
∑
i
=
1
N
l
n
π
i
P
(
O
,
i
1
=
q
i
∣
λ
‾
)
\sum_{I} ln \pi_{i_{1}} P(I,O|\overline \lambda) = \sum_{i=1}^N ln \pi_{i} P(O,i_{1}=q_{i}|\overline \lambda)
I∑lnπi1P(I,O∣λ)=i=1∑NlnπiP(O,i1=qi∣λ)
拉格朗日函数:
L
=
∑
i
=
1
N
l
n
π
i
P
(
O
,
i
1
=
q
i
∣
λ
‾
)
+
γ
(
∑
i
=
1
N
π
i
−
1
)
L = \sum_{i=1}^N ln \pi_{i}P(O,i_{1}=q_{i}|\overline \lambda) + \gamma(\sum_{i=1}^N \pi_{i}-1)
L=i=1∑NlnπiP(O,i1=qi∣λ)+γ(i=1∑Nπi−1)
首先把求和
∑
\sum
∑ 去掉,只对单个的
π
i
\pi_{i}
πi 求偏导并等于 0:
∂
L
∂
π
i
=
P
(
O
,
i
1
=
q
i
∣
λ
‾
)
π
i
+
γ
=
0
\frac{\partial L}{\partial \pi_{i}} = \frac{P(O,i_{1}=q_{i}|\overline \lambda)}{\pi_{i}} + \gamma = 0
∂πi∂L=πiP(O,i1=qi∣λ)+γ=0
等价于:
∂
L
∂
π
i
=
P
(
O
,
i
1
=
q
i
∣
λ
‾
)
+
γ
π
i
=
0
\frac{\partial L}{\partial \pi_{i}} =P(O,i_{1}=q_{i}|\overline \lambda) + \gamma \pi_{i} = 0
∂πi∂L=P(O,i1=qi∣λ)+γπi=0
然后再添上对
i
i
i 的求和
∑
\sum
∑,可得到:
γ
=
−
P
(
O
∣
λ
‾
)
\gamma = -P(O|\overline \lambda)
γ=−P(O∣λ)
带入到第三项公式,可得:
π
i
=
P
(
O
,
i
1
=
q
i
∣
λ
‾
)
P
(
O
∣
λ
‾
)
\pi_{i} = \frac{P(O,i_{1}=q_{i}|\overline \lambda)}{P(O|\overline \lambda)}
πi=P(O∣λ)P(O,i1=qi∣λ)
2)求
a
i
j
a_{ij}
aij:
式 2 可以写成:
∑
I
(
∑
t
=
1
T
−
1
l
n
a
i
t
i
t
+
1
)
P
(
O
,
I
∣
λ
‾
)
=
∑
i
=
1
N
∑
j
=
1
N
∑
t
=
1
T
−
1
l
n
a
i
j
P
(
O
,
i
t
=
q
i
,
i
t
+
1
=
q
j
∣
λ
‾
)
\sum_{I} (\sum_{t=1}^{T-1} ln a_{i_{t}i_{t+1}}) P(O,I|\overline \lambda) = \sum_{i=1}^N \sum_{j=1}^N \sum_{t=1}^{T-1} ln a_{ij} P(O,i_{t}=q_{i},i_{t+1}=q_{j}|\overline \lambda)
I∑(t=1∑T−1lnaitit+1)P(O,I∣λ)=i=1∑Nj=1∑Nt=1∑T−1lnaijP(O,it=qi,it+1=qj∣λ)
同样有约束条件
∑
j
=
1
N
a
i
j
=
1
\sum_{j=1}^Na_{ij}=1
∑j=1Naij=1,最后可以得到:
a
i
j
=
∑
t
=
1
T
−
1
P
(
O
,
i
1
=
q
i
,
i
t
+
1
=
q
j
∣
λ
‾
)
P
(
O
,
i
t
=
q
i
∣
λ
‾
)
a_{ij} = \frac{\sum_{t=1}^{T-1} P(O,i_{1}=q_{i},i_{t+1}=q_{j}|\overline \lambda)}{P(O,i_{t}=q_{i}|\overline \lambda)}
aij=P(O,it=qi∣λ)∑t=1T−1P(O,i1=qi,it+1=qj∣λ)
3)求
b
i
j
b_{ij}
bij:
式 3 可以写成:
∑
I
(
∑
t
=
1
T
l
n
b
i
t
o
t
)
P
(
I
,
O
∣
λ
‾
)
=
∑
j
=
1
N
∑
t
=
1
T
−
1
l
n
b
j
o
t
P
(
O
,
i
t
=
q
j
∣
λ
‾
)
\sum_{I} (\sum_{t=1}^{T} ln b_{i_{t}o_{t}}) P(I,O|\overline \lambda) = \sum_{j=1}^N \sum_{t=1}^{T-1} lnb_{jo_{t}}P(O,i_{t}=q_{j}|\overline \lambda)
I∑(t=1∑Tlnbitot)P(I,O∣λ)=j=1∑Nt=1∑T−1lnbjotP(O,it=qj∣λ)
同样有约束条件
∑
k
=
1
M
b
j
k
=
1
\sum_{k=1}^M b_{jk}=1
∑k=1Mbjk=1,要注意的是只有在
o
t
=
v
k
o_{t}=v_{k}
ot=vk 时
b
j
o
t
b_{jo_{t}}
bjot 对
b
j
k
b_{jk}
bjk 的偏导数才不为 0,以
I
(
o
t
=
v
k
)
I(o_{t}=v_{k})
I(ot=vk) 表示,最后可以得到:
b
j
k
=
∑
t
=
1
T
P
(
O
,
i
t
=
q
j
∣
λ
‾
)
I
(
o
t
=
v
k
)
∑
t
=
1
T
P
(
O
,
i
t
=
q
j
∣
λ
‾
)
b_{jk} = \frac{\sum_{t=1}^{T} P(O,i_{t}=q_{j}|\overline \lambda) I(o_{t}=v_{k})}{\sum_{t=1}^{T} P(O,i_{t}=q_{j}|\overline \lambda)}
bjk=∑t=1TP(O,it=qj∣λ)∑t=1TP(O,it=qj∣λ)I(ot=vk)
参数估计公式:
得到参数后,可以用 4.1.3 节的
γ
t
(
i
)
,
ξ
t
(
i
,
j
)
\gamma_{t}(i),\xi_{t}(i,j)
γt(i),ξt(i,j) 表示:
算法总结:
4.3 预测算法
目的:给定 HMM 模型
λ
=
(
A
,
B
,
π
)
\lambda = (A,B,\pi)
λ=(A,B,π) 和观测序列
O
=
o
1
,
o
2
,
.
.
.
,
o
T
O={o_{1},o_{2},...,o_{T}}
O=o1,o2,...,oT,求在该观测序列下,最可能对应的状态序列
I
∗
=
i
1
∗
,
i
2
∗
,
.
.
.
,
i
T
∗
I^*={i_{1}^*,i_{2}^*,...,i_{T}^*}
I∗=i1∗,i2∗,...,iT∗,也就是最大化
P
(
I
∗
∣
O
)
P(I^*|O)
P(I∗∣O)。
解决:Viterbi 算法。
其实维特比算法就用动态规划的方法求概率最大路径,计算过程中的每条路径都对应着一个状态序列。计算过程中将最优路径经过的点都保存下来。得到最优路径后,由后向前逐步求得最优结点,这就是维特比算法。
过程:
因为计算过程很简单,就直接给出书中的截图了。
首先导入两个变量
δ
\delta
δ和
ψ
\psi
ψ。定义在时刻
t
t
t 状态为
i
i
i 的所有单个路径
(
i
1
,
i
2
,
.
.
.
,
i
t
)
(i_{1} ,i_{2},...,i_{t} )
(i1,i2,...,it) 中概率最大值为:
过程是不是很好理解?如果还不好理解,就继续看个例子。
例子:
整个计算过程如下图所示,
Reference
统计学习方法 李航