隐马尔科夫模型

引言

隐马尔可夫模型是关于时许序列的概率模型。是由一个隐藏的马尔科夫链随机生成不可观测的状态序列,然后由状态序列生成一个观测序列的过程。

每个状态生成一个观测,同时每个状态会转移到下一个状态。因此马尔科夫过程有两个关键的序列,一个是状态序列,一个是观测序列。

markov

上图就是一个标准的马尔科夫过程的观测输出以及状态转移过程。

隐马尔科夫模型由初始概率分布,转移状态矩阵概率分布,观测状态概率矩阵确定。

假设我们的状态集合为

观测集合为

上面的两个集合是观测和状态的取值集合。

假设我们的markov过程的状态序列为

观测序列为

我们可以写出状态的转移矩阵,其中,

也就是从时间点状态转移到时间点状态的概率。

我们也可以写出观测矩阵,其中,

也就是从时间点状态的观测值为的概率。

再加上我们的初始概率,其中

因此本质上我们的markov过程受如下的参数控制:

隐markov过程需要满足的假设条件

1) 齐次马尔科夫假设

也就是时刻的状态只决定于时刻的状态,跟其他时刻的状态以及观测无关。

2) 观测独立性假设

也就是某一时刻的观测只与这一时刻的状态有关,跟其他时刻的状态以及观测无关。

不满足这两个朴素的假设条件,后面的一切推导都是错误的。

隐马尔可夫模型的三个基础问题

1) 概率计算

即给定参数和观测,计算,即某一观测序列出现的概率问题。

2) 学习问题

即已知,估计参数,即参数估计问题。

3) 预测问题

已知和观测,求使最大的状态序列,也就是能得到当前观测的最可能的状态序列。

下面我们就这三个问题,一个一个的解决

概率计算问题

概率计算就是计算,给定了,这个计算就是一个简单的算数问题。那么我们来看下直接计算:

直接计算

首先第一步,计算状态序列为时的概率为:

当状态序列为时,观测序列为时的概率为:

根据条件概率,可以得到:

对所有可能的状态求和,可以得到:

这样计算是可以的,但是这个计算量太大了,是阶的。

因此引入了前向算法和后向算法。这两个算法能有效的降低计算复杂度。

前向算法

首先定义前向概率:

前向概率表示时刻,部分观测序列为, 且时刻状态为的概率

前向算法:

初始值:

递推:

终止:

因此前向算法的本质就是计算前向概率,然后将其递推到全局

后向算法

首先定义后向概率

后向算法:

初始:

递推: 对于

终止:

后向算法的递推图示:

DecisionTree

前向后向概率表示

利用前向后向概率可以得到:

推导如下:

表示观测为,状态由转到的概率

表示观测为,状态由转到的概率

则则 表示观测为,状态由转到的概率

对状态和状态求和,就可以得到

前向后向概率的几个特殊的统计值

  1. 定义给定参数的情况下,时刻处于状态的概率为:

则:

由前向概率和后向概率

可以得到:

于是可以得到:

  1. 定义给定参数的情况下,时刻处于状态且时刻处于状态的概率为:

而:

所以有:

这里我们之所以这么费事的要推导出这两个概率,是为了后面的预测算法做铺垫,后面会用到

参数估计

监督学习

上面我们推导了概率计算问题,那么下面我们就要来面对一个很机器学习的问题了,参数估计。给定数据,估计分布,这个是统计机器学习的主要内容。

首先如果我们已经知道了状态序列,那么这个参数估计就好办多了,直接统计值就行了,这种属于监督学习。

如果已知状态序列和观测序列为

则状态转移概率的估计:

其中为时刻处于状态且时刻转移到状态的频数

则观测概率的估计:

其中为状态观测为的频数。

可是现实生活中哪有这样好的事情,我们最长面对的情况是只拿得到观测,而拿不到状态,这时,我们看怎样处理

非监督学习

如果已知观测序列为,状态序列未知,估计参数。我们发现这正好是EM算法的能力啊,只要将状态作为隐变量,就可以用EM算法来解决这个问题了。

首先,我们知道

根据EM算法的步骤,首先我们需要写出完全数据的对数似然函数

其中跟最优化无关,因此可以省略掉,因此完全函数可以写为:

而:

因此函数可以写为:

E步完成后,就该M步的了:
由于我们需要极大话的三个项,分别在上面的三个分式中,因此单独极大化上面的分式即可。

第一项:

参数满足的约束条件为,因此利用拉格朗日乘子法,可以得到拉格朗日函数

对其求偏导并令其结果为0,可以得到:

得到:

对i求和,可得:

带如到上式有:

同理,可以得到另外两项的估计,如下所示:

如果引入我们之前的统计量

那么参数估计可以写为:

预测问题

近似算法

所谓近似算法,就是每个时刻选择最优可能出现的状态,将她作为这个时刻的结果。

给定,有

则,每个时刻的最优可能的状态:

进而得到状态序列

近似算法简单,易于计算,但是这个不是最优的结果。其实我们的预测算法本质上就是一个最优路径的问题,因此可以引入动态规划的原理来解决,这就是Viterbi算法

Viterbi算法

输入:

初始化:

计算

更新参数

终止

最优路径回溯

总结

上面就是隐马尔可夫模型的三个基本问题以及相应的求解方式。本质上讲,隐马尔可夫模型比较简单,但是也比较常用,在分词,语音识别方面有着广泛的应用,不过由于深度学习横空出世,单纯的隐马尔科夫模型略显无奈啊。

显示 Gitment 评论