机器学习之隐马尔科夫

一、序言

重新复习隐马尔科夫模型,重点是HMM模型的三个问题及前向、后向和维特比算法。

二、基本概念

2.1 定义

definition

隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的形式定义如下:
设Q是所有可能的状态的集合,V是所有可能的观测的集合。

其中,是可能的状态数,是可能的观测数。
设是长度为的状态序列,是对应的观测序列:

是状态转移概率矩阵:

其中,

是在时刻处于状态的条件下在时刻转移到状态的概率。
是观测概率矩阵:

其中,

是在时刻处于状态的条件下生成观测的概率。
是初始状态概率向量:

其中,

是初始时刻处于状态的概率。
definition

2.2 例子

举个例子,当观察到屋外艳阳高照,那么肯定是晴天;若是半乌云密布,则是阴天;若是电闪雷鸣,则是雨天。艳阳高照,乌云密布,电闪雷鸣是我们能直接观察到的,对应着上面定义的观测序列。
而它们对应的天气状态分别是晴天、阴天和雨天,则是状态序列,因为我们先观察到外边的环境是艳阳高照,乌云密布,电闪雷鸣,然后再推测出是晴天、阴天还是雨天。
如下图所示,上面的是一条隐马尔科夫链,下面对应着其随机生成的状态序列。


2.2.1.png

如下图所示,是一个完整的 HMM 模型。

image

状态集合 ,其中,,。
观测集合 ,其中,,。
状态转移概率矩阵 :
2.2.3.png

观测概率矩阵 :

2.2.4.png

初始状态概率 :

2.2.5.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 后向算法

其实后向算法和前向算法类似,只不过是从后往前递推。

image

后向概率 如下图所示:
4.1.3.2.png

首先,定义最后时刻的 。
然后 ,对于 ,后向概率 就等于 时刻的状态 转移到时刻 的状态 的概率 × 时刻状态 对应的观测状态 的概率 × 时刻的后向概率 。即:

如下图所示:

4.1.3.3.png

最后,观测概率 。
其实,观测概率 还可以这么写:

是不是其实很好理解。

4.1.3 一些概率与期望的计算

利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。

  1. 给定模型 和观测 ,在时刻 处于状态 的概率。记

    由前向概率 和后向概率 定义可知:

    于是得到:
  2. 给定模型 和观测 ,在时刻 处于状态 的概率。同时在时刻 处于状态 的概率,记



    所以

    4.1.3.png

4.2 学习算法

目的

  1. 给定观测序列 和状态序列 ,求HMM 模型 的三个参数。
  2. 给定观测序列 ,求HMM 模型 的三个参数。

解决方法

  1. 监督算法
  2. 算法

4.2.1 监督算法

image

第二步求观测概率应该是 ,因为懒,就直接截图了。

4.2.2 Baum-Welch 算法

image

现在已经知道的是观测数据 , 设隐状态数据为 ,那么完全数据是 。完全数据的对数似然函数是 。

既然 算法使用的就是 算法,那么就要走两个步骤:
(1) 步
求出联合分布 基于条件概率 的期望,其中 为 HMM 模型参数的当前估计值, 为极大化的 HMM 模型参数。
(2) 步
最大化这个期望,得到更新的模型参数λ。接着不停的进行EM迭代,直到模型参数的值收敛为止。

公式推导
(1) 步:求 函数
根据 的 函数定义,即这里要求的联合分布的期望为:

表示上次求出的参数与观测数据的联合概率,没有什么影响,所以:



所以
Q(\lambda,\overline \lambda) = \sum_{I}P(I,O|\overline \lambda) [ln \pi_{i_{1}} + ln(a_{i_{1}i_{2}}+...+a_{i_{T-1}i_{T}} + ln(b_{i_{1}o_{1}}+...+b_{i_{T}o_{T}}))] \\ = \underbrace{ \sum_{I} ln \pi_{i_{1}} P(I,O|\overline \lambda)}_{式1} + \underbrace{ \sum_{I} (\sum_{t=1}^{T-1} ln a_{i_{t}i_{t+1}}) P(I,O|\overline \lambda)}_{式2} + \underbrace{ \sum_{I} (\sum_{t=1}^{T} ln b_{i_{t}o_{t}}) P(I,O|\overline \lambda)}_{式3}

(2) 步:极大化 ,求模型参数
 1)求 :
 既然是求极值,肯定是要求导了。对于 来说,满足约束条件 。现在就变成了带约束条件的求极值,直接上拉格朗日乘子法。
 式 1 可以写成:
 
 拉格朗日函数:
 
 首先把求和 去掉,只对单个的 求偏导并等于 0
 
 等价于:
 
 然后再添上对 的求和 ,可得到:
 
 带入到第三项公式,可得:
 

2)求 :
 式 2 可以写成:
 
 同样有约束条件 ,最后可以得到:
 
 3)求 :
 式 3 可以写成:
  
 同样有约束条件 ,要注意的是只有在 时 对 的偏导数才不为 0,以 表示,最后可以得到:
 

参数估计公式
得到参数后,可以用 4.1.3 节的 表示:

4.2.2.2.png

算法总结

image

4.3 预测算法

目的:给定 HMM 模型 和观测序列 ,求在该观测序列下,最可能对应的状态序列 ,也就是最大化 。
解决Viterbi 算法。
其实维特比算法就用动态规划的方法求概率最大路径,计算过程中的每条路径都对应着一个状态序列。计算过程中将最优路径经过的点都保存下来。得到最优路径后,由后向前逐步求得最优结点,这就是维特比算法。
过程
因为计算过程很简单,就直接给出书中的截图了。
首先导入两个变量 和 。定义在时刻 状态为 的所有单个路径 中概率最大值为:

image

image

过程是不是很好理解?如果还不好理解,就继续看个例子。
例子
image

整个计算过程如下图所示,
image

image

image

Reference

统计学习方法 李航

你可能感兴趣的:(机器学习之隐马尔科夫)