1 基本模型
模型介绍
Q:
Q
:
所有状态集合,
V
V
所有观测集合
N
N
表示所有的状态个数,表示所有的观测个数
I:
I
:
长度为
T
T
的状态序列,对应的观测序列
I=(i1,i2,...,iT),O=(o1,o2,...,oT)
I
=
(
i
1
,
i
2
,
.
.
.
,
i
T
)
,
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
参数介绍
隐马尔科夫模型由初始状态概率向量
π
π
,状态转移概率矩阵
A
A
,观测概率矩阵决定。用
λ
λ
表示隐马尔科夫模型,有
λ=(A,B,π)
λ
=
(
A
,
B
,
π
)
.
A
A
表示状态转移概率矩阵
其中
aij=P(it+1=qj|it=qi)
a
i
j
=
P
(
i
t
+
1
=
q
j
|
i
t
=
q
i
)
,表示在时刻
t
t
,状态,下一时刻
t+1
t
+
1
的时候转移到
qj
q
j
的概率。
B
B
表示观测概率矩阵
其中
bij=P(ot=vj|it=qi)
b
i
j
=
P
(
o
t
=
v
j
|
i
t
=
q
i
)
,表示在时刻
t
t
的时候,处于状态,观测到
vj
v
j
的概率。
π
π
表示初始状态概率
π=[πi],i=1,2,...,N
π
=
[
π
i
]
,
i
=
1
,
2
,
.
.
.
,
N
表示时刻
t=1
t
=
1
时各个状态概率分布。
基本问题
- 概率计算。给定模型 λ=(A,B,π) λ = ( A , B , π ) ,计算任一观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T ) 的概率 p(O|λ) p ( O | λ )
- 模型学习。给出观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T ) ,计算模型 λ=(A,B,π) λ = ( A , B , π ) 使得对于任意一个模型 λ′ λ ′ 有 p(O|λ′)≤p(O|λ) p ( O | λ ′ ) ≤ p ( O | λ )
- 模型预测。给定模型 λ=(A,B,π) λ = ( A , B , π ) 和观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T ) ,计算状态序列 I=(i1,i2,...,iT) I = ( i 1 , i 2 , . . . , i T ) ,使得对于任一状态序列 I′ I ′ ,有 p(I′|λ,O)≤p(I|λ,O) p ( I ′ | λ , O ) ≤ p ( I | λ , O )
2 概率计算
给定模型 λ=(A,B,π) λ = ( A , B , π ) ,计算给定观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T ) 的概率 p(O|λ) p ( O | λ ) 。
直接算法
从隐马尔科夫模型构建中可以看到,观测序列只跟对应的状态序列相关。因此可以利用全概率公式就算出每一种状态的概率和该状态下产生目标观测的概率即可,即
p(O|λ)=∑Ip(O|I)p(I|λ)(1)
(1)
p
(
O
|
λ
)
=
∑
I
p
(
O
|
I
)
p
(
I
|
λ
)
直接算法,由于状态数量太多,计算复杂度太高,一般不采用。
前向算法
前向算法,采用动态规划的思路,空间换时间。
定义—前向概率 表示时刻
t
t
及以前的观测序列为,且此时状态为
qi
q
i
的概率,记作
αt(i)=p(o1,o2,...,ot,it=qi|λ)(2)
(2)
α
t
(
i
)
=
p
(
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
i
|
λ
)
前向算法的计算步骤为
- 初始化,令 α1(i)=πibi,o1,i=1,2,...,N α 1 ( i ) = π i b i , o 1 , i = 1 , 2 , . . . , N
- 状态转移, αt+1(i)=[∑Nj=1αt(j)aj,i]bi,ot+1 α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j , i ] b i , o t + 1
- 汇总, p(O|λ)=∑Ni=1αT(i) p ( O | λ ) = ∑ i = 1 N α T ( i )
后向算法
后向算法跟前向算法类似,采用动态规划的思路,只不过计算顺序改为从后往前了。
定义—后向概率 表示时刻
t
t
以后的观测序列为,且时刻
t
t
时状态为的概率,记作
βt(i)=p(ot+1,ot+2,...,oT,it=qi|λ)(3)
(3)
β
t
(
i
)
=
p
(
o
t
+
1
,
o
t
+
2
,
.
.
.
,
o
T
,
i
t
=
q
i
|
λ
)
后向算法的计算步骤为
- 初始化,令 βT(i)=1,i=1,2,...,N β T ( i ) = 1 , i = 1 , 2 , . . . , N
- 状态转移, βt(i)=∑Nj=1ai,jbj,ot+1βt+1(j) β t ( i ) = ∑ j = 1 N a i , j b j , o t + 1 β t + 1 ( j )
- 汇总, p(O|λ)=∑Ni=1πibi,o1β1(i) p ( O | λ ) = ∑ i = 1 N π i b i , o 1 β 1 ( i )
3 模型学习
给出观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T ) ,计算模型 λ=(A,B,π) λ = ( A , B , π )
监督学习
如果同时知道了观测序列 O1,O2,... O 1 , O 2 , . . . 和对应的状态序列 I1,I2,... I 1 , I 2 , . . . ,可以采用此种方法。
Baum-Welch算法
如果只知道观测序列
O1,O2,...
O
1
,
O
2
,
.
.
.
,并没有对应的状态序列
I1,I2,...
I
1
,
I
2
,
.
.
.
的信息,可以采用此种方法。
这里由于状态属于未知的隐含变量,因此可以采用EM算法进行求解。算法流程如下,
Baum-Welch算法
4 模型预测
给定模型 λ=(A,B,π) λ = ( A , B , π ) 和观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T ) ,计算状态序列 I=(i1,i2,...,iT) I = ( i 1 , i 2 , . . . , i T )
近似算法
每一时刻把最有可能的状态确定为当前状态,依次计算。
维特比算法
维特比算法利用动态规划算法进行求解。求解思路跟概率计算问题的前向算法极其类似,都需要保存每一个时刻,每一个状态的概率,只不过前向算法里是对概率进行求和,而这里是挑选最大概率,作为”路径”。