隐马尔可夫模型(Hidden Markov Model,HMM)是含有隐藏状态的马尔可夫过程的模型。隐马尔可夫模型有两种变量,不可观察到的状态和可观察到的观测。
隐马尔可夫模型有两个基本假设:
- 齐次马尔可夫性假设,即假设隐藏的马尔科夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关
- 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关.
HMM的参数λλ有三个:
- AA状态转移概率矩阵(不同状态之间的转移概率)
- 观测概率矩阵(不同状态下的观测出现的概率)
- 初始状态概率向量ππ
使用HMM需要解决3个问题,这是马尔可夫模型的核心问题:
- Likelihood: 给定HMM生成一串observation序列oo的概率
- Decoding: 给定一串observation序列,找出HMM最可能状态序列ss
- Training: 给定一个observation序列,训练出HMM参数
下面就依次解决这三个问题
Likelihood
the Forward algorithm
定义到tt时刻的观测序列为,状态stst为ii的概率为前向概率,记作
给定参数λλ的HMM,求产生o1o2...oTo1o2...oT的概率
- 初值:α1(i)=πib(i)α1(i)=πib(i)
- 递推:αt+1(i)=[∑Nj=1αt(j)aji]bi(ot+1)αt+1(i)=[∑j=1Nαt(j)aji]bi(ot+1)
- 终止:p(O|λ)=∑Nj=1αT(j)p(O|λ)=∑j=1NαT(j)
the Backward algorithm
定义tt时刻之后的观测序列为,状态stst为ii的概率为后向概率,记作
给定参数λλ的HMM,求产生o1o2...oTo1o2...oT的概率
- 初值:βT(i)=1βT(i)=1
- 递推:βt(i)=∑Nj=1aijβt+1(j)bj(ot+1)βt(i)=∑j=1Naijβt+1(j)bj(ot+1)
- 终止:p(O|λ)=∑Nj=1πjbj(o1)β1(j)p(O|λ)=∑j=1Nπjbj(o1)β1(j)
Decoding - the Viterbi algorithm
定义在时刻tt状态为的所有状态路径中概率最大的路径的概率值为δt(i)=maxs1s2...st−1p(st=i,s1s2...st−1,o1o2...ot|λ)δt(i)=maxs1s2...st−1p(st=i,s1s2...st−1,o1o2...ot|λ)
定义在时刻tt状态为的所有状态路径中概率最大的路径t−1t−1时刻的状态为ϕt(i)=argmaxj(δt(i)aji)ϕt(i)=argmaxj(δt(i)aji)
给定参数λλ的HMM,已知观测序列为o1o2...oTo1o2...oT,求最有可能的状态序列s1s2...sTs1s2...sT
- 初始化:δ1(i)=πbi(o1),ϕ1(i)=0δ1(i)=πbi(o1),ϕ1(i)=0
- 递推:δt+1(i)=maxj[δt(j)aji]bi(ot+1),ϕt(i)=argmaxj[δt−1(j)aji]δt+1(i)=maxj[δt(j)aji]bi(ot+1),ϕt(i)=argmaxj[δt−1(j)aji]
- 终止:s∗T=argmaxiδT(i)sT∗=argmaxiδT(i)
- 回溯:s∗t=ϕt+1(s∗t+1)st∗=ϕt+1(st+1∗)
Training
Supervised learning
给定若干个观测序列o1o2...oTo1o2...oT及对应的状态序列s1s2...sTs1s2...sT样本,求HMM最有可能的参数λλ
转移慨率AA的估计:,AijAij是状态ii之后是状态发生的频次,∑jAij∑jAij是状态ii发生的频次
观测矩阵的估计:bi(k)=Bik∑kBikbi(k)=Bik∑kBik,BikBik是状态为ii时观测为的频次,∑kBik∑kBik是状态ii发生的频次。
初始状态概率向量的估计:各个初始状态发生的频率。
Supervised learning - Baum-Welch algorithm
给定若干个观测序列o1o2...oTo1o2...oT样本和状态个数,求HMM最有可能的参数λλ。
这种含有隐藏变量的求解问题我们自然会想到EM算法,BW算法就是EM算法的一个实例,我们就从EM算法的角度来解释一下BW算法:
初始化:随即初始化λ(0)=(A,B,π)λ(0)=(A,B,π)
E步:根据前向后向算法可得对于观测序列O(n)O(n)
- p(st=i,O(n)|λ(l))=αt(i)βt(i)∑iαt(i)βt(i)p(st=i,O(n)|λ(l))=αt(i)βt(i)∑iαt(i)βt(i)
- p(st=i,st+1=j,O(n)|λ(l))=αt(i)aijbj(ot+1)βt(j)∑i,jαt(i)aijbj(ot+1)βt(j)p(st=i,st+1=j,O(n)|λ(l))=αt(i)aijbj(ot+1)βt(j)∑i,jαt(i)aijbj(ot+1)βt(j)
M步:根据上面求得得概率值,更新λλ
- π(l+1)i=∑np(s1=i,O(n)|λ(l))∑i∑np(s1=i,O(n)|λ(l))=∑np(s1=i,O(n)|λ(l))Nπi(l+1)=∑np(s1=i,O(n)|λ(l))∑i∑np(s1=i,O(n)|λ(l))=∑np(s1=i,O(n)|λ(l))N
- a(l+1)ij=∑n∑tp(st=i,st+1=j,O(n)|λ(l))∑n∑j∑tp(st=i,st+1=j,O(n)|λ(l))aij(l+1)=∑n∑tp(st=i,st+1=j,O(n)|λ(l))∑n∑j∑tp(st=i,st+1=j,O(n)|λ(l))
- b(l+1)i(k)=∑n∑tp(st=i,ot=k,O(n)|λ(l))∑n∑t∑kp(st=i,ot=k,O(n)|λ(l))=∑n∑tp(st=i,ot=k,O(n)|λ(l))∑n∑tp(st=i,O(n)|λ(l))bi(l+1)(k)=∑n∑tp(st=i,ot=k,O(n)|λ(l))∑n∑t∑kp(st=i,ot=k,O(n)|λ(l))=∑n∑tp(st=i,ot=k,O(n)|λ(l))∑n∑tp(st=i,O(n)|λ(l))
循环迭代直至收敛,由EM算法的性质可知,有可能收敛到局部最优值,实际过程中可能需要多次计算。而且BW算法计算量很大,训练起来很慢,感觉不太实用。在声纹识别中,一般GMM-HMM来简化计算,也就是说把隐藏状态的用高斯混合模型的高斯分量的概率核来替代状态,用观测变量是哪个高斯分量的概率来替代BB。