一、隐马尔科夫模型基本概念
隐马尔可夫模型由初始状态概率向量 π π 、状态转移概率矩阵 A 和观测概率矩阵 B 决定。A,B, π π 称为隐马尔可夫模型的三要素。
上图中是一个简单的描述股票市场的马尔科夫模型:其中隐藏状态为 {Bull,Bear,Even} { B u l l , B e a r , E v e n } ,观测状态为 {up,down,unchanged} { u p , d o w n , u n c h a n g e d }
根据图模型,我们可以轻易地写出状态转移概率矩阵 A (Let Bull = 1, Bear = 2, Even = 3):
观测概率矩阵 B (Let up = 1, down = 2, unchanged= 3):
隐马尔可夫模型作了两个 基本假设( yt y t 为t时刻的观测, qt q t 为t时刻的状态):
- p(qt|q1,…,qt−1,y1,…,yt−1)=p(qt|qt−1) p ( q t | q 1 , … , q t − 1 , y 1 , … , y t − 1 ) = p ( q t | q t − 1 )
- p(yt|q1,…,qt−1,qt,y1,…,yt−1)=p(yt|qt) p ( y t | q 1 , … , q t − 1 , q t , y 1 , … , y t − 1 ) = p ( y t | q t )
对第一条假设的解释:隐藏的马尔可夫链在任意时刻t的状态只依赖于其 前一时刻 的状态, 与其他时刻的状态及观测无关,也与时刻t无关 ;
对第二条假设的解释:任意时刻的观测只依赖于 该时刻 的马尔可夫链的状态,与其他观测及状态无关 。
下面提出 HMM 的三个 基本问题:
(记: λ=(A,B,π) λ = ( A , B , π ) Q={q1,…,qT} Q = { q 1 , … , q T } Y={y1,…,yT} Y = { y 1 , … , y T } )
- 概率计算问题(计算其产生观测序列的概率 ) ⇒ ⇒ 计算 p(Y|λ) p ( Y | λ )
- 参数学习问题(训练模型使选取的参数能最好的描述观测数据 ) ⇒ λMLE=argmaxλ p(Y|λ) ⇒ λ M L E = a r g m a x λ p ( Y | λ )
- 解码(decoding)问题(找到与此观测序列最匹配的隐状态序列 ) ⇒ argmaxQ p(Y|Q,λ) ⇒ a r g m a x Q p ( Y | Q , λ )
下面,我们主要讨论如何解决最常用到的前两个基本问题。
二、概率计算算法
1、直接计算法
但是这种方法的计算量很大,是 O(TNT) O ( T N T ) ,因此这种算法在实际不可行。
2、前向和后向算法
由上图定义了前向概率(左)和后向概率(右),前向概率描述了 y1 y 1 到 yt y t 和 t 时刻为第 i i 个状态时的联合分布,后向概率在已知t 时刻为第 个状态时描述了 yt+1 y t + 1 到 yT y T 的联合分布;
前向算法:
t=1 时,
αi(1)=p(y1,q1=i|λ)=p(q1=i|λ) p(y1|q1=i,λ)=πibi(y1)
α
i
(
1
)
=
p
(
y
1
,
q
1
=
i
|
λ
)
=
p
(
q
1
=
i
|
λ
)
p
(
y
1
|
q
1
=
i
,
λ
)
=
π
i
b
i
(
y
1
)
t=2 时,
……
因此,t ≥ ≥ 2 时, αj(t+1)=[∑ki=1αi(t)ai,j]bj(yt+1) α j ( t + 1 ) = [ ∑ i = 1 k α i ( t ) a i , j ] b j ( y t + 1 )
又显然有 p(Y|λ)=∑ki=1αi(T) p ( Y | λ ) = ∑ i = 1 k α i ( T ) ……(1)
下图可以直观地理解这个过程:
前向算法:
输入:模型参数 λ λ ,观测 Y Y
输出:
(1) 初值
αi(1)=πibi(y1) α i ( 1 ) = π i b i ( y 1 )(2) 递推 对 t=1,……,T-1
αj(t+1)=[∑i=1kαi(t)ai,j]bj(yt+1) α j ( t + 1 ) = [ ∑ i = 1 k α i ( t ) a i , j ] b j ( y t + 1 )(3) 终止
p(Y|λ)=∑i=1kαi(T) p ( Y | λ ) = ∑ i = 1 k α i ( T )
后向算法:
t=T 时, βi(T)=1 β i ( T ) = 1
t=T-1 时,
t=T-2 时,
……
因此, t≤T−1 t ≤ T − 1 时:
又显然有 p(Y|λ)=∑ki=1πibi(y1)βi(1) p ( Y | λ ) = ∑ i = 1 k π i b i ( y 1 ) β i ( 1 ) ……(2)
后向算法:
输入: 模型参数 λ λ ,观测 Y Y
输出:
(1) 初值
βi(T)=1 β i ( T ) = 1(2) 递推 对 t=T-1,……,1
βi(t)=∑j=1kai,jbj(yt+1)βj(t+1) β i ( t ) = ∑ j = 1 k a i , j b j ( y t + 1 ) β j ( t + 1 )(3)终止
p(Y|λ)=∑i=1kπibi(y1)βi(1) p ( Y | λ ) = ∑ i = 1 k π i b i ( y 1 ) β i ( 1 )
前向算法 和 后向算法 的统一
利用前面的定义可以将观测序列概率 p(Y|λ) p ( Y | λ ) 统一:
此式当 t=1 和 t=T-1 时分别为式 (1) 和(2)。
特定状态的概率
给定模型 λ λ 和 观测 Y Y ,在时刻 t 处于状态 的概率如下;
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 ( q t = i | Y , λ ) = p ( Y , q t = i | λ ) p ( Y | λ ) = p ( Y , q t = i | λ ) ∑ j = 1 k p ( Y , q t = j | λ ) = α i ( t ) β i ( t ) ∑ j = 1 k α i ( t ) β i ( t )
其中,
三、参数学习算法
根据训练数据是包括观测序列和对应的状态序列还是只有观测序列,可以分别由监督学习与非监督学习实现。但由于监督学习需要使用训练数据,而人工标注数据代价也往往很高,因此我们会利用非监督的学习方法来学习参数。
将观测序列数据看作观测数据 Y,状态序列数据看作不可观测的隐数据 Q,那么隐马尔可夫模型事实上是一个含有隐变量的概率模型 :
我们先回顾一下EM算法:EM算法推导(收敛性证明和在GMM中的应用)
在 HMM 中,我们可以写成如下:
( p(Y|λ(g)) p ( Y | λ ( g ) ) 为常数,因此可以省略)
E step:
求 Q 函数,见如下:
M step:
极大化 Q 函数,求模型参数 A,B, π π ;
观察上述 Q 函数,要极大化的参数分别单独地出现在3个项中,所以只需对各项分别极大化;
(1)第一项可以写出:
利用拉格朗日乘子法,即可求解;
(1)第二项可以写出:
同样利用拉格朗日乘子法,即可求解:
(3)第二项可以写出:
同样利用拉格朗日乘子法,即可求解(注意:只有在 yt=vl y t = v l 时,偏导数才不为0):
上面的 EM 算法又称为 Baum-Welch 算法。
Baum-Welch 算法:
输入:观测序列Y
(1) 初始化 λ0=(A(0),B(0),π(0)) λ 0 = ( A ( 0 ) , B ( 0 ) , π ( 0 ) )
(2) 递推直至EM算法收敛
π(g+1)i=p(q1=i,Y|λ(g))∑ki=1p(q1=i,Y|λ(g)) π i ( g + 1 ) = p ( q 1 = i , Y | λ ( g ) ) ∑ i = 1 k p ( q 1 = i , Y | λ ( g ) )
a(g+1)i,j=∑Tt=1p(qt−1=i,qt=j,Y|λ(g))∑Tt=1p(qt−1=i,Y|λ(g)) a i , j ( g + 1 ) = ∑ t = 1 T p ( q t − 1 = i , q t = j , Y | λ ( g ) ) ∑ t = 1 T p ( q t − 1 = i , Y | λ ( g ) )
bj(l)(g+1)=∑Tt=1p(qt=j,Y=vl|λ(g))∑Tt=1p(qt=j,Y|λ(g)) b j ( l ) ( g + 1 ) = ∑ t = 1 T p ( q t = j , Y = v l | λ ( g ) ) ∑ t = 1 T p ( q t = j , Y | λ ( g ) )(3) 终止。得到参数 λ(n+1)=(A(n+1),B(n+1),π(n+1)) λ ( n + 1 ) = ( A ( n + 1 ) , B ( n + 1 ) , π ( n + 1 ) )
四、参考资料
[1] 李航《统计学习方法》
[2] 徐亦达教授的自视频
[3] machine-learning-notes.Professor Richard Xu .