上一节对隐马尔可夫模型(Hidden Markov Model,HMM)进行了归纳介绍。本节将详细介绍使用前向算法(Forward Algorithm)对处理求值(Evaluation)问题。
隐马尔可夫模型是一个动态模型(Dynamic Model)。其主要特点是系统状态(System State)任意一个状态元素(隐变量),其取值范围是离散的。
以系统状态中
t
t
t时刻的状态元素
Z
(
t
)
\mathcal Z^{(t)}
Z(t)为例,存在
K
\mathcal K
K个离散结果供
Z
(
t
)
\mathcal Z^{(t)}
Z(t)进行选择。即:
Z
(
t
)
∈
{
z
1
,
z
2
,
⋯
,
z
K
}
\mathcal Z^{(t)} \in \{z_1,z_2,\cdots,z_{\mathcal K}\}
Z(t)∈{z1,z2,⋯,zK}
隐马尔可夫模型由状态序列与观测序列两部分构成:
I
=
{
i
1
,
i
2
,
⋯
,
i
t
,
i
t
+
1
,
⋯
,
i
T
}
O
=
{
o
1
,
o
2
,
⋯
,
o
t
,
o
t
+
1
,
⋯
,
o
T
}
\mathcal I = \{i_1,i_2,\cdots,i_t,i_{t+1},\cdots,i_T\} \\ \mathcal O = \{o_1,o_2,\cdots,o_t,o_{t+1},\cdots,o_T\}
I={i1,i2,⋯,it,it+1,⋯,iT}O={o1,o2,⋯,ot,ot+1,⋯,oT}
其中状态序列中状态变量
i
t
∈
I
i_{t} \in \mathcal I
it∈I的取值范围是离散的,并且状态变量可取到的状态值集合
Q
\mathcal Q
Q表示如下:
Q
=
{
q
1
,
q
2
,
⋯
,
q
K
}
\mathcal Q = \{q_1,q_2,\cdots,q_{\mathcal K}\}
Q={q1,q2,⋯,qK}
观测序列中的观测变量
o
t
∈
O
o_t \in \mathcal O
ot∈O的取值范围同样是离散的,并且观测变量可取到的观测值集合
V
\mathcal V
V表示如下:
V
=
{
v
1
,
v
2
,
⋯
,
v
M
}
\mathcal V = \{v_1,v_2,\cdots,v_\mathcal M\}
V={v1,v2,⋯,vM}
隐马尔可夫模型的模型参数
λ
\lambda
λ具体包含三项:
λ
=
(
π
,
A
,
B
)
\lambda = (\pi,\mathcal A,\mathcal B)
λ=(π,A,B)
求值问题描述:已知给定参数
λ
\lambda
λ的隐马尔可夫模型,求解观测序列
O
=
{
o
1
,
o
2
,
⋯
,
o
T
}
\mathcal O = \{o_1,o_2,\cdots,o_T\}
O={o1,o2,⋯,oT}的后验概率结果
P
(
O
∣
λ
)
P(\mathcal O \mid \mathcal \lambda)
P(O∣λ)。
或者可理解为’观测序列‘
O
=
{
o
1
,
o
2
,
⋯
,
o
T
}
\mathcal O = \{o_1,o_2,\cdots,o_T\}
O={o1,o2,⋯,oT}通过HMM模型的计算所发生的概率。
首先,类似于高斯混合模型引入隐变量的方式,将将状态变量
I
\mathcal I
I引入到
P
(
O
∣
λ
)
P(\mathcal O \mid \lambda)
P(O∣λ):
因为'状态变量'
I
\mathcal I
I的取值范围是离散的,因此积分方式是
∑
\sum
∑;
P
(
O
∣
λ
)
=
∑
I
P
(
I
,
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
P(O∣λ)=∑IP(I,O∣λ)=∑IP(O∣I,λ)P(I∣λ)


至此,
P
(
O
∣
λ
)
P(\mathcal O \mid \lambda)
P(O∣λ)可以表示如下:
P
(
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
=
∑
I
π
⋅
∏
t
=
2
T
a
i
t
−
1
,
i
t
⋅
∏
t
=
1
T
b
i
t
(
o
t
)
P(O∣λ)=∑IP(O∣I,λ)P(I∣λ)=∑Iπ⋅T∏t=2ait−1,it⋅T∏t=1bit(ot)
将上式中的
∑
I
\sum_{\mathcal I}
∑I部分展开,展开结果如下:
P
(
O
∣
λ
)
=
∑
i
1
⋯
∑
i
T
(
π
⋅
∏
t
=
2
T
a
i
t
−
1
,
i
t
⋅
∏
t
=
1
T
b
i
t
(
o
t
)
)
P(\mathcal O \mid \lambda) = \sum_{i_1} \cdots\sum_{i_T}\left(\pi \cdot \prod_{t=2}^T a_{i_{t-1},i_{t}} \cdot\prod_{t=1}^T b_{i_t}(o_t)\right)
P(O∣λ)=i1∑⋯iT∑(π⋅t=2∏Tait−1,it⋅t=1∏Tbit(ot))
观察,大括号内的项均可以通过查找初始概率分布
π
\pi
π,状态转移矩阵
A
\mathcal A
A,发射矩阵
B
\mathcal B
B 得到。但括号外的
∑
i
1
⋯
∑
i
T
\sum_{i_1} \cdots\sum_{i_T}
∑i1⋯∑iT中的每一项由于状态变量
i
t
(
t
=
1
,
2
,
⋯
,
T
)
i_t(t=1,2,\cdots,T)
it(t=1,2,⋯,T)均存在
K
\mathcal K
K种选择,因此上式的时间复杂度至少为
O
(
K
T
)
O(\mathcal K^{T})
O(KT)。
即:状态序列
{
i
1
,
i
2
,
⋯
,
i
T
}
\{i_1,i_2,\cdots,i_T\}
{i1,i2,⋯,iT}随着序列长度
T
T
T的增加,时间复杂度指数级别增长。下面将介绍关于求解
P
(
O
∣
λ
)
P(\mathcal O \mid \lambda)
P(O∣λ)的优化算法——前向算法(Forward Algorithm)。
重新观察隐马尔可夫模型的概率图形式:

即图中‘红色框’包含的变量。同上,
i
T
i_T
iT自身存在
K
\mathcal K
K种选择。基于上述对 α t ( i ) \alpha_t(i) αt(i)的描述,我们尝试 观察 α t + 1 ( j ) \alpha_{t+1}(j) αt+1(j)和 α t ( i ) \alpha_t(i) αt(i)之间的关系。
至此,整理
α
t
+
1
(
j
)
\alpha_{t+1}(j)
αt+1(j)和
α
t
(
i
)
\alpha_{t}(i)
αt(i)之间的关联关系:
α
t
+
1
(
j
)
=
∑
i
=
1
K
[
P
(
o
t
+
1
∣
i
t
+
1
=
q
j
)
⋅
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
⋅
α
t
(
i
)
]
\alpha_{t+1}(j) = \sum_{i=1}^{\mathcal K} \left[P(o_{t+1} \mid i_{t+1}=q_j) \cdot P(i_{t+1} = q_j \mid i_t = q_i,\lambda) \cdot \alpha_{t}(i)\right]
αt+1(j)=i=1∑K[P(ot+1∣it+1=qj)⋅P(it+1=qj∣it=qi,λ)⋅αt(i)]
如果使用模型参数进行表示:
α
t
+
1
(
j
)
=
∑
i
=
1
K
b
j
(
o
t
+
1
)
⋅
a
i
j
⋅
α
t
(
i
)
\alpha_{t+1}(j) = \sum_{i=1}^{\mathcal K}b_j(o_{t+1}) \cdot a_{ij} \cdot \alpha_{t}(i)
αt+1(j)=i=1∑Kbj(ot+1)⋅aij⋅αt(i)
最后观察它的时间复杂度:每次迭代的时间复杂度是
O
(
N
)
O(N)
O(N),迭代
T
T
T次的时间复杂度即
O
(
K
×
T
)
O(\mathcal K \times T)
O(K×T)。
而上述时间复杂度 描述的是
α
1
(
i
)
→
α
T
(
i
)
\alpha_1(i) \to \alpha_T(i)
α1(i)→αT(i)的时间复杂度,而
P
(
O
∣
λ
)
=
∑
i
=
1
K
α
T
(
i
)
P(\mathcal O \mid \lambda) = \sum_{i=1}^{\mathcal K} \alpha_{T}(i)
P(O∣λ)=∑i=1KαT(i)。因此,
P
(
O
∣
λ
)
P(\mathcal O\mid \lambda)
P(O∣λ)的时间复杂度为:
O
(
K
2
×
T
)
O(\mathcal K^2 \times T)
O(K2×T),相比于
O
(
K
T
)
O(\mathcal K^{T})
O(KT)还是要优化一些的。
下一节将介绍: 使用后向算法处理 P ( O ∣ λ ) P(\mathcal O \mid \lambda) P(O∣λ)问题。