3. HMM三类问题的求解方法
3.1 问题1的求解方法
给定模型 λ ,希望计算观测序列 O=O1O2⋯OT 的概率,即 P(O|λ) 。最直接的计算方式是枚举所有长度为 T 的状态序列。对某个状态序列
其中
q1
是初始状态。在上面的状态序列的条件下,观测序列
O
的概率是
这里假设观测是独立的。于是
状态序列
Q
的概率为
于是
O
和
通过对所有可能的状态序列的联合概率进行求和可以得到
O
的概率:
上面的计算公式可以这样理解:在初始时刻(
t=1
),我们以概率
πq1
选择状态
q1
,然后以概率
bq1(O1)
生成观测值
O1
。在时刻由
t
到
根据公式(17)直接计算
P(O|λ)
的时间复杂度是
2T⋅NT
阶的,因为在每个时刻
t=1,2,⋯,T
,都有
N
种可能的状态,即共有
事实上,我们只需要前向-后向过程中的前向过程来求解问题1。我们在这节也会介绍后向过程,因为在求解问题3的时候会用到。定义前向变量
即给定模型
λ
,到时刻
t
部分观测序列为
1)初始化:
2)归纳计算:
3)终止:
步骤1)初始化前向概率为状态
Si
和
O1
的联合概率。归纳过程时前向算法的核心,如图4(a)所示。这个图展示了
t+1
时刻的状态
Sj
可以由
t
时刻的
所以 P(O|λ) 是 αT(i) 的和。
前向概率计算 P(O|λ) 的计算量是 N2T 阶( N(N+1)(T−1)+N 次乘法和 N(N−1)(T−1)次加法 )的,而不是直接计算的 TNT 阶。对 n=5,T=100 ,前向算法只需要3000次计算,而不是 1072 次。
前向算法高效的关键在于图4(b)所示的结构。在时刻
t=1
时刻,计算
α1(i),1≤i≤N
的。在时刻
t=2,3,⋯,T
,只需要计算
αt(j),1≤j≤N
,其中每个值的计算利用了前一时刻的
N
个
类似地,定义后向变量
βt(i)
:
即在
t
时刻的状态为
仍然可以用归纳的方法计算 βt(i) :
1) 初始化:
2)归纳:
如图5所示,为了计算在 qt=Si 的条件下, t+1 时刻后的观测序列为 Ot+1Ot+2⋯OT 的后向概率,需要考虑 t+1 时刻所有可能状态 Sj 的转移概率( aij ),以及此状态下的观测概率( bj(Ot+1) ),然后考虑状态 Sj 之后的观测序列的后向概率( βt+1(j) )。我们后面会看到如何利用前向计算以及后向计算来解决问题2和问题3。
βt(i),1≤t≤T,1≤i≤N 的计算量是 N2T 阶的。