一、隐马尔科夫模型基本概念
隐马尔可夫模型由初始状态概率向量 π、状态转移概率矩阵 A 和观测概率矩阵 B 决定。A,B,π 称为隐马尔可夫模型的三要素。
λ=(A,B,π)
上图中是一个简单的描述股票市场的马尔科夫模型:其中隐藏状态为 {Bull,Bear,Even},观测状态为{up,down,unchanged}
根据图模型,我们可以轻易地写出状态转移概率矩阵 A (Let Bull = 1, Bear = 2, Even = 3):
A=⎡⎣⎢0.60.50.40.20.30.10.20.20.5⎤⎦⎥
观测概率矩阵 B (Let up = 1, down = 2, unchanged= 3):
B=⎡⎣⎢0.70.10.30.10.60.30.20.304⎤⎦⎥
隐马尔可夫模型作了两个 基本假设(yt 为t时刻的观测,qt 为t时刻的状态):
-
p(qt|q1,…,qt−1,y1,…,yt−1)=p(qt|qt−1)
-
p(yt|q1,…,qt−1,qt,y1,…,yt−1)=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、直接计算法
p(Y|λ)=∑q1,…,qT=∑q1,…,qT(=∑Q p(Y,Q|λ)=∑Q p(Y|Q,λ) p(Q|λ)=∑q1,…,qTp(y1,…,yT|q1,…,qT;λ)p(q1,…,qT|λ)bq1(y1)…bqT(yT)⋅p(q1|λ)p(q2|q1,λ)p(q3|q1,q2,λ)…p(qT|q1,…,qT−1,λ)bq1(y1)…bqT(yT))⋅(p(q1|λ)p(q2|q1,λ)p(q3|q2,λ)…p(qT|qT−1,λ))=∑q1,…,qT(bq1(y1)…bqT(yT))⋅(πq1aq1,q2…aqT−1,T)=∑q1,…,qTπq1∏t=2Taqt−1,tbqt(yt)(1)(2)(3)(4)(5)(6)(7)(8)(9)
但是这种方法的计算量很大,是 O(TNT),因此这种算法在实际不可行。
2、前向和后向算法

Note: Picture source
由上图定义了前向概率(左)和后向概率(右),前向概率描述了 y1 到 yt 和 t 时刻为第 i 个状态时的联合分布,后向概率在已知t 时刻为第 i 个状态时描述了 yt+1 到 yT 的联合分布;
前向算法:
t=1 时,
αi(1)=p(y1,q1=i|λ)=p(q1=i|λ) p(y1|q1=i,λ)=πibi(y1)
t=2 时,
αj(1)=p(y1,y2,q2=j|λ)=∑i=1kp(y1,y2,q1=i,q2=j|λ)=∑i=1kp(q1=i) p(y1|q1=i)p(q2=j|q1=i) ⋅p(q2=j|q1=i)p(y2|q2=j)=[∑i=1kαi(1)ai,j]bj(y2)(33)(34)(35)(36)(37)
……
因此,t≥2 时,αj(t+1)=[∑ki=1αi(t)ai,j]bj(yt+1)
又显然有 p(Y|λ)=∑ki=1αi(T) ……(1)
下图可以直观地理解这个过程:
前向算法:
输入:模型参数λ,观测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 时,
βi(T−1)=p(yT|qT−1=i)=∑j=1kp(yT,qT=j|qT−1=i)=∑j=1k p(qT=j|qT−1=i) p(yT|qT=j,qT−1=i)=∑j=1k p(qT=j|qT−1=i) p(yT|qT=j)=∑j=1kai,jbj(yT)(15)(16)(17)(18)(19)
t=T-2 时,
βi(T−2)=p(yT,yT−1|qT−2=i)=∑j=1kp(yT,yT−1,qT−1=j,qT=l|qT−2=i)=∑j=1k∑l=1k p(qT=j|qT−1=i) p(yT|qT=j)⋅p(qT−1=j|qT−2=i) p(yT−1|qT−1=j)=∑j=1k p(qT=j|qT−1=i) p(yT|qT=j)=∑j=1kai,jbj(yT−1)βj(T−1)(20)(21)(22)(23)(24)(25)
……
因此,t≤T−1 时:
βi(t)=∑j=1kai,jbj(yt+1)βj(t+1)
又显然有 p(Y|λ)=∑ki=1π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=1k∑j=1kαi(t)ai,jbj(yt+1)βj(t+1),t=1,…,T−1
此式当 t=1 和 t=T-1 时分别为式 (1) 和(2)。
特定状态的概率
给定模型 λ 和 观测 Y ,在时刻 t 处于状态 i 的概率如下;
p(qt=i|Y,λ)=p(Y,qt=i|λ)p(Y|λ)=p(Y,qt=i|λ)∑kj=1p(Y,qt=j|λ)=αi(t)βi(t)∑kj=1αi(t)βi(t)
其中,
p(Y,qt=i|λ)=p(Y|qt=i,λ)p(qt=i|λ)=p(y1,…,yt|qt=i)p(yt+1,…,yT|qt=i)p(qt=i|λ)=p(y1,…,yt,qt=i|λ)p(yt+1,…,yT|qt=i)=αi(t)βi(t)(26)(27)(28)(29)
三、参数学习算法
根据训练数据是包括观测序列和对应的状态序列还是只有观测序列,可以分别由监督学习与非监督学习实现。但由于监督学习需要使用训练数据,而人工标注数据代价也往往很高,因此我们会利用非监督的学习方法来学习参数。
将观测序列数据看作观测数据 Y,状态序列数据看作不可观测的隐数据 Q,那么隐马尔可夫模型事实上是一个含有隐变量的概率模型 :
p(Y|λ)=∑Q p(Y|Q,λ) p(Q|λ)
我们先回顾一下EM算法:EM算法推导(收敛性证明和在GMM中的应用)
在 HMM 中,我们可以写成如下:
λ(g+1)=argmaxλ(∫qln(p(Y,q|λ))p(q|Y,λ(g)))=argmaxλ(∫qln(p(Y,q|λ))p(q,Y|λ(g))p(Y|λ(g)))=argmaxλ(∫qln(p(Y,q|λ))p(q,Y|λ(g)))(30)(31)(32)
(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=1Tlnaqt−1,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))∑ki=1p(q1=i,Y|λ(g))
(1)第二项可以写出:
∑q1,…,qT(∑t=1Tlnaqt−1,qt)p(q,Y|λ(g))=∑i=1k∑j=1k∑t=1Tlnai,j p(qt−1=i,qt=j,Y|λ(g))
s.t.∑i=1kaij=1
同样利用拉格朗日乘子法,即可求解:
ai,j=∑Tt=1p(qt−1=i,qt=j,Y|λ(g))∑Tt=1p(qt−1=i,Y|λ(g))
(3)第二项可以写出:
∑q1,…,qT(∑t=1Tlnbqt(yt))p(q,Y|λ(g))=∑j=1k∑t=1T(lnbj(yt))p(qt=j,Y|λ(g))
s.t.∑i=1kbj(yt)=1
同样利用拉格朗日乘子法,即可求解(注意:只有在 yt=vl 时,偏导数才不为0):
bj(yt=vl)=∑Tt=1p(qt=j,Y=vl|λ(g))∑Tt=1p(qt=j,Y|λ(g))
上面的 EM 算法又称为 Baum-Welch 算法。
Baum-Welch 算法:
输入:观测序列Y
(1) 初始化 λ0=(A(0),B(0),π(0))
(2) 递推直至EM算法收敛
π(g+1)i=p(q1=i,Y|λ(g))∑ki=1p(q1=i,Y|λ(g))
a(g+1)i,j=∑Tt=1p(qt−1=i,qt=j,Y|λ(g))∑Tt=1p(qt−1=i,Y|λ(g))
bj(l)(g+1)=∑Tt=1p(qt=j,Y=vl|λ(g))∑Tt=1p(qt=j,Y|λ(g))
(3) 终止。得到参数 λ(n+1)=(A(n+1),B(n+1),π(n+1))
四、参考资料
[1] 李航《统计学习方法》
[2] 徐亦达教授的自视频
[3] machine-learning-notes.Professor Richard Xu .