隐马尔科夫模型数学理论推导(HMM)

一、隐马尔科夫模型基本概念

隐马尔可夫模型由初始状态概率向量 π、状态转移概率矩阵 A 和观测概率矩阵 B 决定。A,B,π 称为隐马尔可夫模型的三要素。

λ=(A,B,π)

上图中是一个简单的描述股票市场的马尔科夫模型:其中隐藏状态为 {Bull,Bear,Even},观测状态为{up,down,unchanged}

根据图模型,我们可以轻易地写出状态转移概率矩阵 A (Let Bull = 1, Bear = 2, Even = 3):

A=[0.60.20.20.50.30.20.40.10.5]

观测概率矩阵 B (Let up = 1, down = 2, unchanged= 3):

B=[0.70.10.20.10.60.30.30.304]

隐马尔可夫模型作了两个 基本假设yt 为t时刻的观测,qt 为t时刻的状态):

  1. p(qt|q1,,qt1,y1,,yt1)=p(qt|qt1)
  2. p(yt|q1,,qt1,qt,y1,,yt1)=p(yt|qt)

对第一条假设的解释:隐藏的马尔可夫链在任意时刻t的状态只依赖于其 前一时刻 的状态, 与其他时刻的状态及观测无关,也与时刻t无关 ;

对第二条假设的解释:任意时刻的观测只依赖于 该时刻 的马尔可夫链的状态,与其他观测及状态无关 。

下面提出 HMM 的三个 基本问题

(记:λ=(A,B,π) Q={q1,,qT} Y={y1,,yT}

  • 概率计算问题(计算其产生观测序列的概率 ) 计算 p(Y|λ)
  • 参数学习问题(训练模型使选取的参数能最好的描述观测数据 )  λMLE=argmaxλ p(Y|λ)
  • 解码(decoding)问题(找到与此观测序列最匹配的隐状态序列 )  argmaxQ p(Y|Q,λ)

下面,我们主要讨论如何解决最常用到的前两个基本问题。

二、概率计算算法

1、直接计算法

(1)p(Y|λ)=Q p(Y,Q|λ)(2)=Q p(Y|Q,λ) p(Q|λ)(3)=q1,,qTp(y1,,yT|q1,,qT;λ)p(q1,,qT|λ)(4)=q1,,qTbq1(y1)bqT(yT)p(q1|λ)p(q2|q1,λ)p(q3|q1,q2,λ)(5)p(qT|q1,,qT1,λ)(6)=q1,,qT(bq1(y1)bqT(yT))(p(q1|λ)p(q2|q1,λ)p(q3|q2,λ)(7)p(qT|qT1,λ))(8)=q1,,qT(bq1(y1)bqT(yT))(πq1aq1,q2aqT1,T)(9)=q1,,qTπq1t=2Taqt1,tbqt(yt)

但是这种方法的计算量很大,是 O(TNT),因此这种算法在实际不可行。

2、前向和后向算法

隐马尔科夫模型数学理论推导(HMM)
Note: Picture source

由上图定义了前向概率(左)和后向概率(右),前向概率描述了 y1yt 和 t 时刻为第 i 个状态时的联合分布,后向概率在已知t 时刻为第 i 个状态时描述了 yt+1yT 的联合分布;

前向算法:

t=1 时,
αi(1)=p(y1,q1=i|λ)=p(q1=i|λ) p(y1|q1=i,λ)=πibi(y1)

t=2 时,

(33)αj(1)=p(y1,y2,q2=j|λ)(34)=i=1kp(y1,y2,q1=i,q2=j|λ)(35)=i=1kp(q1=i) p(y1|q1=i)p(q2=j|q1=i)(36) p(q2=j|q1=i)p(y2|q2=j)(37)=[i=1kαi(1)ai,j]bj(y2)

……

因此,t2 时,αj(t+1)=[i=1kαi(t)ai,j]bj(yt+1)

又显然有 p(Y|λ)=i=1kαi(T) ……(1)

下图可以直观地理解这个过程:

隐马尔科夫模型数学理论推导(HMM)

前向算法:

输入:模型参数λ,观测Y

输出:p(Y|λ)

(1) 初值

αi(1)=πibi(y1)

(2) 递推 对 t=1,……,T-1

αj(t+1)=[i=1kαi(t)ai,j]bj(yt+1)

(3) 终止

p(Y|λ)=i=1kαi(T)

后向算法:

t=T 时,βi(T)=1

t=T-1 时,

(15)βi(T1)=p(yT|qT1=i)(16)=j=1kp(yT,qT=j|qT1=i)(17)=j=1k p(qT=j|qT1=i) p(yT|qT=j,qT1=i)(18)=j=1k p(qT=j|qT1=i) p(yT|qT=j)(19)=j=1kai,jbj(yT)

t=T-2 时,

(20)βi(T2)=p(yT,yT1|qT2=i)(21)=j=1kp(yT,yT1,qT1=j,qT=l|qT2=i)(22)=j=1kl=1k p(qT=j|qT1=i) p(yT|qT=j)(23)p(qT1=j|qT2=i) p(yT1|qT1=j)(24)=j=1k p(qT=j|qT1=i) p(yT|qT=j)(25)=j=1kai,jbj(yT1)βj(T1)

……

因此,tT1 时:

βi(t)=j=1kai,jbj(yt+1)βj(t+1)

又显然有 p(Y|λ)=i=1kπibi(y1)βi(1) ……(2)

后向算法:

输入: 模型参数λ,观测Y

输出:p(Y|λ)

(1) 初值

βi(T)=1

(2) 递推 对 t=T-1,……,1

βi(t)=j=1kai,jbj(yt+1)βj(t+1)

(3)终止

p(Y|λ)=i=1kπibi(y1)βi(1)

前向算法 和 后向算法 的统一

利用前面的定义可以将观测序列概率 p(Y|λ) 统一:

p(Y|λ)=i=1kj=1kαi(t)ai,jbj(yt+1)βj(t+1)t=1,,T1

此式当 t=1 和 t=T-1 时分别为式 (1) 和(2)。

特定状态的概率

给定模型 λ 和 观测 Y ,在时刻 t 处于状态 i 的概率如下;

p(qt=i|Y,λ)=p(Y,qt=i|λ)p(Y|λ)=p(Y,qt=i|λ)j=1kp(Y,qt=j|λ)=αi(t)βi(t)j=1kαi(t)βi(t)

其中,

(26)p(Y,qt=i|λ)=p(Y|qt=i,λ)p(qt=i|λ)(27)=p(y1,,yt|qt=i)p(yt+1,,yT|qt=i)p(qt=i|λ)(28)=p(y1,,yt,qt=i|λ)p(yt+1,,yT|qt=i)(29)=αi(t)βi(t)

三、参数学习算法

根据训练数据是包括观测序列和对应的状态序列还是只有观测序列,可以分别由监督学习与非监督学习实现。但由于监督学习需要使用训练数据,而人工标注数据代价也往往很高,因此我们会利用非监督的学习方法来学习参数。

将观测序列数据看作观测数据 Y,状态序列数据看作不可观测的隐数据 Q,那么隐马尔可夫模型事实上是一个含有隐变量的概率模型 :

p(Y|λ)=Q p(Y|Q,λ) p(Q|λ)

我们先回顾一下EM算法:EM算法推导(收敛性证明和在GMM中的应用)

在 HMM 中,我们可以写成如下:

(30)λ(g+1)=argmaxλ(qln(p(Y,q|λ))p(q|Y,λ(g)))(31)=argmaxλ(qln(p(Y,q|λ))p(q,Y|λ(g))p(Y|λ(g)))(32)=argmaxλ(qln(p(Y,q|λ))p(q,Y|λ(g)))

p(Y|λ(g))为常数,因此可以省略)

E step:

求 Q 函数,见如下:

Q(λ,λ(g))=qln(p(Y,q|λ))p(q,Y|λ(g))=q1,,qT(lnπq1)p(q,Y|λ(g))+q1,,qT(t=1Tlnaqt1,qt)p(q,Y|λ(g))+q1,,qT(t=1Tlnbqt(yt))p(q,Y|λ(g))

M step:

极大化 Q 函数,求模型参数 A,B,π

观察上述 Q 函数,要极大化的参数分别单独地出现在3个项中,所以只需对各项分别极大化;

(1)第一项可以写出:

q1,,qT(lnπq1)p(q,Y|λ(g))=i=1k(lnπi)p(q1=i,Y|λ(g))

s.t.i=1kπi=1

利用拉格朗日乘子法,即可求解;

πi=p(q1=i,Y|λ(g))i=1kp(q1=i,Y|λ(g))

(1)第二项可以写出:

q1,,qT(t=1Tlnaqt1,qt)p(q,Y|λ(g))=i=1kj=1kt=1Tlnai,j p(qt1=i,qt=j,Y|λ(g))

s.t.i=1kaij=1

同样利用拉格朗日乘子法,即可求解:

ai,j=t=1Tp(qt1=i,qt=j,Y|λ(g))t=1Tp(qt1=i,Y|λ(g))

(3)第二项可以写出:

q1,,qT(t=1Tlnbqt(yt))p(q,Y|λ(g))=j=1kt=1T(lnbj(yt))p(qt=j,Y|λ(g))

s.t.i=1kbj(yt)=1

同样利用拉格朗日乘子法,即可求解(注意:只有在 yt=vl 时,偏导数才不为0):

bj(yt=vl)=t=1Tp(qt=j,Y=vl|λ(g))t=1Tp(qt=j,Y|λ(g))

上面的 EM 算法又称为 Baum-Welch 算法。

Baum-Welch 算法

输入:观测序列Y

(1) 初始化 λ0=(A(0),B(0),π(0))

(2) 递推直至EM算法收敛

πi(g+1)=p(q1=i,Y|λ(g))i=1kp(q1=i,Y|λ(g))

ai,j(g+1)=t=1Tp(qt1=i,qt=j,Y|λ(g))t=1Tp(qt1=i,Y|λ(g))

bj(l)(g+1)=t=1Tp(qt=j,Y=vl|λ(g))t=1Tp(qt=j,Y|λ(g))

(3) 终止。得到参数 λ(n+1)=(A(n+1),B(n+1),π(n+1))

四、参考资料


[1] 李航《统计学习方法》
[2] 徐亦达教授的自视频
[3] machine-learning-notes.Professor Richard Xu .