隐马尔可夫模型HMM推导
背景介绍
介绍一下频率派和贝叶斯派两大流派发展出的建模方式。
频率派
频率派逐渐发展成了统计机器学习,该流派通常将任务建模为一个优化问题,其中有三个关键:
- 模型(model),建立用于解决问题的模型,如 f ( w ) = w T + b f(w)=w^T+b f(w)=wT+b ;
- 策略(strategy),指导模型优化的策略,比如计算损失函数
- 算法(algorithm),根据策略优化模型的算法,比如 GD、SGD、牛顿法、拟牛顿法
著作有李航老师的统计学习方法。
贝叶斯派
贝叶斯派逐渐发展出了概率图模型,最终是进行推断(inference),也就是求后验概率 p ( z ∣ x ) p(z|x) p(z∣x) 及其期望、方差,最终是一个积分问题。这可以通过一系列数值积分方法(如 MCMC)来计算。
概率图模型
- 有向 —> 贝叶斯网络
- 无向 —> 马尔克夫随机场(马尔可夫网络)
- 概率图模型 + 时间序列 —> 动态模型(Dynamic Model)
- 隐马儿可夫模型(HMM),隐状态是离散的;
- 卡尔曼滤波(Kalman Filter),隐状态连续、线性;
- 粒子滤波(Particle Filter),隐状态连续、非线性。
动态模型:在 GMM 等模型中,假设每个样本是独立同分布的,即不同样本之间没有任何关系。而在动态模型中,在此基础上有了时间序列。这里所谓的时间序列是广义的,可以是真正的时间序列,如语音信号,也可以是其他有序序列,如自然语言中的一个句子。在动态模型中,样本点之间是不满足独立同分布假设的。动态模型中,通常有隐藏状态和观测变量两种随机变量。如 HMM 示意图中,从横向来看,是时间序列(time),从纵向来看,是混合变量(mixture)。
HMM模型表示
HMM 模型的概率图表示如下所示,其中空白节点表示隐藏状态,用 I = i 1 , i 2 , … , i t , … I=i_1,i_2,\dots,i_t,\dots I=i1,i2,…,it,… 来表示,其取值的可能为 Q = q 1 , q 2 , … , q N Q={q_1,q_2,\dots,q_N} Q=q1,q2,…,qN,阴影节点表示观测变量,用 O = o 1 , o 2 , … , o t , … O=o_1,o_2,\dots,o_t,\dots O=o1,o2,…,ot,… 来表示,其取值的可能为 V = v 1 , v 2 , … , v M V={v_1,v_2,\dots,v_M} V=v1,v2,…,vM。概率图模型的参数为 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B) ,其中
- π \pi π 是初始概率分布,即第一个隐状态 i 1 i_1 i1 的概率分布,作为隐状态,它的其取值可能有 N N N 种
- A = [ a i j ] A=[a_{ij}] A=[aij] 是状态转移矩阵(transition matrix),矩阵中的元素 a i j a_{ij} aij 表示从隐状态 i i i 到隐状态 j j j 的转移概率,即 a i j = P ( i t + 1 = q j ∣ i t = q i ) a_{ij}=P(i_{t+1}=q_j|i_t=q_i) aij=P(it+1=qj∣it=qi)
- B = [ b j ( k ) ] B=[b_{j}(k)] B=[bj(k)] 是发射矩阵(emission matrix),矩阵中的元素 b j ( k ) b_{j}(k) bj(k) 表示同一时间点从隐状态 j j j 到观测变量 k k k 的发射概率,即 b j ( k ) = P ( o t = v k ∣ i t = q j ) b_{j}(k)=P(o_t=v_k|i_t=q_j) bj(k)=P(ot=vk∣it=qj)
两个假设
HMM 模型中有两个假设,分别是齐次马尔可夫假设和观测独立假设。
齐次马尔可夫假设,即无后效性,未来状态与过去状态无关,只与当前状态有关。即:
P
(
i
t
+
1
∣
i
t
,
i
t
−
1
,
…
,
i
1
,
o
t
,
o
t
−
1
,
…
,
o
1
)
=
P
(
i
t
+
1
∣
i
t
)
P(i_{t+1}|i_t,i_{t-1},\dots,i_1,o_t,o_{t-1},\dots,o_1)=P(i_{t+1}|i_t)
P(it+1∣it,it−1,…,i1,ot,ot−1,…,o1)=P(it+1∣it)
观测独立假设,某时刻的观测变量只与其自身对应的隐状态有关,与之前的其他变量都无关。即:
P
(
o
t
∣
i
t
,
i
t
−
1
,
…
,
i
1
,
o
t
−
1
,
…
,
o
1
)
=
P
(
o
t
∣
i
t
)
P(o_t|i_t,i_{t-1},\dots,i_1,o_{t-1},\dots,o_1)=P(o_t|i_t)
P(ot∣it,it−1,…,i1,ot−1,…,o1)=P(ot∣it)
三个问题
HMM 模型中,通常有三种问题:evaluation、learning、decoding。
-
evaluation:求值(观测变量)
已知 λ = { π , A , B } \lambda=\{\pi, A, B\} λ={π,A,B} ,求观测变量序列出现的概率,即求 P ( o ∣ λ ) P(o|\lambda) P(o∣λ) 。通常用前向后向算法(forward-backward algorithm)求解。
-
learning:求参数,参数估计
已知观测序列,求 λ \lambda λ ,通常用 EM 算法(baum welch algorithm)求解极大似然估计 λ ^ = arg max λ P ( O ∣ λ ) \hat{\lambda}=\arg\max_{\lambda} P(O|\lambda) λ^=argmaxλP(O∣λ) 。
-
decoding:求状态序列
已知观测序列和模型参数,求使得该观测序列出现概率最大的隐状态序列,通常用维特比算法(viterbi algorithm)估计 I ^ = arg max i P ( O ∣ I ) \hat{I}=\arg\max_{i}P(O|I) I^=argmaxiP(O∣I) 。
decoding 问题又可引申出两种问题:prediction 和 filtering。
- prediction:已知过去和现在的观测序列,求下一时刻的隐状态,即求 P ( i t + 1 ∣ o 1 , o 2 , … , o t ) P(i_{t+1}|o_1,o_2,\dots,o_t) P(it+1∣o1,o2,…,ot)
- filtering:已知过去和现在的观测序列,求当前时刻的隐状态,即求 P ( i t ∣ o 1 , o 2 , … , o t ) P(i_t|o_1,o_2,\dots,o_t) P(it∣o1,o2,…,ot) ,HMM 一般不做这个问题。
evaluation问题
朴素解法
给定 HMM 模型的参数,求观测变量,即求
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ) 。
P
(
O
∣
λ
)
=
∑
S
P
(
S
,
O
∣
λ
)
=
∑
S
P
(
O
∣
I
,
λ
)
⋅
P
(
I
∣
λ
)
P(O|\lambda)=\sum_{S}P(S,O|\lambda)=\sum_SP(O|I,\lambda)\cdot P(I|\lambda)
P(O∣λ)=S∑P(S,O∣λ)=S∑P(O∣I,λ)⋅P(I∣λ)
其中,后一项:
P
(
S
∣
λ
)
=
P
(
i
1
,
i
2
,
…
,
i
T
∣
λ
)
=
P
(
i
T
∣
i
1
,
i
2
,
…
,
i
T
−
1
,
λ
)
⋅
P
(
i
1
,
i
2
,
…
,
i
T
−
1
,
λ
)
=
P
(
i
T
∣
i
T
−
1
)
⋅
P
(
i
1
,
i
2
,
…
,
i
T
−
1
,
λ
)
齐次马尔可夫假设
=
P
(
i
T
∣
i
T
−
1
)
P
(
i
T
−
1
∣
i
T
−
2
)
…
P
(
i
2
∣
i
1
)
递归展开
=
a
i
T
−
1
,
i
T
a
i
T
−
2
,
i
T
−
1
…
a
12
=
∏
t
=
2
T
a
i
t
−
1
i
t
\begin{align} P(S|\lambda)&=P(i_1,i_2,\dots,i_T|\lambda)\\ &=P(i_T|i_1,i_2,\dots,i_{T-1},\lambda)\cdot P(i_1,i_2,\dots,i_{T-1},\lambda)\\ &=P(i_T|i_{T-1})\cdot P(i_1,i_2,\dots,i_{T-1},\lambda)\ \ \ \ \ \ \ 齐次马尔可夫假设\\ &=P(i_T|i_{T-1})P(i_{T-1}|i_{T-2})\dots P(i_2|i_1)\ \ \ \ 递归展开\\ &=a_{i_{T-1},i_T}a_{i_{T-2},i_{T-1}}\dots a_{12}\\ &=\prod_{t=2}^Ta_{i_{t-1}i_t} \end{align}
P(S∣λ)=P(i1,i2,…,iT∣λ)=P(iT∣i1,i2,…,iT−1,λ)⋅P(i1,i2,…,iT−1,λ)=P(iT∣iT−1)⋅P(i1,i2,…,iT−1,λ) 齐次马尔可夫假设=P(iT∣iT−1)P(iT−1∣iT−2)…P(i2∣i1) 递归展开=aiT−1,iTaiT−2,iT−1…a12=t=2∏Tait−1it
同理,根据观测独立假设,前一项:
P
(
O
∣
I
,
λ
)
=
∏
t
=
1
T
b
i
t
(
o
t
)
P(O|I,\lambda)=\prod_{t=1}^Tb_{i_t}(o_t)
P(O∣I,λ)=t=1∏Tbit(ot)
从而:
P
(
O
∣
λ
)
=
∑
I
∏
t
=
2
T
a
i
t
−
1
i
t
∏
t
=
1
T
b
i
t
(
o
t
)
=
∑
i
1
∑
i
2
⋯
∑
i
T
∏
t
=
2
T
a
i
t
−
1
i
t
∏
t
=
1
T
b
i
t
(
o
t
)
\begin{align} P(O|\lambda)&=\sum_I\prod_{t=2}^Ta_{i_{t-1}i_t}\prod_{t=1}^Tb_{i_t}(o_t)\\ &=\sum_{i_1}\sum_{i_2}\dots\sum_{i_T}\prod_{t=2}^Ta_{i_{t-1}i_t}\prod_{t=1}^Tb_{i_t}(o_t)\\ \end{align}
P(O∣λ)=I∑t=2∏Tait−1itt=1∏Tbit(ot)=i1∑i2∑⋯iT∑t=2∏Tait−1itt=1∏Tbit(ot)
上式的时间复杂度为
O
(
T
N
T
)
\mathcal{O}(TN^T)
O(TNT) ,无疑是不能接受的。我们需要寻找时间复杂度更低的算法。
前向算法
推导前向后向算法的过程中用到的变换主要就是 HMM 的两个假设,以及条件概率的公式。
记
α
t
(
i
)
=
P
(
o
1
,
…
,
o
t
,
i
t
=
q
i
∣
λ
)
\alpha_t(i)=P(o_1,\dots,o_t,i_t=q_i|\lambda)
αt(i)=P(o1,…,ot,it=qi∣λ) ,则
P
(
O
∣
λ
)
=
∑
i
=
1
N
P
(
O
,
i
t
=
q
i
∣
λ
)
=
∑
i
=
1
N
α
T
(
i
)
P(O|\lambda)=\sum_{i=1}^NP(O,i_t=q_i|\lambda)=\sum_{i=1}^N\alpha_T(i)
P(O∣λ)=i=1∑NP(O,it=qi∣λ)=i=1∑NαT(i)
要求观测变量
P
(
O
∣
λ
)
P(O|\lambda)
P(O∣λ), 现在我们只要求出
α
T
(
i
)
\alpha_T(i)
αT(i) ,然后再
i
=
1
…
N
i=1\dots N
i=1…N 上求和即可。
一个自然的想法就是找
α
t
(
i
)
\alpha_{t}(i)
αt(i) 的递推式,即其与
α
t
+
1
(
i
)
\alpha_{t+1}(i)
αt+1(i) 的关系。有:
α
t
+
1
(
j
)
=
P
(
o
1
,
…
,
o
t
,
o
t
+
1
,
i
t
+
1
=
q
j
∣
λ
)
=
∑
i
=
1
N
P
(
o
1
,
…
,
o
t
,
o
t
+
1
,
i
t
=
q
i
,
i
t
+
1
=
q
j
∣
λ
)
=
∑
i
=
1
N
P
(
o
t
+
1
∣
o
1
,
…
,
o
t
,
i
t
=
q
i
,
i
t
+
1
=
q
j
,
λ
)
⋅
P
(
o
1
,
…
,
o
t
,
i
t
=
q
i
,
i
t
+
1
=
q
j
∣
λ
)
=
∑
i
=
1
N
P
(
o
i
+
1
∣
i
t
+
1
=
q
j
)
⋅
P
(
o
1
,
…
,
o
t
,
i
t
=
q
i
,
i
t
+
1
=
q
j
∣
λ
)
观测独立假设
=
∑
i
=
1
N
P
(
o
i
+
1
∣
i
t
+
1
=
q
j
)
⋅
P
(
i
t
+
1
=
q
j
∣
o
1
,
…
,
o
t
,
i
t
=
q
i
,
λ
)
⋅
P
(
o
1
,
…
,
o
t
,
i
t
=
q
i
∣
λ
)
=
∑
i
=
1
N
P
(
o
i
+
1
∣
i
t
+
1
=
q
j
)
⋅
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
⋅
P
(
o
1
,
…
,
o
t
,
i
t
=
q
i
∣
λ
)
齐次马尔可夫假设
=
∑
i
=
1
N
P
(
o
i
+
1
∣
i
t
+
1
=
q
j
)
⋅
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
,
λ
)
⋅
α
t
(
i
)
=
∑
i
=
1
N
b
j
(
o
t
+
1
)
⋅
a
i
j
⋅
α
t
(
i
)
\begin{align} \alpha_{t+1}(j)&=P(o_1,\dots,o_t,o_{t+1},i_{t+1}=q_j|\lambda)\\ &=\sum_{i=1}^NP(o_1,\dots,o_t,o_{t+1},i_t=q_i,i_{t+1}=q_j|\lambda)\\ &=\sum_{i=1}^NP(o_{t+1}|o_1,\dots,o_t,i_t=q_i,i_{t+1}=q_j,\lambda)\cdot P(o_1,\dots,o_t,i_t=q_i,i_{t+1}=q_j|\lambda)\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(o_1,\dots,o_t,i_t=q_i,i_{t+1}=q_j|\lambda)\ \ \ \ \ \ \ 观测独立假设\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(i_{t+1}=q_j|o_1,\dots,o_t,i_t=q_i,\lambda)\cdot P(o_1,\dots,o_t,i_t=q_i|\lambda)\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(i_{t+1}=q_j|i_t=q_i,\lambda)\cdot P(o_1,\dots,o_t,i_t=q_i|\lambda)\ \ \ \ \ \ \ 齐次马尔可夫假设\\ &=\sum_{i=1}^NP(o_{i+1}|i_{t+1}=q_j)\cdot P(i_{t+1}=q_j|i_t=q_i,\lambda)\cdot \alpha_t(i)\\ &=\sum_{i=1}^Nb_{j}(o_{t+1})\cdot a_{ij}\cdot\alpha_t(i)\\ \end{align}
αt+1(j)=P(o1,…,ot,ot+1,it+1=qj∣λ)=i=1∑NP(o1,…,ot,ot+1,it=qi,it+1=qj∣λ)=i=1∑NP(ot+1∣o1,…,ot,it=qi,it+1=qj,λ)⋅P(o1,…,ot,it=qi,it+1=qj∣λ)=i=1∑NP(oi+1∣it+1=qj)⋅P(o1,…,ot,it=qi,it+1=qj∣λ) 观测独立假设=i=1∑NP(oi+1∣it+1=qj)⋅P(it+1=qj∣o1,…,ot,it=qi,λ)⋅P(o1,…,ot,it=qi∣λ)=i=1∑NP(oi+1∣it+1=qj)⋅P(it+1=qj∣it=qi,λ)⋅P(o1,…,ot,it=qi∣λ) 齐次马尔可夫假设=i=1∑NP(oi+1∣it+1=qj)⋅P(it+1=qj∣it=qi,λ)⋅αt(i)=i=1∑Nbj(ot+1)⋅aij⋅αt(i)
由此,我们就得到了递推式:
α
t
+
1
(
j
)
=
∑
i
=
1
N
b
j
(
o
t
+
1
)
⋅
a
i
j
⋅
α
t
(
i
)
\alpha_{t+1}(j)=\sum_{i=1}^Nb_j(o_{t+1})\cdot a_{ij}\cdot\alpha_t(i)
αt+1(j)=i=1∑Nbj(ot+1)⋅aij⋅αt(i)
从而可以前向(从前往后,从
1
1
1 到
T
T
T)求得
α
T
(
i
)
\alpha_T(i)
αT(i) ,从而求得
P
(
O
∣
λ
)
=
∑
i
=
1
N
α
T
(
i
)
P(O|\lambda)=\sum_{i=1}^N\alpha_T(i)
P(O∣λ)=∑i=1NαT(i) 。
后向算法
与前向算法类似,我们定义一个记号
β
t
(
i
)
\beta_t(i)
βt(i) :
β
t
(
i
)
=
P
(
o
t
,
…
,
o
T
∣
i
t
=
q
i
,
λ
)
\beta_t(i)=P(o_t,\dots,o_T|i_t=q_i,\lambda)
βt(i)=P(ot,…,oT∣it=qi,λ)
则:
P
(
O
∣
λ
)
=
P
(
o
1
,
…
,
o
T
∣
λ
)
=
∑
i
=
1
N
P
(
o
1
,
…
,
o
T
,
i
1
=
q
i
∣
λ
)
=
∑
i
=
1
N
P
(
o
1
,
…
,
o
T
∣
i
1
=
q
i
,
λ
)
⋅
P
(
i
1
=
q
i
)
=
∑
i
=
1
N
P
(
o
1
,
…
,
o
T
∣
i
1
=
q
i
,
λ
)
⋅
π
i
=
∑
i
=
1
N
P
(
o
1
∣
o
2
,
…
,
o
T
,
i
1
=
q
i
,
λ
)
⋅
P
(
o
2
,
…
,
o
T
∣
i
1
=
q
i
,
λ
)
⋅
π
i
=
∑
i
=
1
N
P
(
o
1
∣
i
1
=
q
i
,
λ
)
⋅
β
1
(
i
)
⋅
π
i
=
∑
i
=
1
N
b
i
(
o
1
)
⋅
π
i
⋅
β
1
(
i
)
\begin{align} P(O|\lambda)&=P(o_1,\dots,o_T|\lambda)\\ &=\sum_{i=1}^NP(o_1,\dots,o_T,i_1=q_i|\lambda)\\ &=\sum_{i=1}^NP(o_1,\dots,o_T|i_1=q_i,\lambda)\cdot P(i_1=q_i)\\ &=\sum_{i=1}^NP(o_1,\dots,o_T|i_1=q_i,\lambda)\cdot \pi_i\\ &=\sum_{i=1}^NP(o_1|o_2,\dots,o_T,i_1=q_i,\lambda)\cdot P(o_2,\dots,o_T|i_1=q_i,\lambda)\cdot\pi_i\\ &=\sum_{i=1}^NP(o_1|i_1=q_i,\lambda)\cdot\beta_1(i)\cdot\pi_i\\ &=\sum_{i=1}^Nb_i(o_1)\cdot\pi_i\cdot\beta_1(i) \end{align}
P(O∣λ)=P(o1,…,oT∣λ)=i=1∑NP(o1,…,oT,i1=qi∣λ)=i=1∑NP(o1,…,oT∣i1=qi,λ)⋅P(i1=qi)=i=1∑NP(o1,…,oT∣i1=qi,λ)⋅πi=i=1∑NP(o1∣o2,…,oT,i1=qi,λ)⋅P(o2,…,oT∣i1=qi,λ)⋅πi=i=1∑NP(o1∣i1=qi,λ)⋅β1(i)⋅πi=i=1∑Nbi(o1)⋅πi⋅β1(i)
λ
\lambda
λ 为已知,下面就省略不写了。同样我们试图得到递推式,即
β
t
+
1
(
j
)
\beta_{t+1}(j)
βt+1(j) 与
β
t
(
i
)
\beta_t(i)
βt(i) 之间的关系。有:
β
t
(
i
)
=
P
(
o
t
+
1
,
…
,
o
T
∣
i
t
=
q
i
)
=
∑
j
=
1
N
P
(
o
t
+
1
,
…
,
o
T
,
i
t
+
1
=
q
j
∣
i
t
=
q
i
)
=
∑
j
=
1
N
P
(
o
t
+
1
,
…
,
o
T
∣
i
t
+
1
=
q
j
,
i
t
=
q
i
)
⋅
P
(
i
t
+
1
=
q
j
∣
i
t
=
q
i
)
=
∑
j
=
1
N
P
(
o
t
+
1
,
…
,
o
T
∣
i
t
+
1
=
q
j
)
⋅
a
i
j
前面拿掉
i
t
=
q
i
的证明暂略
=
∑
j
=
1
N
P
(
o
t
+
1
∣
o
t
+
2
,
…
,
o
T
,
i
t
+
1
=
q
j
)
⋅
P
(
o
t
+
2
,
…
,
o
T
∣
i
t
+
1
=
q
j
)
⋅
a
i
j
=
∑
j
=
1
N
P
(
o
t
+
1
∣
i
t
+
1
=
q
j
)
⋅
β
t
+
1
(
j
)
⋅
a
i
j
独立观测假设
=
∑
j
=
1
N
b
j
(
o
t
+
1
)
⋅
a
i
j
⋅
β
t
+
1
(
j
)
\begin{align} \beta_t(i)&=P(o_{t+1},\dots,o_T|i_t=q_i)\\ &=\sum_{j=1}^NP(o_{t+1},\dots,o_T,i_{t+1}=q_j|i_t=q_i)\\ &=\sum_{j=1}^NP(o_{t+1},\dots,o_T|i_{t+1}=q_j,i_t=q_i)\cdot P(i_{t+1}=q_j|i_t=q_i)\\ &=\sum_{j=1}^NP(o_{t+1},\dots,o_T|i_{t+1}=q_j)\cdot a_{ij}\ \ \ \ \ \ \ 前面拿掉i_t=q_i的证明暂略\\ &=\sum_{j=1}^NP(o_{t+1}|o_{t+2},\dots,o_T,i_{t+1}=q_j)\cdot P(o_{t+2},\dots,o_T|i_{t+1}=q_j)\cdot a_{ij}\\ &=\sum_{j=1}^NP(o_{t+1}|i_{t+1}=q_j)\cdot \beta_{t+1}(j)\cdot a_{ij}\ \ \ \ \ \ \ 独立观测假设\\ &=\sum_{j=1}^Nb_j(o_{t+1})\cdot a_{ij}\cdot \beta_{t+1}(j) \end{align}
βt(i)=P(ot+1,…,oT∣it=qi)=j=1∑NP(ot+1,…,oT,it+1=qj∣it=qi)=j=1∑NP(ot+1,…,oT∣it+1=qj,it=qi)⋅P(it+1=qj∣it=qi)=j=1∑NP(ot+1,…,oT∣it+1=qj)⋅aij 前面拿掉it=qi的证明暂略=j=1∑NP(ot+1∣ot+2,…,oT,it+1=qj)⋅P(ot+2,…,oT∣it+1=qj)⋅aij=j=1∑NP(ot+1∣it+1=qj)⋅βt+1(j)⋅aij 独立观测假设=j=1∑Nbj(ot+1)⋅aij⋅βt+1(j)
由此,就得到了递推式:
β
t
(
i
)
=
∑
j
=
1
N
b
j
(
o
t
+
1
)
⋅
a
i
j
⋅
β
t
+
1
(
j
)
\beta_t(i)=\sum_{j=1}^Nb_j(o_{t+1})\cdot a_{ij}\cdot \beta_{t+1}(j)
βt(i)=j=1∑Nbj(ot+1)⋅aij⋅βt+1(j)
从而,可以后向(从后往前,从
T
T
T 到
1
1
1)求得
β
1
(
i
)
\beta_1(i)
β1(i) ,从而求得
P
(
O
∣
λ
)
=
∑
i
=
1
N
b
i
(
o
1
)
⋅
π
i
⋅
β
1
(
i
)
P(O|\lambda)=\sum_{i=1}^Nb_i(o_1)\cdot\pi_i\cdot\beta_1(i)
P(O∣λ)=∑i=1Nbi(o1)⋅πi⋅β1(i) 。
总结
递推方向 | 设定 | 求解公式 | 复杂度 | |
---|---|---|---|---|
朴素解法 | - | - | $P(O | \lambda)=\sum_{i_1}\sum_{i_2}\dots\sum_{i_T}\prod_{t=2}Ta_{i_{t-1}i_t}\prod_{t=1}Tb_{i_t}(o_t)$ |
前向算法 | 从前向后,从 1 1 1到 T T T | $\alpha_t(i)=P(o_1,\dots,o_t,i_t=q_i | \lambda)$ | $P(O |
后向算法 | 从后向前,从 T T T到 1 1 1 | $\beta_t(i)=P(o_t,\dots,o_T | i_t=q_i,\lambda)$ | $P(O |
learning问题
HMM 的 learning 问题是要估计出其参数
λ
=
(
π
,
A
,
B
)
\lambda=(\pi,A,B)
λ=(π,A,B) 。如果直接用极大似然估计,即:
λ
M
L
E
=
arg
max
λ
P
(
O
∣
λ
)
\lambda_{MLE}=\arg\max_\lambda P(O|\lambda)
λMLE=argλmaxP(O∣λ)
是无法直接解析的。因此,我们这里用迭代的 EM 算法来估计参数。EM 算法的迭代公式如下:
θ
(
t
+
1
)
=
arg
max
θ
∫
Z
log
P
(
X
,
Z
∣
θ
)
⋅
P
(
Z
∣
X
,
θ
(
t
)
)
d
Z
\theta^{(t+1)}=\arg\max_\theta\int_Z\log P(X,Z|\theta)\cdot P(Z|X,\theta^{(t)})dZ
θ(t+1)=argθmax∫ZlogP(X,Z∣θ)⋅P(Z∣X,θ(t))dZ
其中
x
x
x 是观测变量,
z
z
z 是隐变量,
θ
\theta
θ 是参数。之前提到,HMM 除了可以横向看做是时间(time)序列之外,还可以纵向看做是混合(mixture)变量。将观测变量、隐变量和参数分别对应到 HMM 中符号之后,顺便做一步简化,把常数拿掉,有:
λ
(
t
+
1
)
=
arg
max
λ
∑
I
log
P
(
O
,
I
∣
λ
)
⋅
P
(
I
∣
O
,
λ
(
t
)
)
=
arg
max
λ
∑
I
log
P
(
O
,
I
∣
λ
)
⋅
P
(
O
,
I
∣
λ
(
t
)
)
P
(
O
∣
λ
(
t
)
)
=
arg
max
λ
∑
I
log
P
(
O
,
I
∣
λ
)
⋅
P
(
O
,
I
∣
λ
(
t
)
)
\begin{align} \lambda^{(t+1)}&=\arg\max_\lambda\sum_I\log P(O,I|\lambda)\cdot P(I|O,\lambda^{(t)})\\ &=\arg\max_\lambda\sum_I\log P(O,I|\lambda)\cdot \frac{P(O,I|\lambda^{(t)})}{P(O|\lambda^{(t)})}\\ &=\arg\max_\lambda\sum_I\log P(O,I|\lambda)\cdot P(O,I|\lambda^{(t)})\\ \end{align}
λ(t+1)=argλmaxI∑logP(O,I∣λ)⋅P(I∣O,λ(t))=argλmaxI∑logP(O,I∣λ)⋅P(O∣λ(t))P(O,I∣λ(t))=argλmaxI∑logP(O,I∣λ)⋅P(O,I∣λ(t))
记为 Q 函数
Q
(
λ
,
λ
(
t
)
)
Q(\lambda,\lambda^{(t)})
Q(λ,λ(t)) ,记
λ
(
t
)
=
(
π
(
t
)
,
A
(
t
)
,
B
(
t
)
)
\lambda^{(t)}=(\pi^{(t)},A^{(t)},B^{(t)})
λ(t)=(π(t),A(t),B(t)) ,又有
P
(
O
∣
λ
)
=
∑
I
P
(
O
,
I
∣
λ
)
=
∑
i
1
⋯
∑
i
T
π
i
1
∏
t
=
2
T
a
i
t
−
1
,
i
t
∏
t
=
1
T
b
i
t
(
o
t
)
P(O|\lambda)=\sum_IP(O,I|\lambda)=\sum_{i_1}\dots\sum_{i_T}\pi_{i_1}\prod_{t=2}^Ta_{i_{t-1},i_t}\prod_{t=1}^Tb_{i_t}(o_t)
P(O∣λ)=∑IP(O,I∣λ)=∑i1⋯∑iTπi1∏t=2Tait−1,it∏t=1Tbit(ot),则:
Q
(
λ
,
λ
(
t
+
1
)
)
=
∑
I
log
P
(
O
,
I
∣
λ
)
⋅
P
(
O
,
I
∣
λ
(
t
)
)
=
∑
I
[
(
log
π
i
1
+
∑
t
=
2
T
log
a
i
t
−
1
,
i
t
+
∑
t
=
1
T
log
b
i
t
(
o
t
)
)
⋅
P
(
O
,
I
∣
λ
(
t
)
)
]
\begin{align} Q(\lambda,\lambda^{(t+1)})&=\sum_I\log P(O,I|\lambda)\cdot P(O,I|\lambda^{(t)})\\ &=\sum_I[(\log\pi_{i_1}+\sum_{t=2}^T\log a_{i_{t-1},i_t}+\sum_{t=1}^T\log b_{i_t}(o_t))\cdot P(O,I|\lambda^{(t)})] \end{align}
Q(λ,λ(t+1))=I∑logP(O,I∣λ)⋅P(O,I∣λ(t))=I∑[(logπi1+t=2∑Tlogait−1,it+t=1∑Tlogbit(ot))⋅P(O,I∣λ(t))]
这里就只介绍
π
\pi
π 的参数估计,
A
,
B
A,B
A,B 类似。观察上面 Q 函数的展开结果,只有第一项与
π
\pi
π 相关,有:
π
(
t
+
1
)
=
arg
max
π
Q
(
λ
,
λ
(
t
)
)
=
arg
max
π
∑
I
log
π
i
1
⋅
P
(
O
,
I
∣
λ
(
t
)
)
=
arg
max
π
∑
i
1
⋯
∑
i
T
[
log
π
i
1
⋅
P
(
O
,
i
1
,
…
,
i
T
∣
λ
(
t
)
)
]
=
arg
max
π
∑
i
=
1
N
[
log
π
i
P
(
O
,
i
1
=
q
i
∣
λ
(
t
)
)
]
\begin{align} \pi^{(t+1)}&=\arg\max_\pi Q(\lambda,\lambda^{(t)})\\ &=\arg\max_\pi\sum_I\log\pi_{i_1}\cdot P(O,I|\lambda^{(t)})\\ &=\arg\max_\pi\sum_{i_1}\dots\sum_{i_T}[\log\pi_{i_1}\cdot P(O,i_1,\dots,i_T|\lambda^{(t)})]\\ &=\arg\max_\pi\sum_{i=1}^N[\log\pi_iP(O,i_1=q_i|\lambda^{(t)})]\\ \end{align}
π(t+1)=argπmaxQ(λ,λ(t))=argπmaxI∑logπi1⋅P(O,I∣λ(t))=argπmaxi1∑⋯iT∑[logπi1⋅P(O,i1,…,iT∣λ(t))]=argπmaxi=1∑N[logπiP(O,i1=qi∣λ(t))]
由于
π
\pi
π 是初始状态的概率分布,因此上述优化问题有约束:
∑
i
=
1
N
π
i
=
1
\sum_{i=1}^N\pi_i=1
∑i=1Nπi=1 。解决带约束的优化问题,这里用拉格朗日乘子法。
令:
L
(
π
,
η
)
=
∑
i
=
1
N
log
π
i
P
(
O
,
i
1
=
q
i
∣
λ
(
t
)
)
+
η
(
∑
i
=
1
N
π
i
−
1
)
\mathcal{L}(\pi,\eta)=\sum_{i=1}^N\log\pi_iP(O,i_1=q_i|\lambda^{(t)})+\eta(\sum_{i=1}^N\pi_i-1)
L(π,η)=i=1∑NlogπiP(O,i1=qi∣λ(t))+η(i=1∑Nπi−1)
求其对
π
i
\pi_i
πi 的偏导,并令其为 0:
∂
L
∂
π
i
=
1
π
i
P
(
O
,
i
1
=
q
i
∣
λ
(
t
)
)
+
η
=
0
∑
i
=
1
N
[
P
(
O
,
i
1
=
q
i
∣
λ
(
t
)
)
+
π
i
η
]
=
0
P
(
O
∣
λ
(
t
)
)
+
η
=
0
η
=
−
P
(
O
∣
λ
(
t
)
)
\frac{\partial{\mathcal{L}}}{\partial{\pi_i}}=\frac{1}{\pi_i}P(O,i_1=q_i|\lambda^{(t)})+\eta=0\\ \sum_{i=1}^N[P(O,i_1=q_i|\lambda^{(t)})+\pi_i\eta]=0\\ P(O|\lambda^{(t)})+\eta=0\\ \eta=-P(O|\lambda^{(t)})
∂πi∂L=πi1P(O,i1=qi∣λ(t))+η=0i=1∑N[P(O,i1=qi∣λ(t))+πiη]=0P(O∣λ(t))+η=0η=−P(O∣λ(t))
将其带回,有:
π
i
(
t
+
1
)
=
−
1
η
P
(
O
∣
i
1
=
q
i
∣
λ
(
t
)
)
=
P
(
O
,
i
1
=
q
i
∣
λ
(
t
)
)
P
(
O
∣
λ
(
t
)
)
\pi_i^{(t+1)}=-\frac{1}{\eta}P(O|i_1=q_i|\lambda^{(t)})=\frac{P(O,i_1=q_i|\lambda^{(t)})}{P(O|\lambda^{(t)})}
πi(t+1)=−η1P(O∣i1=qi∣λ(t))=P(O∣λ(t))P(O,i1=qi∣λ(t))
至此,我们就得到了由
π
i
(
t
)
\pi_i^{(t)}
πi(t) 迭代计算
π
i
(
t
+
1
)
\pi_i^{(t+1)}
πi(t+1) 的公式,从而,就可以估计
π
(
t
+
1
)
\pi^{(t+1)}
π(t+1):
π
(
t
+
1
)
=
(
π
1
(
t
+
1
)
,
…
,
π
N
(
t
+
1
)
)
\pi^{(t+1)}=(\pi_1^{(t+1)},\dots,\pi_N^{(t+1)})
π(t+1)=(π1(t+1),…,πN(t+1))
这就完成了 HMM 参数中
π
\pi
π 的 learning 问题,对于另外两个参数
A
,
B
A,B
A,B ,方法类似。这就是 baum-welch 算法,可以看做是一种特殊形式的 EM 算法。
decoding问题
decoding 问题是已知观测序列和模型参数的情况下,求使得该观测序列出现概率最大的隐状态序列,通常用维特比算法(viterbi algorithm)估计 I ^ = arg max i P ( O ∣ I ) \hat{I}=\arg\max_{i}P(O|I) I^=argmaxiP(O∣I) 。
在之前的题目设定中有:隐状态 i t i_t it 取值的集合为 Q = q 1 , q 2 , … , q N Q={q_1,q_2,\dots,q_N} Q=q1,q2,…,qN ,每个时间点的隐状态 i t i_t it 都有可能取这些值,我们就是要每一步 i t i_t it 选取一个 q i q_i qi ,最终找到一组 I = i 1 , … , i T I=i_1,\dots,i_T I=i1,…,iT 的取值(图中蓝色虚线),使得观测变量序列 O = o 1 , … , o T O=o_1,\dots,o_T O=o1,…,oT 出现的概率最大。
实际中,我们使用动态规划的思想来解决该问题。首先定义:
δ
t
(
i
)
=
max
i
1
,
i
2
,
…
,
i
t
−
1
P
(
o
1
,
…
,
o
t
.
i
1
,
…
,
i
t
−
1
,
i
t
=
q
i
)
\delta_t(i)=\max_{i_1,i_2,\dots,i_{t-1}} P(o_1,\dots,o_t.i_1,\dots,i_{t-1},i_t=q_i)
δt(i)=maxi1,i2,…,it−1P(o1,…,ot.i1,…,it−1,it=qi) 表示到达第
i
t
i_t
it 个位置取值为
i
t
=
q
i
i_t=q_i
it=qi 的最大概率值。接下来我们要找到动态规划中的状态转移方程,即
δ
t
+
1
(
j
)
\delta_{t+1}(j)
δt+1(j) 与
δ
t
(
i
)
\delta_t(i)
δt(i) 的关系。其实就是乘上从
i
i
i 到
j
j
j 对应的转移概率
a
i
j
a_{ij}
aij 和
t
+
1
t+1
t+1 时刻的发射概率
b
j
(
o
t
+
1
)
b_j(o_{t+1})
bj(ot+1) 和
δ
t
(
i
)
\delta_t(i)
δt(i) 乘积的最大者,即有:
δ
t
+
1
(
j
)
=
max
i
1
,
…
,
i
t
P
(
o
1
,
…
,
o
t
+
1
,
i
1
,
…
,
i
t
,
i
t
+
1
=
q
j
)
=
max
1
≤
i
≤
N
δ
t
(
i
)
a
i
j
b
j
(
o
t
+
1
)
\begin{align} \delta_{t+1}(j)&=\max_{i_1,\dots,i_t}P(o_1,\dots,o_{t+1},i_1,\dots,i_t,i_{t+1}=q_j)\\ &=\max_{1\le i\le N}\delta_t(i)a_{ij}b_j(o_{t+1}) \end{align}
δt+1(j)=i1,…,itmaxP(o1,…,ot+1,i1,…,it,it+1=qj)=1≤i≤Nmaxδt(i)aijbj(ot+1)
这样,我们就求出了每一步的最大概率值,注意现在只是求得了最大概率值,没有记录路径,而我们的目标是要求最大概率值对应的隐状态序列路径。
令
ϕ
t
+
1
(
j
)
=
arg
max
1
≤
i
≤
N
δ
t
(
i
)
⋅
a
i
j
\phi_{t+1}(j)=\arg\max_{1\le i\le N}\delta_t(i)\cdot a_{ij}
ϕt+1(j)=arg1≤i≤Nmaxδt(i)⋅aij
即可将每一步所选的
q
i
q_i
qi 记录下来。这就是求解 HMM decoding 问题的维特比算法。
总结
HMM 是一种动态模型,即含有时间序列这一维度。更广义地来说,它是一种状态空间模型(State Space Model),状态空间模型可以不包含时间维度,如卡尔曼滤波、粒子滤波等,它们的概率图都类似(如图 1 所示)。
记隐变量为 Z Z Z,观测变量为 X X X,模型参数为 θ \theta θ ,这一类模型的问题可以归纳为下面几种:
- Learning,根据观测变量估计模型参数,如由极大似然来估计参数 θ ^ = arg max θ P ( X ∣ θ ) \hat{\theta}=\arg\max_{\theta}P(X|\theta) θ^=argmaxθP(X∣θ),可由 Baum Welch(EM)算法求解;
- Inference,根据模型参数进行分析、求值、预测等,以下
θ
\theta
θ 均已知
- Decoding,根据观测变量解码出隐变量,即求 Z ^ = arg max Z P ( Z ∣ X ) \hat{Z}=\arg\max_{Z}P(Z|X) Z^=argmaxZP(Z∣X),可由维特比算法(动态规划)求解;
- Evaluation,已知模型参数计算观测变量,即求 prob of evidence P ( X ) P(X) P(X) 。通常如果使用朴素方法直接计算,会有较高的复杂度,因此对该问题的求解也有对应的算法,如前向算法和后向算法;
- Filtering,根据历史观测变量求当前时刻的隐变量,即求 P ( z t ∣ x 1 , x 2 , … , x t ) P(z_t|x_1,x_2,\dots,x_t) P(zt∣x1,x2,…,xt) 。比起只根据当前时刻观测变量求隐变量 P ( z t ∣ x t ) P(z_t|x_t) P(zt∣xt) ,滤波能够根据更多历史信息,滤除噪声,故称为 Filtering。常用于在线(online)分析。也可由前向算法求解。
- Smoothing,根据全部观测变量,求某点的隐变量,即求 P ( z t ∣ x 1 , x 2 , … , x T ) P(z_t|x_1,x_2,\dots,x_T) P(zt∣x1,x2,…,xT) ,常用于离线(offline)分析。可由前向后向算法求解。
- Prediction,根据历史观测变量,求下一个或下两个时刻的隐变量或观测变量,即求 P ( z t + 1 ∣ x 1 , x 2 , … , x t ) P(z_{t+1}|x_1,x_2,\dots,x_t) P(zt+1∣x1,x2,…,xt) 或 P ( x t + 1 ∣ x 1 , x 2 , … , x t ) P(x_{t+1}|x_1,x_2,\dots,x_t) P(xt+1∣x1,x2,…,xt) 。比如 NLP 中根据 ”我爱中国共“ 这 5 个历史观测变量,预测出下两个观测变量为 ”产党“。可用前向算法求解。