隐马尔科夫模型的学习,根据训练数据时包括观测序列和对应的状态序列还是只有观测序列,可以分别有监督学习和非监督学习实现。
监督学习方法
假设已给的训练数据中,包含S个长度相同的观测序列和对应的状态序列
{
(
O
1
,
I
1
)
,
(
O
2
,
I
2
)
…
…
(
O
S
,
I
S
)
}
\{(O_1,I_1),(O_2,I_2)……(O_S,I_S)\}
{(O1,I1),(O2,I2)……(OS,IS)},那么可以利用极大似然估计法估计隐马尔科夫模型的参数,具体如下:
1)转移概率
a
i
j
a_{ij}
aij的估计
设样本中时刻t处于状态i时刻t+1转移到状态j的频数为A_{ij},那么状态转移概率
a
i
j
a_{ij}
aij的估计为:
a
i
j
=
A
i
j
∑
j
=
1
N
A
i
j
a_{ij}=\frac{A_{ij}}{\displaystyle\sum_{j=1}^{N}A_{ij}}
aij=j=1∑NAijAij
2)观测概率
b
j
(
k
)
b_j(k)
bj(k)的估计
设样本中状态为j并观测为k的频数为
B
j
k
B_{jk}
Bjk,那么状态为j观测为k的概率
b
j
(
k
)
b_j(k)
bj(k)的估计是:
b
j
(
k
)
=
B
j
k
∑
k
=
1
M
B
j
k
b_j(k)=\frac{B_{jk}}{\displaystyle\sum_{k=1}^{M}B_{jk}}
bj(k)=k=1∑MBjkBjk
3)初始状态概率 π i π_i πi的估计为S个样本中初始状态为 q i q_i qi的频率。
由于监督学习需要使用训练数据,而人工标注训练数据的代价很高,有时就会使用非监督学习方法。
鲍尔-韦尔奇算法
假设给定训练数据只包含S个长度为T的观测序列
{
O
1
,
O
2
…
O
S
}
\{O_1,O_2…O_S\}
{O1,O2…OS},而没有对应的状态序列,目标是学习隐马尔科夫模型
λ
=
(
A
,
B
,
π
)
λ=(A,B,π)
λ=(A,B,π),我们将观测序列数据看做观测数据O,状态序列看做不可观测的隐数据
I
I
I,那么隐马尔科夫模型事实上是一个含有隐变量的概率模型。
P
(
O
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
P(O|λ)=\displaystyle\sum_{I}P(O|I,λ)P(I|λ)
P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)
他的参数可又EM算法实现。
1)确定完全数据的对数似然函数
所有的观测数据写成
O
=
(
o
1
,
o
2
,
…
…
o
T
)
O=(o_1,o_2,……o_T)
O=(o1,o2,……oT),所有隐数据写成
I
=
(
i
1
,
i
2
…
…
i
T
)
I={(i_1,i_2……i_T)}
I=(i1,i2……iT)完全数据时
(
O
,
I
)
=
(
o
1
,
o
2
,
…
…
o
T
,
i
1
,
i
2
…
…
i
T
)
(O,I)=(o_1,o_2,……o_T,i_1,i_2……i_T)
(O,I)=(o1,o2,……oT,i1,i2……iT)
完全数据的对数似然函数是
l
o
g
P
(
O
,
I
∣
λ
)
logP(O,I|λ)
logP(O,I∣λ)
E步:求
Q
Q
Q函数
(完全数据的对数似然函数log(Y,Z|θ)关于在给定观测数据Y和当前参数
θ
(
i
)
θ^{(i)}
θ(i)下对未观测数据Z的条件概率分布
P
(
Z
∣
Y
,
θ
(
i
)
)
P(Z|Y,θ^{(i)})
P(Z∣Y,θ(i))的期望。)
Q
(
λ
,
λ
′
)
=
∑
I
l
o
g
P
(
O
,
I
∣
λ
)
P
(
I
∣
O
,
λ
′
)
Q(λ,λ')=\displaystyle\sum_{I}logP(O,I|λ)P(I|O,λ')
Q(λ,λ′)=I∑logP(O,I∣λ)P(I∣O,λ′)
(
λ
′
λ'
λ′是隐马尔科夫模型参数的当前估计值,λ是要极大化的隐马尔科夫模型参数)
M步:极大化Q函数
λ ∗ = a r g m a x ∑ I l o g P ( O , I ∣ λ ) P ( I ∣ O , λ ′ ) λ^*=argmax\displaystyle\sum_{I}logP(O,I|λ)P(I|O,λ') λ∗=argmaxI∑logP(O,I∣λ)P(I∣O,λ′)
联合分布的概率计算如下:
P
(
O
,
I
∣
λ
)
=
π
i
1
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,I|λ)=π_{i_1}b_{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,I∣λ)=πi1bi1(o1)ai1i2bi2(o2)…aiT−1iTbiT(oT)
针对E步:
Q
(
λ
,
λ
′
)
=
∑
I
l
o
g
P
(
O
,
I
∣
λ
)
P
(
I
∣
O
,
λ
′
)
Q(λ,λ')=\displaystyle\sum_{I}logP(O,I|λ)P(I|O,λ')
Q(λ,λ′)=I∑logP(O,I∣λ)P(I∣O,λ′)
其中,由于
P
(
I
∣
O
,
λ
′
)
=
P
(
O
,
I
∣
λ
′
)
P
(
O
∣
λ
′
)
P(I|O,λ')=\frac{P(O,I|λ')}{P(O|λ')}
P(I∣O,λ′)=P(O∣λ′)P(O,I∣λ′),而
P
(
O
∣
λ
′
)
P(O|λ')
P(O∣λ′)是常数,因此我们要极大化的式子等价于
λ
∗
=
a
r
g
m
a
x
∑
I
l
o
g
P
(
O
,
I
∣
λ
)
P
(
I
,
O
∣
λ
′
)
λ^*=argmax\displaystyle\sum_{I}logP(O,I|λ)P(I,O|λ')
λ∗=argmaxI∑logP(O,I∣λ)P(I,O∣λ′)
将上面的
P
(
O
,
I
∣
λ
)
P(O,I|λ)
P(O,I∣λ)的表达式带入我们需要极大化的式子,可得
于是:
λ ∗ = a r g m a x ∑ I l o g π i 1 P ( I , O ∣ λ ′ ) + ∑ I ( ∑ t = 1 T − 1 l o g a i t i t + 1 ) P ( I , O ∣ λ ′ ) + ∑ I ( ∑ t = 1 T l o g b i t ( o t ) ) P ( I , O ∣ λ ′ ) λ^*=argmax\displaystyle\sum_{I}logπ_{i_1}P(I,O|λ')+\displaystyle\sum_{I}(\displaystyle\sum_{t=1}^{T-1}loga_{i_ti_{t+1}})P(I,O|λ')+\displaystyle\sum_{I}(\displaystyle\sum_{t=1}^{T}logb_{i_t}(o_t))P(I,O|λ') λ∗=argmaxI∑logπi1P(I,O∣λ′)+I∑(t=1∑T−1logaitit+1)P(I,O∣λ′)+I∑(t=1∑Tlogbit(ot))P(I,O∣λ′) (目标函数)
要求隐藏模型参数 λ = ( A , B , π ) λ=(A,B,π) λ=(A,B,π),我们只需要对上式分别对 A , B , π A,B,π A,B,π求导即可得到我们更新的模型参数 λ ′ λ' λ′
观测上式发现要极大化的参数分别单独的出现在三个项中,所以只需对各项分别最大化。
π
∗
=
a
r
g
m
a
x
∑
I
l
o
g
π
i
P
(
I
,
O
∣
λ
′
)
=
a
r
g
m
a
x
∑
i
=
1
N
l
o
g
π
i
P
(
O
,
i
1
=
i
∣
λ
′
)
π^*=argmax\displaystyle\sum_{I}logπ_{i}P(I,O|λ')=argmax\displaystyle\sum_{i=1}^{N}logπ_{i}P(O,i_1=i|λ')
π∗=argmaxI∑logπiP(I,O∣λ′)=argmaxi=1∑NlogπiP(O,i1=i∣λ′)
由于
π
i
π_{i}
πi还满足
∑
i
=
1
N
π
i
=
1
\displaystyle\sum_{i=1}^{N}π_{i}=1
i=1∑Nπi=1
因此根据拉格朗日乘子法,我们可以得到
π
i
π_{i}
πi要极大化的拉格朗日函数为:
∑
i
=
1
N
l
o
g
π
i
P
(
O
,
i
1
=
i
∣
λ
′
)
+
γ
(
∑
i
=
1
N
π
i
−
1
)
\displaystyle\sum_{i=1}^{N}logπ_{i}P(O,i_1=i|λ')+γ(\displaystyle\sum_{i=1}^{N}π_{i}-1)
i=1∑NlogπiP(O,i1=i∣λ′)+γ(i=1∑Nπi−1)
对其求偏导并令结果为0得到:
P ( O , i 1 = i ∣ λ ′ ) + γ π i = 0 P(O,i_1=i|λ')+γπ_i=0 P(O,i1=i∣λ′)+γπi=0(化简后的)
令i分别等于从1到N,从上式可以得到N个式子,对这N个式子求和可得:
P ( O ∣ λ ′ ) + γ = 0 P(O|λ')+γ=0 P(O∣λ′)+γ=0得出 γ = − P ( O ∣ λ ′ ) γ=-P(O|λ') γ=−P(O∣λ′)
则 π i = P ( O , i 1 = i ∣ λ ′ ) P ( O ∣ λ ′ ) π_i=\frac{P(O,i_1=i|λ')}{P(O|λ')} πi=P(O∣λ′)P(O,i1=i∣λ′)
由贝叶斯公式: P ( O , i 1 = i ∣ λ ′ ) P ( O ∣ λ ′ ) = P ( i 1 = i ∣ O , λ ′ ) = γ 1 ( i ) \frac{P(O,i_1=i|λ')}{P(O|λ')}=P(i_1=i|O,λ')=γ_1(i) P(O∣λ′)P(O,i1=i∣λ′)=P(i1=i∣O,λ′)=γ1(i)
目标函数的第二项可以写成:
∑
I
(
∑
t
=
1
T
−
1
l
o
g
a
i
t
i
t
+
1
)
P
(
I
,
O
∣
λ
′
)
=
∑
i
=
1
N
∑
j
=
1
N
∑
t
=
1
T
−
1
l
o
g
a
i
j
P
(
O
,
i
t
=
i
,
i
t
+
1
=
j
∣
λ
′
)
\displaystyle\sum_{I}(\displaystyle\sum_{t=1}^{T-1}loga_{i_ti_{t+1}})P(I,O|λ')=\displaystyle\sum_{i=1}^{N}\displaystyle\sum_{j=1}^{N}\displaystyle\sum_{t=1}^{T-1}loga_{ij}P(O,i_t=i,i_{t+1}=j|λ')
I∑(t=1∑T−1logaitit+1)P(I,O∣λ′)=i=1∑Nj=1∑Nt=1∑T−1logaijP(O,it=i,it+1=j∣λ′)
同时具有约束条件:
∑
j
=
1
N
a
i
j
=
1
\displaystyle\sum_{j=1}^{N}a_{ij}=1
j=1∑Naij=1,则拉格朗日函数为:
∑
i
=
1
N
∑
j
=
1
N
∑
t
=
1
T
−
1
l
o
g
a
i
j
P
(
O
,
i
t
=
i
,
i
t
+
1
=
j
∣
λ
′
)
+
γ
(
∑
j
=
1
N
a
i
j
−
1
)
\displaystyle\sum_{i=1}^{N}\displaystyle\sum_{j=1}^{N}\displaystyle\sum_{t=1}^{T-1}loga_{ij}P(O,i_t=i,i_{t+1}=j|λ')+γ(\displaystyle\sum_{j=1}^{N}a_{ij}-1)
i=1∑Nj=1∑Nt=1∑T−1logaijP(O,it=i,it+1=j∣λ′)+γ(j=1∑Naij−1)
对
a
i
j
求
导
可
得
a_{ij}求导可得
aij求导可得
∑
t
=
1
T
−
1
P
(
O
,
i
t
=
i
,
i
t
+
1
=
j
∣
λ
′
)
+
γ
a
i
j
=
0
\displaystyle\sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1}=j|λ')+γa_{ij}=0
t=1∑T−1P(O,it=i,it+1=j∣λ′)+γaij=0
令j 等于从1到N,可以得到N个式子,相加可得
∑
t
=
1
T
−
1
P
(
O
,
i
t
=
i
∣
λ
′
)
+
γ
=
0
\displaystyle\sum_{t=1}^{T-1}P(O,i_t=i|λ')+γ=0
t=1∑T−1P(O,it=i∣λ′)+γ=0
则: γ = − ∑ t = 1 T − 1 P ( O , i t = i ∣ λ ′ ) γ=-\displaystyle\sum_{t=1}^{T-1}P(O,i_t=i|λ') γ=−t=1∑T−1P(O,it=i∣λ′)
a i j = ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ′ ) ∑ t = 1 T − 1 P ( O , i t = i ∣ λ ′ ) a_{ij}=\frac{\displaystyle\sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1}=j|λ')}{\displaystyle\sum_{t=1}^{T-1}P(O,i_t=i|λ')} aij=t=1∑T−1P(O,it=i∣λ′)t=1∑T−1P(O,it=i,it+1=j∣λ′)
= ∑ t = 1 T − 1 ξ t ( i , j ) ∑ t = 1 T − 1 γ t ( i ) =\frac{\displaystyle\sum_{t=1}^{T-1}ξ_t(i,j)}{\displaystyle\sum_{t=1}^{T-1}γ_t(i)} =t=1∑T−1γt(i)t=1∑T−1ξt(i,j)
3)针对第三项
∑
I
(
∑
t
=
1
T
l
o
g
b
i
t
(
o
t
)
)
P
(
I
,
O
∣
λ
′
)
=
∑
j
=
1
N
∑
t
=
1
T
l
o
g
b
j
(
o
t
)
)
P
(
O
,
i
t
=
j
∣
λ
′
)
\displaystyle\sum_{I}(\displaystyle\sum_{t=1}^{T}logb_{i_t}(o_t))P(I,O|λ')=\displaystyle\sum_{j=1}^{N}\displaystyle\sum_{t=1}^{T}logb_j(o_t))P(O,i_t=j|λ')
I∑(t=1∑Tlogbit(ot))P(I,O∣λ′)=j=1∑Nt=1∑Tlogbj(ot))P(O,it=j∣λ′)
同样用拉格朗日乘子法,约束条件为 ∑ k = 1 M b j ( k ) = 1 \displaystyle\sum_{k=1}^{M}b_j(k)=1 k=1∑Mbj(k)=1
∑ j = 1 N ∑ t = 1 T l o g b j ( o t ) ) P ( O , i t = j ∣ λ ′ ) + γ ( ∑ k = 1 M b j ( k ) − 1 ) \displaystyle\sum_{j=1}^{N}\displaystyle\sum_{t=1}^{T}logb_j(o_t))P(O,i_t=j|λ')+γ(\displaystyle\sum_{k=1}^{M}b_j(k)-1) j=1∑Nt=1∑Tlogbj(ot))P(O,it=j∣λ′)+γ(k=1∑Mbj(k)−1)
对
b
j
(
o
t
)
b_j(o_t)
bj(ot)求导,注意只有当
o
t
=
v
k
时
,
b
j
(
o
t
)
对
b
j
(
k
)
o_t=v_k时,b_j(o_t)对b_j(k)
ot=vk时,bj(ot)对bj(k)的偏导数才不为0,以
I
(
o
t
=
v
k
)
I(o_t=v_k)
I(ot=vk)表示:
∑
t
=
1
T
P
(
O
,
i
t
=
j
∣
λ
′
)
I
(
o
t
=
v
k
)
+
γ
b
j
(
k
)
=
0
\displaystyle\sum_{t=1}^{T}P(O,i_t=j|λ')I(o_t=v_k)+γb_j(k)=0
t=1∑TP(O,it=j∣λ′)I(ot=vk)+γbj(k)=0
令 k 取1到M个值,然后相加
∑
t
=
1
T
P
(
O
,
i
t
=
j
∣
λ
′
)
+
γ
=
0
\displaystyle\sum_{t=1}^{T}P(O,i_t=j|λ')+γ=0
t=1∑TP(O,it=j∣λ′)+γ=0
得到
γ
=
−
∑
t
=
1
T
P
(
O
,
i
t
=
j
∣
λ
′
)
γ=-\displaystyle\sum_{t=1}^{T}P(O,i_t=j|λ')
γ=−t=1∑TP(O,it=j∣λ′)
则: b j ( k ) = ∑ t = 1 T P ( O , i t = j ∣ λ ′ ) I ( o t = v k ) ∑ t = 1 T P ( O , i t = j ∣ λ ′ ) b_j(k)=\frac{\displaystyle\sum_{t=1}^{T}P(O,i_t=j|λ')I(o_t=v_k)}{\displaystyle\sum_{t=1}^{T}P(O,i_t=j|λ')} bj(k)=t=1∑TP(O,it=j∣λ′)t=1∑TP(O,it=j∣λ′)I(ot=vk)
分子分母同时除以 P ( O ∣ λ ′ ) P(O|λ') P(O∣λ′)
b j ( k ) = ∑ t = 1 T P ( i t = j ∣ O , λ ′ ) I ( o t = v k ) ∑ t = 1 T P ( i t = j , O ∣ λ ′ ) b_j(k)=\frac{\displaystyle\sum_{t=1}^{T}P(i_t=j|O,λ')I(o_t=v_k)}{\displaystyle\sum_{t=1}^{T}P(i_t=j,O|λ')} bj(k)=t=1∑TP(it=j,O∣λ′)t=1∑TP(it=j∣O,λ′)I(ot=vk)
b j ( k ) = ∑ t = 1 T γ t ( j ) I ( o t = v k ) ∑ t = 1 T γ t ( j ) b_j(k)=\frac{\displaystyle\sum_{t=1}^{T}γ_t(j)I(o_t=v_k)}{\displaystyle\sum_{t=1}^{T}γ_t(j)} bj(k)=t=1∑Tγt(j)t=1∑Tγt(j)I(ot=vk)
Baum-Welch算法流程:
输入:观察数据
O
=
(
o
1
,
o
2
,
…
…
o
T
)
O=(o_1,o_2,……o_T)
O=(o1,o2,……oT)
输出:隐马尔科夫模型参数
1)初始化
对n=0,选取
a
i
j
(
0
)
,
b
j
(
k
)
(
0
)
,
π
i
(
0
)
,
得
到
模
型
参
数
λ
(
0
)
=
(
A
(
0
)
,
B
(
0
)
,
π
(
0
)
)
a_{ij}^{(0)},b_j(k)^{(0)},π_i^{(0)},得到模型参数λ^{(0)}=(A^{(0)},B^{(0)},π^{(0)})
aij(0),bj(k)(0),πi(0),得到模型参数λ(0)=(A(0),B(0),π(0))
2)递推,对于n=1,2……
a i j ( n + 1 ) = ∑ t = 1 T − 1 ξ t ( i , j ) ∑ t = 1 T − 1 γ t ( i ) a_{ij}^{(n+1)}=\frac{\displaystyle\sum_{t=1}^{T-1}ξ_t(i,j)}{\displaystyle\sum_{t=1}^{T-1} γ_t(i)} aij(n+1)=t=1∑T−1γt(i)t=1∑T−1ξt(i,j)
b j ( k ) ( n + 1 ) = ∑ t = 1 T γ t ( j ) I ( o t = v k ) ∑ t = 1 T γ t ( j ) b_j(k)^{(n+1)}=\frac{\displaystyle\sum_{t=1}^{T}γ_t(j)I(o_t=v_k)}{\displaystyle\sum_{t=1}^{T}γ_t(j)} bj(k)(n+1)=t=1∑Tγt(j)t=1∑Tγt(j)I(ot=vk)
π i ( n + 1 ) = γ 1 ( i ) π_i^{(n+1)}=γ_1(i) πi(n+1)=γ1(i)
右端各值根据观察数据 O = ( o 1 , o 2 , … … o T ) O=(o_1,o_2,……o_T) O=(o1,o2,……oT)和模型 λ ( n ) = ( A ( n ) , B ( n ) , π ( n ) ) λ^{(n)}=(A^{(n)},B^{(n)},π^{(n)}) λ(n)=(A(n),B(n),π(n))计算。
3)终止。得到模型参数 λ ( n + 1 ) = ( A ( n + 1 ) , B ( n + 1 ) , π ( n + 1 ) ) λ^{(n+1)}=(A^{(n+1)},B^{(n+1)},π^{(n+1)}) λ(n+1)=(A(n+1),B(n+1),π(n+1))