论文阅读【7】HHM隐马尔科夫模型

news2024/9/22 0:40:45

1.隐马尔科夫模型(HMM)的介绍

在这里插入图片描述
隐马尔科夫模型有两个序列,上面一层序列的值称之为影藏值(隐式变量),下面一个序列中的值被称为观察值,想这个的序列模型被称为生成模型(Generate model)。z表示的是一个状态,z所在的这条线上的箭头被称之为状态的转移,箭头表明转移的方向(Direction)。所以隐马尔科夫模型符合2个条件Dirction+Generate.

2.隐马尔科夫模型的深度理解

栗子1:硬币概率问题

假设我手上有2种硬币,一个硬币叫做A,另外一个叫做B,但是这两个外观一样的硬币,但是出现的概率却不一样,A可能出现正面的概率是 μ 1 μ_1 μ1,B出现正面的概率是 μ 2 μ_2 μ2,所以 μ 1 μ_1 μ1 μ 2 μ_2 μ2有可能相同也有可能不一样。
然后小明去扔硬币,我去观测硬币,小明负责扔硬币,我负责观测硬币,但是小明具体扔的是那一枚硬币我不知道,我只记录下我观测到的是正面还是反面。
在这里插入图片描述
因此这里面就可以提出2个问题:

  • 问题1:究竟小明每次扔的是A还是B(推测问题)
  • 问题2:扔A的概率 μ 1 μ_1 μ1是多少,扔B的概率 μ 2 μ_2 μ2是多少,并且扔完A之后扔B的概率是多少,生成了一个状态转移矩阵。(参数估算问题)
  • 问题3:计算P(正反正…正)的概率,计算序列的概率(边缘概率问题)。

栗子2:词性标注任务

把绿色的看成我们观测到的单词,灰色的代表是这些单词的词性,是我们不知道的,所以这个任务就是推测出每个单词的词性是什么。因此也可以罗列出三个问题。
问题1:给定每个单词反推出每个单词的词性(inference、decoder),一般使用维特比算法去解决这个问题
问题2:参数估算问题,给定这一句话怎么去估计整个模型的参数。
问题3:计算 p ( w 1 , w 2 , . . . . . . w n ) p(w_1,w_2,......w_n) pw1w2......wn的概率,这是一个边缘概率,这个计算与序列有关,涉及到大量的计算,会使用动态规划算法。
在这里插入图片描述

栗子3:语音识别问题

语音输入的是一条条的波形,则需要预测出这个一条条波形表达的背后的语义信息。
在这里插入图片描述

3.隐马尔科夫模型的参数问题

HMM模型 θ = ( A , B , π ) \theta=(A,B,π) θ=(A,B,π),对于模型中的数据我做了以下定义,观测变量为 x 1 , x 2 , x 3 . . . . . . . x n x_1,x_2,x_3.......x_n x1,x2,x3.......xn,隐式变量定义为 z 1 , z 2 , . . . . . . z n z_1,z_2,......z_n z1,z2,......zn.假设 z i z_i zi是离散型的
不懂就问:离散变量是指其数值只能用自然数或整数单位计算的则为离散变量。例如,企业个数,职工人数,设备台数等,只能按计量单位数计数,这种变量的数值一般用计数方法取得。反之,在一定区间内可以任意取值的变量叫连续变量,其数值是连续不断的,相邻两个数值可作无限分割,即可取无限个数值.

  • A代表状态转移矩阵,其中的每一行代表从状态c转移到状态i的概率,每一个值代表转移的每一个状态的概率,这一行中的概率之和为1.
  • B代表生成(Emession)观测值的可能性。假设在一个隐式的状态下看到的观测值得概率是多少。其中的行向量中的每一列表示词库中每一个单词在i状态下的概率。
  • π代表的是一个向量,其中的值为 π = [ π 1 π 2 π 3 π 4 π 5 π 6 ] π=[π_1 π_2 π_3 π_4 π_5 π_6] π=[π1π2π3π4π5π6],表示其中的某一个 z 1 z 2 . . . . z m z_1z_2....z_m z1z2....zm出现在第一个位置的概率是多少,概率之和为1.
    在这里插入图片描述
    问题1:能不能在给定x状态下估计出θ
    问题2:在给定一个θ和某一个观测值X的情况下预测z

4.HMM中的inference问题

在这里插入图片描述

首先第一个问题就是,当我输入一个序列X之后如何去预测每个x所对应的标签,这就需要使用到维特比算法。

最笨的方法

假设需要每个x所对应的标签有3个, z i z_i zi属于{a,b,c},则把每一种可能出现的结果进行排列组合,那么可能得序列就会有 3 n 3^n 3n种结果,将所有序列罗列出来之后其实可以很好的计算这些序列的极大似然概率。
p ( z 1 ) p ( z 2 ∣ z 1 ) P ( z 3 ∣ z 2 ) . . . . . . . . . . . . P ( z n ∣ z n − 1 ) ∗ P ( x 1 ∣ z 1 ) P ( x 2 ∣ z 2 ) p ( x 3 ∣ z 3 ) . . . . . . . p ( x n ∣ z n ) p(z_1)p(z_2|z_1)P(z_3|z_2)............P(z_n|z_{n-1})*P(x1|z1)P(x_2|z_2)p(x_3|z_3).......p(x_n|z_n) p(z1)p(z2z1)P(z3z2)............P(znzn1)P(x1z1)P(x2z2)p(x3z3).......p(xnzn)
在这里插入图片描述
但是使用这种算法显而易见,计算量太大了。于是考虑使用下面一种方法,维特比算法。

维特比算法

维特比算法属于动态规划算法,对于那些复杂度是指数级计算的算法,使用一个中间变量,减轻其中的计算量。
将每个预测影藏值节点连接起来成一个图,则计算方式为
p = p ( z 1 = 2 ) p ( x 1 ∣ z 1 = 2 ) p ( z 2 = 1 ∣ z 1 = 2 ) p ( x 2 ∣ z 2 = 1 ) . . . . . . . . . . p=p(z_1=2)p(x_1|z_1=2)p(z_2=1|z_1=2)p(x_2|z_2=1).......... p=p(z1=2)p(x1z1=2)p(z2=1z1=2)p(x2z2=1)..........,当p的概率最大的时候就是最好的时候
使用维特比算法进行动态规划:
在这里插入图片描述

δ k ( i ) \delta_k(i) δk(i):在第k个时刻状态为i的时候的最好的路径。
则计算他的k+1个时刻的状态的概率,假设看k+1时候的值为J,则 δ k + 1 ( j ) \delta_{k+1}(j) δk+1(j)为下面式子的最大值max,用log就可以简化步骤:
δ k ( 1 ) + l o g p ( z k + 1 = j ∣ z k = 1 ) + l o g p ( x k + 1 ∣ z k + 1 = j ) ) \delta_k(1)+logp(z_{k+1}=j|z_k=1)+logp(x_{k+1}|z_{k+1}=j)) δk(1)+logp(zk+1=jzk=1)+logp(xk+1zk+1=j))
δ k ( 2 ) + l o g p ( z k + 1 = j ∣ z k = 2 ) + l o g p ( x k + 1 ∣ z k + 1 = j ) ) \delta_k(2)+logp(z_{k+1}=j|z_k=2)+logp(x_{k+1}|z_{k+1}=j)) δk(2)+logp(zk+1=jzk=2)+logp(xk+1zk+1=j))

δ k ( m ) + l o g p ( z k + 1 = j ∣ z k = m ) + l o g p ( x k + 1 ∣ z k + 1 = j ) ) \delta_k(m)+logp(z_{k+1}=j|z_k=m)+logp(x_{k+1}|z_{k+1}=j)) δk(m)+logp(zk+1=jzk=m)+logp(xk+1zk+1=j))
化简为一个递归的表示:
δ k + 1 ( i ) = m a x i [ δ k ( i ) + l o g p ( z k + 1 = j ∣ z k = i ) + l o g p ( x k + 1 ∣ z k + 1 = j ) ) ] \delta_{k+1}(i)=\underset{i}{max}[\delta_k(i)+logp(z_{k+1}=j|z_k=i)+logp(x_{k+1}|z_{k+1}=j))] δk+1(i)=imax[δk(i)+logp(zk+1=jzk=i)+logp(xk+1zk+1=j))]
在这里插入图片描述
所以基于上面的方法,从前往后依次计算每个状态的概率,并使用一个m*n的矩阵保存,然后将最大的值的路径也保存,这样就得到了最优的路径。

5.HMM的FB算法

FB算法的全程为(Forward and Backward)
他们分别的作用:
Forward:计算 p ( z k , x 1 : k ) p(z_k,x_{1:k}) p(zk,x1:k)的概率,其中 x 1 : k = ( x 1 , x 2 , x 3 . . . . . . . . x n ) x_{1:k}=(x_1,x_2,x_3........x_n) x1:k=x1,x2,x3........xn
Backward:计算 p ( x k + 1 ∣ z k ) p(x_{k+1}|z_k) p(xk+1zk)的概率。
不懂就问:其中p(A,B)表示AB同时发生的概率,等同于p(AB),称之为联合概率分布
由于乘法法则知道: p ( Z k ∣ X ) = p ( Z k , X ) p ( X ) p(Z_k|X)={p(Z_k,X)\over p(X)} p(ZkX)=p(X)pZk,X ∝ p ( Z k , x ) ∝p(Z_k,x) p(Zk,x)
其中∝叫做正比符号(英文叫做proportion),因为上面的公式中的分母是不变的,变的是分子,所以可以直接看成求分子
p ( Z k , X ) = P ( X k + 1 : n ∣ Z k , X 1 : k ) ⋅ p ( Z k ⋅ X 1 : k ) p(Z_k,X)=P(X_{k+1:n}|Z_k,X_{1:k})·p(Z_k·X_{1:k}) p(Zk,X)=P(Xk+1:nZk,X1:k)p(ZkX1k)
如果 X 1 : k X_{1:k} X1:k独立于 X k + 1 : n X_{k+1:n} Xk+1:n则可以将 X 1 : k X_{1:k} X1:k省略掉,很显然他们是独立的,于是上式转换为:
p ( Z k , X ) = P ( X k + 1 : n ∣ Z k ) ⋅ p ( Z k , X 1 : k ) p(Z_k,X)=P(X_{k+1:n}|Z_k)·p(Z_k,X_{1:k}) p(Zk,X)=P(Xk+1:nZk)p(Zk,X1k)
把上式的第一部分称为Backward,第二部分称之为Forward.
在这里插入图片描述
通过F/B算法,一方面可以计算出模型参数,这个是比较重要的一方面.

6.Forward 算法

这个算法的目标设计计算 p ( z k , x 1 : k ) p(z_k,x_{1:k}) p(zk,x1:k)的概率,详细计算过程如下图:
在这里插入图片描述
其中 x 1 : x − 1 , z k x_{1:x-1},z_k x1:x1,zk是相关独立事件,可以都可以直接抵消掉.(实在有点检查不下去了,烂尾了,哈哈)

7.Backward算法

这个算法的目标就是计算 p ( x k + 1 : n ∣ z k ) p(x_{k+1:n}|z_k) p(xk+1:nzk)的概率.计算过程如下图:
在这里插入图片描述

总结

看到这一堆,是不是感觉脑袋都是大的,我确实也是的,看到最后脑袋也是变大了,最后 找到一个生动形象的例子:https://zhuanlan.zhihu.com/p/497045631
我总结一下这个HMM算法就是用已知去推导位置,首先要搞清楚几个概念,观测值,隐藏值,还有维特比算法(动态规划算法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux - lsof显示 tcp,udp 的端口和进程

文章目录功能语法示例lsof -i 显示 tcp,udp 的端口和进程等相关查看服务器 80 端口的占用情况使用 -p 查看指定进程打开的文件更多命令功能 lsof(list open files)是一个列出当前系统打开文件的工具。 lsof 需要访问核心内存和各种文件&…

【区块链技术与应用】(八)

https://blog.csdn.net/lakersssss24/article/details/125762826?spm1001.2014.3001.5501 https://blog.csdn.net/lakersssss24/article/details/126434147 https://blog.csdn.net/lakersssss24/article/details/126671408?spm1001.2101.3001.6650.3&utm_mediumdistribut…

[附源码]java毕业设计医院仪器设备管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

cubeIDE开发, stm32的OLED点亮及字符显示设计(基于SPI通信)

一、SPI 通信技术 显示屏(LCD、OLED)接口一般有I2C、SPI、UART、RGB、LVDS、MIPI、EDP和DP等。一般3.5寸以下的小尺寸LCD屏,显示数据量比较少,普遍采用低速串口,如I2C、SPI、UART。SPI(Serial Peripheral I…

通用后台管理系统前端界面Ⅹ——前端数据表格的删除、查找

删除操作 1、拿到id或者行数据对象 2、查看后端接口方法,写api方法,将操作连接上后端 后端请求操作成功,但是前端数据表格未更新,最简单的一种方法数据删除后要重新获取数据》 依旧显示成功,但是前端数据表格未变化&…

Bert and its family

Bert没有办法一次性读入特别长的文本的问题。自注意力机制非常消耗时间和空间。 概率值最大取argmax,对应的下标 整体全部更新,所有参数都更新,比固定住pre-trained要好很多。 不做预训练,loss下降比较慢,收敛比较慢&a…

BIM在工程中的20种典型功能

1、BIM模型维护 根据项目建设进度建立和维护BIM模型,实质是使用BIM平台汇总各项目团队所有的建筑工程信息,消除项目中的信息孤岛,并且将得到的信息结合三维模型进行整理和储存,以备项目全过程中项目各相关利益方随时共享。 由于…

Java 微信关注/取消关注事件

Java 微信关注/取消关注事件一、需求、思路二、文档、配置配置步骤1配置步骤2三、代码1、引入依赖包2、controller3、封装消息对象4、service、解密5、工具包一、需求、思路 需求:用户订阅/取消订阅公众号时接收消息并保存到数据库中以便后续功能的处理。 思路&…

【分类-SVDD】基于支持向量数据描述 (SVDD) 的多类分类算法附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

机器学习-回归模型相关重要知识点

目录01 线性回归的假设是什么?02 什么是残差,它如何用于评估回归模型?03 如何区分线性回归模型和非线性回归模型?04 什么是多重共线性,它如何影响模型性能?05 异常值如何影响线性回归模型的性能&#xff1f…

Springboot Security 前后端分离模式自由接口最小工作模型

但凡讲解Springboot Security的教程,都是根据其本身的定义,前后端整合在一起,登录采用form或者basic。我们现在的很多项目,前后端分离,form登录已经不适用了。很多程序的架构要求所有的接口都采用application/json方式…

RabbitMQ顺序性、可靠性、重复消费、消息堆积解决方案

RabbitMQ顺序性、可靠性(消息丢失)、重复消费、消息堆积解决方案 顺序性 RabbitMQ使用过程中,有些业务场景需要我们保证顺序消费,例如:业务上产生三条消息,分别是对数据的增加、修改、删除操作&#xff0…

【Java八股文总结】之Linux常用指令

文章目录Linux简介一、Linux目录结构二、Linux常用指令Linux简介 一、Linux目录结构 bin(binaries):存放二进制可执行文件。 sbin(super user binaries):存放二进制可执行文件,只有root才能访…

怎么把图片转换成表格?分享三个简单方法给你

你们是否在工作的时候会遇到这样的情况:收到同事发来的一张表格图片,需要你进行汇总登记,通常这种时候,你们都会怎么做呢?是根据图片的内容,手动输入制作成一份表格吗?虽然这样子可以进行表格的…

c++ 旅行商问题(动态规划)

目录一、旅行商问题简介旅行商问题问题概述问题由来二、基本思路三、实现1、状态压缩2、状态转移四、代码复杂度分析一、旅行商问题简介 旅行商问题 TSP,即旅行商问题,又称TSP问题(Traveling Salesman Problem),是数学…

网络编程基础知识

文章目录1、网络概念2、协议3、网络分层4、网络传输流程5、端口号1、网络概念 先有计算机还是先有网络呢? 答案是先有计算机,为了数据研究和沟通的需求产生的网络,网络的产生是为了提升效率的。 那什么是网络呢? 网络指的是网络协…

实现一个自定义的vue脚手架

开发背景 博客很久没有更新了, 今天更新一个好玩的,等我将vue3的东西彻底搞明白我会更新一个vue3的系列,到时候会更新稍微勤一点,在使用vuecli的时候发现他的脚手架很有意思,用了几年了,但是一直没有好好研…

HTML CSS 网页设计作业「动漫小站」

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

Neon intrinsics 简明教程

文章目录前言SIMD & NEONNEON intrinsicsNEON intrinsics 学习资料寄存器向量数据类型NENO intrinsics 命名方式NEON Intrinsics 查询三种处理方式:Long/Wide/NarrowNENO intrinsics 手册Addition 向量加法Vector add: vadd{q}_type. Vr[i]:Va[i]Vb[i]Vector lo…

Python-Flask 模型介绍和配置(6)

Flask数据模型和连接数据库一、安装二、配置数据库连接、创建模型类三、使用命令创建数据库表四、以注册为例flask是基于MTV的结构,其中M指的就是模型,即数据模型,在项目中对应的是数据库。flask与数据库建立联系有很多方法,但一般…