隐马尔可夫模型(HMM)是用于标注问题的统计学习模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。隐马尔可夫模型在语音识别、自然语言处理、生物信息、模式识别等领域有着广泛的应用。
隐马尔科夫模型的定义
隐马尔可夫模型是关于时序的概率模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看做是一个时刻。
隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的形式定义如下:
设是所有可能的状态的集合,是所有可能的观测的集合。
其中,是可能的状态数,是可能的观测数。
是长度为的状态序列,是对应的观测序列。
是状态转移概率矩阵:
其中
是在时刻处于状态的条件下在时刻转移到状态的概率。
是观测概率矩阵:
其中
是在时刻处于状态的条件下生成观测的概率。
是初始状态概率向量:
其中
是时刻处于状态的概率。
隐马尔可夫模型由初始状态概率向量,状态转移概率矩阵和观测概率矩阵决定。和决定状态序列,决定观测序列。因此隐马尔可夫模型可以用三元符号表示,即
从定义可知,隐马尔可夫模型做了两个基本假设:
(1)齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻无关。(当前状态只依赖上个状态,而与再前面的状态无关)
(2)观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。(每个时刻的观测只依赖于当前时刻的状态)
观测序列的生成过程
根据隐马尔可夫模型定义,可以将一个长度为的观测序列的生成过程描述如下:
输入:隐马尔可夫模型,观测序列长度;
输出:观测序列。
(1)按照初始状态分布产生状态
(2)令
(3)按照状态的观测概率分布生成
(4)按照状态的状态转移概率分布产生状态,
(5)令;如果,转步(3);否则终止。
隐马尔可夫模型的3个基本问题
(1)概率计算问题。给定模型和观测序列,计算在模型下观测序列出现的概率。
(2)学习问题。已知观测序列,估计模型参数,使得在该模型下观测序列概率最大。即用极大似然估计的方法估计参数。
(3)预测问题,也称为解码问题。已知模型和观测序列,求对给定观测序列条件概率最大的状态序列。即给定观测序列,求最有可能的对应状态序列。
下面针对这三个问题给出解决问题的算法。
概率计算算法
解决的是第一个问题:概率计算问题。给定模型和观测序列,计算在模型下观测序列出现的概率。通常的计算方法有直接计算法、前向-后向算法。
直接计算法
这个算法通过列举所有可能的长度为的状态序列,求各个状态序列与观测序列的联合概率,然后对所有可能的状态序列求和,得到。这个算法理论上可行,但是实际上计算量太大,所以一般不用。
状态序列的概率
对于固定的状态序列,观测序列的概率是
和同时出现的联合概率为
然后对所有可能的状态序列求和,得到观测序列的概率,即
计算复杂度是阶的。
前向算法
首先定义前向概率。
前向概率
给定隐马尔可夫模型参数,定义到时刻部分观测序列为且时刻状态为的概率为前向概率,记做
根据可以从递推得到各个时刻前向概率,最后得到。
观测序列概率的前向算法
输入:隐马尔科夫模型参数,观测序列;
输出:观测序列概率
(1)初值
(2)递推,对,
(3)终止
算法结束。
在步骤(2)中
其中是状态的状态总数。中括号内对当前状态的所有上个状态进行了全部的列举,并乘上了状态转移概率,所以计算的是概率。最后对联合概率求边缘概率,列举状态个所有可能取值,得到。由于是通过递归计算的,每一步都用到了上一步的结果,所以大大减少了计算量。
后向算法
后向算法与前向算法相反,是从序列最后向前递归的,首先定义后向概率。
后向概率
给定隐马尔可夫模型参数,定义在时刻状态为的条件下,从到的部分观测序列为的概率为后向概率,记做
同样可以用递推的方法求得每个时刻的后向概率及观测序列概率。
观测序列概率的后向算法
输入:隐马尔科夫模型参数,观测序列;
输出:观测序列概率
(1)
(2)对
(3)
算法结束。
步骤(1)中概率是直接定义的。
对于步骤(2)
因为
所以
列举时刻所有的状态
令,即可得到步骤(2)中的递推公式(3)。
由前向概率的定义和后向概率的定义,可以得到观测概率的公式
当和时,分别为公式(4)和公式(2)。
一些概率和期望值的计算(用于预测问题)
1.给定模型和观测,在时刻处于状态的概率,记
推导:
2.给定模型和观测,在时刻处于状态且在时刻处于状态的概率,记
推导略。
3.其他一些期望:
(1)在观测下状态出现的期望值
(2)在观测下由状态转移的期望值
(2)在观测下由状态转移到状态的期望值
学习算法
解决的是第二个问题:学习问题。已知观测序列,估计模型参数,使得在该模型下观测序列概率最大。即用极大似然估计的方法估计参数。
如果知道状态序列,那么只需要通过监督学习的方法,就可以得到模型的参数,方法略。但是情况通常是不知道状态序列,这时候就需要通过无监督学习的方式,估计模型参数。无监督学习的算法叫做Baum-Welch算法。
Baum-Welch算法
隐马尔可夫模型是含有隐变量的模型,可以通过EM算法进行参数估计,EM算法在隐马尔可夫模型中的具体应用就是Baum-Welch算法。
(1)确定完全数据的对数似然函数
所有观测数据写成,所有隐数据写成,完全数据是。完全数据的对数似然函数是。
(2)EM算法的E步:求函数
其中,是隐马尔可夫模型参数的当前估计值,是要极大化的隐马尔可夫模型参数。
所以,
3.EM算法的M步:极大化函数求模型参数
极大化可以通过对公式(7)的三部分分别极大化实现,具体为对参数求偏导等于0,过程略。得到参数的更新公式:
分子中是对观测到的时刻求和。
Baum-Welch算法的描述
输入:观测数据;
输出:隐马尔可夫模型参数
(1)初始化
对,选取,,,得到模型。
(2)递推,对
右端各值按观测和模型计算。式中
(3)终止。得到模型参数
预测算法
解决的是第二个问题:预测问题,也称为解码问题。已知模型和观测序列,求对给定观测序列条件概率最大的状态序列。即给定观测序列,求最有可能的对应状态序列。
近似算法
每个时刻取最有可能的状态。根据前面定义,为给定模型和观测,在时刻处于状态的概率:
则每个时刻最有可能的状态为
该算法的缺点是没有考虑整个序列,如果存在转移概率,序列是不可能出现的,但是依然会存在这样的预测。尽管如此,近似算法仍然是有用的。
维特比算法
维特比算法通过动态规划解隐马尔可夫模型预测问题。
首先导入两个变量和。定义在时刻状态为的所有单个路径中概率最大值
由定义可得变量的递推公式
定义在时刻状态为的所有单个路径中概率最大的路径的第个结点为
维特比算法的思路就是通过从时刻递推到时刻,得到概率最大状态序列的概率 ,同时在每个时刻通过记录路径。在时刻,得到概率最大的之后,通过得到概率最大路径的第个结点,往前推到时刻,最终得到完整状态序列。
维特比算法的描述
输入:模型和观测;
输出:最优路径。
(1)初始化
(2)递推。对
(3)终止
(4)最优路径回溯。对
求得最优路径。