隐马尔科夫模型(hidden Markov model, HMM)是用于标注问题的统计学习模型,属于生成模型。
一、隐马尔科夫模型的基本概念
隐藏的马尔科夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,由此产生观测的随机序列,称为观测序列(observation sequence)。序列的每一个位置可以看作是一个时刻。
设
Q
Q
Q是所有可能的状态集合,
V
V
V是所有可能的观测集合,即
Q
=
{
q
1
,
q
2
,
⋯
 
,
q
N
}
,
V
=
{
v
1
,
v
2
,
⋯
 
,
v
M
}
Q=\{q_1,q_2,\cdots,q_N\}, V=\{v_1,v_2,\cdots,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,\cdots,i_T), O=(o_1,o_2,\cdots,o_T)
I=(i1,i2,⋯,iT), O=(o1,o2,⋯,oT) 隐马尔科夫模型建立在以上状态与观测概念的基础上,它由初始状态概率向量
π
\pi
π、状态转移概率矩阵
A
A
A和观测概率矩阵
B
B
B决定。因此,隐马尔科夫模型
λ
\lambda
λ可用以下三元符号表示
λ
=
(
A
,
B
,
π
)
\lambda =(A,B,\pi)
λ=(A,B,π)
A
,
B
,
π
A,B,\pi
A,B,π称为隐马尔科夫模型的三要素,其中
π
\pi
π和
A
A
A决定状态序列,
B
B
B决定观测序列。接着分别介绍
A
,
B
,
π
A,B,\pi
A,B,π的概念。
A
A
A是状态转移概率矩阵
A
=
[
a
i
j
]
N
×
N
A=[a_{ij}]_{N\times N}
A=[aij]N×N 其中
a
i
j
=
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
)
,
i
=
1
,
2
,
⋯
 
,
N
;
j
=
1
,
2
,
⋯
 
,
N
a_{ij}=P(i_{t+1}=q_j|i_t=q_i), i=1,2,\cdots,N; j=1,2,\cdots,N
aij=P(it+1=qj∣it=qi), i=1,2,⋯,N; j=1,2,⋯,N 即前一时刻处于状态
q
i
q_i
qi的条件下下一时刻转移到状态
q
j
q_j
qj的概率。
B
B
B是观测概率矩阵
B
=
[
b
j
(
k
)
]
N
×
M
B=[b_j(k)]_{N\times M}
B=[bj(k)]N×M 其中
b
j
(
k
)
=
P
(
o
t
=
v
k
∣
i
t
=
q
j
)
,
k
=
1
,
2
,
⋯
 
,
M
;
j
=
1
,
2
,
⋯
 
,
N
b_j(k)=P(o_t=v_k|i_t=q_j), k=1,2,\cdots,M; j=1,2,\cdots,N
bj(k)=P(ot=vk∣it=qj), k=1,2,⋯,M; j=1,2,⋯,N 即处于状态
q
j
q_j
qj的条件下生成观测
v
k
v_k
vk的概率。
π
\pi
π是初始状态概率向量
π
=
(
π
i
)
,
i
=
1
,
2
,
⋯
 
,
N
\pi=(\pi_i), i=1,2,\cdots,N
π=(πi), i=1,2,⋯,N 其中
π
i
=
P
(
i
1
=
q
i
)
\pi_i=P(i_1=q_i)
πi=P(i1=qi) 即第一个时刻处于状态
q
i
q_i
qi的概率。
隐马尔科夫模型作了下面两个基本假设:
(1)齐次马尔科夫性假设,即任一时刻
t
t
t的状态只与
t
−
1
t-1
t−1时刻的状态有关,与其他时刻的状态和观测无关
P
(
i
t
∣
i
t
−
1
,
o
t
−
1
,
⋯
 
,
i
1
,
o
1
)
=
P
(
i
t
∣
i
t
−
1
)
P(i_t|i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(i_t|i_{t-1})
P(it∣it−1,ot−1,⋯,i1,o1)=P(it∣it−1) (2)观测独立性假设,即任意时刻的观测只依赖该时刻的状态
P
(
o
t
∣
i
T
,
o
T
,
i
T
−
1
,
o
T
−
1
,
⋯
 
,
i
t
+
1
,
o
t
+
1
,
i
t
,
i
t
−
1
,
o
t
−
1
,
⋯
 
,
i
1
,
o
1
)
=
P
(
o
t
∣
i
t
)
P(o_t|i_T,o_T,i_{T-1},o_{T-1},\cdots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(o_t|i_t)
P(ot∣iT,oT,iT−1,oT−1,⋯,it+1,ot+1,it,it−1,ot−1,⋯,i1,o1)=P(ot∣it) 隐马尔科夫模型可以用于标注,即给定观测的序列预测其对应的标记序列,这时状态对应标记。
最后介绍一下隐马尔科夫模型的三个基本问题。
(1)概率计算问题。给定模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)和观测序列
O
=
(
o
1
,
o
2
,
⋯
 
,
o
T
)
O=(o_1,o_2,\cdots,o_T)
O=(o1,o2,⋯,oT),计算观测
O
O
O出现的概率。
(2)学习问题。给定观测序列
O
=
(
o
1
,
o
2
,
⋯
 
,
o
T
)
O=(o_1,o_2,\cdots,o_T)
O=(o1,o2,⋯,oT),用极大似然估计模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)的参数。
(3)预测问题,也叫解码(decoding)问题。给定模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)和观测序列
O
=
(
o
1
,
o
2
,
⋯
 
,
o
T
)
O=(o_1,o_2,\cdots,o_T)
O=(o1,o2,⋯,oT),求最可能对应的状态序列。
二、概率计算算法
概率计算是计算观测序列
O
O
O出现的概率
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ),最直接的算法是,先列举所有可能的状态序列
I
=
(
i
1
,
i
2
,
⋯
 
,
i
T
)
I=(i_1,i_2,\cdots,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_1i_2}a_{i_2i_3}\cdots a_{i_{T-1}i_T}
P(I∣λ)=πi1ai1i2ai2i3⋯aiT−1iT,再计算每个状态下的给定观测序列概率
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)\cdots b_{i_T}(o_T)
P(O∣I,λ)=bi1(o1)bi2(o2)⋯biT(oT),接着计算状态序列
I
I
I和观测序列
O
O
O的联合概率
P
(
O
,
I
∣
λ
)
=
P
(
I
∣
λ
)
P
(
O
∣
I
,
λ
)
P(O,I|\lambda)=P(I|\lambda)P(O|I,\lambda)
P(O,I∣λ)=P(I∣λ)P(O∣I,λ),对所有可能的
I
I
I求和,得到
P
(
O
∣
λ
)
=
∑
I
P
(
O
,
I
∣
λ
)
P(O|\lambda)=\sum_IP(O,I|\lambda)
P(O∣λ)=∑IP(O,I∣λ)。
这种算法的效率太低了,因为可能的状态序列就有
N
T
N^T
NT个,而每个状态序列的每个时刻都要计算一次给定观测的概率,因此算法是
O
(
T
N
T
)
O(TN^T)
O(TNT)阶的。
接着来看更快的前向算法。先抛出一个定义,给定模型参数
λ
\lambda
λ,到时刻
t
t
t的部分观测序列为
o
1
,
o
2
,
⋯
 
,
o
t
o_1,o_2,\cdots,o_t
o1,o2,⋯,ot且时刻
t
t
t状态为
q
i
q_i
qi的概率为前向概率,记作
α
t
(
i
)
=
P
(
o
1
,
o
2
,
⋯
 
,
o
t
,
i
t
=
q
i
∣
λ
)
\alpha_t(i)=P(o_1,o_2,\cdots,o_t,i_t=q_i|\lambda)
αt(i)=P(o1,o2,⋯,ot,it=qi∣λ) 这个前向概率是可以递推得到的。首先确定初始时刻
t
=
1
t=1
t=1的前向概率
α
1
(
i
)
=
P
(
o
1
,
i
t
=
q
i
∣
λ
)
=
P
(
i
t
=
q
i
∣
λ
)
P
(
o
1
∣
i
t
=
q
i
,
λ
)
=
π
i
b
i
(
o
1
)
,
i
=
1
,
2
,
⋯
 
,
N
\alpha_1(i)=P(o_1,i_t=q_i|\lambda)=P(i_t=q_i|\lambda)P(o_1|i_t=q_i,\lambda)=\pi_ib_i(o_1), i=1,2,\cdots,N
α1(i)=P(o1,it=qi∣λ)=P(it=qi∣λ)P(o1∣it=qi,λ)=πibi(o1), i=1,2,⋯,N 接着递推后面各时刻的前向概率
α
t
+
1
(
i
)
=
P
(
o
1
,
⋯
 
,
o
t
+
1
,
i
t
+
1
=
q
i
∣
λ
)
=
P
(
o
1
,
⋯
 
,
o
t
+
1
∣
λ
)
P
(
i
t
+
1
=
q
i
∣
o
1
,
⋯
 
,
o
t
+
1
,
λ
)
\alpha_{t+1}(i)=P(o_1,\cdots,o_{t+1},i_{t+1}=q_i|\lambda)=P(o_1,\cdots,o_{t+1}|\lambda)P(i_{t+1}=q_i|o_1,\cdots,o_{t+1},\lambda)
αt+1(i)=P(o1,⋯,ot+1,it+1=qi∣λ)=P(o1,⋯,ot+1∣λ)P(it+1=qi∣o1,⋯,ot+1,λ) 因为式中的
P
(
o
1
,
⋯
 
,
o
t
+
1
∣
λ
)
=
P
(
o
1
,
⋯
 
,
o
t
∣
λ
)
P
(
o
t
+
1
∣
o
1
,
⋯
 
,
o
t
,
λ
)
P(o_1,\cdots,o_{t+1}|\lambda)=P(o_1,\cdots,o_t|\lambda)P(o_{t+1}|o_1,\cdots,o_t,\lambda)
P(o1,⋯,ot+1∣λ)=P(o1,⋯,ot∣λ)P(ot+1∣o1,⋯,ot,λ) 又上式可继续写作
P
(
o
1
,
⋯
 
,
o
t
+
1
∣
λ
)
=
∑
j
=
1
N
P
(
o
1
,
⋯
 
,
o
t
,
i
t
=
q
j
∣
λ
)
P
(
o
t
+
1
∣
o
1
,
⋯
 
,
o
t
,
i
t
=
q
j
,
λ
)
P(o_1,\cdots,o_{t+1}|\lambda)=\sum_{j=1}^NP(o_1,\cdots,o_t,i_t=q_j|\lambda)P(o_{t+1}|o_1,\cdots,o_t,i_t=q_j,\lambda)
P(o1,⋯,ot+1∣λ)=j=1∑NP(o1,⋯,ot,it=qj∣λ)P(ot+1∣o1,⋯,ot,it=qj,λ) 因此
P
(
o
1
,
⋯
 
,
o
t
+
1
∣
λ
)
=
∑
j
=
1
N
α
t
(
j
)
a
j
i
P(o_1,\cdots,o_{t+1}|\lambda)=\sum_{j=1}^N\alpha_t(j)a_{ji}
P(o1,⋯,ot+1∣λ)=j=1∑Nαt(j)aji 代入
α
t
+
1
(
i
)
\alpha_{t+1}(i)
αt+1(i)的表达式,得
α
t
+
1
(
i
)
=
[
∑
j
=
1
N
α
t
(
j
)
a
j
i
]
b
i
(
o
t
+
1
)
i
=
1
,
2
,
⋯
 
,
N
\alpha_{t+1}(i)=[\sum_{j=1}^N\alpha_t(j)a_{ji}]b_i(o_{t+1}) i=1,2,\cdots,N
αt+1(i)=[j=1∑Nαt(j)aji]bi(ot+1) i=1,2,⋯,N 递推至最后时刻,得到
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)的表达式
P
(
O
∣
λ
)
=
P
(
o
1
,
⋯
 
,
o
T
∣
λ
)
=
∑
i
=
1
N
P
(
o
1
,
⋯
 
,
o
T
,
i
T
=
q
i
∣
λ
)
=
∑
i
=
1
N
α
T
(
i
)
P(O|\lambda)=P(o_1,\cdots,o_T|\lambda)=\sum_{i=1}^NP(o_1,\cdots,o_T,i_T=q_i|\lambda)=\sum_{i=1}^N\alpha_T(i)
P(O∣λ)=P(o1,⋯,oT∣λ)=i=1∑NP(o1,⋯,oT,iT=qi∣λ)=i=1∑NαT(i) 前向算法比直接算法快很多,每一次递推都要计算
N
2
N^2
N2次,因此前向算法是
O
(
T
N
2
)
O(TN^2)
O(TN2)阶的。
再来看与前向算法相对应的后向算法。同样先抛出一个定义,给定模型参数
λ
\lambda
λ,在时刻
t
t
t状态为
q
i
q_i
qi的条件下,从
t
+
1
t+1
t+1往后的部分观测序列为
o
t
+
1
,
o
t
+
2
,
⋯
 
,
o
T
o_{t+1},o_{t+2},\cdots,o_{T}
ot+1,ot+2,⋯,oT的概率为后向概率,记作
β
t
(
i
)
=
P
(
o
t
+
1
,
o
t
+
2
,
⋯
 
,
o
T
∣
i
t
=
q
i
,
λ
)
\beta_t(i)=P(o_{t+1},o_{t+2},\cdots,o_T|i_t=q_i,\lambda)
βt(i)=P(ot+1,ot+2,⋯,oT∣it=qi,λ) 仔细观察,后向概率与前向概率有两点不同。第一点,前向概率是
o
1
,
⋯
 
,
o
t
o_1,\cdots,o_t
o1,⋯,ot的概率,后向概率为
o
t
+
1
,
⋯
 
,
o
T
o_{t+1},\cdots,o_T
ot+1,⋯,oT的概率,它们是互斥的两部分;第二点,在后向概率中,
i
t
=
q
i
i_t=q_i
it=qi是作为条件写在后面的。
后向概率同样可以递推得到。首先确定最后时刻
t
=
T
t=T
t=T的后向概率
β
T
(
i
)
=
1
,
i
=
1
,
2
,
⋯
 
,
N
\beta_T(i)=1, i=1,2,\cdots,N
βT(i)=1, i=1,2,⋯,N 接着递推前面各时刻的后向概率
β
t
(
i
)
=
∑
j
=
1
N
α
i
j
b
j
(
o
t
+
1
)
β
t
+
1
(
j
)
,
i
=
1
,
2
,
⋯
 
,
N
\beta_t(i)=\sum_{j=1}^N\alpha_{ij}b_j(o_{t+1})\beta_{t+1}(j), i=1,2,\cdots,N
βt(i)=j=1∑Nαijbj(ot+1)βt+1(j), i=1,2,⋯,N 最终递推至
β
1
(
i
)
\beta_1(i)
β1(i)后,可以得到
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)的表达式
P
(
O
∣
λ
)
=
∑
i
=
1
N
π
i
b
i
(
o
1
)
β
1
(
i
)
P(O|\lambda)=\sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i)
P(O∣λ)=i=1∑Nπibi(o1)β1(i) 根据前向概率与后向概率中
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)的两个表达式,
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
)
,
t
=
1
,
2
,
⋯
 
,
T
−
1
P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j), t=1,2,\cdots,T-1
P(O∣λ)=i=1∑Nj=1∑Nαt(i)aijbj(ot+1)βt+1(j), t=1,2,⋯,T−1
三、学习算法
学习问题是给定观测序列,用极大似然估计模型的参数。如果已知的数据中除了观测序列
O
O
O,还有状态序列
I
I
I,那么直接用极大似然估计法来估计参数
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)即可,具体算法很简单。
首先是转移概率
a
i
j
a_{ij}
aij的估计,设样本中两相邻时刻从状态
i
i
i转移到状态
j
j
j的频数为
A
i
j
A_{ij}
Aij,那么状态转移概率
a
i
j
a_{ij}
aij的估计是
a
^
i
j
=
A
i
j
∑
j
=
1
N
A
i
j
\hat a_{ij}=\frac{A_{ij}}{\sum_{j=1}^NA_{ij}}
a^ij=∑j=1NAijAij 接着是观测概率
b
j
(
k
)
b_j(k)
bj(k)的估计,设样本中状态为
j
j
j且观测为
k
k
k的频数是
B
j
k
B_{jk}
Bjk,那么观测概率
b
j
(
k
)
b_j(k)
bj(k)的估计是
b
^
j
(
k
)
=
B
j
k
∑
k
=
1
M
B
j
k
\hat b_j(k)=\frac{B_{jk}}{\sum_{k=1}^MB_{jk}}
b^j(k)=∑k=1MBjkBjk 最后是初始状态概率
π
i
\pi_i
πi的估计,即为
S
S
S个样本中初始状态为
q
i
q_i
qi的频率。
在现实中,往往只有观测序列
O
O
O是已知的,状态序列看作是不可观测的隐数据
I
I
I,我们要估计参数
λ
\lambda
λ,使
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ)最大,这样EM算法便派上用场了。
设
λ
ˉ
\bar\lambda
λˉ是当前估计值,根据EM算法的E步,
Q
Q
Q函数为
Q
(
λ
,
λ
ˉ
)
=
E
I
[
l
o
g
P
(
O
,
I
∣
λ
)
∣
O
,
λ
ˉ
]
=
∑
I
l
o
g
P
(
O
,
I
∣
λ
)
P
(
I
∣
O
,
λ
ˉ
)
Q(\lambda,\bar{\lambda})=E_I[logP(O,I|\lambda)|O,\bar{\lambda}]=\sum_IlogP(O,I|\lambda)P(I|O,\bar{\lambda})
Q(λ,λˉ)=EI[logP(O,I∣λ)∣O,λˉ]=I∑logP(O,I∣λ)P(I∣O,λˉ) 由于式中
P
(
I
∣
O
,
λ
ˉ
)
=
P
(
O
,
I
∣
λ
ˉ
)
P
(
O
,
λ
ˉ
)
P(I|O,\bar{\lambda})=\frac{P(O,I|\bar{\lambda})}{P(O,\bar{\lambda})}
P(I∣O,λˉ)=P(O,λˉ)P(O,I∣λˉ) 而
P
(
O
,
λ
ˉ
)
P(O,\bar\lambda)
P(O,λˉ)对要求的
λ
\lambda
λ而言是常数,因此
Q
Q
Q函数可写为
Q
(
λ
,
λ
ˉ
)
=
∑
I
l
o
g
P
(
O
,
I
∣
λ
)
P
(
O
,
I
∣
λ
ˉ
)
Q(\lambda,\bar\lambda)=\sum_IlogP(O,I|\lambda)P(O,I|\bar\lambda)
Q(λ,λˉ)=I∑logP(O,I∣λ)P(O,I∣λˉ) 由于式中
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)\cdot a_{i_1i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T)
P(O,I∣λ)=πi1bi1(o1)⋅ai1i2bi2(o2)⋯aiT−1iTbiT(oT) 把上式分为
π
,
A
,
B
\pi,A,B
π,A,B三部分代入
Q
Q
Q函数中,可得
Q
(
λ
,
λ
ˉ
)
=
[
∑
I
l
o
g
π
i
1
+
∑
I
∑
t
=
1
T
−
1
l
o
g
a
i
1
i
t
+
1
+
∑
I
∑
t
=
1
T
l
o
g
b
i
t
(
o
t
)
]
⋅
P
(
O
,
I
∣
λ
ˉ
)
Q(\lambda,\bar\lambda)=[\sum_Ilog\pi_{i_1}+\sum_I\sum_{t=1}^{T-1}loga_{i_1i_{t+1}}+\sum_I\sum_{t=1}^Tlogb_{i_t}(o_t)]\cdot P(O,I|\bar\lambda)
Q(λ,λˉ)=[I∑logπi1+I∑t=1∑T−1logai1it+1+I∑t=1∑Tlogbit(ot)]⋅P(O,I∣λˉ) 由于要求得三个参数单独地出现在上面三项中,分别求导后可得更新三个参数的表达式
π
i
=
P
(
O
,
i
1
=
i
∣
λ
ˉ
)
P
(
O
∣
λ
ˉ
)
\pi_i=\frac{P(O,i_1=i|\bar\lambda)}{P(O|\bar\lambda)}
πi=P(O∣λˉ)P(O,i1=i∣λˉ)
a
i
j
=
∑
t
=
1
T
−
1
P
(
O
,
i
t
=
i
,
i
t
+
1
=
j
∣
λ
ˉ
)
∑
t
=
1
T
−
1
P
(
O
,
i
t
=
i
∣
λ
ˉ
)
a_{ij}=\frac{\sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1}=j|\bar\lambda)}{\sum_{t=1}^{T-1}P(O,i_t=i|\bar\lambda)}
aij=∑t=1T−1P(O,it=i∣λˉ)∑t=1T−1P(O,it=i,it+1=j∣λˉ)
b
j
(
k
)
=
∑
t
=
1
T
P
(
O
,
i
t
=
j
∣
λ
ˉ
)
I
(
o
t
=
v
k
)
∑
t
=
1
T
P
(
O
,
i
t
=
j
∣
λ
ˉ
)
b_j(k)=\frac{\sum_{t=1}^TP(O,i_t=j|\bar\lambda)I(o_t=v_k)}{\sum_{t=1}^TP(O,i_t=j|\bar\lambda)}
bj(k)=∑t=1TP(O,it=j∣λˉ)∑t=1TP(O,it=j∣λˉ)I(ot=vk) 上面三个式子仍然不够直接,因为它没有直接写出与
λ
ˉ
=
(
A
ˉ
,
B
ˉ
,
π
ˉ
)
\bar\lambda=(\bar A,\bar B, \bar\pi)
λˉ=(Aˉ,Bˉ,πˉ)有关的表达式,为了引出更直接的表达式,下面先介绍两个概念。
第一个概念,设给定模型
λ
\lambda
λ和观测
O
O
O,时刻
t
t
t处于状态
q
i
q_i
qi的概率为
γ
t
(
i
)
=
P
(
i
t
=
q
i
∣
O
,
λ
)
\gamma_t(i)=P(i_t=q_i|O,\lambda)
γt(i)=P(it=qi∣O,λ),结合前向概率
α
t
(
i
)
\alpha_t(i)
αt(i)与后向概率
β
t
(
i
)
\beta_t(i)
βt(i),可得到
γ
t
(
i
)
=
α
t
(
i
)
β
t
(
i
)
∑
j
=
1
N
α
t
(
j
)
β
t
(
j
)
\gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)}
γ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
,
λ
)
\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,λ),可得到
ξ
t
(
i
,
j
)
=
α
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)=\frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}
ξt(i,j)=∑i=1N∑j=1Nαt(i)aijbj(ot+1)βt+1(j)αt(i)aijbj(ot+1)βt+1(j) 这样,更新三个参数的表达式可写作
a
i
j
=
∑
t
=
1
T
−
1
ξ
t
(
i
,
j
)
∑
t
=
1
T
−
1
γ
t
(
i
)
a_{ij}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)}
aij=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)
b
j
(
k
)
=
∑
t
=
1
,
o
t
=
v
k
T
γ
t
(
j
)
∑
t
=
1
T
γ
t
(
j
)
b_j(k)=\frac{\sum_{t=1,o_t=v_k}^T\gamma_t(j)}{\sum_{t=1}^T\gamma_t(j)}
bj(k)=∑t=1Tγt(j)∑t=1,ot=vkTγt(j)
π
i
=
γ
1
(
i
)
\pi_i=\gamma_1(i)
πi=γ1(i)
四、预测算法
预测问题是给定模型
λ
\lambda
λ和观测序列
O
O
O,求最有可能的状态序列
I
I
I。
首先是最简单直接的近似算法,不考虑其他时刻,直接对每个时刻
t
t
t计算该时刻最有可能出现的状态,将它作为预测结果。在上一节中提到了
γ
t
(
i
)
=
α
t
(
i
)
β
t
(
i
)
∑
j
=
1
N
α
t
(
j
)
β
t
(
j
)
\gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)}
γt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)代表时刻
t
t
t处于状态
q
i
q_i
qi的概率,因此在每一个时刻
t
t
t最有可能的状态
i
t
∗
i_t^*
it∗是
i
t
∗
=
arg
max
1
≤
i
≤
N
γ
t
(
i
)
,
t
=
1
,
2
,
⋯
 
,
T
i_t^*=\arg\max_{1\le i\le N}\gamma_t(i), t=1,2,\cdots,T
it∗=arg1≤i≤Nmaxγt(i), t=1,2,⋯,T 近似算法比较简单,但它只能保证每一时刻都是最有可能的状态,但没法保证整个状态序列是最有可能的状态序列。事实上,用近似算法很有可能出现这种情况:得到的状态序列中,某两个相邻状态的转移概率为0。
为了求出最有可能的状态序列,我们可以用动态规划(dynamic programming)的思路求解这个最优路径问题,即从时刻
t
=
1
t=1
t=1开始,递推地计算在时刻
t
t
t状态为
i
i
i的各条部分路径的最大概率,直至得到时刻
t
=
T
t=T
t=T状态为
i
i
i的各条路径的最大概率,这就是维特比算法。
先给出两个定义。在时刻
t
t
t状态为
i
i
i的所有单个路径
(
i
1
,
i
2
,
⋯
 
,
i
t
)
(i_1,i_2,\cdots,i_t)
(i1,i2,⋯,it)中概率最大值为
δ
t
(
i
)
=
max
i
1
,
i
2
,
⋯
 
,
i
t
−
1
P
(
i
t
=
i
,
i
t
−
1
,
⋯
 
,
i
1
,
o
t
,
⋯
 
,
o
1
∣
λ
)
,
i
=
1
,
2
,
⋯
 
,
N
\delta_t(i)=\max_{i_1,i_2,\cdots,i_{t-1}}P(i_t=i,i_{t-1},\cdots,i_1,o_t,\cdots,o_1|\lambda), i=1,2,\cdots,N
δt(i)=i1,i2,⋯,it−1maxP(it=i,it−1,⋯,i1,ot,⋯,o1∣λ), i=1,2,⋯,N 那么后面各时刻可递推得到,递推公式为
δ
t
+
1
(
i
)
=
max
1
≤
j
≤
N
[
δ
t
(
j
)
a
j
i
]
b
i
(
o
t
+
1
)
,
i
=
1
,
2
,
⋯
 
,
N
;
t
=
1
,
2
,
⋯
 
,
T
−
1
\delta_{t+1}(i)=\max_{1\le j\le N}[\delta_t(j)a_{ji}]b_i(o_{t+1}), i=1,2,\cdots,N; t=1,2,\cdots,T-1
δt+1(i)=1≤j≤Nmax[δt(j)aji]bi(ot+1), i=1,2,⋯,N; t=1,2,⋯,T−1 再给出第二个定义,在时刻
t
t
t状态为
i
i
i的概率最大的路径
(
i
1
,
i
2
,
⋯
 
,
i
t
−
1
,
i
)
(i_1,i_2,\cdots,i_{t-1},i)
(i1,i2,⋯,it−1,i)中,第
t
−
1
t-1
t−1个节点的状态为
ψ
t
(
i
)
=
arg
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
\psi_t(i)=\arg\max_{1\le j\le N}[\delta_{t-1}(j)a_{ji}]
ψt(i)=arg1≤j≤Nmax[δt−1(j)aji] 这个
ψ
t
(
i
)
\psi_t(i)
ψt(i)的含义可能有点难理解,它代表的是到目前为止最优路径中
t
−
1
t-1
t−1个节点的状态,它能帮助我们在递推完成得到
T
T
T时刻的状态后,回溯得到前面各时刻的状态。从另一种角度,
δ
t
(
i
)
\delta_t(i)
δt(i)的递推公式中可以写成
δ
t
+
1
(
i
)
=
δ
t
(
ψ
t
(
i
)
)
a
j
i
b
i
(
o
t
+
1
)
\delta_{t+1}(i)=\delta_t(\psi_t(i))a_{ji}b_i(o_{t+1})
δt+1(i)=δt(ψt(i))ajibi(ot+1) 这样,就能引出维特比算法的具体过程了。首先在
t
=
1
t=1
t=1时刻,有
δ
1
(
i
)
=
π
i
b
i
(
o
1
)
,
i
=
1
,
2
,
⋯
 
,
N
\delta_1(i)=\pi_ib_i(o_1), i=1,2,\cdots,N
δ1(i)=πibi(o1), i=1,2,⋯,N
ψ
1
(
i
)
=
0
,
i
=
1
,
2
,
⋯
 
,
N
\psi_1(i)=0, i=1,2,\cdots,N
ψ1(i)=0, i=1,2,⋯,N 对后面各时刻递推,有
δ
t
(
i
)
=
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
b
i
(
o
t
)
,
i
=
1
,
2
,
⋯
 
,
N
\delta_t(i)=\max_{1\le j\le N}[\delta_{t-1}(j)a_{ji}]b_i(o_t), i=1,2,\cdots,N
δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot), i=1,2,⋯,N
ψ
t
(
i
)
=
arg
max
1
≤
j
≤
N
[
δ
t
−
1
(
j
)
a
j
i
]
,
i
=
1
,
2
,
⋯
 
,
N
\psi_t(i)=\arg\max_{1\le j\le N}[\delta_{t-1}(j)a_{ji}], i=1,2,\cdots,N
ψt(i)=arg1≤j≤Nmax[δt−1(j)aji], i=1,2,⋯,N 递推到时刻
t
=
T
t=T
t=T,可以得到最优状态序列中,时刻
T
T
T的状态为
i
T
∗
=
arg
max
1
≤
i
≤
N
δ
T
(
i
)
i_T^*=\arg\max_{1\le i\le N}\delta_T(i)
iT∗=arg1≤i≤NmaxδT(i) 这条路径的概率为
P
∗
=
max
1
≤
i
≤
N
δ
T
(
i
)
P^*=\max_{1\le i \le N}\delta_T(i)
P∗=1≤i≤NmaxδT(i) 最后便可以用
ψ
t
(
i
)
\psi_t(i)
ψt(i)回溯了,得到最优状态序列中前面各时刻的状态
i
t
∗
=
ψ
t
+
1
(
i
t
+
1
∗
)
i_t^*=\psi_{t+1}(i_{t+1}^*)
it∗=ψt+1(it+1∗)