一、序言
重新复习隐马尔科夫模型,重点是HMM模型的三个问题及前向、后向和维特比算法。
二、基本概念
2.1 定义
definition隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的形式定义如下:
设Q是所有可能的状态的集合,V是所有可能的观测的集合。
其中,是可能的状态数,是可能的观测数。
设是长度为的状态序列,是对应的观测序列:
是状态转移概率矩阵:
其中,
是在时刻处于状态的条件下在时刻转移到状态的概率。
是观测概率矩阵:
其中,
是在时刻处于状态的条件下生成观测的概率。
是初始状态概率向量:
其中,
是初始时刻处于状态的概率。
definition
2.2 例子
举个例子,当观察到屋外艳阳高照,那么肯定是晴天;若是半乌云密布,则是阴天;若是电闪雷鸣,则是雨天。艳阳高照,乌云密布,电闪雷鸣是我们能直接观察到的,对应着上面定义的观测序列。
而它们对应的天气状态分别是晴天、阴天和雨天,则是状态序列,因为我们先观察到外边的环境是艳阳高照,乌云密布,电闪雷鸣,然后再推测出是晴天、阴天还是雨天。
如下图所示,上面的是一条隐马尔科夫链,下面对应着其随机生成的状态序列。
2.2.1.png
如下图所示,是一个完整的 HMM 模型。
状态集合 ,其中,,。
观测集合 ,其中,,。
状态转移概率矩阵 :
2.2.3.png
观测概率矩阵 :
初始状态概率 :
以上数据是随便写的。
2.3 基本假设
image三、三个问题
image只看这个可能有点晦涩,下面就例子说的通俗一下:
3.1 概率计算问题
评估问题,即概率计算问题,是三个问题中最简单的。给定 HMM 模型 ,也就是已经知道状态转移概率矩阵 、观测概率矩阵 和初始状态概率 ,同时给出观测序列 ,求在该 HMM 模型下这个观测序列生成的概率。例如求接下来三天的观测天气是(阴天,雨天,晴天)的概率。解决算法:前向-后向算法。
3.2 学习问题
学习问题是三个问题中最复杂的一个。这个问题中只给出观测序列 ,让求 HMM 模型 的三个参数: 、 和 。例如,给出观测天气是(阴天,雨天,晴天),根据观测序列求一个 HMM 模型。解决算法: 算法(EM算法)。
3.3 预测问题
预测问题,也称为解码问题。给定 HMM 模型 和观测序列 ,求在该 HMM 模型下最有可能生成这个观测序列的隐状态序列。例如,观测天气是(阴天,雨天,晴天),求最有可能对应该观测序列的状态序列是(艳阳高照,乌云密布,电闪雷鸣),还是(乌云密布,电闪雷鸣,艳阳高照),或者是其他的某个状态序列。解决算法: 算法(一种动态规划)。
四、三个问题解决算法
4.1 概率计算算法
目的:给定 HMM 模型 和观测序列 ,求在该HMM 模型下生成该观测序列的概率。
4.1.1 直接计算法(暴力法)
首先,在给定 HMM 模型下,生成 一个 隐状态序列 的概率为:
然后,在该状态序列,生成对应的观测序列 的改立为:
最后,在给定 HMM 模型下,生成状态序列 和观测序列 的联合概率为:
综上是 HMM 模型生成一个状态序列,再生成观测序列的概率。只要对所有不同的状态序列 求和,就是要求的给定观测序列的概率:
使用该算法原理简单,但是计算量巨大。时间复杂度:。
4.1.2 前向算法
4.1.2.1 详解
image前向概率 如下图所示:
image
其实,前向算法可以看做是动态规划。
注意看呦, 这不就是 暴力法中第三步 求的状态序列 和观测序列 的联合概率吗?
我们只要把 时刻中所有状态序列 做累加,然后乘上 时刻 对应的观测概率,即 ,就得到 时刻的状态序列 和观测序列 的联合概率,即前向概率 。
如下图所示:
4.1.2.1.3.png
所以,只要计算出 时刻的前向概率 ,往后依次递推就可以了。例如 ,。
综上:
4.1.2.1.4.png
4.1.2.2 例子
4.1.2.2.png观测集合为:
状态集合为:
观测序列为:
状态转移概率矩阵为 :
第 行表示选择第 个盒子,第 列表示转移到第 个盒子, 比如: 表示上一次选择第二个盒子,这次选择第三个盒子的概率为 0.2。
观测概率矩阵 :
第 行表示选择的是第 个盒子,第 列表示从该盒子取到 号球, 比如: 表示从第二个盒子取出球的概率为 0.7。
(1) 计算初值
时刻取出红球,隐状态是盒子1的概率:
时刻取出红球,隐状态是盒子2的概率:
时刻取出红球,隐状态是盒子3的概率:
(2) 递推计算
时刻取出白球,隐状态是盒子1的概率:
时刻取出白球,隐状态是盒子2的概率:
时刻取出白球,隐状态是盒子3的概率:
(3) 递推计算
时刻取出红球,隐状态是盒子1的概率:
时刻取出红球,隐状态是盒子2的概率:
时刻取出红球,隐状态是盒子2的概率:
(4) 终止
4.1.3 后向算法
其实后向算法和前向算法类似,只不过是从后往前递推。
后向概率 如下图所示:
4.1.3.2.png
首先,定义最后时刻的 。
然后 ,对于 ,后向概率 就等于 时刻的状态 转移到时刻 的状态 的概率 × 时刻状态 对应的观测状态 的概率 × 时刻的后向概率 。即:
如下图所示:
最后,观测概率 。
其实,观测概率 还可以这么写:
是不是其实很好理解。
4.1.3 一些概率与期望的计算
利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
- 给定模型 和观测 ,在时刻 处于状态 的概率。记
由前向概率 和后向概率 定义可知:
于是得到:
- 给定模型 和观测 ,在时刻 处于状态 的概率。同时在时刻 处于状态 的概率,记
而
所以
4.1.3.png
4.2 学习算法
目的:
- 给定观测序列 和状态序列 ,求HMM 模型 的三个参数。
- 给定观测序列 ,求HMM 模型 的三个参数。
解决方法:
- 监督算法
- 算法
4.2.1 监督算法
image第二步求观测概率应该是 ,因为懒,就直接截图了。
4.2.2 Baum-Welch 算法
image现在已经知道的是观测数据 , 设隐状态数据为 ,那么完全数据是 。完全数据的对数似然函数是 。
既然 算法使用的就是 算法,那么就要走两个步骤:
(1) 步
求出联合分布 基于条件概率 的期望,其中 为 HMM 模型参数的当前估计值, 为极大化的 HMM 模型参数。
(2) 步
最大化这个期望,得到更新的模型参数λ。接着不停的进行EM迭代,直到模型参数的值收敛为止。
公式推导:
(1) 步:求 函数
根据 的 函数定义,即这里要求的联合分布的期望为:
表示上次求出的参数与观测数据的联合概率,没有什么影响,所以:
而
所以
(2) 步:极大化 ,求模型参数
1)求 :
既然是求极值,肯定是要求导了。对于 来说,满足约束条件 。现在就变成了带约束条件的求极值,直接上拉格朗日乘子法。
式 1 可以写成:
拉格朗日函数:
首先把求和 去掉,只对单个的 求偏导并等于 0:
等价于:
然后再添上对 的求和 ,可得到:
带入到第三项公式,可得:
2)求 :
式 2 可以写成:
同样有约束条件 ,最后可以得到:
3)求 :
式 3 可以写成:
同样有约束条件 ,要注意的是只有在 时 对 的偏导数才不为 0,以 表示,最后可以得到:
参数估计公式:
得到参数后,可以用 4.1.3 节的 表示:
算法总结:
4.3 预测算法
目的:给定 HMM 模型 和观测序列 ,求在该观测序列下,最可能对应的状态序列 ,也就是最大化 。
解决:Viterbi 算法。
其实维特比算法就用动态规划的方法求概率最大路径,计算过程中的每条路径都对应着一个状态序列。计算过程中将最优路径经过的点都保存下来。得到最优路径后,由后向前逐步求得最优结点,这就是维特比算法。
过程:
因为计算过程很简单,就直接给出书中的截图了。
首先导入两个变量 和 。定义在时刻 状态为 的所有单个路径 中概率最大值为:
image
过程是不是很好理解?如果还不好理解,就继续看个例子。
例子:
image
整个计算过程如下图所示,
image
image
image
Reference
统计学习方法 李航
网友评论