HMM(2) Baum-Welch算法推导
在上一篇博客中介绍了HMM前向后向算法的推导过程,本次介绍的Baum-Welch算法是用来解决HMM的第二个问题的,即在已知观测序列 O O O,但不知道隐状态序列 Q Q Q和模型参数 λ \lambda λ时,如何去估计参数 λ \lambda λ。
1 EM算法介绍和推导
由于Baum-Welch算法的推导过程其实是通过EM算法的思想来进行的,所以在这之前我们需要先对EM算法(Expectation-Maximization algorithm)进行简单的推导与介绍。
EM算法最初是为了解决数据缺失情况下参数的估计问题,算法通过迭代的方式不断更新参数直到最终收敛。其中,迭代的过程可以分为E步和M步,这也就是为什么该算法叫做EM 算法的原因。
1-1 Jensen不等式
Jensen不等式的定义如下:
- 若函数 f ( x ) f(x) f(x)是凸函数, x x x是随机变量,那么 E ( f ( x ) ) ≥ f ( E ( x ) ) E(f(x))\ge f(E(x)) E(f(x))≥f(E(x))。当且仅当 x x x是常量时,不等式取等号成立。
- 若函数
f
(
x
)
f(x)
f(x)是凹函数,
x
x
x是随机变量,那么
E
(
f
(
x
)
)
≤
f
(
E
(
x
)
)
E(f(x))\le f(E(x))
E(f(x))≤f(E(x))。当且仅当
x
x
x是常量时,不等式取等号成立。
如下图所示,直观的对Jensen不等式进行理解。图片源于网络。
1-2 EM算法推导
假设样本集合
X
=
{
x
1
,
x
2
,
.
.
.
,
x
N
}
X=\{x_1,x_2,...,x_N\}
X={x1,x2,...,xN}包含
N
N
N个样本,模型需要估计的参数为
λ
\lambda
λ,模型的对数似然如式(1-1):
L
(
λ
)
=
∑
i
=
1
N
log
P
(
x
i
;
λ
)
(1-1)
L(\lambda)=\sum_{i=1}^N\log{P(x_i;\lambda)}\tag{1-1}
L(λ)=i=1∑NlogP(xi;λ)(1-1)
而极大似然估计则是寻找一组能够使式(1-1)最大的模型参数作为最终的参数估计,即
λ
^
=
a
r
g
m
a
x
(
L
(
λ
)
)
\hat\lambda=argmax(L(\lambda))
λ^=argmax(L(λ))。
若我们得到的样本数据包含为观察到的隐藏数据
Z
=
{
z
1
,
z
2
,
.
.
.
,
z
N
}
Z=\{z_1,z_2,...,z_N\}
Z={z1,z2,...,zN},即每个样本对应的隐藏数据。此时我们最大化的对数似然将变为式(1-2)。
L
(
λ
)
=
∑
i
=
1
N
log
∑
z
i
P
(
x
i
,
z
i
;
λ
)
(1-2)
L(\lambda)=\sum_{i=1}^N\log\sum_{z_i}P(x_i,z_i;\lambda)\tag{1-2}
L(λ)=i=1∑Nlogzi∑P(xi,zi;λ)(1-2)
接下来,假设隐藏数据服从某一分布
Q
(
z
i
)
Q(z_i)
Q(zi),对式(1-2)进行变换,如式(1-3)。
L
(
λ
)
=
∑
i
=
1
N
log
∑
z
i
P
(
x
i
,
z
i
;
λ
)
=
∑
i
=
1
N
log
∑
z
i
Q
(
z
i
)
P
(
x
i
,
z
i
;
λ
)
Q
(
z
i
)
≥
∑
i
=
1
N
∑
z
i
Q
(
z
i
)
log
P
(
x
i
,
z
i
;
λ
)
Q
(
z
i
)
(1-3)
\begin{aligned} L(\lambda) &=\sum_{i=1}^N\log\sum_{z_i}P(x_i,z_i;\lambda)\tag{1-3} \\ &=\sum_{i=1}^N\log\sum_{z_i}Q(z_i)\frac{P(x_i,z_i;\lambda)}{Q(z_i)} \\ &\ge \sum_{i=1}^N\sum_{z_i} Q(z_i)\log\frac{P(x_i,z_i;\lambda)}{Q(z_i)} \\ \end{aligned}
L(λ)=i=1∑Nlogzi∑P(xi,zi;λ)=i=1∑Nlogzi∑Q(zi)Q(zi)P(xi,zi;λ)≥i=1∑Nzi∑Q(zi)logQ(zi)P(xi,zi;λ)(1-3)
式(1-3)中第二步到第三步是利用Jensen不等式完成的,由于
log
(
x
)
\log(x)
log(x)函数是一个凹函数,因此
E
(
f
(
x
)
)
≤
f
(
E
(
x
)
)
E(f(x))\le f(E(x))
E(f(x))≤f(E(x)),在这里是关于
Q
(
z
i
)
Q(z_i)
Q(zi)的期望。我们通过Jensen不等式确定了
L
(
λ
)
L(\lambda)
L(λ)的下界,在之前说过只有当函数内的随机变量取到常量时,Jensen不等式才会取到等号,也就是说
P
(
x
i
,
z
i
;
λ
)
Q
(
z
i
)
=
c
\frac{P(x_i,z_i;\lambda)}{Q(z_i)}=c
Q(zi)P(xi,zi;λ)=c,由于
∑
i
=
1
N
Q
(
z
i
)
=
1
\sum_{i=1}^NQ(z_i)=1
∑i=1NQ(zi)=1:
P
(
x
i
,
z
i
;
λ
)
Q
(
z
i
)
=
c
P
(
x
i
,
z
i
;
λ
)
=
c
Q
(
z
i
)
∑
z
i
P
(
x
i
,
z
i
;
λ
)
=
c
∑
z
i
Q
(
z
i
)
∑
z
i
N
P
(
x
i
,
z
i
;
λ
)
=
c
\frac{P(x_i,z_i;\lambda)}{Q(z_i)}=c\\ P(x_i,z_i;\lambda)=cQ(z_i) \\ \sum_{z_i}P(x_i,z_i;\lambda)=c\sum_{z_i}Q(z_i) \\ \sum_{z_i}^NP(x_i,z_i;\lambda)=c
Q(zi)P(xi,zi;λ)=cP(xi,zi;λ)=cQ(zi)zi∑P(xi,zi;λ)=czi∑Q(zi)zi∑NP(xi,zi;λ)=c
根据上式的推导,我们发现在Jensen不等式取等号时,
∑
z
i
P
(
x
i
,
z
i
;
λ
)
\sum_{z_i}P(x_i,z_i;\lambda)
∑ziP(xi,zi;λ)也取得常量,因此将常量用
∑
i
=
1
N
P
(
x
i
,
z
i
;
λ
)
\sum_{i=1}^NP(x_i,z_i;\lambda)
∑i=1NP(xi,zi;λ)替换后得(1-4):
P
(
x
i
,
z
i
;
λ
)
Q
(
z
i
)
=
∑
z
i
P
(
x
i
,
z
i
;
λ
)
(1-4)
\frac{P(x_i,z_i;\lambda)}{Q(z_i)}=\sum_{z_i}P(x_i,z_i;\lambda) \tag{1-4}
Q(zi)P(xi,zi;λ)=zi∑P(xi,zi;λ)(1-4)
Q
(
z
i
)
=
P
(
x
i
,
z
i
;
λ
)
∑
z
i
P
(
x
i
,
z
i
;
λ
)
=
P
(
x
i
,
z
i
;
λ
)
P
(
x
i
;
λ
)
=
P
(
z
i
∣
x
i
;
λ
)
(1-5)
Q(z_i)=\frac{P(x_i,z_i;\lambda)}{\sum_{z_i}P(x_i,z_i;\lambda)}=\frac{P(x_i,z_i;\lambda)}{P(x_i;\lambda)}=P(z_i|x_i;\lambda)\tag{1-5}
Q(zi)=∑ziP(xi,zi;λ)P(xi,zi;λ)=P(xi;λ)P(xi,zi;λ)=P(zi∣xi;λ)(1-5)
式(1-5)的推导展示了在Jensen不等式取得等号时
Q
(
z
i
)
Q(z_i)
Q(zi)实际上是后验概率,我们此时便可以确定
Q
(
z
i
)
Q(z_i)
Q(zi)的选择了,计算后验概率的这一步就是E步,在算法中利用上一次迭代得到的参数计算后验概率来对
Q
(
z
i
)
Q(z_i)
Q(zi)进行更新,下一步M步,我们固定计算好的
Q
(
z
i
)
=
P
(
z
i
∣
x
i
;
λ
^
)
Q(z_i)=P(z_i|x_i;\hat\lambda)
Q(zi)=P(zi∣xi;λ^)来最大化
∑
i
=
1
N
∑
z
i
Q
(
z
i
)
log
P
(
x
i
,
z
i
;
λ
)
Q
(
z
i
)
\sum_{i=1}^N\sum_{z_i} Q(z_i)\log\frac{P(x_i,z_i;\lambda)}{Q(z_i)}
∑i=1N∑ziQ(zi)logQ(zi)P(xi,zi;λ),即:
a
r
g
m
a
x
∑
i
=
1
N
∑
z
i
Q
(
z
i
)
log
P
(
x
i
,
z
i
;
λ
)
Q
(
z
i
)
=
a
r
g
m
a
x
∑
i
=
1
N
∑
z
i
P
(
z
i
∣
x
i
;
λ
^
)
log
P
(
x
i
,
z
i
;
λ
)
P
(
z
i
∣
x
i
;
λ
^
)
=
a
r
g
m
a
x
∑
i
=
1
N
∑
z
i
P
(
z
i
∣
x
i
;
λ
^
)
log
P
(
x
i
,
z
i
;
λ
)
−
∑
i
=
1
N
∑
z
i
P
(
z
i
∣
x
i
;
λ
^
)
log
P
(
z
i
∣
x
i
;
λ
^
=
a
r
g
m
a
x
∑
i
=
1
N
∑
z
i
P
(
z
i
∣
x
i
;
λ
^
)
log
P
(
x
i
,
z
i
;
λ
)
\begin{aligned} argmax\sum_{i=1}^N\sum_{z_i} Q(z_i)\log\frac{P(x_i,z_i;\lambda)}{Q(z_i)} &=argmax\sum_{i=1}^N\sum_{z_i} P(z_i|x_i;\hat\lambda)\log\frac{P(x_i,z_i;\lambda)}{P(z_i|x_i;\hat\lambda)} \\ &=argmax\sum_{i=1}^N\sum_{z_i} P(z_i|x_i;\hat\lambda)\log{P(x_i,z_i;\lambda)}-\sum_{i=1}^N\sum_{z_i}P(z_i|x_i;\hat\lambda)\log{P(z_i|x_i;\hat\lambda} \\ &=argmax\sum_{i=1}^N\sum_{z_i} P(z_i|x_i;\hat\lambda)\log{P(x_i,z_i;\lambda)} \end{aligned}
argmaxi=1∑Nzi∑Q(zi)logQ(zi)P(xi,zi;λ)=argmaxi=1∑Nzi∑P(zi∣xi;λ^)logP(zi∣xi;λ^)P(xi,zi;λ)=argmaxi=1∑Nzi∑P(zi∣xi;λ^)logP(xi,zi;λ)−i=1∑Nzi∑P(zi∣xi;λ^)logP(zi∣xi;λ^=argmaxi=1∑Nzi∑P(zi∣xi;λ^)logP(xi,zi;λ)上式中第二步的第二项中由于是固定值所以不影响最终的结果,所以将其省略。因此,EM算法的M步就是寻找能够最大化上式
∑
i
=
1
N
∑
z
i
P
(
z
i
∣
x
i
;
λ
^
)
log
P
(
x
i
,
z
i
;
λ
)
\sum_{i=1}^N\sum_{z_i} P(z_i|x_i;\hat\lambda)\log{P(x_i,z_i;\lambda)}
∑i=1N∑ziP(zi∣xi;λ^)logP(xi,zi;λ)的模型参数
λ
\lambda
λ。
Baum-Welch算法推导
Baum-Welch算法的整个过程就是EM算法的过程。首先在E步我们利用上一次迭代训练出的
λ
^
\hat\lambda
λ^来计算后验概率,在M步我们固定后验概率计算最大化式(1-6)新的一组参数
λ
^
\hat\lambda
λ^,其中
K
K
K表示样本集合中序列样本的总数,可以发现式(1-6)和上一节中最后推出来的公式是一致的,未知的隐状态序列
Q
Q
Q就是EM算法中的隐藏变量。
λ
^
:
=
a
r
g
m
a
x
λ
∑
k
=
1
K
∑
Q
P
(
Q
∣
O
k
,
λ
^
)
log
P
(
O
k
,
Q
∣
λ
)
(1-6)
\hat\lambda :=argmax_{\lambda}\sum_{k=1}^K\sum_QP(Q|O_k,\hat\lambda)\log{P(O_k,Q|\lambda)}\tag{1-6}
λ^:=argmaxλk=1∑KQ∑P(Q∣Ok,λ^)logP(Ok,Q∣λ)(1-6)
假设我们的训练样本集是
{
O
1
,
O
2
,
.
.
.
,
O
K
}
\{O_1,O_2,...,O_K\}
{O1,O2,...,OK},对于其中的某一个
O
k
=
{
o
1
(
k
)
,
o
2
(
k
)
,
.
.
.
,
o
T
(
k
)
}
O_k=\{o_1^{(k)},o_2^{(k)},...,o_T^{(k)}\}
Ok={o1(k),o2(k),...,oT(k)},样本集对应的隐状态集是
{
Q
1
,
Q
2
,
.
.
.
,
Q
K
}
\{Q_1,Q_2,...,Q_K\}
{Q1,Q2,...,QK},对于其中的某一个
Q
k
=
{
q
1
(
k
)
,
q
2
(
k
)
,
.
.
.
,
q
T
(
k
)
}
Q_k=\{q_1^{(k)},q_2^{(k)},...,q_T^{(k)}\}
Qk={q1(k),q2(k),...,qT(k)}。对式(1-6)进一步分解为(1-7):
λ
^
:
=
a
r
g
m
a
x
λ
∑
k
=
1
K
∑
Q
P
(
O
k
,
Q
∣
λ
^
)
P
(
O
k
∣
λ
^
)
log
P
(
O
k
,
Q
∣
λ
)
(1-7)
\hat\lambda:=argmax_\lambda\sum_{k=1}^K\sum_Q\frac{P(O_k,Q|\hat\lambda)}{P(O_k|\hat\lambda)}\log{P(O_k,Q|\lambda)}\tag{1-7}
λ^:=argmaxλk=1∑KQ∑P(Ok∣λ^)P(Ok,Q∣λ^)logP(Ok,Q∣λ)(1-7)
式(1-7)中由于
P
(
O
k
∣
λ
^
)
P(O_k|\hat\lambda)
P(Ok∣λ^)的值是固定的,因此可以忽略,式(1-7)则化简为式(1-8):
λ
^
:
=
a
r
g
m
a
x
λ
∑
k
=
1
K
∑
Q
P
(
O
k
,
Q
∣
λ
^
)
log
P
(
O
k
,
Q
∣
λ
)
(1-8)
\hat\lambda:=argmax_\lambda\sum_{k=1}^K\sum_QP(O_k,Q|\hat\lambda)\log{P(O_k,Q|\lambda)}\tag{1-8}
λ^:=argmaxλk=1∑KQ∑P(Ok,Q∣λ^)logP(Ok,Q∣λ)(1-8)
式(1-8)也就是我们最终需要优化的表达式,下面我们需要写出在模型参数为
λ
\lambda
λ时
O
O
O和
Q
Q
Q的联合概率分布的详细表达式,如式(1-9),其中式(1-8)中在
λ
^
\hat\lambda
λ^时
O
O
O和
Q
Q
Q的联合概率分布与式(1-9)一致,只是因为迭代次数的原因参数值不同而已。式(1-9)中
i
t
i^{t}
it表示序列
t
t
t时刻的隐状态为
i
i
i。
P
(
O
,
Q
∣
λ
)
=
π
(
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
)
(1-9)
P(O,Q|\lambda)=\pi(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)\tag{1-9}
P(O,Q∣λ)=π(i(1))bi(1)(o1)ai(1)i(2)bi(2)(o2)...ai(T−1)i(T)bi(T)(oT)(1-9)
将式(1-9)带入式(1-8)中进行展开得:
λ
^
:
=
a
r
g
m
a
x
λ
∑
k
=
1
K
∑
Q
P
(
O
k
,
Q
∣
λ
^
)
log
[
π
(
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
)
]
=
a
r
g
m
a
x
λ
∑
k
=
1
K
∑
Q
P
(
O
k
,
Q
∣
λ
^
)
(
log
π
(
i
(
1
)
)
+
∑
t
=
1
T
−
1
log
a
i
(
t
)
i
(
t
+
1
)
+
∑
t
=
1
T
b
i
(
t
)
(
o
t
)
)
\begin{aligned} \hat\lambda &:=argmax_\lambda\sum_{k=1}^K\sum_QP(O_k,Q|\hat\lambda)\log[{\pi(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) }] \\ &=argmax_\lambda\sum_{k=1}^K\sum_QP(O_k,Q|\hat\lambda)(\log\pi(i^{(1)})+\sum_{t=1}^{T-1}\log{a_{i^{(t)}i^{(t+1)}}}+\sum_{t=1}^{T}b_{i^{(t)}}(o_t)) \end{aligned}
λ^:=argmaxλk=1∑KQ∑P(Ok,Q∣λ^)log[π(i(1))bi(1)(o1)ai(1)i(2)bi(2)(o2)...ai(T−1)i(T)bi(T)(oT)]=argmaxλk=1∑KQ∑P(Ok,Q∣λ^)(logπ(i(1))+t=1∑T−1logai(t)i(t+1)+t=1∑Tbi(t)(ot))
接下来对
λ
(
Π
,
A
,
B
)
\lambda(\Pi,A,B)
λ(Π,A,B)内的各个参数求偏导,首先来求
π
(
i
)
^
\hat{\pi(i)}
π(i)^,我们先将求导后为0的部分省略掉。
π
(
i
)
^
=
a
r
g
m
a
x
π
(
i
(
1
)
)
∑
k
=
1
K
∑
Q
P
(
O
k
,
Q
∣
λ
^
)
log
π
(
i
(
1
)
)
(1-10)
\hat{\pi(i)}=argmax_{\pi(i^{(1)})}\sum_{k=1}^K\sum_QP(O_k,Q|\hat\lambda)\log{\pi(i^{(1)})}\tag{1-10}
π(i)^=argmaxπ(i(1))k=1∑KQ∑P(Ok,Q∣λ^)logπ(i(1))(1-10)
由于
∑
i
=
1
M
π
(
i
(
1
)
)
=
1
\sum_{i=1}^M\pi(i^{(1)})=1
∑i=1Mπ(i(1))=1等式条件的约束,因此利用拉格朗日乘子法可 以得到需要最大化的拉格朗日函数(1-11):
l
(
π
)
=
a
r
g
m
a
x
π
(
i
(
1
)
)
∑
k
=
1
K
∑
Q
P
(
O
k
,
Q
∣
λ
^
)
log
π
(
i
(
1
)
)
+
γ
(
∑
i
=
1
M
π
(
i
(
1
)
)
−
1
)
(1-11)
l(\pi)=argmax_{\pi(i^{(1)})}\sum_{k=1}^K\sum_QP(O_k,Q|\hat\lambda)\log{\pi(i^{(1)})}+\gamma(\sum_{i=1}^M\pi(i^{(1)})-1)\tag{1-11}
l(π)=argmaxπ(i(1))k=1∑KQ∑P(Ok,Q∣λ^)logπ(i(1))+γ(i=1∑Mπ(i(1))−1)(1-11)
对(1-11)求
π
(
i
(
1
)
)
\pi(i^{(1)})
π(i(1))偏导并令结果等于零得式(1-12):
∑
k
=
1
K
P
(
O
k
,
q
1
(
k
)
=
σ
i
∣
λ
^
)
+
γ
π
(
i
(
1
)
)
=
0
(1-12)
\sum_{k=1}^KP(O_k,q_1^{(k)}=\sigma_i|\hat\lambda)+\gamma\pi(i^{(1)})=0\tag{1-12}
k=1∑KP(Ok,q1(k)=σi∣λ^)+γπ(i(1))=0(1-12)
对式(1-12)两侧对
i
(
1
)
i^{(1)}
i(1)求和得式(1-13):
∑
k
=
1
K
P
(
O
k
∣
λ
^
)
+
γ
=
0
(1-13)
\sum_{k=1}^KP(O_k|\hat\lambda)+\gamma=0\tag{1-13}
k=1∑KP(Ok∣λ^)+γ=0(1-13)
将式(1-13)的
γ
=
−
∑
k
=
1
K
P
(
O
k
∣
λ
^
)
\gamma=-\sum_{k=1}^KP(O_k|\hat\lambda)
γ=−∑k=1KP(Ok∣λ^)带入到式(1-12)中可以得到:
π
(
i
(
1
)
)
=
∑
k
=
1
K
P
(
O
k
,
q
1
(
k
)
=
σ
i
∣
λ
^
)
∑
k
=
1
K
P
(
O
k
∣
λ
^
)
(1-14)
\begin{aligned} \pi(i^{(1)}) &=\frac{\sum_{k=1}^KP(O_k,q_1^{(k)}=\sigma_i|\hat\lambda)}{\sum_{k=1}^KP(O_k|\hat\lambda)}\tag{1-14} \\ \end{aligned}
π(i(1))=∑k=1KP(Ok∣λ^)∑k=1KP(Ok,q1(k)=σi∣λ^)(1-14)