隐马尔科夫模型
1.隐马尔科夫模型的基本概念
1.1 模型的定义
隐马尔科夫模型适用于标注问题的统计学习模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。
隐马尔科夫模型是关于时序的概率模型,观测序列是观测变量,状态序列是隐变量,用观测序列求得状态序列(状态序列有时序性关系)
(1)隐马尔可夫模型用概率图模型来表示
(2)组成三要素
λ=(A,B,π)
- 状态转移概率矩阵A
A=[aij]_{N×N} (1)
aij=P(it+1=qj|it=qi), i=1,2,…,N; j=1,2,…,N
是在时刻t处在状态qi的条件下在时刻t+1转移到状态qj的概率
- 观测概率矩阵B
B=[bj(k)]_{N×M}
bj(k)=P(ot=vk|it=qj), k=1,2,…,M; j=1,2,…,N
是在时刻t处于状态qj的条件下生成观测vk的概率
- 初始状态概率向量
π=(πi)
πi=P(i1=qi), i=1,2,…,N
是时刻t=1处于状态qi的概率
A和π确定了隐藏的马尔科夫链,生成不可观测的状态序列;B确定了如何从状态序列生成观测序列
(3)两个假设前提
- 齐次马尔可夫模型
t时刻的状态只依赖前一时刻的状态
- 观测独立性假设
t时刻观测只依赖于t时刻的状态
2.概率计算方法
介绍计算观测序列概率P(O|λ)
2.1 直接计算法
状态序列 I=(i1,i2,…,iT)的概率:
给定状态序列I=(i1,i2,…,iT),观测序列O=(o1,o2,…,oT)的概率:
根据贝叶斯公式可得:
根据联合概率求边缘概率可得:
但是直接计算的复杂度太高,是O(TNT),算法不可行。
2.2 前向算法
(1)前向算法推导(递推部分):
αt+1(i)=P(o1,o2,…,ot+1,it+1=qi|λ) (前向概率的定义)
=∑j=1NP(o1,o2,…,ot+1,it+1=qi,it=qj|λ)
=∑j=1NP(o1,o2,…,ot+1,it=qj|λ)P(ot+1|o1,o2,…,ot,it+1=qi,it=qj|λ)P(it+1=qi|o1,o2,…,ot,ot+1,it=qj,λ)
根据两个假设前提:t时刻的状态只依赖前一时刻的状态,和t时刻观测只依赖于t时刻的状态
=∑j=1NP(o1,o2,…,ot+1,it=qj|λ)P(ot+1|it+1=qi|λ)P(it+1=qi|it=qj,λ)
=∑j=1Nαtajibi(ot+1)
(2)观测序列概率的前向算法
输入:隐马尔科夫模型λ,观测序列O
输出:观测序列概率P(O|λ)
- 初值:α1=πibi(oi) ,i=1,2,…,N(N是状态数)
- 递推:αt+1(i)=[∑j=1Nαt(j)aji]bi(ot+1)
- 终止:P(O|λ)=∑i=1NαT(i)(T是最终的时刻)
(3)前向算法例题
- α1(2):在t=1时,状态为2的概率
- a12:下一时刻由状态1转换为状态2的概率
- b1(o2):状态为1时生成t=2时刻观测的结果的概率
- π2:t=1时刻状态为2的概率
2.3后向算法
输入和输出同前向算法
- 初始值:βT(i)=1, i=1,2,…,N
- 递推:βt(i)=∑j=1Naijbj(ot+1)βt+1(j), i=1,2,…,N
- 最终:P(O|λ)=∑i=1Nπibi(o1)β1(i)
2.4前向-后向算法
前面步骤基本一致,是前向后向算法的总和,只是最终这里不同:
P(O|λ)=∑i=1N∑j=1Nαijbj(ot+1)βt+1(j), t=1,2,…,T
3.学习算法
3.1监督学习方法
给定的训练数据:S个长度相同的观测序列和对应的状态序列{(O1,I1),(O2,I2),…,(Os,Is)}
-
转移概率aij的估计
aij=Aij/∑j=1NAij
分子:样本中状态i到下一时刻转移到状态j的频数
分母:样本中状态i到下一时刻转移到所有状态的频数
-
观测概率bj(k)的估计
bj(k)=Bjk/∑Mk=1Bjk
分子:样本中状态j观测为k的频数
分母:样本中状态j观测为所有的频数
-
初始状态概率πi
例:10个样本,3个样本的初始状态为q1,那么π1=103
3.2Baum-Welch算法(无监督学习)
给定训练数据:S个观测序列{O1,O2,…,Os}
(1)BW算法
-
E步:
EM算法的Q函数:
Q(θ,θ(i)) = ∑ZP(Z|Y,θ(i)) log[P(Y|Z,θ)P(Z|θ)]
= ∑ZP(Z|Y,θ(i)) logP(Y,Z|θ)
= EZ[P(Z|Y,θ(i)) logP(Y,Z|θ)]
BW算法的Q函数(两者是有区别的):
Q(λ,λ′) = ∑I logP(O,I|λ)P(O,I|λ′) (省略了一个常数因子1/P(O|λ′))
-
M步:
分别对三个模型参数进行求导=0
(2)BW算法流程
输入:观测数据O
输出:隐马尔科夫模型参数
-
初始化:n=0,选取aij(0),bj0(k),πi(0)
-
递推:n=1,2,…,
πi(n+1)=P(O,i1=i|λ′)/P(O|λ′)
=P(i1=i|O,λ′)
=γ1(i)
γ1(i):给定模型λ′和观测O,在时刻t=1时处于状态i的概率
aij(n+1)=∑t=1T−1P(O,it=i,it+1=j|λ′)/∑t=1T−1P(O,it=i|λ′)
=∑t=1T−1ξt(i,j)/∑t=1T−1γt(i)
ξt(i,j):给定模型λ和观测O,状态qi在下一时刻转换为qi的概率
∑t=1T−1ξt(i,j):在观测O下由状态i转移到状态j的期望值
∑t=1T−1γt(i):在观测O下由状态i转移的期望值
bj(n+1)(k)=∑t=1TP(O,it=j|λ′)I(ot=vk)/∑t=1TP(O,it=j|λ′)
=∑t=1,ot=vkTγt(j)/∑t=1Tγt(j)
∑t=1Tγt(j):观测O下状态i出现的期望
-
最终:得到模型参数
4. 预测算法
当我们有了模型λ=(A,B,π)和观测序列O,就可以来预测最有可能的状态序列I了
4.1近似算法
t时刻处于状态qi的概率为:
γt(i)=P(O,it=qi|λ)/P(O|λ)
=P(o1,o2,…,ot,it =qi|λ)/P(ot+1,ot+2,…,oT|o1,o2,…,ot,it=qi,λ)
=P(o1,o2,…,ot,it=qi|λ)/P(ot+1,ot+2,…,oT|it=qi,λ)
=αt(i)βt(i)/∑j=1Nαt(j)βt(j) (求和是所有状态)
t时刻最有可能的状态是: it∗= arg max1≤i≤N [γt(i)] ,t=1,2,…,T
从而得到状态序列: I∗=(i1∗,i2∗,…,iT∗)
缺点:存在转移概率为0的相邻状态,无法解决。
4.2维特比算法
(1)维特比算法的参数
实质:动态规划求解概率最大路径
t时刻最有可能在哪个状态的可能性:δt(i)=maxi1,i2,...,it−1P(it=i,it−1,…,i1,ot,…,o1|λ)
t时刻最有可能是哪个状态:φt(i)=arg max1≤j≤N [δt−1(i)aji]
(2)维特比算法流程
输入:模型λ和观测O
输出:最优路径 I∗=(i1∗,i2∗,…,iT∗)
- 初始化:δ1(i)=πibi(o1) ,i=1,2,…,N
φ1(i)=0 ,i=1.2,…,N
- 递推:δt(i)=max1≤j≤N [δt−1(j)aji]bi(ot) ,i=1,2,…,N
φt(i)=arg max1≤j≤N [δt−1(i)aji] ,i=1,2,…,N
- 最终:P∗=max1≤j≤N δT(i)
iT∗=arg max1≤j≤N [δT(i)]
- 最优路径回溯:it∗=φt+1(it+1∗)
最优路径:I∗=(i1∗,i2∗,…,iT∗)
(3)典型例题