隐马尔可夫模型定义
初始概率分布:向量 π = P ( i 1 = q i ) π = P(i_1=q_i) π=P(i1=qi)
观测概率矩阵:
B
=
[
b
j
(
k
)
]
N
×
M
B=[b_j(k)]_{N×M}
B=[bj(k)]N×M
其中
b
j
(
k
)
=
P
(
o
t
=
v
k
∣
i
t
=
q
j
)
k
=
1
,
2
,
.
.
.
,
M
;
j
=
1
,
2
,
.
.
.
,
N
b_j(k) = P(o_t=v_k|i_t=q_j)\qquad k=1,2,...,M;j=1,2,...,N
bj(k)=P(ot=vk∣it=qj)k=1,2,...,M;j=1,2,...,N
表示t时刻在qt条件下生成观测结果Vk的概率
状态转移矩阵:
A
=
[
a
i
j
]
N
×
N
A=[a_{ij}]_{N×N}
A=[aij]N×N
其中:
a
i
j
=
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
t
)
a_{ij} = P(i_{t+1} = q_j|i_t = q_t)
aij=P(it+1=qj∣it=qt)
表示t时刻在qt条件下在t+1时刻转移到q(t+1)的概率。
可能的状态集合:
Q
=
{
q
1
,
q
2
,
.
.
.
,
q
N
}
Q=\left \{ q_1, q_2,...,q_N\right \}
Q={q1,q2,...,qN}
N是可能的状态数
可能的观测集合:
V
=
{
v
1
,
v
2
,
.
.
.
,
v
M
}
V=\left \{ v_1, v_2,...,v_M\right \}
V={v1,v2,...,vM}
M是可能的观测数
状态序列:
I
=
{
i
1
,
i
2
,
.
.
.
,
i
T
}
I=\left \{ i_1, i_2,...,i_T\right \}
I={i1,i2,...,iT}
I是长度为T的序列
状态序列:
O
=
{
o
1
,
o
2
,
.
.
.
,
o
T
}
O=\left \{ o_1,o_2,...,o_T\right \}
O={o1,o2,...,oT}
O是长度为T的序列
λ
=
(
A
,
B
,
π
)
λ=(A,B,π)
λ=(A,B,π)
状态转移矩阵A与初始概率分布向量π确定了隐马尔科夫链,生成不可观察的状态序列。观测概率矩阵B确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。
两个假设:
(1):这一时刻的状态只依赖于前一时刻(感觉有点像,拉普拉斯兽)
P
(
i
t
∣
i
t
−
1
,
o
t
−
1
,
.
.
.
,
i
1
,
o
1
)
=
P
(
i
t
∣
i
t
−
1
)
P(i_t|i_{t-1},o_{t-1},...,i_1,o_1) = P(i_t|i_{t-1})
P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1)
(2):观测的独立性假设,即任意时刻只依赖于该时刻的隐马尔可夫链状态,与其他观测状态无关。
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(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(ot∣iT,oT,iT−1,oT−1,...it+1,ot+1,it,it−1,ot−1,...,i1,o1)=P(ot∣it)
直接计算算法:
P
(
O
∣
λ
)
=
∑
i
1
,
i
2
,
.
.
.
,
i
T
π
i
b
i
1
(
o
1
)
a
i
1
i
2
b
i
2
(
o
2
)
.
.
.
a
i
T
−
1
i
T
b
i
T
(
o
T
)
P(O|λ) = \sum_{i_1,i_2,...,i_T}π_ib_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T)
P(O∣λ)=i1,i2,...,iT∑πibi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
前向算法
由于直接计算,通常计算量过大,所以采用优化算法。记
α
t
(
i
)
=
P
(
o
1
,
o
2
,
.
.
.
,
o
t
,
i
t
=
q
i
∣
λ
)
α_t(i) = P(o_1,o_2,...,o_t,i_t=q_i|λ)
αt(i)=P(o1,o2,...,ot,it=qi∣λ)
输入:隐马尔可夫模型λ,观测序列O;
输出:概率P(O|λ)
(1)初值:
α
1
(
i
)
=
π
i
b
i
(
o
1
)
α_1(i) = π_ib_i(o_1)
α1(i)=πibi(o1)
(2)递推:对t = 1,2,…,T-1
α
i
+
1
(
i
)
=
[
∑
j
=
1
N
α
t
(
j
)
a
j
i
]
b
i
(
o
i
+
1
)
α_{i+1}(i) = [\sum_{j=1}^N α_t(j)a_{ji}] b_i(o_{i+1})
αi+1(i)=[j=1∑Nαt(j)aji]bi(oi+1)
(3)终止
P
(
O
∣
λ
)
=
∑
j
=
1
N
α
T
(
i
)
P(O|λ) = \sum_{j=1}^N α_T(i)
P(O∣λ)=j=1∑NαT(i)
向前计算就是将前一步计算的结果保存减少计算步骤。
后向计算原理类似
学习算法
监督学习方法,对
{
(
O
1
,
I
1
)
,
(
O
2
,
I
2
)
,
.
.
.
(
O
s
,
I
s
)
}
\left \{ (O_1,I_1),(O_2,I_2),...(O_s,I_s) \right \}
{(O1,I1),(O2,I2),...(Os,Is)},用极大似然估计去计算,隐马尔可夫模型。则状态转移的概率同频数统计:
a
^
i
j
=
A
i
j
∑
j
=
1
N
A
i
j
\hat a_{ij} = \frac{A_{ij}}{\sum_{j=1}^{N}A_{ij}}
a^ij=∑j=1NAijAij
设样本中状态为j,并观测为k的频数是
B
j
k
B_{jk}
Bjk。那么,状态为j,并观测为k的概率为
b
^
j
(
k
)
=
A
j
k
∑
k
=
1
M
A
j
k
\hat b_{j}(k) = \frac{A_{jk}}{\sum_{k=1}^{M}A_{jk}}
b^j(k)=∑k=1MAjkAjk
初始状态为概率
π
i
π_i
πi的估计是S个样本中,初始状态为
q
i
q_i
qi的频率。对于监督学习,人工标注数据的代价往往很高,我们使用非监督学习。
Baum-Welch算法就是一个已知观测序列,状态序列未知的隐函数模型,对于这种有隐函数的模型,可以用EM算法求解。求出Q函数,对Q函数的期望进行极大似然估计,得到迭代公式。
预测算法
近似算法
已知时刻t的状态
λ
t
(
i
)
λ_t(i)
λt(i),则在
I
∗
=
(
I
1
∗
,
I
2
∗
,
.
.
.
,
I
N
∗
)
I^* = (I_1^*,I_2^*,...,I_N^*)
I∗=(I1∗,I2∗,...,IN∗)的状态可以预估。
λ
t
(
i
)
=
α
t
(
i
)
β
t
(
i
)
∑
j
=
1
N
α
t
(
i
)
β
t
(
i
)
λ_t(i) = \frac{α_t(i)β_t(i)}{\sum_{j=1}^N α_t(i)β_t(i)}
λt(i)=∑j=1Nαt(i)βt(i)αt(i)βt(i)
在每个时刻最大的可能性为
I
t
∗
=
a
r
g
m
a
x
1
<
i
<
N
[
λ
t
(
i
)
]
I_t^* = argmax_{1<i<N}[λ_t(i)]
It∗=argmax1<i<N[λt(i)]
上述算法求得的可能不是整体最优解
维特比算法
动态规划
已知t,求t+1,最后得到真个路径,复杂的降低。