HMM 前向算法(Forward Algorithm)详细解释参考: http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1
http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2
http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3
http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-4
后向算法(Backward Algorithm详细解释参考:http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-1
http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-2
http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3
http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-4
http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-5
HMM模型参数解是HMM模型使用中的最复杂的一个问题。
HMM模型参数求解概述
HMM模型参数求解根据已知的条件可以分为两种情况。
第一种情况较为简单,就是我们已知D个长度为T的观测序列和对应的隐藏状态序列,即是已知的,此时我们可以很容易的用最大似然来求解模型参数。
假设样本从隐藏状态转移到的频率计数是,那么状态转移矩阵求得为:
,
假设样本隐藏状态为且观测状态为的频率计数是,那么观测状态概率矩阵为:
,
假设所有样本中初始隐藏状态为的频率计数为C(i),那么初始概率分布为:
可见第一种情况下求解模型还是很简单的。但是在很多时候,我们无法得到HMM样本观察序列对应的隐藏序列,只有D个长度为T的观测序列,即是已知的,此时我们能不能求出合适的HMM模型参数呢?这就是我们的第二种情况,也是我们本文要讨论的重点。它的解法最常用的是鲍姆-韦尔奇算法,其实就是基于EM算法的求解,只不过鲍姆-韦尔奇算法出现的时代,EM算法还没有被抽象出来,所以我们本文还是说鲍姆-韦尔奇(Baun-Welch)算法。
Baum-Welch算法是为了解决HMM的参数估计问题而提出的,而且是没有标注也就是HMM的状态序列未知的参数估计问题。具体来说,就是已知观测序列O=(o1,o2,...,oT),估计模型参数λ=(A,B,π),使得在该模型下观测序列概率P(O|λ)最大。由于状态序列未知,因此这可以看做是一个含有隐变量的参数估计问题,解决这一问题的经典算法就是EM算法。Baum-Welch算法就是EM算法在隐马尔科夫模型学习中的具体体现。下面简单叙述一下该算法。
Baun-Welch算法原理
鲍姆-韦尔奇算法原理既然使用的就是EM算法的原理,那么我们需要在E步求出联合分布基于条件概率的期望,其中为当前的模型参数,然后再M步最大化这个期望,得到更新的模型参数λ。接着不停的进行EM迭代,直到模型参数的值收敛为止。
首先来看看E步,当前模型参数为, 联合分布基于条件概率的期望表达式为:
在M步,我们极大化上式,然后得到更新后的模型参数如下:
通过不断的E步和M步的迭代,直到收敛。下面我们来看看鲍姆-韦尔奇算法的推导过程。
Baun-Welch算法的推导
我们的训练数据为,其中任意一个观测序列,其对应的未知的隐藏状态序列表示为:.
首先看鲍姆-韦尔奇算法的E步,我们需要先计算联合分布的表达式如下:
我们的E步得到的期望表达式为:
在M步我们要极大化上式。由于,而是常数,因此我们要极大化的式子等价于:
我们将上面的表达式带入我们的极大化式子,得到的表达式如下:
我们的隐藏模型参数,因此下面我们只需要对上式分别对A,B,Π求导即可得到我们更新的模型参数.
首先我们看看对模型参数Π的求导。由于Π只在上式中括号里的第一部分出现,因此我们对于Π的极大化式子为:
由于还满足,因此根据拉格朗日子乘法,我们得到要极大化的拉格朗日函数为:
其中,为拉格朗日系数。上式对求偏导数并令结果为0, 我们得到:
令i分别等于从1到N,从上式可以得到N个式子,对这N个式子求和可得:
从上两式消去,得到的表达式为:
由前向概率的定义可得:
因此最终我们在M步的迭代公式为:
现在我们来看看A的迭代公式求法。方法和Π的类似。由于A只在最大化函数式中括号里的第二部分出现,而这部分式子可以整理为:
由于还满足。和求解类似,我们可以用拉格朗日子乘法并对求导,并令结果为0,可以得到的迭代表达式为:
给定模型λ和观测序列O,在时刻t处于状态,且时刻t+1处于状态的概率记为:
而可以由前向后向概率来表示为:
从而最终我们得到的表达式如下:
因此可得表达式:
有了的迭代公式,我们就可以迭代求解HMM模型参数了。
Baun-Welch算法流程总结
这里我们概括总结下鲍姆-韦尔奇算法的流程。
输入: D个观测序列样本
输出:HMM模型参数
1)随机初始化所有的
2) 对于每个样本,用前向后向算法计算
3) 更新模型参数:
4) 如果的值已经收敛,则算法结束,否则回到第2)步继续迭代。
以上就是Baun-Welch算法的整个过程。