搞懂HMM

1 概述

本文是B站上机器学习-白板推导系列(十四)-隐马尔可夫模型HMM的学习笔记,UP主讲得实在是太清楚了,赶紧记录下来,以防之后忘记。

某些细节上根据个人理解做了改动。

HMM示意图

图1 HMM示意图

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,...,sT1,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,...,oT1,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=qjst1=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(otst=qj)

λ = ( π , a , b ) \lambda = (\pi, a, b) λ=(π,a,b)表示模型中所有的可学习的参数。

有了符号的图1就变成了

HMM示意图-有符号

图2 HMM示意图(有符号)

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+1s1,s2,...,st,o1,o2,...,ot)=P(st+1st)(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(ots1,s2,...,st,o1,o2,...,ot1)=P(otst)(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 SP(S,Oλ)=all SP(OS,λ)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(sTs1,s2,...,sT1,λ)P(s1,s2,...,sT1,λ)Markov(31)λ=P(sTsT1)P(s1,s2,...,sT1)=P(sTsT1)P(sT1sT2)...P(s2s1)P(s1)=t=1T1ast,st+1πs1(4-2)

接着我们再把 P ( O ∣ S , λ ) P(O|S, \lambda) P(OS,λ)展开看下

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(OS,λ)=P(o1,o2,...,oTs1,s2,...,sT,λ)=P(oTo1,o2,...,oT1,s1,s2,...,sT,λ)P(o1,o2,...,oT1s1,s2,...,sT,λ)(32)=P(oTsT)P(o1,o2,...,oT1s1,s2,...,sT,λ)=P(oTsT)P(oT1sT1)...P(o1s1)=t=1Tbst(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 St=1Tbst(ot)t=1T1ast,st+1πs1all S=s1=q1qNs2=q1qN...sT=q1qNt=1Tbst(ot)t=1T1ast,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) (45),那我还真答不上来,这是一种设计,如果有其他的设计应该也可以。
前向算法示意图

图3 前向算法示意图

我们来看看 α 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=1NαT(qi)=i=1NP(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(o1s1=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=1NP(o1,o2,...,ot+1,st=qj,st+1=qi)ot+1=j=1NP(ot+1o1,o2,...ot,st=qj,st+1=qi)P(o1,o2,...,ot,st=qj,st+1=qi)(32)=j=1NP(ot+1st+1=qi)P(o1,o2,...,ot,st=qj,st+1=qi)st+1=j=1NP(ot+1st+1=qi)P(st+1=qio1,o2,...,ot,st=qj)P(o1,o2,...,ot,st=qj)Markov(31)=j=1NP(ot+1st+1=qi)P(st+1=qist=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=1Nbi(ot+1)ajiαt(qj)(4-9)
结合 ( 4 − 8 ) (4-8) (48) ( 4 − 9 ) (4-9) (49)我们可以得到所有状态下的 α T ( q i ) \alpha_T(q_i) αT(qi) ( 4 − 7 ) (4-7) (47)得解,此时的复杂度为 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,...,oT1,oTst=qi,λ)(4-10)

这也是一种设计,和前向的互补。注意看与 ( 4 − 5 ) (4-5) (45)的区别,后向的推导相比前向要绕一点。
后向算法示意图

图4 后向算法示意图

我们来看下 β 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,...,oT1,oTs1=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=1NP(o1,o2,...,oT,s1=qi)s1=i=1NP(o1,o2,...,oTs1=qi)P(s1=qi)o1=i=1NP(o1o2,...,oT,s1=qi)P(o2,...,oTs1=qi)πi(32)=i=1NP(o1s1=qi)P(o2,...,oTs1=qi)πi(411)=i=1Nbi(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,...,oT1,oTst=qi)st+1=j=1NP(ot+1,...,oT,st+1=qjst=qi)st+1=j=1NP(ot+1,...,oTst+1=qj,st=qi)P(st+1=qjst=qi)ot+1,...,oTst+1=qj=j=1NP(ot+1,...,oTst+1=qj)aijot+1=j=1NP(ot+1ot+2,...,oT,st+1=qj)P(ot+2,...,oTst+1=qj)aij(32)=j=1NP(ot+1st+1=qj)βt+1(qj)aij=j=1Nbj(ot+1)βt+1(qj)aij(4-14)

结合 ( 4 − 13 ) (4-13) (413) ( 4 − 14 ) (4-14) (414),我们就可以求得 β 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=1Nα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=1NP(O,st=qiλ)=i=1NP(o1,...,ot,ot+1,..,oT,st=qiλ)=i=1NP(o1,...,ot,st=qiλ)P(ot+1,..,oTo1,...,ot,st=qi)αt(qi)o1,...,otβt(qi)=i=1Nα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θmaxzlogP(x,zθ)P(zx,θ(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) (52)就有

λ ( 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 SlogP(O,Sλ)P(SO,λ(t))(5-3)

我们这里再对 P ( S ∣ O , λ ( t ) ) P(S|O,\lambda^{(t)}) P(SO,λ(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(SO,λ(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) (53)改为

λ ( 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 SlogP(O,Sλ)P(O,Sλ(t))(5-4)

实际操作时,就是不断迭代 ( 5 − 4 ) (5-4) (54)。但看到这里,这个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 SlogP(O,Sλ)P(O,Sλ(t))(5-5)

我们把式 ( 4 − 4 ) (4-4) (44)代进来看下

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=q1qN...sT=q1qNlog(t=1Tbst(ot)t=1T1ast,st+1πs1)P(O,Sλ(t))=s1=q1qN...sT=q1qN(logπs1+t=1Tlogbst(ot)+t=1T1logast,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=q1qN...sT=q1qNlogπs1P(O,s1,...,sTλ(t))s1=argπmaxs1=q1qNlogπ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=q1qNπ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=q1qN(logπs1P(O,s1λ(t)))+η(s1=q1qNπs11)(5-8)

( 5 − 8 ) (5-8) (58)进行求偏导,有
∂ 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} πs1L=π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=q1qN(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) (511)代入到 ( 5 − 12 ) (5-12) (512)

π 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(SO,λ)(6-1)

翻译过来就是,给定了模型参数,对应的状态变量序列最优可能是哪一组。

由于 P ( O ∣ λ ) P(O|\lambda) P(Oλ)是已经观测到的变量,我们也可以认为 ( 6 − 1 ) (6-1) (61)等价于

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(SO,λ)P(Oλ)=argSmaxP(S,Oλ)(6-2)

我们画个图看下

decoding示意图

图5 decoding示意图

看图一下子就明白了,我们的每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,...,st1maxP(o1,...,ot,s1,...,st1,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,...,st1] δ 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)=1iNmaxδ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) (65)是用来回溯路径的,这个学过动态规划的就再熟悉不过了。

最终我们会在最后一个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) (65)不断回溯就行了。

参考资料

[1] 机器学习-白板推导系列(十四)-隐马尔可夫模型HMM

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七元权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值