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