1. 什么是HMM模型
HMM模型,又叫隐马尔可夫模型,主要用于求解序列的隐状态。HMM是一个生成模型,通过隐状态之间的转移矩阵和隐状态到观测状态的发射矩阵决定隐状态和观测状态的联合分布。HMM模型有三个假设,第一个是观测独立性假设,序列每个时刻的观测状态仅与序列在该时刻的隐状态有关,即
第二个是每个隐状态仅与上一个时刻的隐状态相关,即:
第三个假设是无论在序列哪一个时刻,上述两个假设的条件分布都是不变的。在这三个假设中,第一个假设对应到HMM模型的发射矩阵,第二个假设对应到HMM模型的转移矩阵,第三个假设使得整个序列共享发射矩阵和转移矩阵的参数。HMM模型可以画成下面一幅概率图模型:
其中每一条有向边,表示两个量之间的依赖关系。
2. HMM模型的求解
HMM模型有三大问题:
(1) 已知初始隐状态分布$\pi$,转移矩阵$A$和发射矩阵$B$,观测序列$o_1,o_2,…,o_t$,如何求得最有可能的隐状态$s_1,s_2,…s_t$。
(2) 已知初始隐状态分布$\pi$,转移矩阵$A$和发射矩阵$B$,观测序列$o_1,o_2,…,o_t$,如何求该观测序列出现的概率$P(O|\pi,A,B)$。
(3) 已知一堆观测序列,如何求初始隐状态分布$\pi$,转移矩阵$A$和发射矩阵$B$的参数值,使得$P(O|\pi,A,B)$可以达到最大。
问题1
问题一又称为解码问题,将观测序列$O$解码成隐状态序列$S$,问题一是要求:
因为有:
所以又等价于求:
我们已知:
我们可以构建状态$F[i,j]$表示在时刻$i$隐状态为$j$的最大概率,则有状态转移方程:
这么转移方程表示从上一时刻的状态$k$转移到这一时刻的状态$j$可以得到最大的概率:
最终我们可以知道解码求得的$S=s_1,s_2,…s_t$的最大概率值等于$\max_jF[t,j]$。如果每一步使用一个数组$Q[i,j]$存储这个概率值由上一个时刻哪个状态转移过来的,那么从$Q[t,j]$开始往回找,就可以找到使得概率值最大的隐状态$S$了,这个$S$就是解码的答案。这个动态规划算法的时间复杂度是$O(序列长度*隐状态种类^2)$,该算法也叫作维比特算法。
问题2
问题二又称为评估问题,评估观测序列的出现概率,问题二是要求:
所以可以设状态$F[i,j]$表示隐状态序列长度为$i$且第$i$个时刻的隐状态等于$j$的概率,即:
所以有:
最后的答案为:
这就是前向算法的过程,和解码问题不同,前向算法在动态规划过程不是求最大值而是求和。然后还可以从后往前分析得到后向算法。当需要求中间某个观测状态是某个值时的概率时,需要结合前向后向算法。
问题3
问题三又称为学习问题,学习HMM模型的参数,问题三是要求:
可以看到这是要求最大似然,所以可以按照一般的求最大似然的方法去求解参数。注意到:
$S$可以看作是隐状态,所以可以使用EM算法对参数进行求解。在求解过程中,因为参数是有约束的,比如转移概率的和等于1等等,所以还需要用到拉格朗日乘子法。最终,结合EM算法和拉格朗日乘子法就可以求出较好的$\lambda$了。
3. HMM模型杂谈
HMM模型的优点是模型简单,容易求解;缺点是HMM模型需要满足三个假设,即观测独立性假设,齐次性假设和马尔可夫假设。如果不符合这些假设,HMM模型就不适用了。然后HMM模型是一个生成模型,数据的内部联系简单,如果数据的内部联系复杂,或数据样本数目少则不适合使用HMM模型。