初学者也能看懂的隐马尔科夫模型介绍
时间:2023-08-26 14:37:02
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
隐马尔科夫模型是(hidden Markov model,HMM)它是一种统计学习模型,可以用来标记问题,描述观测序列由隐藏的马尔科夫链随机生成的过程。
隐马尔可夫模型(hidden Markov model,HMM)是时间序列的概率模型,常用于词性标记、语音识别、文本分析等领域。HMM它是基于马尔科夫链标记的。我们标记了观察到的数据序列O。标记序列I相当于不可观测序列(隐藏变量)。如何解决最有可能的标记序列I是HMM的核心问题,我们以图解的方式形象的描述HMM问题。
已知的观测序列,标记序列,其中观测序列相互独立,与相应的标记序列相关,标记序列符合马尔科夫链模型,如下图所示:
再次强调隐马尔科夫模型假设的场景,1)观测序列相互独立,2)标记序列符合马尔科夫链模型,3)观测序列由标记序列决定。
HMM模型主要处理以下三个问题:
1)已知的观测序列O,如何求解HMM模型参数。
2)已知观察序列O和模型参数,如何找到最有可能标记序列 I 。
3)已知观测序列O和模型参数,如何解决观测序列O的概率。
以下是一般解决方案:
1) 已知观测序列O,如何解决模型参数?
I是标记序列,上面的意思是隐变量,所以可以使用EM算法求解上模型参数。
2) 已知的观测序列O和模型参数,如何找到最有可能标记序列I
3)已知观测序列O和模型参数,如何解决观测序列O的概率概率
具体算法和实例将在后续内容中给出。
介绍到这里,相信大家都在这里。HMM有了初步的理解,举个例子来解释HMM应用场景:
小明每天穿的衣服是,假设小明穿的衣服和前一天穿的衣服是独立的,衣服的选择受精神状态的影响,当天的精神状态受前一天的精神状态的影响,精神状态是,已知观察序列,寻求相应的精神状态序列,我们可以使用这类问题HMM来解决。
介绍到这里,相信大家都在这里。HMM如果对基本概念和应用场景有一定的概念HMM如果你不太明白,不要惊慌。下面循环逐步介绍HMM,对数学要求低的人也能很好地理解。
1.概率与随机过程的区别
概率反映了随机事件的可能性,大学课程《概率论与数学统计》的全文是基于概率的。如果随机事件的概率随时间而变化,我们将分析随机事件的概率,称为随机过程。
如果我们每次扔硬币,正面向上的概率是0.5.向上的概率不会随抛掷次数而变化。我们可以用概率来描述这个事件,比如P(X),X表示硬币正面向上的随机事件。
如果我们每次扔硬币,硬币落在地上都会导致形状的变化,正面向上的概率会随着抛掷次数的变化而变化。我们用随机过程来描述这个事件,比如第一次扔硬币正面向上的随机事件。一般来说,概率是分析随机变量,而随机过程是分析一组随机变量。
2.马尔科夫过程的概念
当随机过程的变量符合马尔科夫性的无记忆性质时,称为马尔科夫过程。
我们将其定义为第一时刻的随机变量,如下图所示:
若满足随机变量:
t时刻的随机变量只依赖于t时刻的随机变量t-与其他时刻无关的随机变量称为马尔科夫过程。
3.马尔科夫模型和隐马尔科夫模型的区别
马尔科夫模型和隐马尔科夫模型的区别在于它们是否含有隐藏的变量。本节以小明穿衣服的例子生动地解释了马尔科夫模型和隐马尔可夫模型的区别:
若小明每天的衣服只受前一天穿的衣服的影响, 下图是小明最近N天穿的衣服的序列:
根据上一节的介绍,服装序列为马尔科夫过程,基于马尔科夫过程的统计模型称为马尔科夫模型。
如果小明每天穿的衣服和前一天穿的衣服是独立的,每天穿的衣服当天精神状态的影响,精神状态符合马尔科夫链的原则,服装序列为,精神状态序列为,用下图描述这个过程:
其中,服装序列是可观测序列,观测变量相互独立。精神状态序列为不可观测序列(隐藏变量),状态变量符合马尔科夫模型。基于上述过程的统计模型称为隐藏的马尔科夫模型。
4.隐马尔科夫模型参数介绍
根据上一节的介绍,隐马尔科夫模型包括观测序列和未观测状态序列,其中状态序列从初始状态概率向量π观测序列由观测概率矩阵B决定,
以小明为例,假设小明可以选择三件衣服,分别是。小明有两种精神状态,即。
因此状态转移概率矩阵A表示为:
其中,
在时刻t处于状态的条件下,在时刻t处于状态t 转移的概率。
观测概率矩阵B表示:
其中,
观测概率是在时刻t处于状态的条件下产生的。
初始状态概率向量表示:
其中,
是时刻t=1状态概率。
我们用参数λ表示隐马尔科夫模型参数,即:
A,B,π三要素称为隐马尔可夫模型。
5.隐马尔可夫模型参数求解算法
在上一节中,我们介绍了隐马尔可夫模型参数的含义,如何通过观察序列来解决模型参数。
我们知道隐马尔可夫过程包含隐变量 I,隐马尔可夫模型实际上是一种含有隐变量的概率模型:
当构建包含隐变量的模型参数时,我们首先考虑使用它EM实现算法(期望最大值)可以参考文章(一篇文章让你完全入门EM算法)
模型参数求解步骤:
1)初始隐马尔可夫模型参数
2)确定模型完全数据的对数似然函数,隐马尔可夫模型的完全数据包含观测数据
和隐数据,完整数据是
因此,完全数据的对数似乎是函数:
3)EM算法的E步,即完全对数似然函数下隐变量的期望,称为Q函数
有:
当前隐马尔科夫模型的估计值是马尔科夫模型的参数。
根据上节介绍的隐马尔可夫模型参数的含义,完整数据的似然函数可以扩展为:
所以Q函数可以写成:
4)EM算法的M步,求Q函数的最大值,得到模型参数,从上节可以看出模型参数
即令:
约束条件为初始状态概率分布的和等于1,即:
状态已知的情况下,观测概率分布的和等于1,即:
由上面的等式得到模型参数,即更新了模型参数的值。具体计算过程这里不再详细描述了,具体可参考李航老师的《统计学习方法》,若有不懂欢迎交流。
5)重复步骤(3)(4),直到函数收敛,得到最终的模型参数
6.观测序列概率计算算法
上一节介绍了如何通过观测序列去估计模型参数,当模型参数已知时,隐马尔可夫模
型也相应的确定了,观测序列的概率可以通过模型参数计算出来。下面介绍两种观测序列概
率计算算法:
1)枚举法
给定模型和观测序列,计算观测序列O出现的概率。假设状态序列,可能的状态数是N,因此每个观测变量都可能由N个状态生成,且模型参数已知,我们就能算出每个可能的状态序列生成观测序列的概率。如下图:
这种列举所有可能的状态数来计算观测序列的概率理论上是可行的,但是计算量非常大,如上图对于长度为T的观测序列,复杂度达到了。
2)递推法
隐马尔科夫具有时间序列的特点,因此我们可以用递推的方法去计算观测序列出现的概率。给定马尔科夫模型 ,定义到时刻t部分观测序列为且状态为的前向概率为。
1)时刻t=1时刻的观测概率为:
2)递推,对于,有:
3)当t=T时,
算法复杂度研究:因为该算法考虑的是用递推关系求观测序列的概率,递推过程如下图:
方程表示为:
由上式可知,计算t+1时刻状态为 i 的计算量为N次相乘求和,且t+1时刻状态的可能数为N,因此由t时刻递推到t+1时刻的计算量为 阶,观测序列的长度为T,那么计算量为阶,与之前枚举法相比,计算量大大降低了。
7.状态序列预测算法
给定模型参数 和观测序列,如何预测最有可能的状态序列,这是隐马尔科夫模型的应用最广的场景,如词性标注,给定一个句子,标注每个单词的特性;
本节介绍维特比算法(Viterbi algorithm)来预测状态序列。维特比算法是一种动态规划算法,用于寻找最有可能产生的状态序列。
通过节点
算法的核心思想是:若t时刻最有可能的状态序列通过节点(为t时刻的状态),那么从t时刻到T时刻的最优路径一定包括。我们利用这一思想确定了最优状态序列的最后一个时刻的状态,然后利用该状态回溯时刻的最优状态。用一个例子说明维特比算法:
已知模型,观测集合V={红,白},状态集合Q={1,2,3},其中
若观测序列O=(红,白,红),求最优状态序列
解:定义为时刻t状态为 i 的所有单个路径中概率的最大值,含义为给定前t-1时刻的状态和前t时刻的观测序列,求最优路径t时刻的状态,即:
定义为时刻t状态为 i 的所有单个路径中概率最大路径的第t-1个节点为:
根据维特比算法的核心思想,我们计算观测序列下的最优路径:
1)t=1时,令是观测为状态为i的概率,由题目可知为红色,有:
代入已知条件得:
记
2)t=2时,
由上面两式得:
2)t=3时,
得:
以表示最优路径的概率,最优路径的终点:
因此最优状态序列:
8.小结
本文首先用一个例子通俗的讲解了隐马尔可夫模型的适用场景以及隐马尔可夫模型的三个主要处理问题,然后循序渐进的介绍了隐马尔可夫模型的概念和相关问题的解决方法,所用的例子选取了《统计学习方法》的内容。后续文章会介绍另一种相似的算法——条件随机场以及两者的区别,希望对初学者能有所帮助。
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~