隐马尔科夫模型
机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测。概率图模型提供了一种描述框架,将学习任务归结于计算变量的概率分布,在概率模型中,利用已知变量推测未知变量的分布称为推测。具体来说,假定所有关心的变量集合为Y,可观测变量的集合为O,其他变量的集合为R,“生成式”模型考虑联合概率分布P(Y,R,O),“判别式模型”考虑条件分布P(Y,R|O),给定以组观测变量值,推断就是由P(Y,R,O)或P(Y,R|O)得到条件概率分布P(Y|O)。
直接利用概率求和规则去消去变量R显然是不可行,因为即使每个变量仅有两种取值的简单问题,其复杂度也是,另一方面,属性变量之间往往存在复杂的联系。因此概率模型的学习,即基于训练来估计变量分布的参数往往相当困难。为了便于研究高效的推断和学习算法,需有一套能简洁紧凑地表达变量之间的关系。
概率图模型是一类用图表达变量相关关系的概率模型,它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的边表示变量间的概率相关关系,即“变量关系图”,根据边的性质不同,概率图模型大致可分为良率:第一类是使用有向无环图表示变量间的依赖关系,称为有向图模型或贝叶斯网;第二类是使用无向图表示变量间的相关关系,称为无向图模型或马尔科夫网。
隐马尔科夫模型(HMM)是结构最简单的动态贝叶斯网,这是一种著名的有向图模型,主要用于时序数据建模,在语音识别、自然语言处理等领域有广泛应用。
一、隐马尔科夫模型的基本概念
1.隐马尔科夫模型的定义
隐马尔科夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态的随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。隐藏的马尔科夫链随机生成的状态序列,称为状态序列。每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。
隐马尔科夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。
设是所有可能的状态的集合,V是所有可能的观测集合:
其中,N是可能的状态数,M是可能的观测数
是观测长度为T的状态序列,是对应的观测序列:
A是状态转移概率矩阵:
其中
是时刻处于状态的条件下载时刻转移到状态的概率
是观测概率矩阵:
其中
是初始状态概率向量:
其中
是时刻处状态的概率
隐马尔科夫模型由初始状态概率向量、状态转移概率矩阵和观测概率矩阵决定状态序列。其中决定状态序列,决定观测序列。因此,隐马尔科夫模型可以用三元符号表示。
称为隐马尔科夫三要素:
状态转态概率矩阵与初始状态概率向量确定了隐藏的马尔科夫链,生成不可观测的状态序列。观测概率矩阵确定了如何从状态生成观测,与状态序列综合确定了如何查产生观测序列。
隐马尔科夫模型作了两个基本假设:
- 齐次马尔科夫假设,假设隐藏的马尔科夫链在任意时刻t的状态值依赖于前一时刻的状态,与其他时刻的状态无关,也与时刻无关
- 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测及状态无关。
下面看一个隐马尔科夫的例子
盒子与球模型假设有4个盒子,每个盒子里都装有红、白两种颜色的球,盒子里的红、白球数由表给出
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
按照下面的方法抽球,产生一个球的颜色的观测序列
- 开始,从4个盒子里以等概率随机选取1个盒子,从这个盒子里随机抽出1个球,记录其颜色,放回:
- 然后,从当前盒子随机转移到下一个盒子,规则是:如果当前盒子1,那么下一个盒子一定是2;如果当前盒子是2或3,那么分别概率0.4或0.6,转移到左边或右边的盒子;如果当前盒子是4,那么各自以0.5的概率停留在盒子4或者转移到盒子3
- 确定转移的盒子后,再从这个盒子里随机抽取一个球,记录其颜色,放回
- 如此下去,得到球的颜色观测序列
在这个过程中,观测者只能观测到球的颜色序列,观测不到球是从哪个盒子里取出的,即观测不到盒子的序列。
盒子对应状态,状态集合是
球的颜色对应观测序列,观测的集合是
初始概率分布为
状态概率分布为
观测概率分布为
2.观测序列生成过程
输入:隐马尔科夫模型,观测序列长度T
输出:观测序列
- 按照初始状态分布产生状态
- 令
- 按照状态的观测概率分布生成
- 按照状态的状态转移概率分布产生状态,
- 令,如果,转步3,否则终止。
3.隐马尔科夫3个基本问题
- 概率计算问题。给定模型和观测序列,计算在模型下观测出现的概率
- 学习问题。已知预测序列,估计模型参数,使得在该模型下观测序列概率最大,即用最大似然估计的方法估计参数
- 预测问题,也称解码(decoding)参数。已知模型和观测序列,求给定观测序列条件概率最大状态序列。即给定观测序列,求最有可能的对应的状态序列
二、概率计算算法
1.前向算法
前向概率给定隐马尔科夫模型,定义到时刻t部分观测序列为且状态为的概率为向前概率,记作
可以递推地求得前向概率及观测序列概率
算法
输入:隐马尔科夫模型,观测序列
输出:观测序列概率
- 初值
- 递推,对,
- 终止
案例考虑盒子和球模型,状态集合,观测集合
设,试用前向算法计算
- 计算初值
- 递推计算
- 终止
2.后向算法
后向算法给定隐马尔科夫模型,定义在t时刻状态为的条件下,从的部分观测序列为的概率为后向概率,记作
可以引用递归的方法得到后向概率以及观测序列概率
算法
输入:隐马尔科夫模型,观测序列
输出:观测序列概率
- \beta_T(i) = 1,i =1,2,\dots,N
- 对 ,
利用前向概率和后向概率的定义可以将观测序列概率统一写成
3.一些概率与期望的计算
利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式
(1) 给定模型和观测,在时刻t处于状态的概率
记为
可以通过前向后向概率计算
由向前概率和向后概率定义可知
于是得到
(2).给定模型和观测O,在时刻t处于状态且时刻处于状态的概率
记作
可以通过前向后向概率基色
而
所以
(3).将和对对各时刻t求和可以得到一些有用的概率
- 在观测O下状态i出现的期望
- 在观测O下状态i转移的期望
- 在观测O下状态i转移到状态j的期望
三、学习算法
隐马尔科夫模型的学习,根据训练数据包括预测序列和对应的状态序列还是只有预测序列,可分别由监督学习和无监督学习实现。
1.监督学习方法
假设已给训练数据包含S个长度相同的观测序列和对应的状态序列,那么可以利用极大似然估计法来看估计隐马尔科夫模型的参数
(1)转移概率的估计
设样本中时刻处于状态时刻转移到状态j的频数为,那么状态状态转移的概率的估计是
(2)观测概率的估计
设样本中状态为并观测为的频数是,那么状态为j观测为k的概率的估计是
(3)初始状态概率的估计为S个样本初始状态为的频率
由于监督学习需要使用标注的训练数据,而人工标注训练数据往往代价很高,有时就会利用无监督学习方法
2.Baum-Welch算法
假设给定训练数据只包含S个长度为T的观测序列
而没有对应的状态序列,目标是学习隐马尔科夫模型的参数。我们将观测序列数据看作观测数据O,状态序列数据看作不可观测的隐数据I,那么隐马尔科夫模型事实上是一个含有一个隐变量的概率模型
它的参数学习可由EM算法实现
(1)确定完全数据的对数似然函数
所有观测数据写成,所有隐数据写成。完全数据是。完全数据的对数似然函数是
(2)EM算法的E步,求Q函数
其中,是隐马尔科夫模型参数的当前估计值,是要极大化隐马尔科夫模型参数
于是函数可以写成
式中求和项都是对所有数据的序列总长度T进行的。
(3)EM算法的M步:极大化函数求模型参数A,B,
由于要极大化式(1)中但丢地出现在3个项中所以只需对各项分别极大化
式(1)的第一项可以写成
注意到满足约束条件,利用拉格朗日橙子法,写出拉格朗日函数
对其求偏导数并令结果为0
有
对i求和得到
则
式(1)的第二项可以写成
应用约束条件的拉格朗日乘子法可以求出
3.式(1)的第3项为
同样用拉格朗日乘子法,约束条件,注意,只有在时的偏导才不为0,以表示
四、预测算法
1.近似算法
近似算法的想法是,在每个时刻t选择在该时刻最有可能出现的状态,从而得到一个状态序列,并将它作为预测的结果
给定隐马尔科夫模型和观测序列O,在时刻t处于状态的概率是
在每一时刻t最有可能的状态是
从而得到状态序列
近似算法的一个优点是计算简单,其缺点是不能保证预测状态整体上是最有可能的状态序列,因为预测的状态序列可能有实际不发生的部分。事实上,上述办法得到的状态序列中可能存在转移概率为0的相邻状态,即对某些时。尽管如此,近似算法仍然是有用的
2.维特比算法
维特比算法实际上是用动态规划(dynamic programming)解隐马尔科夫模型预测问题,即用动态规划求解概率最大路径(最优路径)。这时一条路径对应着一个状态序列。
根据动态规划原理,最优路径有这样的特性:如果最优路径在时刻t通过结点,那么这一条路径从结点到终点的部分路径,对于从到的所有可能的部分路径来说,必须是最优的。因为假如不是这样,那么从到就有另一条更好的部分路径存在,如果把它和从到达的部分路径连起来,就会形成一条比原来的路径更优的路径,这是矛盾的。依据这一原理,我们只需从时刻t=1开始,递推地计算时刻t状态为各部分路径的最大概率,直至得到时刻t=T状态为i各条路径的最大概括。时刻t=T的最大概率即为最优路径的概率,最优路径的终结点也同时得到,之后,为了找出最优路径的各个结点,从终结点开始,由后向前逐步得到结点,得到最优路径。这就是维特比算法
维特比算法
输入:模型和观测序列
输出:最优路径
1.初始化
2.递推,对
3.终止
4.最优路径回溯,对
求得最优路径