隐马尔可夫模型属于生成模型,它在语音识别、自然语言处理、生物信息、模式识别领域有广泛的应用。隐马尔可夫模型可以用三句话概括,一个模型、两个假设、三个问题。解决了这些问题,隐马尔可夫模型也就掌握了。
一个模型
先引入一些有关HMM的符号:
观测变量符号为O,O1,O2,O3.....为观测序列,它的取值集合为V={v1,v2,v3....}
状态变量符号为i,i1,i2,i3....为状态序列,它的取值集合为Q={q1,q2,q3....}
A为状态转移矩阵,
B为发射矩阵(它的英文是Emission Matrix,李航老师的书中为观测矩阵,但都是一个东西)
Π是初始状态概率向量:Π=Π(Πi),其中,Πi=P(i1=qi),i=1,2,3,...,N
隐马尔可夫模型由初始状态概率向量Π、状态转移矩阵A和发射矩阵B决定,Π和A为状态序列,B为观测序列。因此隐马尔可夫模型可表示为:
λ=(A,B,Π)决定。
下面以一个例子来说明上述的概念:
二个假设
1>齐次性马尔可夫假设,假设隐藏的马尔可夫链在任意时刻t的状态只依赖于其前一个时刻的状态,与其他时刻的状态及观测状态无关,也与时刻t无关。
2>观测性独立假设,假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。
三个问题
HMM算法主要解决以下三个问题:
1>给定模型λ=(A,B,Π),计算在λ下观测序列O出现的概率P(O|λ)
2>对于给定的观测序列O,用极大似然估计法估计模型的λ,使得该模型下观测概率P(O|λ)最大
3>已知λ和观测序列O,求对给定的观测序列条件概率P(I|O)的最大状态序列I=(i1,i2,...,iT)
第一个问题:
对于第一个问题,先介绍直接求解的方法,说明直接求解方法比较困难。然后介绍前向算法和后向算法。
下面是一个具体的例子,然后给出通用的直接求解方法
上面的方法用来计算的复杂度比较高,所以才有了下面的前向算法和反向算法。
首先介绍前向算法,前向算法有两种理解方式,分别是白板推导里面和徐亦达老师的采用的方式
下面是李航老师书中的例子,供大家理解。
下面是后向算法的推导:
下面是第二个问题,对于给定的观测序列O,用极大似然估计法估计模型的λ,使得该模型下观测概率P(O|λ)最大。求解λ最大的值时,含有隐变量。关于隐变量求极大似然估计法,要用EM算法。EM算法的推导详见这里这里。
下面就是第三个问题:已知λ和观测序列O,求对给定的观测序列条件概率P(I|O)的最大状态序列I=(i1,i2,...,iT)
采用维特比算法,主要用动态规划解决问题。这里就不说了。
参考资料:1>李航《统计机器学习方法》
2>机器学习-白板推到系列-隐马尔可夫模型
3>徐亦达机器学习:Hidden Markov Model 隐马尔可夫模型(HMM)【2015年版-全集】