热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

隐马尔可夫模型(HMM),了解一下?

隐马尔可夫模型(HMM)隐马尔可夫模型(HMM)1.隐马尔可夫模型基本概念1.1定义1.2观测序列生成过程1.33个基本问题

隐马尔可夫模型(HMM)
  • 隐马尔可夫模型(HMM)
    • 1. 隐马尔可夫模型基本概念
      • 1.1 定义
      • 1.2 观测序列生成过程
      • 1.3 3个基本问题
    • 2. 概率计算方法
      • 2.1 直接计算法
      • 2.2 前向算法
      • 2.3 后向算法
    • 3. 学习算法
      • 3.1 监督学习方法
      • 3.2 非监督学习方法 EM算法 Baum-Welch算法
    • 4. 预测算法
      • 4.1 近似算法
      • 4.2 维特比算法


1. 隐马尔可夫模型基本概念


1.1 定义


  • 隐马尔可夫模型,又叫做HMM,是关于时序的概率模型,描述一个由隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个可观测的观测随机序列的过程。
  • 状态序列(state sequence): 由隐藏的马尔可夫链生成的状态的序列;
  • 观测序列(observation sequence): 每个状态生成一个观测,由此产生一个观测序列;
  • 序列的每一个位置可以看做一个时刻;
  • 隐马尔可夫模型属于生成模型。在语音识别、自然语言处理等领域应用广泛

三元组来表示一个隐马尔可夫模型 -w93

  • π 初始状态概率向量。 表示第1个时刻处于各个状态的概率
  • A 状态转移概率矩阵。 Aij 表示由状态i转移到状态j的概率
  • B 观测概率矩阵。 每一行对应一个状态,每一列对应一个观测,表示在该状态下,出现某个观测的概率

两个基本假设:

  • 齐次马尔可夫性假设。隐藏的马尔可夫链在任意时刻t的状态,只依赖于他前一个时刻的状态。与其他的状态和观测无关
  • 观测独立性假设。任意时刻的观测只依赖于该时刻的状态。与其他的观测和状态无关

应用:标注。
标注问题是给定观测序列预测其对应的标记序列。这是标记序列对应着状态序列。可以假设标注问题的数据是由隐马尔可夫模型生成的。

再多的公式也不如一个例子:
掷骰子,非常经典的问题,三种骰子,给出一个观测到的结果序列,那么对应的骰子序列,就是对应的隐藏状态序列。
-w360
-w360
-w360

1.2 观测序列生成过程


  • 按照初始状态概率分布 π 产生初始时刻 t=1 的状态
  • 按照观测概率矩阵,产生在此状态下的观测
  • 按照状态转移概率矩阵,得到下一个时刻 t=2 的状态
  • 依次直到t=T为止,就产生了一个长度为T的观测序列和状态序列

1.3 3个基本问题


  1. 概率计算。给定模型-w93
    ,以及观测序列 O ,求该观测序列出现的概率
  2. 学习问题。已知观测序列 O ,求模型参数A, B, π,使得该模型下该观测序列出现的概率最大,即用极大似然估计的方法估计参数
  3. 预测问题。给定模型和观测序列,求对应的最有可能的状态序列。即最大化条件概率P(I|O)

2. 概率计算方法


给出模型 + 观测序列。求该观测序列出现的概率


2.1 直接计算法

把所有可能出现该观测序列的状态序列,全部枚举出来。然后计算每一个状态序列+观测序列对应的概率。取其中最大的一个作为该观测序列的概率。
当马尔可夫链比较长的时候,枚举的情况太多,导致此方法理论可行,实际往往不行。

2.2 前向算法


先说一个简单的问题,假如你知道了隐藏的状态序列,让你求当前观测的序列概率。

-w182

那么概率的计算无非就是各个概率的相乘:(包括状态到状态的转移概率,以及状态到观测的概率)
-w844

现在问题升级:不知道隐藏状态序列,如何求出观测序列概率?

解法也很简单:对于t=1时刻,依次假设当前处于某一个状态,然后计算该状态下得到观测O(1)的概率。那么把所有的状态计算出来的概率**求和**,就得到了t=1时刻,出现该观测的概率(也就是我们要求的结果)。
然后开始递推,假设已经求出来t=T-1时刻,每一个状态对应的概率。那么对于t=T时刻,我们依旧遍历当前处于的状态,然后依据t=T-1的各状态概率计算结果,来得到t=T时刻,处于各个状态并得到T时刻观测的概率。遍历各个状态的概率,**求和**就得到了T时刻观测的概率,这个概率就是出现整个观测序列的概率,也就是我们要求的最终结果.
这就是前向算法(forward algorithm)。

比如下面这个例子:我们模型参数(骰子及各个概率),要求出出现观测1,6,3的概率是多少?

首先,如果我们只掷一次骰子:

观测结果为1。产生这个结果的总概率可以按照如下来计算,总概率为0.18:

P1表示第一次掷,对应的每一行,一次表示当前投掷的时候,分别使用的是D6 D4 D8骰子。

情况拓展,投掷两次骰子:

看到结果为1,6.产生这个结果的总概率为0.05:

我们拿P2列,D6行来解释下:它表示第二次投掷用的是D6骰子,那么第一次用哪个那?都有可能!所以第二次观测到6的总概率,就是(第一次用D6并投出了1的概率 + 第一次用D4并投出了1 + 第一次用D8并投出了1) * 第二次用了D6 * D6投出了6.
也就是说,第二个状态是D6,那么他可能是怎么来的那?它是由第一个状态转化来的,而且每一种第一个状态都可能以不同的概率转换成第二个状态。(这里我们为了简单,认为都是1/3)
然后依次遍历第二个状态所有的状态,求出概率后,把概率加起来就是我们t=2时刻的观测出现的概率了。

继续拓展,投三次:

看到结果为1,6,3,总概率为0.03:

这样一步一步的计算,无论马尔可夫链有多长,总能算完。相比直接穷举这样复杂度会低很多。减少计算量的关键在于每一次计算都直接引用前一个计算的结果,避免了重复计算。局部计算前向概率,然后利用路径结构将前向概率递推到全局。

2.3 后向算法

与前向计算相对应的是后向计算。从后向前推,大体的思想也是利用之前计算的结果来计算当前时刻的概率。

3. 学习算法


学习算法。主要是给出观测概率,让我们估计模型参数。也就是学习这个模型是什么。是最常见的情况。


3.1 监督学习方法

如果给出了多个观测序列和对应的状态序列,那么就属于监督学习。
所谓的监督学习就是用频率来估计概率。属于极大似然估计
比如:统计每个状态序列t=1时刻的状态,那么状态的频率我们就认为是状态的初始概率π

3.2 非监督学习方法 EM算法 Baum-Welch算法


非监督学习利用的是EM算法来进行参数估计

只有观测序列,没有状态序列,目标是求出对应的隐马尔可夫模型参数。那么隐马尔可夫模型实际上是一个含有隐变量的概率模型:
-w244

  • 第一步:定义完全数据的对数似然函数。

定义完全数据为:-w274
完全数据的对数似然函数是-w104

  • 第二步:EM算法的E步:

利用当前模型参数的估计值,得到完全数据的对数似然函数的期望:
-w281

其中,-w18是当前模型参数的估计值。-w15是要极大化的模型参数。

  • 第三步:EM算法的M步:

将上面公式拆解成三部分,分别只包含π, A, B然后分别极大化每一部分。利用了概率和为1这个约束条件,再加上拉格朗日乘子法得到最终结果。

4. 预测算法


已知模型参数和观测序列,目标:求出最可能的状态序列


4.1 近似算法

思想非常简单:在每个时刻t选择在该时刻最优可能出现的状态,从而得到一个状态序列,作为最终的预测结果。

4.2 维特比算法

维特比算法是用动态规划解决隐马尔可夫预测问题。求概率最大路径,这时一条路径对应着一个状态序列。
最优路径特性:从路径中间截开,那么前面一段和后面一段都是最优的。
跟前向算法求观测概率一样,我们还是递推的来求,但是这次只关注如何选择状态可以得到一个最大概率,而不是概率的和。最大的那个概率对应的状态,就是我们预测的状态。
继续拿投骰子说事:
首先,如果我们只投一次骰子:

观测结果为1,对应最大概率的骰子序列就是D4,因为D4产生1的概率是1/4,大于1/6和1/8.

继续,投两次骰子:

观测结果为1,6. 这时我们需要计算三个值,分别是第二个骰子是D4,D6,D8的最大概率。

以第二个骰子是D6为例。第一个可选的状态为D4,D6,D8,分别计算出概率为:
-w482

最终,P2(D6)选上面三个中概率最大的一个。

依次计算出P2(D4)和P2(D8),然后从这些里面取最大概率值,作为第二轮的预测状态。

这里跟前向传播比较相似,只不过每次都只取最大值。同样是利用了之前的计算结果,所以减小了计算量。


欢迎关注公众号:机器学习荐货情报局
一起进步,一起学习,一起充电~
欢迎投稿,讨论,拍砖


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • 聊聊 中国人工智能科技产业 区域竞争力分析及趋势
    原文链接:聊聊中国人工智能科技产业区域竞争力分析及趋势最近看了一个关于国内AI的报告《中国新一代人工智能科技产业区域竞争力评价指数(2021ÿ ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 2017亚马逊人工智能奖公布:他们的AI有什么不同?
    事实上,在我们周围,“人工智能”让一切都变得更“智能”极具讽刺意味。随着人类与机器智能之间的界限变得模糊,我们的世界正在变成一个机器 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • NLP如何进阶?你应该先掌握四大基本任务!
    “语言理解是人工智能领域皇冠上的明珠。”——比尔盖茨自然语言处理是一门综合性的学问,它远远不止机器学习算法。相比图像或语音,文本的变化更加复杂ÿ ... [详细]
  • 如何用R语言做词云图,以某部网络小说为例
    作者:horoR语言中文社区专栏作者知乎ID:https:www.zhihu.compeoplelin-jia-chuan前言一开始,我在 ... [详细]
  • 前言4.1回到基础赋值(略)barfoo[:]copy.deepcopy()等式(略)is条件语句ifelifall()any()4.2序列字符串链表元组序列类型上的操作表4-1P ... [详细]
  • 必备核心算法神经网络通俗讲解
    深度学习传统算法VS人工智能算法传统算法:都是人为去计算人工智能算法:部分人为需要做的事情交由机器去做【把更多的问题简单化】IT的发展比较高端的就是A ... [详细]
author-avatar
少爷lianglian_414
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有