1. 引言
隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型,以下统一用简称HMM表示。HMM在语音识别、自然语言处理等都有着广泛的应用。
2. HMM原理介绍
2.1 HMM模型的定义
HMM模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成不可观测的状态的序列称为状态序列;每个状态生成一个观测,再由此产生的观测的随机序列,称为观测序列。序列的每一个位置可以看作是一个时刻。
HMM模型由初始概率分布、状态转移概率分布、观测概率分布确定。设
Q
Q
Q是所有可能的状态的集合,
V
V
V是所有可能的观测的集合,即:
Q
=
{
q
1
,
q
2
,
⋯
 
,
q
N
}
,
V
=
{
v
1
,
v
2
,
⋯
 
,
v
M
}
Q=\left\{q_{1}, q_{2}, \cdots, q_{N}\right\}, \quad V=\left\{v_{1}, v_{2}, \cdots, v_{M}\right\}
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=\left(i_{1}, i_{2}, \cdots, i_{T}\right), \quad O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)
I=(i1,i2,⋯,iT),O=(o1,o2,⋯,oT)记
A
A
A为状态转移概率矩阵:
A
=
[
a
i
j
]
N
×
N
A=\left[a_{i j}\right]_{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_{i j}=P\left(i_{t+1}=q_{j} | i_{t}=q_{i}\right), \quad 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,即在时刻
t
t
t处于状态
q
i
q_i
qi的条件下在时刻
t
+
1
t+1
t+1转移到状态
q
j
q_j
qj的概率。
记
B
B
B为观测概率矩阵:
B
=
[
b
j
(
k
)
]
N
×
μ
B=\left[b_{j}(k)\right]_{N \times \mu}
B=[bj(k)]N×μ其中,
b
j
(
k
)
=
P
(
o
t
=
v
k
∣
i
t
=
q
j
)
,
k
=
1
,
2
,
⋯
 
,
M
;
j
=
1
,
2
,
⋯
 
,
N
b_{j}(k)=P\left(o_{t}=v_{k} | i_{t}=q_{j}\right), \quad 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是在时刻
t
t
t处于状态
q
j
q_j
qj的条件下生成观测
v
k
v_k
vk的概率。
记
π
\pi
π为初始状态概率向量:
π
=
(
π
i
)
\pi=\left(\pi_{i}\right)
π=(πi)其中,
π
i
=
P
(
i
1
=
q
i
)
,
i
=
1
,
2
,
⋯
 
,
N
\pi_{i}=P\left(i_{1}=q_{i}\right), \quad i=1,2, \cdots, N
πi=P(i1=qi),i=1,2,⋯,N,表示时刻
t
=
1
t=1
t=1处于状态
q
i
q_i
qi的概率。
因此,HMM模型
λ
\lambda
λ可以用三元符号表示,即:
λ
=
(
A
,
B
,
π
)
\lambda=(A, B, \pi)
λ=(A,B,π)
A
,
B
,
π
A, B, \pi
A,B,π称为HMM模型的三要素。
从HMM模型的定义可以发现,HMM其实做了两个基本的假设:
- 齐次马尔可夫性假设:即假设隐藏的马尔可夫链在任意时刻
t
t
t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻
t
t
t无关,即
P ( i t ∣ i t − 1 , o t − 1 , ⋯   , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) , t = 1 , 2 , ⋯   , T P\left(i_{t} | i_{t-1}, o_{t-1}, \cdots, i_{1}, o_{1}\right)=P\left(i_{t} | i_{t-1}\right), \quad t=1,2, \cdots, T P(it∣it−1,ot−1,⋯,i1,o1)=P(it∣it−1),t=1,2,⋯,T - 观测独立性假设:即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他的观测和状态无关。即
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\left(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}\right)=P\left(o_{t} | i_{t}\right) P(ot∣it,ot,it−1,ot−1,⋯,it+1,ot+1,it,it−1,ot−1,⋯,i1,o1)=P(ot∣it)
2.2 概率计算方法
概率计算即给定模型 λ = ( A , B , π ) \lambda=(A, B, \pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , ⋯   , o T ) O=\left(o_{1}, o_{2}, \cdots, o_{T}\right) O=(o1,o2,⋯,oT),计算在模型 λ \lambda λ下,观测序列 O O O出现的概率 P ( O ∣ λ ) P(O | \lambda) P(O∣λ)。
2.2.1 直接计算法
直接计算法是通过列举所有可能的长度为 T T T的状态序列 I = ( i 1 , i 2 , ⋯   , i T ) I=\left(i_{1}, i_{2}, \cdots, i_{T}\right) I=(i1,i2,⋯,iT),求各个状态序列 I I I和观测序列 O = ( o 1 , o 2 , ⋯   , o T ) O=\left(o_{1}, o_{2}, \cdots, o_{T}\right) O=(o1,o2,⋯,oT)的联合概率 P ( O , I ∣ λ ) P(O, I | \lambda) P(O,I∣λ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O | \lambda) P(O∣λ)。
状态序列
I
=
(
i
1
,
i
2
,
⋯
 
,
i
T
)
I=\left(i_{1}, i_{2}, \cdots, i_{T}\right)
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}} \cdots a_{i_{T-1} i_{T}}
P(I∣λ)=πi1ai1i2ai2i3⋯aiT−1iT对固定的状态序列
I
=
(
i
1
,
i
2
,
⋯
 
,
i
T
)
I=\left(i_{1}, i_{2}, \cdots, i_{T}\right)
I=(i1,i2,⋯,iT),观测序列
O
=
(
o
1
,
o
2
,
⋯
 
,
o
T
)
O=\left(o_{1}, o_{2}, \cdots, o_{T}\right)
O=(o1,o2,⋯,oT)的概率为
P
(
O
∣
I
,
λ
)
P(O | I, \lambda)
P(O∣I,λ):
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}}\left(o_{1}\right) b_{i_{2}}\left(o_{2}\right) \cdots b_{i_{T}}\left(o_{T}\right)
P(O∣I,λ)=bi1(o1)bi2(o2)⋯biT(oT)
O
O
O和
I
I
I同时出现的l联合概率为:
对所有可能的状态序列
I
I
I求和,得到观测序列
O
O
O的概率
P
(
O
∣
λ
)
P(O | \lambda)
P(O∣λ),即:
但是,通过这种计算方式的计算量非常大,其复杂度为
O
(
T
N
r
)
O\left(T N^{r}\right)
O(TNr),因此是不可行的。在真实情况下,一般采用更有效的算法,即前向-后向算法。
2.2.2 前向算法
前向概率:给定隐马尔可夫模型
λ
\lambda
λ,定义到时刻
t
t
t部分观测序列为
o
1
,
o
2
,
⋯
 
,
o
t
o_{1}, o_{2}, \cdots, o_{t}
o1,o2,⋯,ot且状态为
q
i
q_{i}
qi的概率为前向概率,记作:
α
t
(
i
)
=
P
(
o
1
,
o
2
,
⋯
 
,
o
t
,
i
t
=
q
i
∣
λ
)
\alpha_{t}(i)=P\left(o_{1}, o_{2}, \cdots, o_{t}, i_{t}=q_{i} | \lambda\right)
αt(i)=P(o1,o2,⋯,ot,it=qi∣λ)
观测序列概率的前向算法:
- 输入:隐马尔可夫模型 λ \lambda λ,观测序列 O O O;
- 输出:观测序列概率 P ( O ∣ λ ) P(O | \lambda) P(O∣λ)
- 初值:
α
1
(
i
)
=
π
i
b
i
(
o
1
)
,
i
=
1
,
2
,
⋯
 
,
N
\alpha_{1}(i)=\pi_{i} b_{i}\left(o_{1}\right), \quad i=1,2, \cdots, N
α1(i)=πibi(o1),i=1,2,⋯,N
4.递推:对 t = 1 , 2 , ⋯   , T − 1 t=1,2, \cdots, T-1 t=1,2,⋯,T−1, α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , ⋯   , N \alpha_{t+1}(i)=\left[\sum_{j=1}^{N} \alpha_{t}(j) a_{j i}\right] b_{i}\left(o_{t+1}\right), \quad i=1,2, \cdots, N αt+1(i)=[j=1∑Nαt(j)aji]bi(ot+1),i=1,2,⋯,N - 终止: P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O | \lambda)=\sum_{i=1}^{N} \alpha_{T}(i) P(O∣λ)=i=1∑NαT(i)
前向算法之所以可以提高HMM的观测序列概率计算速度,是因为在每一个时刻计算时,都可以直接引用上一个时刻的计算结果,因此,其时间复杂度是 O ( N 2 T ) O\left(N^{2} T\right) O(N2T),比直接计算法小很多。
2.2.3 后向算法
后向概率:给定隐马尔可夫模型 λ \lambda λ,定义在时刻 t t t状态为 q i q_{i} qi的条件下,从 t + 1 t+1 t+1到 T T T的部分观测序列为 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\left(o_{t+1}, o_{t+2}, \cdots, o_{T} | i_{t}=q_{i}, \lambda\right) βt(i)=P(ot+1,ot+2,⋯,oT∣it=qi,λ)
观测序列概率的后向算法:
- 输入:隐马尔可夫模型 λ \lambda λ,观测序列 O O O;
- 输出:观测序列概率 P ( O ∣ λ ) P(O | \lambda) P(O∣λ)
- 初值: β T ( i ) = 1 , i = 1 , 2 , ⋯   , N \beta_{T}(i)=1, \quad i=1,2, \cdots, N βT(i)=1,i=1,2,⋯,N
- 递推:对
t
=
T
−
1
,
T
−
2
,
⋯
 
,
1
t=T-1, T-2, \cdots, 1
t=T−1,T−2,⋯,1,
β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) , i = 1 , 2 , ⋯   , N \beta_{t}(i)=\sum_{j=1}^{N} a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j), \quad i=1,2, \cdots, N βt(i)=j=1∑Naijbj(ot+1)βt+1(j),i=1,2,⋯,N - 终止: P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) P(O | \lambda)=\sum_{i=1}^{N} \pi_{i} b_{i}\left(o_{1}\right) \beta_{1}(i) P(O∣λ)=i=1∑Nπibi(o1)β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
)
,
t
=
1
,
2
,
⋯
 
,
T
−
1
P(O | \lambda)=\sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j), \quad 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
2.2.4 一些概率值与期望的计算
给定模型
λ
\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\left(i_{t}=q_{i} | O, \lambda\right)=\frac{P\left(i_{t}=q_{i}, O | \lambda\right)}{P(O | \lambda)}
γt(i)=P(it=qi∣O,λ)=P(O∣λ)P(it=qi,O∣λ)由前向概率和后向概率的定义可知:
α
t
(
i
)
β
t
(
i
)
=
P
(
i
t
=
q
i
,
O
∣
λ
)
\alpha_{t}(i) \beta_{t}(i)=P\left(i_{t}=q_{i}, O | \lambda\right)
αt(i)βt(i)=P(it=qi,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
,
λ
)
\xi_{t}(i, j)=P\left(i_{t}=q_{i}, i_{t+1}=q_{j} | O, \lambda\right)
ξt(i,j)=P(it=qi,it+1=qj∣O,λ)可以通过前向后向概率计算:
ξ
i
(
i
,
j
)
=
P
(
i
t
=
q
i
,
i
t
+
1
=
q
j
,
O
∣
λ
)
P
(
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_{i}(i, j)=\frac{P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}{P(O | \lambda)}=\frac{P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}{\sum_{i=1}^{N} \sum_{j=1}^{N} P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)}
ξi(i,j)=P(O∣λ)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\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O | \lambda\right)=\alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)
P(it=qi,it+1=qj,O∣λ)=αt(i)aijbj(ot+1)βt+1(j)因此有
ξ
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_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)}{\sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \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)
2.3 学习算法
HMM的学习算法是指对模型的参数 π 、 A 、 B \pi、A、B π、A、B进行估计,一般根据训练数据是包括观测序列和对应的状态序列还是只包括观测序列,可以分别由监督学习和非监督学习实现。
2.3.1 监督学习方法
假设已给训练数据集包含 S S S个长度相同的观测序列和对应的状态序列 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , ⋯   , ( O s , I s ) } \left\{\left(O_{1}, I_{1}\right),\left(O_{2}, I_{2}\right), \cdots,\left(O_{s}, I_{s}\right)\right\} {(O1,I1),(O2,I2),⋯,(Os,Is)},那么可以利用极大似然估计法来估计隐马尔可夫模型的参数。具体的方法如下:
- 转移概率 a i j a_{i j} aij的估计:设样本中时刻 t t t处于状态 i i i时刻 t + 1 t+1 t+1转移到状态 j j j的频数为 A i j A_{i j} Aij,那么状态转移概率 a i j a_{i j} aij的估计是: a ^ i j = A y ∑ j = 1 N A i j , i = 1 , 2 , ⋯   , N ; j = 1 , 2 , ⋯   , N \hat{a}_{i j}=\frac{A_{y}}{\sum_{j=1}^{N} A_{i j}}, \quad i=1,2, \cdots, N ; j=1,2, \cdots, N a^ij=∑j=1NAijAy,i=1,2,⋯,N;j=1,2,⋯,N
- 观测概率 b j ( k ) b_{j}(k) bj(k)的估计:设样本中状态为 j j jb并观测为 k k k的频数是 B j k B_{j k} Bjk,那么状态为 j j j观测为 k k k的概率 b j ( k ) b_{j}(k) bj(k)的估计为: b ^ j ( k ) = B j k ∑ k = 1 M B j k , j = 1 , 2 , ⋯   , N i k = 1 , 2 , ⋯   , M \hat{b}_{j}(k)=\frac{B_{j k}}{\sum_{k=1}^{M} B_{j k}}, \quad j=1,2, \cdots, N_{i} \quad k=1,2, \cdots, M b^j(k)=∑k=1MBjkBjk,j=1,2,⋯,Nik=1,2,⋯,M
- 初始状态概率 π i \pi_{i} πi的估计: π ^ i \hat{\pi}_{i} π^i为 S S S个样本中初始状态为 q i q_{i} qi的频率。
2.3.2 非监督学习方法——Baum-Welch算法
由于监督学习需要大量的标注数据,需要耗费很多的人力物力,因此,有时会采用非监督学习方法来进行参数估计。假设给定训练数据集只包含
S
S
S个长度为
T
T
T的观测序列
{
O
1
,
O
2
,
⋯
 
,
O
s
}
\left\{O_{1}, O_{2}, \cdots, O_{s}\right\}
{O1,O2,⋯,Os}而没有对应的状态序列,我们将观测序列看作观测数据
O
O
O,而状态序列看作不可观测的隐数据
I
I
I,这样一来,HMM模型就可以看作是一个含有隐变量的概率模型:
P
(
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
P(O | \lambda)=\sum_{I} P(O | I, \lambda) P(I | \lambda)
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)因此,可以采用EM算法来进行参数估计。
- 确定完全数据的对数似然函数:所有观测数据写成 O = ( o 1 , o 2 , ⋯   , o T ) O=\left(o_{1}, o_{2}, \cdots, o_{T}\right) O=(o1,o2,⋯,oT),所有隐数据写成 I = ( i 1 , i 2 , ⋯   , i T ) I=\left(i_{1}, i_{2}, \cdots, i_{T}\right) I=(i1,i2,⋯,iT),完全数据为 ( O , I ) = ( o 1 , o 2 , ⋯   , o T , i 1 , i 2 , ⋯   , i T ) (O, I)=\left(o_{1}, o_{2}, \cdots, o_{T}, i_{1}, i_{2}, \cdots, i_{T}\right) (O,I)=(o1,o2,⋯,oT,i1,i2,⋯,iT),完全数据的对数似然函数是 log P ( O , I ∣ λ ) \log P(O, I | \lambda) logP(O,I∣λ)。
- E步:求Q函数
Q
(
λ
,
λ
‾
)
=
∑
I
log
P
(
O
,
I
∣
λ
)
P
(
O
,
I
∣
λ
‾
)
Q(\lambda, \overline{\lambda})=\sum_{I} \log P(O, I | \lambda) P(O, I | \overline{\lambda})
Q(λ,λ)=I∑logP(O,I∣λ)P(O,I∣λ)其中,
λ
‾
\overline{\lambda}
λ是HMM模型参数的当前估计值,
λ
\lambda
λ是要极大化的HMM模型参数。
因此,Q函数可以写为:
- M步:分别对参数进行极大化,第1项可以写为:
∑
I
log
π
i
b
P
(
O
,
I
∣
λ
‾
)
=
∑
i
=
1
N
log
π
i
P
(
O
,
i
1
=
i
∣
λ
‾
)
\sum_{I} \log \pi_{i_{b}} P(O, I | \overline{\lambda})=\sum_{i=1}^{N} \log \pi_{i} P\left(O, i_{1}=i | \overline{\lambda}\right)
I∑logπibP(O,I∣λ)=i=1∑NlogπiP(O,i1=i∣λ)根据
∑
i
=
1
N
π
i
=
1
\sum_{i=1}^{N} \pi_{i}=1
∑i=1Nπi=1,利用拉格朗日乘子法,写出拉格朗日函数:
∑ i = 1 N log π i P ( O , i 1 = i ∣ λ ‾ ) + γ ( ∑ i = 1 N π i − 1 ) \sum_{i=1}^{N} \log \pi_{i} P\left(O, i_{1}=i | \overline{\lambda}\right)+\gamma\left(\sum_{i=1}^{N} \pi_{i}-1\right) i=1∑NlogπiP(O,i1=i∣λ)+γ(i=1∑Nπi−1)对其求偏导并令其为0可得: π i = P ( O , i 1 = i ∣ λ ‾ ) P ( O ∣ λ ‾ ) \pi_{i}=\frac{P\left(O, i_{1}=i | \overline{\lambda}\right)}{P(O | \overline{\lambda})} πi=P(O∣λ)P(O,i1=i∣λ),用 γ t ( i ) , ξ i ( i , j ) \gamma_{t}(i), \quad \xi_{i}(i, j) γt(i),ξi(i,j)表示可以写为:
π i = γ 1 ( i ) \pi_{i}=\gamma_{1}(i) πi=γ1(i)同理,对转移概率和观测概率进行求偏导可得:
a i j = ∑ i = 1 T − 1 ξ i ( i , j ) ∑ i = 1 T − 1 γ i ( i ) a_{i j}=\frac{\sum_{i=1}^{T-1} \xi_{i}(i, j)}{\sum_{i=1}^{T-1} \gamma_{i}(i)} aij=∑i=1T−1γi(i)∑i=1T−1ξi(i,j)
b j ( k ) = ∑ t = 1 , o k = v k T γ t ( j ) ∑ t = 1 T γ t ( j ) b_{j}(k)=\frac{\sum_{t=1, o_{k}=v_{k}}^{T} \gamma_{t}(j)}{\sum_{t=1}^{T} \gamma_{t}(j)} bj(k)=∑t=1Tγt(j)∑t=1,ok=vkTγt(j)
2.4 预测算法
预测算法是指当给定模型 λ \lambda λ和观测序列 O O O,求概率最大的状态序列。一般有两种算法:近似算法和维特比算法。
2.4.1 近似算法
近似算法的思想是,在每个时刻 t t t选择在该时刻最有可能出现的状态 i t ∗ i_{t}^{*} it∗,从而得到一个状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , ⋯   , i T ∗ ) I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right) I∗=(i1∗,i2∗,⋯,iT∗),将它作为预测的结果。
给定HMM模型
λ
\lambda
λ和观测序列
O
O
O,在时刻
t
t
t处于状态
q
i
q_i
qi的概率
γ
t
(
i
)
\gamma_{t}(i)
γt(i)为:
γ
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)在每一个时刻
t
t
t最有可能的状态:
i
t
∗
=
arg
max
1
⩽
i
⩽
N
[
γ
t
(
i
)
]
,
t
=
1
,
2
,
⋯
 
,
T
i_{t}^{*}=\arg \max _{1 \leqslant i \leqslant N}\left[\gamma_{t}(i)\right], \quad t=1,2, \cdots, T
it∗=arg1⩽i⩽Nmax[γt(i)],t=1,2,⋯,T从而得到状态序列
I
∗
=
(
i
1
∗
,
i
2
∗
,
⋯
 
,
i
T
∗
)
I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right)
I∗=(i1∗,i2∗,⋯,iT∗)
虽然近似计算思想简单,但是预测的序列可能有实际不发生的部分,即有可能出现转移概率为0的相邻状态,没法保证整体上的状态序列是最有可能的。
2.4.2 维特比算法
维特比算法则通过动态规划求概率最大的路径,每一条路径即对应着一个状态序列。维特比算法从时刻 t = 1 t=1 t=1开始,递推地计算在时刻 t t t状态为 i i i的各条部分路径的最大概率,直到得到时刻 t = T t=T t=T状态为 i i i的各条路径的最大概率,时刻 t = T t=T t=T的最大概率记为最优路径的概率 P ∗ P^{*} P∗,最优路径的终结点 i T ∗ i_{T}^{*} iT∗也同时得到,之后,从终结点开始,由后向前逐步求得结点 i T − 1 ∗ , ⋯   , i 1 ∗ i_{T-1}^{*}, \cdots, i_{1}^{*} iT−1∗,⋯,i1∗,最终得到最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , ⋯   , i T ∗ ) I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right) I∗=(i1∗,i2∗,⋯,iT∗)。
首先定义两个变量
δ
\delta
δ和
ψ
\psi
ψ,定义在时刻
t
t
t状态为
i
i
i的所有单个路径
(
i
1
,
i
2
,
⋯
 
,
i
t
)
\left(i_{1}, i_{2}, \cdots, i_{t}\right)
(i1,i2,⋯,it)中概率最大值为
δ
t
(
i
)
=
max
i
1
,
i
2
,
⋯
 
,
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,_{t-1}} P\left(i_{t}=i, i_{t-1}, \cdots, i_{1}, o_{t}, \cdots, o_{1} | \lambda\right), \quad i=1,2, \cdots, N
δt(i)=i1,i2,⋯,t−1maxP(it=i,it−1,⋯,i1,ot,⋯,o1∣λ),i=1,2,⋯,N由定义可得
δ
\delta
δ的递推公式:
定义在时刻
t
t
t状态为
i
i
i的所有单个路径
(
i
1
,
i
2
,
⋯
 
,
i
t
−
1
,
i
)
\left(i_{1}, i_{2}, \cdots, i_{t-1}, i\right)
(i1,i2,⋯,it−1,i)中概率最大的路径的第
t
−
1
t-1
t−1个结点为:
ψ
t
(
i
)
=
arg
max
1
⩽
j
⩽
N
[
δ
t
−
1
(
j
)
a
j
i
]
,
i
=
1
,
2
,
⋯
 
,
N
\psi_{t}(i)=\arg \max _{1 \leqslant j \leqslant N}\left[\delta_{t-1}(j) a_{j i}\right], \quad i=1,2, \cdots, N
ψt(i)=arg1⩽j⩽Nmax[δt−1(j)aji],i=1,2,⋯,N
维特比算法:
- 输入:模型 λ = ( A , B , π ) \lambda=(A, B, \pi) λ=(A,B,π)和观测 O = ( o 1 , o 2 , ⋯   , o T ) O=\left(o_{1}, o_{2}, \cdots, o_{T}\right) O=(o1,o2,⋯,oT)
- 输出:最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , ⋯   , i T ∗ ) I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right) I∗=(i1∗,i2∗,⋯,iT∗)
- 初始化:
δ
1
(
i
)
=
π
i
b
i
(
o
1
)
,
i
=
1
,
2
,
⋯
 
,
N
ψ
1
(
i
)
=
0
,
i
=
1
,
2
,
⋯
 
,
N
\begin{array}{cc}{\delta_{1}(i)=\pi_{i} b_{i}\left(o_{1}\right),} & {i=1,2, \cdots, N} \\ {\psi_{1}(i)=0,} & {i=1,2, \cdots, N}\end{array}
δ1(i)=πibi(o1),ψ1(i)=0,i=1,2,⋯,Ni=1,2,⋯,N
4.递推,对 t = 2 , 3 , ⋯   , T t=2,3, \cdots, T t=2,3,⋯,T
- 终止:
- 最终路径回溯。对
t
=
T
−
1
,
T
−
2
,
⋯
 
,
1
t=T-1, T-2, \cdots, 1
t=T−1,T−2,⋯,1
i t ∗ = ψ t + 1 ( i t + 1 ∗ ) i_{t}^{*}=\psi_{t+1}\left(i_{t+1}^{*}\right) it∗=ψt+1(it+1∗)求得最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , ⋯   , i T ∗ ) I^{*}=\left(i_{1}^{*}, i_{2}^{*}, \cdots, i_{T}^{*}\right) I∗=(i1∗,i2∗,⋯,iT∗)