隐马尔可夫模型的计算
标签: 模式分类
@author lancelot-vim
约定一些新的术语,并且将重新整理记号系统。通常把隐马尔可夫模型图称为有限状态机(finite state machine, FSM),如果网络内部得转移都和概率相关,那么这样得网络叫做马尔可夫网络。这种网络是严格符合因果关系的,因为下一时刻状态的概率,之和上一时刻状态有关,如果只要选择好相应得合适得初始状态,每个特定得状态发生得概率都非0,那么这个马尔可夫模型就被成为”各态历经”的。最终状态或者吸收状态(final state or absorbing state)只系统一旦进入这个状态,就无法里还的情况(比如
前文提到,用
aij=P(wj(t+1)|wi(t)) bjk=P(vk(t)|wj(t))
我们要求在每一时刻都必须准备好转移到下一时刻,同时要发出一个可见的符号,这样有归一化条件:
∑jaij=1∑kbjk=1
定义了这些术语后,使得我们可以关注下列3个隐马尔可夫模型得核心问题:
- 估值问题:假设我们有一个HMM,其转移概率
aij 和bjk 已知,计算这个模型某一特定观测序列VT 得概率- 解码问题:假设我们已有一个HMM,和一个观测序列,决定最有可能产生这个观测序列得隐形状态序列
wT - 学习问题:假设我们知道一个HMM的大致结构(隐形状态参数数量、可见参数数量)如何从观测中得到
aij和bjk
估值问题
一个模型产生可见序列
其中的r是每个特定长T的隐状态序列得下标:
由于这里处理的是一阶马尔可夫过程,所以公式可以写为:
由于已经假设可见符号的概率只依赖于这个时刻所处得隐状态,因此,
P(VT)=∑r=1rmax∏t=1TP(v(t)|w(t))P(w(t)|w(t−1))
按照这个算法,时间复杂度为
αi(t)=⎧⎩⎨⎪⎪⎪⎪⎪⎪01∑iαi(t−1)aijbjkv(t)t=0且j≠初始状态t=0且j=初始状态其他
其中
HMM向前算法
- initialize t <- 0,
aij,bjk,VT,αj(0)=1 - repeat t <- t+1
aj(t) <-bjkv(t)∑t=1cαi(t−1)aij - until t = T
- return
P(VT) <- 最终状态得a0(T) - end
算法示意图:
这个算法的时间复杂度为
一个小例子
如图所示的HMM,他具有一个明确得吸收状态和唯一的独特空可见符号
计算观测序列为:
如下图所示,假设在t=0时刻,系统的隐状态为
解码问题
所谓解码问题,就是已知观测序列
HMM解码算法
- begin initialize Path <- {}, t = 0
repeat t <- t + 1 j <- 1 repeat j <- j + 1 αj(t) <-bjkv(t)∑i=1cαi(t−1)aij until j == c j’ <- argmax αj(t) 将 wj 添加到Pathuntil t = T return Path - end
解码算法是一个贪心的策略,每次选择当前概率最大的
学习问题
学习问题是根据观察值(或者说训练样本)确定转移概率
向前-向后算法
我们定义
βi(t)=⎧⎩⎨⎪⎪⎪⎪⎪⎪01∑jβj(t+1)aijbjkv(t+1)wi(t)≠w0且t=Twi(t)=w0i且t=T其他
定义从状态
γij(t)=αi(t−1)aijbjkβj(t)P(VT|θ)
- 分子代表:产生
VT 中前t-1个状态和后t个状态时,从t-1状态由wi(t−1) 转换到wj(t) 的概率 - 分母代表:
P(VT|θ) 是模型产生可见序列VT 的概率 -
γij 代表:在模型产生VT 序列时,状态wi(t−1) 转移到w(t)的概率
由此可得:
1. 在任意时刻,状态
2. 在任意时刻,状态
3. 在任意时刻,状态
4. 在任意时刻,状态
所以,得到
a^ij=∑t=1Tγij(t)∑t=1T∑kγik(t)(1)b^jk=∑i=1T∑l,v(t)=vkγjl(t)∑i=1T∑lγjl(t)(2)
有了这两个估计值,我们可以通过大量样本,是用以上公式对模型逐步更新,直到收敛为止,这就是著名的Baum-Welch算法:
Baum-Welch算法(向前向后算法)
- begin initialize
aij,bjk ,训练样本VT ,收敛判据θ , z <- 0do z <- z + 1 通过a(z-1),b(z-1),由(1)计算 a^(z) 通过a(z-1),b(z-1),由(2)计算 b^(z) aij(z) <-a^ij(z−1) bij(z) <-b^ij(z−1) until max[ aij(z)−aij(z−1),bjk(z)−bjk(z−1) ]return aij <-aij(z) ,bjk <-bjk(z) - end