文章目录
1 概述
本文是B站上机器学习-白板推导系列(十四)-隐马尔可夫模型HMM的学习笔记,UP主讲得实在是太清楚了,赶紧记录下来,以防之后忘记。
某些细节上根据个人理解做了改动。
HMM全名为Hidden Markov Model,其示意图如上图所示,是一个概率图。观测变量,顾名思义,就是我们观测到的量,比如语音识别里就是我们听到的声音信号;状态变量就是隐藏的特征,在语音识别里,可以是发音单元Phoneme,甚至是更小的单元Tri-phone,不管是什么,这必须要是一个离散的可枚举的集合。当状态变量变成连续变量的时候,如果连续变量是线性的,典型的代表就是Kalman Filter,如果是连续变量是非线性的,典型的代表就是Particle Filter。本文只讲HMM。
同一个时刻,从状态变量转变为观测变量,服从某个分布,一般是混合高斯分布(GMM)。
状态变量从前一个时刻转变为下一个时刻的,也服从某个分布,一般也是GMM。
每个时刻的观测变量之间,必须不是独立同分布的。
2 符号说明
令整个序列共有T个time step。
状态序列为 S = [ s 1 , s 2 , . . . , s t , . . . , s T − 1 , s T ] S = [s_1, s_2, ..., s_t, ..., s_{T-1}, s_T] S=[s1,s2,...,st,...,sT−1,sT], s t s_t st是可枚举的离散变量,值域为 { q 1 , q 2 , . . . , q N } \{q_1, q_2, ..., q_N\} {q1,q2,...,qN}, N N N表示有 N N N种状态。
观测序列为 O = [ o 1 , o 2 , . . . , o t , . . . , o T − 1 , o T ] O = [o_1, o_2, ..., o_t, ..., o_{T-1}, o_T] O=[o1,o2,...,ot,...,oT−1,oT], o t o_t ot可以是连续变量。
π i \pi_i πi为初始时刻的状态概率,即 π i = P ( s 1 = q i ) \pi_i = P(s_1=q_i) πi=P(s1=qi)。
A A A为状态转移矩阵 [ a i j ] N × N [a_{ij}]_{N \times N} [aij]N×N,矩阵中 a i j = P ( s t = q j ∣ s t − 1 = q i ) a_{ij}=P(s_{t}=q_j|s_{t-1}=q_i) aij=P(st=qj∣st−1=qi),表示任意两个相邻时间点时间状态从 q i q_i qi转变为 q j q_j qj的概率。
b j ( o t ) b_j(o_t) bj(ot)为发射概率,表示从状态 q j q_j qj变成观测值 o t o_t ot的概率,即 b j ( o t ) = P ( o t ∣ s t = q j ) b_j(o_t)=P(o_t|s_t=q_j) bj(ot)=P(ot∣st=qj)。
λ = ( π , a , b ) \lambda = (\pi, a, b) λ=(π,a,b)表示模型中所有的可学习的参数。
有了符号的图1就变成了
3 两点假设
(1)齐次Markov假设
t
+
1
t+1
t+1时刻的状态只和
t
t
t时刻的状态有关。
P
(
s
t
+
1
∣
s
1
,
s
2
,
.
.
.
,
s
t
,
o
1
,
o
2
,
.
.
.
,
o
t
)
=
P
(
s
t
+
1
∣
s
t
)
(3-1)
P(s_{t+1} | s_1, s_2, ..., s_t, o_1, o_2, ..., o_t) = P(s_{t+1}|s_t) \tag{3-1}
P(st+1∣s1,s2,...,st,o1,o2,...,ot)=P(st+1∣st)(3-1)
(2)观测独立假设
t
t
t时刻的观测变量只和
t
t
t时刻的状态变量有关。
P
(
o
t
∣
s
1
,
s
2
,
.
.
.
,
s
t
,
o
1
,
o
2
,
.
.
.
,
o
t
−
1
)
=
P
(
o
t
∣
s
t
)
(3-2)
P(o_t|s_1, s_2, ..., s_t, o_1, o_2, ..., o_{t-1}) = P(o_t|s_t) \tag{3-2}
P(ot∣s1,s2,...,st,o1,o2,...,ot−1)=P(ot∣st)(3-2)
这两个假设在后面的推导中有着极其重要的作用。
4 Evaluation
Evaluation要做的事情是,给定所有的模型参数,即 λ \lambda λ,之后,求得到某个观测序列 O = [ o 1 , o 2 , . . . , o T ] O=[o_1, o_2, ..., o_T] O=[o1,o2,...,oT]的概率,记作 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。注意,现在我们是知道模型所有的参数的,只是做一个inference的过程。
我们先来看下直接求解的情况是如何的。我们把这个条件概率稍微变一下,把状态变量给引进来
P ( O ∣ λ ) = ∑ a l l S P ( S , O ∣ λ ) = ∑ a l l S P ( O ∣ S , λ ) P ( S ∣ λ ) (4-1) P(O|\lambda) = \sum_{all\ S}P(S, O| \lambda) = \sum_{all\ S} P(O|S, \lambda)P(S|\lambda) \tag{4-1} P(O∣λ)=all S∑P(S,O∣λ)=all S∑P(O∣S,λ)P(S∣λ)(4-1)
这个没问题吧,我们把所有可能的 S S S序列都考虑进来了,这是个全概率。
然后我们把 P ( S ∣ λ ) P(S|\lambda) P(S∣λ)展开来看下, λ \lambda λ只表示已知所有模型参数,可写可不写
P ( S ∣ λ ) = P ( s 1 , s 2 , . . . , s T ∣ λ ) = P ( s T ∣ s 1 , s 2 , . . . , s T − 1 , λ ) P ( s 1 , s 2 , . . . , s T − 1 , λ ) 利 用 齐 次 M a r k o v 假 设 ( 3 − 1 ) , λ 可 写 可 不 写 = P ( s T ∣ s T − 1 ) P ( s 1 , s 2 , . . . , s T − 1 ) 继 续 拆 拆 拆 = P ( s T ∣ s T − 1 ) P ( s T − 1 ∣ s T − 2 ) . . . P ( s 2 ∣ s 1 ) P ( s 1 ) 除 了 最 后 一 项 都 是 状 态 转 移 矩 阵 里 的 = ∏ t = 1 T − 1 a s t , s t + 1 π s 1 (4-2) \begin{aligned} P(S|\lambda) &= P(s_1, s_2, ..., s_T | \lambda) \\ &= P(s_T|s_1, s_2, ..., s_{T-1}, \lambda)P(s_1, s_2, ..., s_{T-1}, \lambda) \\ &利用齐次Markov假设(3-1),\lambda 可写可不写 \\ &= P(s_T|s_{T-1})P(s_1, s_2, ..., s_{T-1}) \\ &继续拆拆拆 \\ &= P(s_T|s_{T-1})P(s_{T-1}|s_{T-2})...P(s_2|s_1)P(s_1) \\ &除了最后一项都是状态转移矩阵里的 \\ &=\prod_{t=1}^{T-1} a_{s_t, s_{t+1}} \pi_{s_1} \end{aligned} \tag{4-2} P(S∣λ)=P(s1,s2,...,sT∣λ)=P(sT∣s1,s2,...,sT−1,λ)P(s1,s2,...,sT−1,λ)利用齐次Markov假设(3−1),λ可写可不写=P(sT∣sT−1)P(s1,s2,...,sT−1)继续拆拆拆=P(sT∣sT−1)P(sT−1∣sT−2)...P(s2∣s1)P(s1)除了最后一项都是状态转移矩阵里的=t=1∏T−1ast,st+1πs1(4-2)
接着我们再把 P ( O ∣ S , λ ) P(O|S, \lambda) P(O∣S,λ)展开看下
P ( O ∣ S , λ ) = P ( o 1 , o 2 , . . . , o T ∣ s 1 , s 2 , . . . , s T , λ ) = P ( o T ∣ o 1 , o 2 , . . . , o T − 1 , s 1 , s 2 , . . . , s T , λ ) P ( o 1 , o 2 , . . . , o T − 1 ∣ s 1 , s 2 , . . . , s T , λ ) 利 用 观 测 独 立 假 设 ( 3 − 2 ) = P ( o T ∣ s T ) P ( o 1 , o 2 , . . . , o T − 1 ∣ s 1 , s 2 , . . . , s T , λ ) 继 续 拆 拆 拆 = P ( o T ∣ s T ) P ( o T − 1 ∣ s T − 1 ) . . . P ( o 1 ∣ s 1 ) 用 发 射 概 率 函 数 = ∏ t = 1 T b s t ( o t ) (4-3) \begin{aligned} P(O|S, \lambda) &= P(o_1, o_2, ..., o_T |s_1, s_2, ..., s_T, \lambda ) \\ &= P(o_T | o_1, o_2, ..., o_{T-1}, s_1, s_2, ..., s_T, \lambda)P(o_1, o_2, ..., o_{T-1} | s_1, s_2, ..., s_T, \lambda) \\ &利用观测独立假设(3-2) \\ &=P(o_T|s_T)P(o_1, o_2, ..., o_{T-1} | s_1, s_2, ..., s_T, \lambda)\\ &继续拆拆拆 \\ &=P(o_T|s_T)P(o_{T-1}|s_{T-1})...P(o_1|s_1)\\ &用发射概率函数\\ &=\prod_{t=1}^{T}b_{s_t}(o_t) \end{aligned} \tag{4-3} P(O∣S,λ)=P(o1,o2,...,oT∣s1,s2,...,sT,λ)=P(oT∣o1,o2,...,oT−1,s1,s2,...,sT,λ)P(o1,o2,...,oT−1∣s1,s2,...,sT,λ)利用观测独立假设(3−2)=P(oT∣sT)P(o1,o2,...,oT−1∣s1,s2,...,sT,λ)继续拆拆拆=P(oT∣sT)P(oT−1∣sT−1)...P(o1∣s1)用发射概率函数=t=1∏Tbst(ot)(4-3)
将(4-2)和(4-3)带入(4-1)可得
P ( O ∣ λ ) = ∑ a l l S ∏ t = 1 T b s t ( o t ) ∏ t = 1 T − 1 a s t , s t + 1 π s 1 把 a l l S 展 开 = ∑ s 1 = q 1 q N ∑ s 2 = q 1 q N . . . ∑ s T = q 1 q N ∏ t = 1 T b s t ( o t ) ∏ t = 1 T − 1 a s t , s t + 1 π s 1 (4-4) \begin{aligned} P(O|\lambda) &= \sum_{all\ S} \prod_{t=1}^{T}b_{s_t}(o_t)\prod_{t=1}^{T-1} a_{s_t, s_{t+1}} \pi_{s_1} \\ &把all\ S展开\\ &=\sum_{s_1=q_1}^{q_N}\sum_{s_2=q_1}^{q_N}...\sum_{s_T=q_1}^{q_N}\prod_{t=1}^{T}b_{s_t}(o_t)\prod_{t=1}^{T-1} a_{s_t, s_{t+1}} \pi_{s_1} \end{aligned} \tag{4-4} P(O∣λ)=all S∑t=1∏Tbst(ot)t=1∏T−1ast,st+1πs1把all S展开=s1=q1∑qNs2=q1∑qN...sT=q1∑qNt=1∏Tbst(ot)t=1∏T−1ast,st+1πs1(4-4)
这个的复杂度是 O ( N T ) O(N^T) O(NT)的,计算量随着序列的变长而爆炸式指数增长,没法用的。
于是,就有人提出了前向和后向算法来降低计算成本。
4.1 前向算法(forward algorithm)
如下图3所示,前向算法考虑的就是橘黄色方框内变量的联合概率,记作
α t ( q i ) = P ( o 1 , o 2 , . . . , o t , s t = q i ∣ λ ) (4-5) \alpha_t(q_i) = P(o_1, o_2, ..., o_t, s_t=q_i | \lambda) \tag{4-5} αt(qi)=P(o1,o2,...,ot,st=qi∣λ)(4-5)
若要问为什么要是
(
4
−
5
)
(4-5)
(4−5),那我还真答不上来,这是一种设计,如果有其他的设计应该也可以。
我们来看看 α T ( q i ) \alpha_T(q_i) αT(qi)是怎么样的
α T ( q i ) = P ( o 1 , o 2 , . . . , o T , s T = q i ∣ λ ) = P ( O , s T = q i ∣ λ ) (4-6) \alpha_T(q_i) = P(o_1, o_2, ..., o_T, s_T=q_i | \lambda) =P(O, s_T=q_i|\lambda) \tag{4-6} αT(qi)=P(o1,o2,...,oT,sT=qi∣λ)=P(O,sT=qi∣λ)(4-6)
s T s_T sT的状态是可枚举的,我们遍历所有的 s T s_T sT的可能性,然后求个和,就有了
∑ i = 1 N α T ( q i ) = ∑ i = 1 N P ( O , s T = q i ∣ λ ) = P ( O ∣ λ ) (4-7) \sum_{i=1}^N \alpha_T(q_i) = \sum_{i=1}^N P(O, s_T=q_i|\lambda) = P(O|\lambda) \tag{4-7} i=1∑NαT(qi)=i=1∑NP(O,sT=qi∣λ)=P(O∣λ)(4-7)
这不, P ( O ∣ λ ) P(O|\lambda) P(O∣λ)出现了。
接下来我们的工作就是,看看怎么求这个 α t ( q i ) \alpha_t(q_i) αt(qi)。 α 1 ( q i ) \alpha_1(q_i) α1(qi)我们是知道的
α 1 ( q i ) = P ( o 1 , s 1 = q i ∣ λ ) = P ( o 1 ∣ s 1 = q i , λ ) P ( s 1 = q i ∣ λ ) \alpha_1(q_i) = P(o_1,s_1=q_i|\lambda)=P(o_1|s_1=q_i, \lambda)P(s_1=q_i|\lambda) α1(qi)=P(o1,s1=qi∣λ)=P(o1∣s1=qi,λ)P(s1=qi∣λ)
看出来了吗?一个是我们的发射概率,一个是我们的初始概率,所以有
α 1 ( q i ) = b i ( o 1 ) π i (4-8) \alpha_1(q_i) = b_i(o_1) \pi_i \tag{4-8} α1(qi)=bi(o1)πi(4-8)
既然知道了 α 1 ( q i ) \alpha_1(q_i) α1(qi),那我们如果还能知道 α t ( q i ) \alpha_t(q_i) αt(qi)到 α t + 1 ( q i ) \alpha_{t+1}(q_i) αt+1(qi)的递推公式,这个问题不久解决了吗?我们来试试看! λ \lambda λ写不写都无所谓,我们心里知道就好,下面就不写了。
α t + 1 ( q i ) = P ( o 1 , o 2 , . . . , o t + 1 , s t + 1 = q i ) 用 全 概 率 凑 个 s t 出 来 试 试 = ∑ j = 1 N P ( o 1 , o 2 , . . . , o t + 1 , s t = q j , s t + 1 = q i ) 提 o t + 1 = ∑ j = 1 N P ( o t + 1 ∣ o 1 , o 2 , . . . o t , s t = q j , s t + 1 = q i ) P ( o 1 , o 2 , . . . , o t , s t = q j , s t + 1 = q i ) 利 用 观 测 独 立 假 设 ( 3 − 2 ) = ∑ j = 1 N P ( o t + 1 ∣ s t + 1 = q i ) P ( o 1 , o 2 , . . . , o t , s t = q j , s t + 1 = q i ) 提 后 项 的 s t + 1 = ∑ j = 1 N P ( o t + 1 ∣ s t + 1 = q i ) P ( s t + 1 = q i ∣ o 1 , o 2 , . . . , o t , s t = q j ) P ( o 1 , o 2 , . . . , o t , s t = q j ) 利 用 齐 次 M a r k o v 假 设 ( 3 − 1 ) = ∑ j = 1 N P ( o t + 1 ∣ s t + 1 = q i ) P ( s t + 1 = q i ∣ s t = q j ) P ( o 1 , o 2 , . . . , o t , s t = q j ) \begin{aligned} \alpha_{t+1}(q_i) &= P(o_1, o_2, ..., o_{t+1}, s_{t+1}=q_i) \\ &用全概率凑个s_t出来试试\\ &=\sum_{j=1}^N P(o_1, o_2, ..., o_{t+1}, s_t=q_j, s_{t+1}=q_i) \\ &提o_{t+1}\\ &=\sum_{j=1}^N P(o_{t+1}|o_1, o_2, ...o_t, s_t=q_j, s_{t+1}=q_i)P(o_1, o_2, ...,o_t, s_t=q_j, s_{t+1}=q_i)\\ &利用观测独立假设(3-2)\\ &=\sum_{j=1}^N P(o_{t+1}|s_{t+1}=q_i)P(o_1, o_2, ...,o_t, s_t=q_j, s_{t+1}=q_i)\\ &提后项的s_{t+1}\\ &=\sum_{j=1}^N P(o_{t+1}|s_{t+1}=q_i)P(s_{t+1}=q_i|o_1, o_2, ...,o_t, s_t=q_j)P(o_1, o_2, ...,o_t, s_t=q_j)\\ &利用齐次Markov假设(3-1)\\ &=\sum_{j=1}^N P(o_{t+1}|s_{t+1}=q_i)P(s_{t+1}=q_i|s_t=q_j)P(o_1, o_2, ...,o_t, s_t=q_j)\\ \end{aligned} αt+1(qi)=P(o1,o2,...,ot+1,st+1=qi)用全概率凑个st出来试试=j=1∑NP(o1,o2,...,ot+1,st=qj,st+1=qi)提ot+1=j=1∑NP(ot+1∣o1,o2,...ot,st=qj,st+1=qi)P(o1,o2,...,ot,st=qj,st+1=qi)利用观测独立假设(3−2)=j=1∑NP(ot+1∣st+1=qi)P(o1,o2,...,ot,st=qj,st+1=qi)提后项的st+1=j=1∑NP(ot+1∣st+1=qi)P(st+1=qi∣o1,o2,...,ot,st=qj)P(o1,o2,...,ot,st=qj)利用齐次Markov假设(3−1)=j=1∑NP(ot+1∣st+1=qi)P(st+1=qi∣st=qj)P(o1,o2,...,ot,st=qj)
发现了吗?这三项分别是发射概率,状态转移概率和 α t ( q j ) \alpha_t(q_j) αt(qj)。
于是我们就得到了递推式
α
t
+
1
(
q
i
)
=
∑
j
=
1
N
b
i
(
o
t
+
1
)
a
j
i
α
t
(
q
j
)
(4-9)
\alpha_{t+1}(q_i) = \sum_{j=1}^N b_i(o_{t+1})a_{ji}\alpha_t(q_j) \tag{4-9}
αt+1(qi)=j=1∑Nbi(ot+1)ajiαt(qj)(4-9)
结合
(
4
−
8
)
(4-8)
(4−8)和
(
4
−
9
)
(4-9)
(4−9)我们可以得到所有状态下的
α
T
(
q
i
)
\alpha_T(q_i)
αT(qi),
(
4
−
7
)
(4-7)
(4−7)得解,此时的复杂度为
O
(
(
T
N
)
2
)
O((TN)^2)
O((TN)2)。
4.2 后向算法(backward algorithm)
如下图4所示,后向算法考虑的就是青绿色方框内变量的联合概率,记作
β t ( q i ) = P ( o t + 1 , . . . , o T − 1 , o T ∣ s t = q i , λ ) (4-10) \beta_t(q_i) = P(o_{t+1}, ..., o_{T-1}, o_T | s_t = q_i, \lambda) \tag{4-10} βt(qi)=P(ot+1,...,oT−1,oT∣st=qi,λ)(4-10)
这也是一种设计,和前向的互补。注意看与
(
4
−
5
)
(4-5)
(4−5)的区别,后向的推导相比前向要绕一点。
我们来看下 β 1 ( q i ) \beta_1(q_i) β1(qi)是怎么样的
β 1 ( q i ) = P ( o 2 , . . . , o T − 1 , o T ∣ s 1 = q i ∣ λ ) (4-11) \beta_1(q_i) = P(o_2, ..., o_{T-1}, o_T | s_1 = q_i | \lambda) \tag{4-11} β1(qi)=P(o2,...,oT−1,oT∣s1=qi∣λ)(4-11)
我们来看下这个 β 1 ( q i ) \beta_1(q_i) β1(qi)和我们要求的 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)有什么关系
P ( O ∣ λ ) = P ( o 1 , o 2 , . . . , o T ∣ λ ) 省 略 λ , 引 入 s 1 = ∑ i = 1 N P ( o 1 , o 2 , . . . , o T , s 1 = q i ) 把 s 1 当 成 条 件 = ∑ i = 1 N P ( o 1 , o 2 , . . . , o T ∣ s 1 = q i ) P ( s 1 = q i ) 拆 出 o 1 , 注 意 后 向 为 初 始 概 率 = ∑ i = 1 N P ( o 1 ∣ o 2 , . . . , o T , s 1 = q i ) P ( o 2 , . . . , o T ∣ s 1 = q i ) π i 利 用 观 测 独 立 假 设 ( 3 − 2 ) = ∑ i = 1 N P ( o 1 ∣ s 1 = q i ) P ( o 2 , . . . , o T ∣ s 1 = q i ) π i 代 入 ( 4 − 11 ) 和 发 射 概 率 = ∑ i = 1 N b i ( o 1 ) β 1 ( q i ) π i (4-12) \begin{aligned} P(O|\lambda) &= P(o_1, o_2, ..., o_T|\lambda) \\ &省略\lambda,引入s_1\\ &=\sum_{i=1}^{N} P(o_1, o_2, ..., o_T, s_1=q_i) \\ & 把s_1当成条件\\ &=\sum_{i=1}^{N} P(o_1, o_2, ..., o_T | s_1=q_i)P(s_1=q_i)\\ &拆出o_1,注意后向为初始概率\\ &=\sum_{i=1}^{N} P(o_1 | o_2, ..., o_T, s_1=q_i)P(o_2, ..., o_T | s_1=q_i)\pi_i\\ &利用观测独立假设(3-2)\\ &=\sum_{i=1}^{N} P(o_1 | s_1=q_i)P(o_2, ..., o_T | s_1=q_i)\pi_i\\ &代入(4-11)和发射概率\\ &=\sum_{i=1}^{N} b_i(o_1)\beta_{1}(q_i)\pi_i \tag{4-12} \end{aligned} P(O∣λ)=P(o1,o2,...,oT∣λ)省略λ,引入s1=i=1∑NP(o1,o2,...,oT,s1=qi)把s1当成条件=i=1∑NP(o1,o2,...,oT∣s1=qi)P(s1=qi)拆出o1,注意后向为初始概率=i=1∑NP(o1∣o2,...,oT,s1=qi)P(o2,...,oT∣s1=qi)πi利用观测独立假设(3−2)=i=1∑NP(o1∣s1=qi)P(o2,...,oT∣s1=qi)πi代入(4−11)和发射概率=i=1∑Nbi(o1)β1(qi)πi(4-12)
这样以来, P ( O ∣ λ ) P(O|\lambda) P(O∣λ)和 β 1 ( q i ) \beta_1(q_i) β1(qi)的一个关系就找到了,要做的就是来求一下这个 β 1 ( q i ) \beta_1(q_i) β1(qi)了。
我们令
β T ( q i ) = 1 (4-13) \beta_T(q_i) = 1 \tag{4-13} βT(qi)=1(4-13)
然后再来算一下 β t ( q i ) \beta_t(q_i) βt(qi)和 β t + 1 ( q j ) \beta_{t+1}(q_j) βt+1(qj)递推关系, λ \lambda λ我就直接省略了。
β t ( q i ) = P ( o t + 1 , . . . , o T − 1 , o T ∣ s t = q i ) 利 用 全 概 率 引 入 s t + 1 = ∑ j = 1 N P ( o t + 1 , . . . , o T , s t + 1 = q j ∣ s t = q i ) 把 s t + 1 引 到 条 件 当 中 去 = ∑ j = 1 N P ( o t + 1 , . . . , o T ∣ s t + 1 = q j , s t = q i ) P ( s t + 1 = q j ∣ s t = q i ) 前 项 中 的 o t + 1 , . . . , o T 只 和 s t + 1 = q j 有 关 , 这 个 可 证 , 但 这 里 不 证 后 项 为 状 态 转 移 概 率 = ∑ j = 1 N P ( o t + 1 , . . . , o T ∣ s t + 1 = q j ) a i j 把 o t + 1 拿 出 来 = ∑ j = 1 N P ( o t + 1 ∣ o t + 2 , . . . , o T , s t + 1 = q j ) P ( o t + 2 , . . . , o T ∣ s t + 1 = q j ) a i j 利 用 观 测 独 立 假 设 ( 3 − 2 ) = ∑ j = 1 N P ( o t + 1 ∣ s t + 1 = q j ) β t + 1 ( q j ) a i j 前 项 为 发 射 概 率 = ∑ j = 1 N b j ( o t + 1 ) β t + 1 ( q j ) a i j (4-14) \begin{aligned} \beta_t(q_i) &= P(o_{t+1}, ..., o_{T-1}, o_T | s_t = q_i) \\ &利用全概率引入s_{t+1}\\ &= \sum_{j=1}^{N}P(o_{t+1}, ..., o_T, s_{t+1} = q_j | s_t = q_i) \\ &把s_{t+1}引到条件当中去\\ &=\sum_{j=1}^{N}P(o_{t+1}, ..., o_T | s_{t+1} = q_j, s_t = q_i)P(s_{t+1} = q_j | s_t = q_i)\\ &前项中的o_{t+1}, ..., o_T只和s_{t+1} = q_j有关,这个可证,但这里不证\\ &后项为状态转移概率\\ &=\sum_{j=1}^{N}P(o_{t+1}, ..., o_T | s_{t+1} = q_j)a_{ij}\\ &把o_{t+1}拿出来\\ &=\sum_{j=1}^{N}P(o_{t+1}| o_{t+2},..., o_T, s_{t+1} = q_j)P(o_{t+2}, ..., o_T | s_{t+1} = q_j)a_{ij}\\ &利用观测独立假设(3-2)\\ &=\sum_{j=1}^{N}P(o_{t+1}|s_{t+1} = q_j)\beta_{t+1}(q_j)a_{ij}\\ &前项为发射概率\\ &=\sum_{j=1}^{N}b_j(o_{t+1})\beta_{t+1}(q_j)a_{ij} \end{aligned} \tag{4-14} βt(qi)=P(ot+1,...,oT−1,oT∣st=qi)利用全概率引入st+1=j=1∑NP(ot+1,...,oT,st+1=qj∣st=qi)把st+1引到条件当中去=j=1∑NP(ot+1,...,oT∣st+1=qj,st=qi)P(st+1=qj∣st=qi)前项中的ot+1,...,oT只和st+1=qj有关,这个可证,但这里不证后项为状态转移概率=j=1∑NP(ot+1,...,oT∣st+1=qj)aij把ot+1拿出来=j=1∑NP(ot+1∣ot+2,...,oT,st+1=qj)P(ot+2,...,oT∣st+1=qj)aij利用观测独立假设(3−2)=j=1∑NP(ot+1∣st+1=qj)βt+1(qj)aij前项为发射概率=j=1∑Nbj(ot+1)βt+1(qj)aij(4-14)
结合 ( 4 − 13 ) (4-13) (4−13)和 ( 4 − 14 ) (4-14) (4−14),我们就可以求得 β 1 ( q i ) \beta_1(q_i) β1(qi),也就可以求得 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
值得注意的是,在任意时刻 t t t,我们结合前向和后向算法,都可以有
P ( O ∣ λ ) = ∑ i = 1 N α t ( q i ) β t ( q i ) (4-15) P(O|\lambda) = \sum_{i=1}^N \alpha_t(q_i)\beta_t(q_i) \tag{4-15} P(O∣λ)=i=1∑Nαt(qi)βt(qi)(4-15)
这个这里简单说下,这个会依赖于一个不靠谱的假设,就是 o 1 , . . . , o t o_1,...,o_t o1,...,ot和 o t + 1 , . . . , o T o_{t+1},...,o_{T} ot+1,...,oT是不相关的。
P ( O ∣ λ ) = ∑ i = 1 N P ( O , s t = q i ∣ λ ) = ∑ i = 1 N P ( o 1 , . . . , o t , o t + 1 , . . , o T , s t = q i ∣ λ ) = ∑ i = 1 N P ( o 1 , . . . , o t , s t = q i ∣ λ ) P ( o t + 1 , . . , o T ∣ o 1 , . . . , o t , s t = q i ) 前 项 为 α t ( q i ) , 后 向 依 赖 于 假 设 忽 略 o 1 , . . . , o t 就 是 β t ( q i ) = ∑ i = 1 N α t ( q i ) β t ( q i ) \begin{aligned} P(O|\lambda) &= \sum_{i=1}^N P(O, s_t=q_i|\lambda) \\ &= \sum_{i=1}^N P(o_1,...,o_t, o_{t+1}, .., o_T, s_t=q_i|\lambda) \\ &= \sum_{i=1}^N P(o_1,...,o_t, s_t=q_i|\lambda)P(o_{t+1}, .., o_T | o_1,...,o_t, s_t=q_i)\\ &前项为\alpha_t(q_i),后向依赖于假设忽略o_1,...,o_t就是\beta_t(q_i)\\ &=\sum_{i=1}^N \alpha_t(q_i)\beta_t(q_i) \end{aligned} P(O∣λ)=i=1∑NP(O,st=qi∣λ)=i=1∑NP(o1,...,ot,ot+1,..,oT,st=qi∣λ)=i=1∑NP(o1,...,ot,st=qi∣λ)P(ot+1,..,oT∣o1,...,ot,st=qi)前项为αt(qi),后向依赖于假设忽略o1,...,ot就是βt(qi)=i=1∑Nαt(qi)βt(qi)
虽然这个假设不靠谱,但是为了简化计算,都是这么做的。
5 Learning
Learning要做的一件事情就是,在给定了观测序列之后,找到得到该观测序列概率最大的那组参数 λ \lambda λ,即
λ M L E = a r g max λ P ( O ∣ λ ) (5-1) \lambda_{MLE} = arg\max_{\lambda}P(O|\lambda) \tag{5-1} λMLE=argλmaxP(O∣λ)(5-1)
这里的MLE就是Max Likelyhood Estimation。
讲道理,如果能够把导数的表达式求出来的话,这个 λ M L E \lambda_{MLE} λMLE一下子就出来了,但这里的 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)一般都是混合高斯函数,没法直接求导,所以就需要用到EM算法了。
这篇不讲EM算法是什么,我们直接使用EM算法,想知道EM算法是什么的话,推荐看徐亦达老师的EM算法讲解。一句话概括就是,本来没法直接求导的,我们添加了一个隐变量,变成去求另一个方程的导数,这个方程求导相对简单,但是没法一步到位,需要不断迭代,逐渐逼近局部最优点。
EM算法的迭代公式为
θ ( t + 1 ) = a r g max θ ∫ z l o g P ( x , z ∣ θ ) P ( z ∣ x , θ ( t ) ) d z (5-2) \theta^{(t+1)} = arg\max_{\theta} \int_{z}log P(x,z|\theta)P(z|x, \theta^{(t)})dz \tag{5-2} θ(t+1)=argθmax∫zlogP(x,z∣θ)P(z∣x,θ(t))dz(5-2)
这里的 θ \theta θ就是我们的模型参数 λ \lambda λ, x x x就是我们的观测变量 O O O, z z z就是我们的状态变量 S S S,我们这里的 S S S是离散的,积分变累加。我们来改写一下 ( 5 − 2 ) (5-2) (5−2)就有
λ ( t + 1 ) = a r g max λ ∑ a l l S l o g P ( O , S ∣ λ ) P ( S ∣ O , λ ( t ) ) (5-3) \lambda^{(t+1)} = arg\max_{\lambda} \sum_{all\ S}log P(O,S|\lambda)P(S|O, \lambda^{(t)}) \tag{5-3} λ(t+1)=argλmaxall S∑logP(O,S∣λ)P(S∣O,λ(t))(5-3)
我们这里再对 P ( S ∣ O , λ ( t ) ) P(S|O,\lambda^{(t)}) P(S∣O,λ(t))做一个小的改动
P ( S ∣ O , λ ( t ) ) = P ( S , O ∣ λ ( t ) ) P ( O ∣ λ ( t ) ) P(S|O,\lambda^{(t)}) = \frac{P(S,O|\lambda^{(t)})}{P(O|\lambda^{(t)})} P(S∣O,λ(t))=P(O∣λ(t))P(S,O∣λ(t))
这里的 λ ( t ) \lambda^{(t)} λ(t)是一个常数, O O O又是和 λ \lambda λ无关的,所以 P ( O ∣ λ ( t ) ) P(O|\lambda^{(t)}) P(O∣λ(t))这项是个常数,可以忽略。故把 ( 5 − 3 ) (5-3) (5−3)改为
λ ( t + 1 ) = a r g max λ ∑ a l l S l o g P ( O , S ∣ λ ) P ( O , S ∣ λ ( t ) ) (5-4) \lambda^{(t+1)} = arg\max_{\lambda} \sum_{all\ S}log P(O,S|\lambda)P(O, S|\lambda^{(t)}) \tag{5-4} λ(t+1)=argλmaxall S∑logP(O,S∣λ)P(O,S∣λ(t))(5-4)
实际操作时,就是不断迭代 ( 5 − 4 ) (5-4) (5−4)。但看到这里,这个argmax还是不会求呀。这个其实也挺复杂的,下面会以求初始概率参数 π \pi π为例,简单说明下,其他的就不求了,太复杂了,吃不消。
我们定义
Q ( λ , λ ( t ) ) = ∑ a l l S l o g P ( O , S ∣ λ ) P ( O , S ∣ λ ( t ) ) (5-5) Q(\lambda, \lambda^{(t)}) = \sum_{all\ S} log P(O,S|\lambda)P(O, S|\lambda^{(t)}) \tag{5-5} Q(λ,λ(t))=all S∑logP(O,S∣λ)P(O,S∣λ(t))(5-5)
我们把式 ( 4 − 4 ) (4-4) (4−4)代进来看下
Q ( λ , λ ( t ) ) = ∑ s 1 = q 1 q N . . . ∑ s T = q 1 q N l o g ( ∏ t = 1 T b s t ( o t ) ∏ t = 1 T − 1 a s t , s t + 1 π s 1 ) P ( O , S ∣ λ ( t ) ) = ∑ s 1 = q 1 q N . . . ∑ s T = q 1 q N ( l o g π s 1 + ∑ t = 1 T l o g b s t ( o t ) + ∑ t = 1 T − 1 l o g a s t , s t + 1 ) P ( O , S ∣ λ ( t ) ) \begin{aligned} Q(\lambda, \lambda^{(t)}) &= \sum_{s_1=q_1}^{q_N}...\sum_{s_T=q_1}^{q_N}log(\prod_{t=1}^{T}b_{s_t}(o_t)\prod_{t=1}^{T-1} a_{s_t, s_{t+1}} \pi_{s_1})P(O, S|\lambda^{(t)})\\ &=\sum_{s_1=q_1}^{q_N}...\sum_{s_T=q_1}^{q_N}(log\pi_{s_1} + \sum_{t=1}^T logb_{s_t}(o_t) + \sum_{t=1}^{T-1}loga_{s_t,s_{t+1}})P(O, S|\lambda^{(t)}) \end{aligned} Q(λ,λ(t))=s1=q1∑qN...sT=q1∑qNlog(t=1∏Tbst(ot)t=1∏T−1ast,st+1πs1)P(O,S∣λ(t))=s1=q1∑qN...sT=q1∑qN(logπs1+t=1∑Tlogbst(ot)+t=1∑T−1logast,st+1)P(O,S∣λ(t))
好,我们令第 t t t次迭代过程中,初始概率的参数为 π ( t ) \pi^{(t)} π(t),那么
π ( t + 1 ) = a r g max π Q ( λ , λ ( t ) ) 过 滤 掉 和 π 无 关 的 变 量 = a r g max π ∑ s 1 = q 1 q N . . . ∑ s T = q 1 q N l o g π s 1 P ( O , s 1 , . . . , s T ∣ λ ( t ) ) 和 s 1 无 关 的 状 态 变 量 用 全 概 率 去 掉 = a r g max π ∑ s 1 = q 1 q N l o g π s 1 P ( O , s 1 ∣ λ ( t ) ) (5-6) \begin{aligned} \pi^{(t+1)} &= arg\max_{\pi}Q(\lambda, \lambda^{(t)})\\ &过滤掉和\pi无关的变量\\ &=arg\max_{\pi} \sum_{s_1=q_1}^{q_N}...\sum_{s_T=q_1}^{q_N}log\pi_{s_1}P(O, s_1,...,s_T|\lambda^{(t)})\\ &和s_1无关的状态变量用全概率去掉\\ &=arg\max_{\pi} \sum_{s_1=q_1}^{q_N}log\pi_{s_1}P(O, s_1|\lambda^{(t)})\\ \end{aligned} \tag{5-6} π(t+1)=argπmaxQ(λ,λ(t))过滤掉和π无关的变量=argπmaxs1=q1∑qN...sT=q1∑qNlogπs1P(O,s1,...,sT∣λ(t))和s1无关的状态变量用全概率去掉=argπmaxs1=q1∑qNlogπs1P(O,s1∣λ(t))(5-6)
这样一来,我们就方便去求导了。不过这里别忘了有一个约束条件,就是
s
.
t
.
∑
s
1
=
q
1
q
N
π
s
1
=
1
(5-7)
s.t. \sum_{s_1=q_1}^{q_N}\pi_{s_1} = 1 \tag{5-7}
s.t.s1=q1∑qNπs1=1(5-7)
有约束求极值,拉格朗日乘子法来也。令
L ( π s 1 , η ) = ∑ s 1 = q 1 q N ( l o g π s 1 P ( O , s 1 ∣ λ ( t ) ) ) + η ( ∑ s 1 = q 1 q N π s 1 − 1 ) (5-8) L(\pi_{s_1}, \eta) = \sum_{s_1=q_1}^{q_N}(log\pi_{s_1}P(O, s_1|\lambda^{(t)})) + \eta (\sum_{s_1=q_1}^{q_N}\pi_{s_1} - 1) \tag{5-8} L(πs1,η)=s1=q1∑qN(logπs1P(O,s1∣λ(t)))+η(s1=q1∑qNπs1−1)(5-8)
对
(
5
−
8
)
(5-8)
(5−8)进行求偏导,有
∂
L
∂
π
s
1
=
1
π
s
1
P
(
O
,
s
1
∣
λ
(
t
)
)
)
+
η
(5-9)
\frac{\partial L}{\partial \pi_{s_1}} = \frac{1}{\pi_{s_1}}P(O, s_1|\lambda^{(t)})) + \eta \tag{5-9}
∂πs1∂L=πs11P(O,s1∣λ(t)))+η(5-9)
令偏导等于0,有
P ( O , s 1 ∣ λ ( t ) ) ) + π s 1 ( t + 1 ) η = 0 (5-10) P(O, s_1|\lambda^{(t)})) + \pi_{s_1}^{(t+1)}\eta = 0 \tag{5-10} P(O,s1∣λ(t)))+πs1(t+1)η=0(5-10)
对所有的状态变量求和,有
∑ s 1 = q 1 q N ( P ( O , s 1 ∣ λ ( t ) ) + π s 1 ( t + 1 ) η ) = 0 \sum_{s_1=q_1}^{q_N} (P(O, s_1|\lambda^{(t)}) + \pi_{s_1}^{(t+1)}\eta) = 0 s1=q1∑qN(P(O,s1∣λ(t))+πs1(t+1)η)=0
故有
P ( O ∣ λ ( t ) ) + η = 0 P(O|\lambda^{(t)}) + \eta = 0 P(O∣λ(t))+η=0
即
η
=
−
P
(
O
∣
λ
(
t
)
)
(5-11)
\eta = -P(O|\lambda^{(t)}) \tag{5-11}
η=−P(O∣λ(t))(5-11)
将 ( 5 − 11 ) (5-11) (5−11)代入到 ( 5 − 12 ) (5-12) (5−12)有
π s 1 ( t + 1 ) = P ( O , s 1 ∣ λ ( t ) ) P ( O ∣ λ ( t ) ) (5-12) \pi_{s_1}^{(t+1)} =\frac{P(O, s_1|\lambda^{(t)})}{P(O|\lambda^{(t)})} \tag{5-12} πs1(t+1)=P(O∣λ(t))P(O,s1∣λ(t))(5-12)
终于求出来了,其他的参数用类似的方法求即可,不过会复杂一些。
6 Decoding
Decoding要解决的问题是
S ^ = a r g max S P ( S ∣ O , λ ) (6-1) \hat{S} = arg\max_{S}P(S|O, \lambda) \tag{6-1} S^=argSmaxP(S∣O,λ)(6-1)
翻译过来就是,给定了模型参数,对应的状态变量序列最优可能是哪一组。
由于 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)是已经观测到的变量,我们也可以认为 ( 6 − 1 ) (6-1) (6−1)等价于
S ^ = a r g max S P ( S ∣ O , λ ) P ( O ∣ λ ) = a r g max S P ( S , O ∣ λ ) (6-2) \hat{S} = arg\max_{S}P(S|O, \lambda)P(O|\lambda) = arg\max_{S}P(S, O| \lambda) \tag{6-2} S^=argSmaxP(S∣O,λ)P(O∣λ)=argSmaxP(S,O∣λ)(6-2)
我们画个图看下
看图一下子就明白了,我们的每time step的状态变量都有 N N N个状态,我们在每个time step选择一个状态变量,形成一条路径,使得经过整条路径的联合概率最大。
这里一共有 N T N^T NT条路径,如果把每条路径的概率都算一遍,再取找概率最大的那条,时间复杂度就太高了。因此,我们用动态规划的思路去求解这个问题,也叫做Viterbi algorithm。
我们令
δ t ( q i ) = max s 1 , . . . , s t − 1 P ( o 1 , . . . , o t , s 1 , . . . , s t − 1 , s t = q i ∣ λ ) (6-3) \delta_t(q_i)=\max_{s_1, ..., s_{t-1}}P(o_1,...,o_t, s_1, ..., s_{t-1}, s_t=q_i | \lambda) \tag{6-3} δt(qi)=s1,...,st−1maxP(o1,...,ot,s1,...,st−1,st=qi∣λ)(6-3)
翻译一下就是,当 t t t时刻的状态取 q i q_i qi时,使得到 t t t时刻为止的联合概率最大的状态路径 [ s 1 , . . . , s t − 1 ] [s_1, ..., s_{t-1}] [s1,...,st−1]为 δ t ( q i ) \delta_t(q_i) δt(qi)。
我们来看下 δ t + 1 ( q j ) \delta_{t+1}(q_j) δt+1(qj)时刻和 δ t ( q i ) \delta_t(q_i) δt(qi)的关系
δ t + 1 ( q j ) = max s 1 , . . . , s t P ( o 1 , . . . , o t + 1 , s 1 , . . . , s t , s t + 1 = q j ∣ λ ) 遍 历 t 时 刻 所 有 的 δ t ( q i ) = max 1 ≤ i ≤ N δ t ( q i ) a i j b j ( o t + 1 ) (6-4) \begin{aligned} \delta_{t+1}(q_j) &= \max_{s_1, ..., s_{t}}P(o_1,...,o_{t+1}, s_1, ..., s_{t}, s_{t+1}=q_j | \lambda)\\ &遍历t时刻所有的\delta_t{}(q_i)\\ &=\max_{1\leq i \leq N}\delta_{t}(q_i)a_{ij}b_j(o_{t+1}) \end{aligned} \tag{6-4} δt+1(qj)=s1,...,stmaxP(o1,...,ot+1,s1,...,st,st+1=qj∣λ)遍历t时刻所有的δt(qi)=1≤i≤Nmaxδt(qi)aijbj(ot+1)(6-4)
这就是递推式了。用这个递推式,把所有的 δ t ( q i ) \delta_t(q_i) δt(qi)算出来。
同时我们也要定义一个记录到每个time step的各个状态的最优的前一个状态
ψ t ( j ) = a r g max i δ t ( q i ) a i j (6-5) \psi_t(j) = arg\max_{i}\delta_t(q_i)a_{ij} \tag{6-5} ψt(j)=argimaxδt(qi)aij(6-5)
这个 ( 6 − 5 ) (6-5) (6−5)是用来回溯路径的,这个学过动态规划的就再熟悉不过了。
最终我们会在最后一个time step找到是的概率最大的那个状态,记作
q T ∗ = a r g max i ( δ T ( q i ) ) (6-6) q_T^* = arg\max_{i}(\delta_T(q_i)) \tag{6-6} qT∗=argimax(δT(qi))(6-6)
然后用 ( 6 − 5 ) (6-5) (6−5)不断回溯就行了。