引言
给定模型参数和观测序列,预测令观测序列出现概率最大的状态序列时,有两种解决思路:一种是采用贪心思想的近似算法,另一种是采用动态规划思想的维特比算法。
近似算法
这是一种采用贪心算法,它在给定模型参数和观测序列下,独立考虑每个时刻出现概率最大的状态 q i q_i qi 作为该时刻状态的推论 s t ∗ = q i s_t^* = q_i st∗=qi,从而得到一个状态序列的推论 S ∗ = ( s 1 ∗ , s 2 ∗ , ⋯ , s T ∗ ) S^* = (s_1^*, s_2^*, \cdots, s_T^*) S∗=(s1∗,s2∗,⋯,sT∗) 。
在给定模型参数和观测序列下,
t
t
t 时刻处于状态
q
i
q_i
qi 的概率为
γ
t
(
q
i
)
\gamma_t(q_i)
γt(qi)1,所以
t
t
t 时刻状态的推论
s
t
∗
s_t^*
st∗ 为:
s
t
∗
=
arg max
1
≤
i
≤
N
[
γ
t
(
q
i
)
]
s_t^* = \argmax_{1 \le i \le N} [\gamma_t(q_i)]
st∗=1≤i≤Nargmax[γt(qi)]状态序列的推论为:
S
∗
=
(
arg max
1
≤
i
≤
N
[
γ
1
(
q
i
)
]
,
arg max
1
≤
i
≤
N
[
γ
2
(
q
i
)
]
,
⋯
,
arg max
1
≤
i
≤
N
[
γ
T
(
q
i
)
]
)
S^* = (\argmax_{1 \le i \le N} [\gamma_1(q_i)], \argmax_{1 \le i \le N} [\gamma_2(q_i)], \cdots, \argmax_{1 \le i \le N} [\gamma_T(q_i)])
S∗=(1≤i≤Nargmax[γ1(qi)],1≤i≤Nargmax[γ2(qi)],⋯,1≤i≤Nargmax[γT(qi)])
近似算法计算简单 ,但不能保证取得全局最优解,因为此方法推论出的状态序列中可能存在状态转移概率为0的相邻状态(即对某些
i
,
j
,
a
i
j
=
0
i,j, \ a_{ij}=0
i,j, aij=0),所以有些单独看出现概率很高的状态,实际在该时刻是不可能发生的。尽管如此,近似算法仍然是十分有用的。
维特比算法
维特比算法用动态规划(dynamic programming)求概率最大路径(最优路径)的思想来推论HMM模型的状态序列,此时每条路径对应一种可能状态序列。
给定模型参数,定义到
t
t
t 时刻部分观测序列为
o
1
,
⋯
,
o
t
o_1, \cdots, o_t
o1,⋯,ot 且部分状态序列为
s
1
,
⋯
,
s
t
s_1, \cdots, s_t
s1,⋯,st 的概率为路径权重,记作:
δ
t
(
q
i
)
=
P
(
s
1
,
⋯
,
s
t
=
q
i
,
o
1
,
⋯
,
o
t
∣
λ
)
(1)
\delta _t(q_i) = P(s_1, \cdots, s_t = q_i, o_1, \cdots, o_t | \lambda) \tag{1}
δt(qi)=P(s1,⋯,st=qi,o1,⋯,ot∣λ)(1)
所以,状态转移方程可表示为:
δ t + 1 ( q i ) = max 1 ≤ j ≤ N P ( s 1 , ⋯ , s t = q j , s t + 1 = q i , o 1 , ⋯ , o t , o t + 1 ∣ λ ) (2) \delta _{t+1}(q_i) = \max_{1 \le j \le N} P(s_1, \cdots, s_t = q_j, s_{t+1} = q_i, o_1, \cdots, o_t, o_{t+1} | \lambda) \tag{2} δt+1(qi)=1≤j≤NmaxP(s1,⋯,st=qj,st+1=qi,o1,⋯,ot,ot+1∣λ)(2)
根据HMM模型的齐次马尔科夫性假设和观测独立性假设, 式 ( 2 ) 式(2) 式(2)中的条件概率
P
(
s
1
,
⋯
,
s
t
=
q
j
,
s
t
+
1
=
q
i
,
o
1
,
⋯
,
o
t
,
o
t
+
1
∣
λ
)
=
P
(
s
1
,
⋯
,
s
t
=
q
j
,
o
1
,
⋯
,
o
t
∣
λ
)
P
(
s
t
+
1
=
q
i
∣
s
t
=
q
j
)
P
(
o
t
+
1
∣
s
t
+
1
=
q
i
)
P(s_1, \cdots, s_t = q_j, s_{t+1} = q_i, o_1, \cdots, o_t, o_{t+1} | \lambda) = P(s_1, \cdots, s_t = q_j, o_1, \cdots, o_t| \lambda)P(s_{t+1} = q_i | s_t = q_j)P(o_{t+1} | s_{t+1} = q_i)
P(s1,⋯,st=qj,st+1=qi,o1,⋯,ot,ot+1∣λ)=P(s1,⋯,st=qj,o1,⋯,ot∣λ)P(st+1=qi∣st=qj)P(ot+1∣st+1=qi)
所以状态转移方程可改写为:
δ t + 1 ( q i ) = max 1 ≤ j ≤ N δ t ( q j ) a j i b i ( o t + 1 ) , t = 1 , ⋯ , T − 1 (3) \delta _{t+1}(q_i) = \max_{1 \le j \le N} \ \delta _t(q_j)a_{ji}b_i(o_{t+1}), \ \ \ \ \ t=1,\cdots,T-1 \tag{3} δt+1(qi)=1≤j≤Nmax δt(qj)ajibi(ot+1), t=1,⋯,T−1(3)
初始条件为:当
t
=
1
t=1
t=1 时,
δ
1
(
q
i
)
=
π
i
b
i
(
o
1
)
(4)
\delta _1(q_i) = \pi_ib_i(o_{1}) \tag{4}
δ1(qi)=πibi(o1)(4)
综上,可将所有情况的状态转移方程统一写成如下形式:
δ
t
(
q
i
)
=
{
π
i
b
i
(
o
1
)
,
t
=
1
max
1
≤
j
≤
N
δ
t
−
1
(
q
j
)
a
j
i
b
i
(
o
t
)
,
t
=
2
,
3
,
⋯
,
T
(5)
\delta _t(q_i) = \begin{cases} \pi_ib_i(o_{1}), \ \ \ \ t=1 \\ \\ \max_{1 \le j \le N} \ \delta _{t-1}(q_j)a_{ji}b_i(o_{t}), \ \ \ \ t=2, 3, \cdots, T \end{cases} \tag{5}
δt(qi)=⎩⎪⎨⎪⎧πibi(o1), t=1max1≤j≤N δt−1(qj)ajibi(ot), t=2,3,⋯,T(5)
并由此得出维特比算法状态序列的推论:
S ∗ = ( s 1 ∗ , s 2 ∗ , ⋯ , s T ∗ ) = arg max 1 ≤ i ≤ N δ T ( ∗ ∗ q i ∗ ∗ ) (6) S^* = (s_1^*, s_2^*, \cdots, s_T^*) = \argmax_{1 \le i \le N} \ \delta _T(**q_i**) \tag{6} S∗=(s1∗,s2∗,⋯,sT∗)=1≤i≤Nargmax δT(∗∗qi∗∗)(6)
具体推导请详见作者文章:隐马尔科夫模型(HMM):计算观测序列的出现概率 ↩︎