文章目录
1.隐马尔可夫模型HMM
1.1 简介
隐马尔科夫模型是与概率论密切相关的一个模型,隐马尔科夫模型(Hidden Markov Model,以下简称HMM)在语音识别,自然语言处理等方面都有所应用。它被用来解决这样的问题:有两组序列Q和V,Q无法被观察到,称为隐藏序列。但是与V有着某种概率上的关系,而V是可以直接被观察到的,称为状态序列。
1.2 定义
令
Q
Q
Q={
q
1
,
q
2
,
.
.
.
,
q
N
q_1,q_2,...,q_N
q1,q2,...,qN}表示所有隐藏状态的集合,
V
V
V={
v
1
,
v
2
,
.
.
.
,
v
M
v_1,v_2,...,v_M
v1,v2,...,vM}表示所有可观察状态的集合,N表示隐藏状态数,M表示可观察状态数。对于一个长度为T的序列来说,S表示隐藏状态序列,O表示观察序列,即
S
S
S={
s
1
,
s
2
,
.
.
.
,
s
T
s_1,s_2,...,s_T
s1,s2,...,sT},
O
O
O={
o
1
,
o
2
,
.
.
.
o
T
o_1,o_2,...o_T
o1,o2,...oT},其中
s
t
∈
Q
s_t \in Q
st∈Q,
o
t
∈
V
o_t \in V
ot∈V。
一个HMM模型需要由三部分组成,分别是隐藏状态的初始概率分布
Π
\Pi
Π,状态转移概率矩阵
A
A
A,以及观测状态概率矩阵
B
B
B。
HMM模型假定了一个隐藏状态只跟前一个隐藏状态有关。令时刻t的状态
s
t
=
q
i
s_t=q_i
st=qi,时刻t+1的状态为
s
t
+
1
=
q
j
s_{t+1}=q_j
st+1=qj即从时刻t到时刻t+1的HMM状态转移概率
a
i
j
=
P
(
s
t
+
1
=
q
j
∣
s
t
=
q
i
)
a_{ij}=P(s_{t+1}=q_j|s_t=q_i)
aij=P(st+1=qj∣st=qi),所有的
a
i
j
a_{ij}
aij组成了状态转移概率矩阵A。
HMM模型同时也假定了一个被观测到的状态,只跟当前的隐藏状态有关。令时刻t的隐藏状态
s
t
=
q
j
s_t=q_j
st=qj,对应的观察状态
o
t
=
v
k
o_{t}=v_k
ot=vk即时刻t的观察状态
v
k
v_k
vk在隐藏状态
q
j
q_j
qj下的生成概率为
b
j
(
k
)
=
P
(
o
t
=
v
k
∣
s
t
=
q
j
)
b_j(k)=P(o_t=v_k|s_t=q_j)
bj(k)=P(ot=vk∣st=qj),所有的$b_j(k)组成了观测状态概率矩阵B。
1.3 实例
用概率论中经典的“取球模型”来类比的话,假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:
盒子1
盒子2
盒子3
白
球
数
5
4
7
红
球
数
5
6
3
\begin{array}{c|ccc} & \text{盒子1} & \text{盒子2} & \text{盒子3} \\ \hline 白球数 & 5 & 4 & 7 \\ 红球数 & 5 & 6 & 3 \end{array}
白球数红球数盒子155盒子246盒子373
根据盒子中球的分布,可以得到观测状态概率矩阵B:
A
=
(
0.5
0.5
0.4
0.6
0.7
0.3
)
A= \begin{pmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \\ \end{pmatrix}
A=⎝⎛0.50.40.70.50.60.3⎠⎞
按照下面的方法从盒子里抽球,开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。则初始概率分布
Π
=
(
0.2
,
0.4
,
0.4
)
T
\Pi=(0.2,0.4,0.4)^T
Π=(0.2,0.4,0.4)T 以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。说了这么多,最终得到的就是状态转移概率矩阵A:
A
=
(
0.5
0.2
0.3
0.3
0.5
0.2
0.2
0.3
0.5
)
A= \begin{pmatrix} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \\ \end{pmatrix}
A=⎝⎛0.50.30.20.20.50.30.30.20.5⎠⎞
其中
观察集合是:
V
=
{
红
,
白
}
,
M
=
2
V=\{红,白\},M=2
V={红,白},M=2
状态集合是:
Q
=
{
盒
子
1
,
盒
子
2
,
盒
子
3
}
,
N
=
3
Q=\{盒子1,盒子2,盒子3\},N=3
Q={盒子1,盒子2,盒子3},N=3
1.4 生成观测序列
假设我们存在一个HMM模型 λ = ( A , B , Π ) \lambda=(A,B,\Pi) λ=(A,B,Π),且已知观测序列的长度T,需要生成一个观测序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} O={o1,o2,...oT},其生成过程如下:
- 根据初始概率分布 Π \Pi Π生成隐藏状态 s 1 s_1 s1
- 根据当前隐藏状态 s t s_t st以及观察状态概率 b s t ( k ) b_{s_t}(k) bst(k)生成观察状态 o t o_t ot。
- 根据当前隐藏状态 s t s_t st以及状态转移概率 a s t s t + 1 a_{s_ts_{t+1}} astst+1生成隐藏状态 s t + 1 s_{t+1} st+1
- 重复T次步骤2和3,得到所有的 o t o_t ot组成观察序列 O = { o 1 , o 2 , . . . o T } O=\{o_1,o_2,...o_T\} O={o1,o2,...oT}
1.5 HMM的三个基本问题
- 评估观察序列概率。即给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到基于动态规划的前向后向算法。
- 模型参数学习问题。即给定观测序列O={o1,o2,…oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法。
- 预测问题,也称为解码问题。即给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法。
2.前向后向算法
问题描述:给定模型λ=(A,B,Π)和观测序列O={o1,o2,…oT},计算在模型λ下观测序列O出现的概率P(O|λ)。
2.1 暴力求法
任意一个隐藏序列
S
=
{
s
1
,
s
2
,
.
.
.
,
s
T
}
S=\{s_1,s_2,...,s_T\}
S={s1,s2,...,sT}出现的概率是:
P
(
S
∣
λ
)
=
Π
s
1
a
s
1
s
2
a
s
2
s
3
.
.
.
a
s
T
−
1
s
T
P(S|\lambda)=\Pi_{s_1} a_{s_1s_2}a_{s_2s_3}...a_{s_{T-1}s_T}
P(S∣λ)=Πs1as1s2as2s3...asT−1sT
在已知S的情况下,我们要求的观察序列
O
=
{
o
1
,
o
2
,
.
.
.
o
T
}
O=\{o_1,o_2,...o_T\}
O={o1,o2,...oT}出现的概率为
P
(
O
∣
S
,
λ
)
=
b
s
1
(
o
1
)
b
s
2
(
o
2
)
.
.
.
b
s
T
(
o
T
)
P(O|S,\lambda)=b_{s_1}(o_1)b_{s_2}(o_2)...b_{s_T}(o_T)
P(O∣S,λ)=bs1(o1)bs2(o2)...bsT(oT)
则S和O联合出现的概率为
P
(
O
,
S
∣
λ
)
=
P
(
S
∣
λ
)
P
(
O
∣
S
,
λ
)
=
Π
s
1
a
s
1
s
2
a
s
2
s
3
.
.
.
a
s
T
−
1
s
T
b
s
1
(
o
1
)
b
s
2
(
o
2
)
.
.
.
b
s
T
(
o
T
)
P(O,S|\lambda)=P(S|\lambda)P(O|S,\lambda)=\Pi_{s_1} a_{s_1s_2}a_{s_2s_3}...a_{s_{T-1}s_T}b_{s_1}(o_1)b_{s_2}(o_2)...b_{s_T}(o_T)
P(O,S∣λ)=P(S∣λ)P(O∣S,λ)=Πs1as1s2as2s3...asT−1sTbs1(o1)bs2(o2)...bsT(oT)
然后求边缘概率分布,即可得到观测序列O在模型λ下出现的条件概率P(O|λ):
P
(
O
∣
λ
)
=
∑
S
P
(
O
,
S
∣
λ
)
P(O|\lambda)=\sum_SP(O,S|\lambda)
P(O∣λ)=S∑P(O,S∣λ)
然而暴力算法存在一个大问题,当隐藏状态较多时,预测状态有
N
T
N^T
NT种组合,上述的算法太过耗时。我们一般使用前向算法或者后向算法来求解这个问题。
2.2 前向算法
算法比较好的同学也许已经发现,上述的过程可以使用动态规划来完成。动态规划的本质是递推,也就是说,我们需要将问题分解为子问题,从子问题的最优解中一步一步,根据递推式,推出整个问题的最优解。
这里给出动态规划中的子问题,也就是前向概率的定义。假设在时刻t,隐藏状态为
q
i
q_i
qi,观测状态为
o
1
,
o
2
,
.
.
.
o
t
o_1,o_2,...o_t
o1,o2,...ot的概率为前向概率
f
t
(
i
)
=
P
(
o
1
,
o
2
,
.
.
.
,
o
t
∣
s
t
=
q
i
,
λ
)
f_t(i)=P(o_1,o_2,...,o_t|s_t=q_i,\lambda)
ft(i)=P(o1,o2,...,ot∣st=qi,λ)。
考虑时刻t+1的情况,因为HMM的隐藏状态只与前一个隐藏状态有关,既然这样,我们就考虑所有前一个状态,让它们都向t+1时刻的某个状态转移,就可以得到相应的概率,这样的话,我们就得到了前向概率的递推式:
f
t
+
1
(
i
)
=
b
i
(
o
t
+
1
)
∑
j
=
1
N
f
t
(
j
)
a
j
i
f_{t+1}(i)=b_i(o_{t+1})\sum_{j=1}^Nf_t(j)a_{ji}
ft+1(i)=bi(ot+1)j=1∑Nft(j)aji
有了递推式,我们就可以推算出最终的目标,得到观测序列O在模型λ下出现的条件概率P(O|λ)。前向算法过程如下:
- 初始化时刻1各个状态的前向概率 f 1 ( i ) = Π i b i ( o 1 ) , i = 1 , 2 , 3 , . . . , N f_1(i)=\Pi_ib_i(o_1),i=1,2,3,...,N f1(i)=Πibi(o1),i=1,2,3,...,N
- 使用递推式 f t + 1 ( i ) = b i ( o t + 1 ) ∑ j = 1 N f t ( j ) a j i f_{t+1}(i)=b_i(o_{t+1})\sum_{j=1}^Nf_t(j)a_{ji} ft+1(i)=bi(ot+1)∑j=1Nft(j)aji递推时刻2,3,…,T的前向概率。
- 计算观测序列O在模型λ下出现的条件概率 P ( O ∣ λ ) = ∑ i = 1 N f T ( i ) P(O|λ)=\sum\limits_{i=1}^Nf_T(i) P(O∣λ)=i=1∑NfT(i)
2.3 后向算法
后向算法和前向算法类似,不同的地方在于后向算法是从后往前递推。假设在时刻t,隐藏状态为
q
i
q_i
qi,观测状态为
o
t
+
1
,
o
t
+
2
,
.
.
.
o
T
o_{t+1},o_{t+2},...o_T
ot+1,ot+2,...oT的概率为后向概率
g
t
(
i
)
=
P
(
o
t
+
1
,
o
t
+
2
,
.
.
.
o
T
∣
s
t
=
q
i
,
λ
)
g_t(i)=P(o_{t+1},o_{t+2},...o_T|s_t=q_i,\lambda)
gt(i)=P(ot+1,ot+2,...oT∣st=qi,λ)。
考虑时刻t+1的情况,假定我们已经知道当前所有隐藏状态的后向概率
g
t
+
1
(
j
)
g_{t+1}(j)
gt+1(j),在时刻t的某个状态i下,由i到达观测状态为
o
t
+
1
,
o
t
+
2
,
.
.
.
,
o
T
o_{t+1},o_{t+2},...,o_T
ot+1,ot+2,...,oT的概率为
a
i
j
b
j
(
o
t
+
1
)
g
t
+
1
(
j
)
a_{ij}b_j(o_{t+1})g_{t+1}(j)
aijbj(ot+1)gt+1(j),由于这这样的j可以有多个,我们将时刻t+1下所有的状态j考虑进来,就得到了后向概率的递推式:
g
t
(
i
)
=
∑
j
=
1
N
a
i
j
b
j
(
o
t
+
1
)
g
t
+
1
(
j
)
g_{t}(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})g_{t+1}(j)
gt(i)=j=1∑Naijbj(ot+1)gt+1(j)
有了递推式,我们就可以推算出最终的目标,得到观测序列O在模型λ下出现的条件概率P(O|λ)。后向算法过程如下:
- 初始化时刻T各个状态的前向概率 g T ( i ) = 1 , i = 1 , 2 , 3 , . . . , N g_T(i)=1,i=1,2,3,...,N gT(i)=1,i=1,2,3,...,N
- 使用递推式 g t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) g t + 1 ( j ) g_{t}(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})g_{t+1}(j) gt(i)=∑j=1Naijbj(ot+1)gt+1(j)递推时刻T-1,T-2,…,1的后向概率。
- 计算观测序列O在模型λ下出现的条件概率 P ( O ∣ λ ) = ∑ i = 1 N Π i b i ( o 1 ) g 1 ( i ) P(O|λ)=\sum\limits_{i=1}^N\Pi_ib_i(o_1)g_1(i) P(O∣λ)=i=1∑NΠibi(o1)g1(i)
3.鲍勃-韦尔奇算法
给定若干训练样本O={o1,o2,…oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法。
联合分布
P
(
O
,
S
∣
λ
)
P(O,S|\lambda)
P(O,S∣λ)的表达式如下:
P
(
O
,
S
∣
λ
)
=
∏
d
=
1
D
Π
i
1
(
d
)
b
i
1
(
d
)
(
o
1
(
d
)
)
a
i
1
(
d
)
i
2
(
d
)
b
i
2
(
d
)
(
o
2
(
d
)
)
.
.
.
a
i
T
−
1
(
d
)
i
T
(
d
)
b
i
T
(
d
)
(
o
T
(
d
)
)
P(O,S|\lambda)=\prod_{d=1}^D\Pi_{i_1^{(d)}}b_{i_1^{(d)}}(o_1^{(d)})a_{i_1^{(d)}i_2^{(d)}}b_{i_2^{(d)}}(o_2^{(d)})...a_{i_{T-1}^{(d)}i_T^{(d)}}b_{i_T^{(d)}}(o_T^{(d)})
P(O,S∣λ)=d=1∏DΠi1(d)bi1(d)(o1(d))ai1(d)i2(d)bi2(d)(o2(d))...aiT−1(d)iT(d)biT(d)(oT(d))
E-Step的期望表达式为:
L
(
λ
,
λ
ˉ
)
=
∑
S
P
(
S
∣
O
,
λ
ˉ
)
log
P
(
O
,
S
∣
λ
)
L(\lambda,\bar \lambda)=\sum_SP(S|O,\bar \lambda)\log P(O,S|\lambda)
L(λ,λˉ)=S∑P(S∣O,λˉ)logP(O,S∣λ)
因为
P
(
S
∣
O
,
λ
ˉ
)
=
P
(
O
,
S
∣
λ
ˉ
)
P
(
O
∣
λ
ˉ
)
P(S|O,\bar \lambda)=\frac{P(O,S|\bar \lambda)}{P(O|\bar \lambda)}
P(S∣O,λˉ)=P(O∣λˉ)P(O,S∣λˉ),分母是常数,所以在M-Step中我们要最大化的表达式为:
λ
ˉ
=
arg
max
λ
∑
d
=
1
D
∑
S
P
(
O
,
S
∣
λ
ˉ
)
(
log
π
s
1
+
∑
t
=
1
T
−
1
log
a
s
t
,
s
t
+
1
+
∑
t
=
1
T
b
s
t
(
o
t
)
)
.
.
.
.
.
.
.
.
.
.
.
.
(
1
)
\bar \lambda=\arg \max_\lambda \sum_{d=1}^D \sum_SP(O,S|\bar \lambda)(\log\pi_{s_1}+\sum_{t=1}^{T-1}\log a_{s_t,s_{t+1}}+\sum_{t=1}^Tb_{s_t}(o_t))............(1)
λˉ=argλmaxd=1∑DS∑P(O,S∣λˉ)(logπs1+t=1∑T−1logast,st+1+t=1∑Tbst(ot))............(1)
式子1分别对A,B,
Π
\Pi
Π求导,得到相应的迭代公式。在开始推导前,我们先定义一些变量。
由前向概率和后向概率定义可知:
P
(
s
t
=
q
i
,
O
∣
λ
)
=
f
t
(
i
)
g
t
(
i
)
P
(
s
t
=
q
i
,
s
t
+
1
=
q
j
,
O
∣
λ
)
=
f
t
(
i
)
a
i
j
b
j
(
o
t
+
1
)
g
t
+
1
(
j
)
P(s_t=q_i,O|\lambda)=f_t(i)g_t(i)\\P(s_t=q_i,s_{t+1}=q_j,O|\lambda)=f_t(i)a_{ij}b_j(o_{t+1})g_{t+1}(j)
P(st=qi,O∣λ)=ft(i)gt(i)P(st=qi,st+1=qj,O∣λ)=ft(i)aijbj(ot+1)gt+1(j)
给定模型λ和观测序列O,在时刻t处于状态
q
i
q_i
qi的概率记为:
γ
t
(
i
)
=
P
(
s
t
=
q
i
∣
O
,
λ
)
=
P
(
s
t
=
q
i
,
O
∣
λ
)
P
(
O
∣
λ
)
=
f
t
(
i
)
g
t
(
i
)
∑
j
=
1
N
f
t
(
j
)
g
t
(
j
)
\gamma_t(i)=P(s_t=q_i|O,\lambda)=\frac{P(s_t=q_i,O|\lambda )}{P(O|\lambda)}=\frac{f_t(i)g_t(i)}{\sum\limits_{j=1}^Nf_t(j)g_t(j)}
γt(i)=P(st=qi∣O,λ)=P(O∣λ)P(st=qi,O∣λ)=j=1∑Nft(j)gt(j)ft(i)gt(i)
给定模型λ和观测序列O,在时刻t处于状态
q
i
q_i
qi,且时刻t+1处于状态
q
j
q_j
qj的概率记为:
ξ
t
(
i
,
j
)
=
P
(
s
t
=
q
i
,
s
t
+
1
=
q
j
∣
O
,
λ
)
=
P
(
s
t
=
q
i
,
s
t
+
1
=
q
j
,
O
∣
λ
)
P
(
O
∣
λ
)
=
f
t
(
i
)
a
i
j
b
j
(
o
t
+
1
)
g
t
+
1
(
j
)
∑
r
=
1
N
∑
s
=
1
N
f
t
(
r
)
a
r
s
b
s
(
o
t
+
1
)
g
t
+
1
(
s
)
\xi_t(i,j)=P(s_t=q_i,s_{t+1}=q_j|O,\lambda)=\frac{P(s_t=q_i,s_{t+1}=q_j,O|\lambda)}{P(O|\lambda)}=\frac{f_t(i)a_{ij}b_j(o_{t+1})g_{t+1}(j)}{\sum\limits_{r=1}^N\sum\limits_{s=1}^Nf_t(r)a_{rs}b_s(o_{t+1})g_{t+1}(s)}
ξt(i,j)=P(st=qi,st+1=qj∣O,λ)=P(O∣λ)P(st=qi,st+1=qj,O∣λ)=r=1∑Ns=1∑Nft(r)arsbs(ot+1)gt+1(s)ft(i)aijbj(ot+1)gt+1(j)
3.1 对 π i \pi_i πi求导
式子1对
Π
i
\Pi_i
Πi求偏导,式子中后面部分的
∑
t
=
1
T
−
1
log
a
s
t
,
s
t
+
1
+
∑
t
=
1
T
b
s
t
(
o
t
)
\sum\limits_{t=1}^{T-1}\log a_{s_t,s_{t+1}}+\sum\limits_{t=1}^Tb_{s_t}(o_t)
t=1∑T−1logast,st+1+t=1∑Tbst(ot)为常数,直接无视,求导的式子变成
λ
ˉ
=
arg
max
λ
∑
d
=
1
D
∑
S
P
(
O
,
S
∣
λ
ˉ
)
log
π
s
1
.
.
.
.
.
.
.
.
.
.
.
.
(
2
)
\bar \lambda=\arg \max_\lambda \sum_{d=1}^D \sum_SP(O,S|\bar \lambda)\log\pi_{s_1}............(2)
λˉ=argλmaxd=1∑DS∑P(O,S∣λˉ)logπs1............(2)
由于
Π
i
\Pi_i
Πi是初始概率分布,所以还满足
∑
i
=
1
N
π
i
=
1
\sum\limits_{i=1}^N\pi_i=1
i=1∑Nπi=1。因此需要用到拉格朗日乘子法来求。式子2的拉格朗日函数为:
L
(
π
i
)
=
∑
d
=
1
D
∑
S
P
(
O
,
S
∣
λ
ˉ
)
log
π
s
1
+
γ
(
∑
i
=
1
N
π
i
−
1
)
.
.
.
.
.
.
.
.
.
.
.
.
(
3
)
L(\pi_i)=\sum_{d=1}^D \sum_SP(O,S|\bar \lambda)\log\pi_{s_1}+\gamma(\sum_{i=1}^N\pi_i-1)............(3)
L(πi)=d=1∑DS∑P(O,S∣λˉ)logπs1+γ(i=1∑Nπi−1)............(3)
对
π
i
\pi_i
πi进行求导,并令偏导数为0,得到
∑
d
=
1
D
P
(
O
,
s
1
(
d
)
=
i
∣
λ
ˉ
)
+
γ
π
i
=
0.........
(
4
)
\sum_{d=1}^DP(O,s_1^{(d)}=i|\bar \lambda)+\gamma\pi_i=0.........(4)
d=1∑DP(O,s1(d)=i∣λˉ)+γπi=0.........(4)
由于i可以取值范围为1到N,因此我们得到N个方程,将所有方程相加后得到
∑
d
=
1
D
P
(
O
∣
λ
ˉ
)
+
π
i
=
0..........
(
5
)
\sum_{d=1}^DP(O|\bar \lambda)+\pi_i=0..........(5)
d=1∑DP(O∣λˉ)+πi=0..........(5)
联立4和5得到
π
i
=
∑
d
=
1
D
P
(
O
,
s
1
(
d
)
=
i
∣
λ
ˉ
)
∑
d
=
1
D
P
(
O
∣
λ
ˉ
)
=
∑
d
=
1
D
P
(
O
,
s
1
(
d
)
=
i
∣
λ
ˉ
)
D
P
(
O
∣
λ
ˉ
)
=
∑
d
=
1
D
P
(
s
1
(
d
)
=
i
∣
O
(
d
)
,
λ
ˉ
)
D
=
∑
d
=
1
D
γ
i
(
d
)
D
.
.
.
.
.
.
.
.
.
.
(
6
)
\begin{aligned} \pi_i &=\frac{\sum\limits_{d=1}^DP(O,s_1^{(d)}=i|\bar \lambda)}{\sum\limits_{d=1}^DP(O|\bar \lambda)} \\ &=\frac{\sum\limits_{d=1}^DP(O,s_1^{(d)}=i|\bar \lambda)}{DP(O|\bar \lambda)}\\ &=\frac{\sum\limits_{d=1}^DP(s_1^{(d)}=i|O^{(d)},\bar \lambda)}{D} \\ &=\frac{\sum\limits_{d=1}^D\gamma_i^{(d)}}{D}..........(6) \end{aligned}
πi=d=1∑DP(O∣λˉ)d=1∑DP(O,s1(d)=i∣λˉ)=DP(O∣λˉ)d=1∑DP(O,s1(d)=i∣λˉ)=Dd=1∑DP(s1(d)=i∣O(d),λˉ)=Dd=1∑Dγi(d)..........(6)
至此就得到了
π
\pi
π的迭代公式。
3.2 对 a i j a_{ij} aij求导
式子1对
a
i
j
a_{ij}
aij求偏导,直接无视常数部分,求导的式子变成
∑
d
=
1
D
∑
S
∑
t
=
1
T
−
1
P
(
O
,
S
∣
λ
ˉ
)
log
a
s
t
,
s
t
+
1
=
∑
d
=
1
D
∑
i
=
1
N
∑
j
=
1
N
∑
t
=
1
T
−
1
P
(
O
,
s
t
(
d
)
=
i
,
s
t
+
1
(
d
)
=
j
∣
λ
ˉ
)
log
a
i
j
.
.
.
.
.
.
.
.
.
.
.
.
(
7
)
\sum_{d=1}^D \sum_S\sum_{t=1}^{T-1}P(O,S|\bar \lambda)\log a_{s_t,s_{t+1}}=\sum_{d=1}^D \sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}P(O,s_t^{(d)}=i,s_{t+1}^{(d)}=j|\bar \lambda)\log a_{ij}............(7)
d=1∑DS∑t=1∑T−1P(O,S∣λˉ)logast,st+1=d=1∑Di=1∑Nj=1∑Nt=1∑T−1P(O,st(d)=i,st+1(d)=j∣λˉ)logaij............(7)
同样存在
∑
i
=
1
N
a
i
j
=
1
\sum\limits_{i=1}^Na_{ij}=1
i=1∑Naij=1的限制,使用拉格朗日乘子法,最终得到
a
i
j
a_{ij}
aij的表达式为
a
i
j
=
∑
d
=
1
D
∑
t
=
1
T
−
1
P
(
O
(
d
)
,
s
t
(
d
)
=
i
,
s
t
+
1
(
d
)
=
j
∣
λ
ˉ
)
∑
d
=
1
D
∑
t
=
1
T
−
1
P
(
O
(
d
)
,
s
t
(
d
)
=
i
∣
λ
ˉ
)
=
∑
d
=
1
D
∑
t
=
1
T
−
1
ξ
t
(
d
)
(
i
,
j
)
∑
d
=
1
D
∑
t
=
1
T
−
1
γ
t
(
d
)
(
i
)
a_{ij}=\frac{\sum_{d=1}^D\sum_{t=1}^{T-1}P(O^{(d)},s_t^{(d)}=i,s_{t+1}^{(d)}=j|\bar \lambda)}{\sum_{d=1}^D\sum_{t=1}^{T-1}P(O^{(d)},s_t^{(d)}=i|\bar \lambda)}=\frac{\sum_{d=1}^D\sum_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum_{d=1}^D\sum_{t=1}^{T-1}\gamma_t^{(d)}(i)}
aij=∑d=1D∑t=1T−1P(O(d),st(d)=i∣λˉ)∑d=1D∑t=1T−1P(O(d),st(d)=i,st+1(d)=j∣λˉ)=∑d=1D∑t=1T−1γt(d)(i)∑d=1D∑t=1T−1ξt(d)(i,j)
3.3 对 b j b_j bj求导
同上述的步骤类似,
b
j
(
k
)
b_j(k)
bj(k)的迭代公式为:
b
j
(
k
)
=
∑
d
=
1
D
∑
t
=
1
,
o
t
(
d
)
=
v
k
N
P
(
O
,
s
t
(
d
)
=
j
∣
λ
ˉ
)
∑
d
=
1
D
∑
t
=
1
N
P
(
O
,
s
t
(
d
)
=
j
∣
λ
ˉ
)
=
∑
d
=
1
D
∑
t
=
1
,
o
t
(
d
)
=
v
k
N
γ
t
(
d
)
(
j
)
∑
d
=
1
D
∑
t
=
1
N
γ
t
(
d
)
(
j
)
\begin{aligned} b_j(k) &=\frac{\sum\limits_{d=1}^D\sum\limits_{t=1,o_t^{(d)}=v_k}^NP(O,s_t^{(d)}=j|\bar \lambda)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^NP(O,s_t^{(d)}=j|\bar \lambda)}\\ &=\frac{\sum\limits_{d=1}^D\sum\limits_{t=1,o_t^{(d)}=v_k}^N\gamma_t^{(d)}(j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^N\gamma_t^{(d)}(j)} \end{aligned}
bj(k)=d=1∑Dt=1∑NP(O,st(d)=j∣λˉ)d=1∑Dt=1,ot(d)=vk∑NP(O,st(d)=j∣λˉ)=d=1∑Dt=1∑Nγt(d)(j)d=1∑Dt=1,ot(d)=vk∑Nγt(d)(j)
3.4 算法总结
- 随机初始化HMM的参数 λ \lambda λ
- 对所有的观察序列,计算 γ t ( d ) ( i ) , ξ t ( d ) ( i , j ) \gamma_t^{(d)}(i),\xi_t^{(d)}(i,j) γt(d)(i),ξt(d)(i,j),t=1,2,…,T
- 根据迭代公式更新模型参数
- 如果参数收敛,则算法结束,否则重复2和3。
4. 维特比算法
问题描述:在已知模型参数
λ
\lambda
λ和观察序列O的情况下,要找出最有可能的隐藏状态。可以使用维特比算法来解决,它是一种基于动态规划的算法。在维特比算法中,定义了两个局部状态。
定义
δ
t
(
i
)
\delta_t(i)
δt(i)表示在时刻t,状态为i的情况下,到目前为止所有可能的转移路径中概率最大的情况。递推式如下:
δ
t
+
1
(
i
)
=
max
1
≤
j
≤
N
δ
t
(
j
)
a
j
i
b
i
(
o
t
+
1
)
\delta_{t+1}(i)=\max_{1\le j \le N}\delta_t(j)a_{ji}b_i(o_{t+1})
δt+1(i)=1≤j≤Nmaxδt(j)ajibi(ot+1)
ψ
t
(
i
)
\psi_t(i)
ψt(i)记录在时刻t,状态为i的情况下,概率最大的转移路径的第t-1个节点的状态。递推式如下:
ψ
t
(
i
)
=
max
1
≤
j
≤
N
δ
t
−
1
a
j
i
\psi_t(i)=\max_{1\le j \le N}\delta_{t-1}a_{ji}
ψt(i)=1≤j≤Nmaxδt−1aji
维特比算法总结如下:
- 初始化 δ 1 ( i ) = π i b i ( o 1 ) , ψ 1 ( i ) = 0 , i = 1 , 2 , . . . , N \delta_1(i)=\pi_ib_i(o_1),\psi_1(i)=0,i=1,2,...,N δ1(i)=πibi(o1),ψ1(i)=0,i=1,2,...,N
- 利用递推式 δ t + 1 ( i ) = max 1 ≤ j ≤ N δ t ( j ) a j i b i ( o t + 1 ) \delta_{t+1}(i)=\max_{1\le j \le N}\delta_t(j)a_{ji}b_i(o_{t+1}) δt+1(i)=max1≤j≤Nδt(j)ajibi(ot+1)和 ψ t ( i ) = max 1 ≤ j ≤ N δ t − 1 a j i \psi_t(i)=\max_{1\le j \le N}\delta_{t-1}a_{ji} ψt(i)=max1≤j≤Nδt−1aji求解时刻2,3,…,T
- 选择最大的 δ T ( i ) \delta_T(i) δT(i),利用 ψ t ( i ) \psi_t(i) ψt(i)回溯得到前T-1个状态,最终得到最有可能的序列,并且最大的 δ T ( i ) \delta_T(i) δT(i)为这个序列出现的概率。