深入浅出談 隐马尔可夫的概念(2/ 2)-- 训练理论

文章目录

  • 一、说明
  • 二、HMM 三大问题
  • 三、评估问题——前向-后向算法
  • 四、.解码问题——维特比算法
  • 五、学习问题——EM算法
  • 六、 连续隐马尔可夫

一、说明

在许多机器学习的章节中,常常遇见 HMM ,往往看到它的数学式子后,就当没看到似的跳过去了,其实它的基础理论并不难,尤其是 Markov Chain 在高中数学课本就已经出现过了,但…那么久远的事,相信大家都忘得差不多了,现在一起来回顾一下吧!!
在前面 part 2 有提醒大家慎入唷! 有满满多出来的数学式,要 hold 住呀!底下我们分成几个部分来说明和算法。

二、HMM 三大问题

a. Evaluation Problem — Forward-backward Algorithm
b. Decoding Problem — Viterbi Algorithm
c. Learning Problem — EM Algorithm
d. (补充) Continuous Hidden Markov Chain

在进入主题前,再重申一次问题,如下图…
在这里插入图片描述

我们需计算在已知观察序列 O(o₁, o₂, o₃, …, ot) ,但未知转移矩阵的条件下,找出其对应的的所有可能状态序列 Q(q₁, q₂, q₃, …, qt) ,以及其中最大机率之状态序列。

HMM 三大问题
有些人大概觉得简单吧! 暴力法就可以解决了,穷举出所有可能的路径,并计算每条路径的机率,不就结束了吗? 就是每条路径都算过,疴… 时间复杂度是O(N^TT)呀! 大大,在文明的21世纪,我们不能这么暴力呀!

以下的算法要跟大家介绍,如何降低计算的时间复杂度

三、评估问题——前向-后向算法

在这里插入图片描述
在这里插入图片描述

一看到数学式,大概眼花了,所以在这边要搭配图来看,才不会错乱。

forward 顾名思义,就是由前往后找路径,直到第 t 秒,其实也不太难,看到上图蓝色经过的流程图在这边 forward 要计算的部分只有 αt(j),意思就是在第 t 秒、第 j 个状态,发生 ot 的所有可能路径机率之加总值,所以只算第 t 秒和第 t 秒以前发生的可能路径机率!

backward 用膝盖想,就是由后往前算嘛,看看流程图之绿色部分,βt(j)从第 t 秒开始,考虑由第 j 个状态出发,直至第 T 秒结束的所有路径机率之总和,由于不知道在 t 由 j 状态出发的机率值, 所以我们是从已知第 T 秒发生的机率值,往前回推至第 t 秒的路径机率。

用图标法来看,不严谨的说法是 forward 乘上 backward ,就恰巧是在观察序列 O 时,发生第 t 秒,经过第 j 个状态的所有可能路径机率之总和。

疑? forward 往后算到底,不就是 backward 往前算到底的值嘛? 恩,是的,所以要估算路径机率,其实只要算一种就可以了。

何以利吾身? 这样算有什么好处呢? 时间复杂度大大的减少了呀! 只剩下 O(N²T) 唷! 时间就是金钱,颗颗…不过这个算法既然有 forward 和 backward,算这两个一定有原因呀! 等等在底下会提到。

四、.解码问题——维特比算法

在这里插入图片描述
在这里插入图片描述

看到这边,应该都是会心一笑,其实和上个算法差不多嘛! 只是把 ∑ 变成 max 而已呀! 是的,你没有看错就是这么简单,有别于上个算法是要找出在第 t 秒,会经过第 j 个状态的所有可能路径机率总和,而这个算法想表示的是,在第 t 秒,会经过第 j 个状态之最大机率路径。

五、学习问题——EM算法

Learning Problem 翻译一下,就是学习问题,学习要学什么呢? 用 part 2 的举例说明一下吧!

过去一年来,我们以周为一个观察序列单位,纪录圆仔每天买饮料的习惯,因此我们想从圆仔的饮料习惯纪录中,分析出「选择买什么东西」、「去哪间卖场购买的」,可惜的是,我们没有纪录到圆仔去哪间卖场买东西的诱因,亦即是「机率」,再换句话说,我们要寻找的训练的目标是找到「状态转移矩阵 A」、「观察转移矩阵 B」、「起始值转移矩阵 π」,而「圆仔的饮料习惯纪录」是我们的训练数据集。

了解问题之后,先来看一下离散问题的数学式,首先只考虑一周的饮料清单,透过 Forward-Backward Algorithm 我们可以求出 αt(i) 和 βt(i),也就是把每一个时间点会经过每一个状态及事件的所有可能路径机率都算出来,求出来之后,自然就要开始训练参数啦!

在这里插入图片描述
在这里插入图片描述

Training 啰!
在这里插入图片描述

在标题中看到 EM Algorithm,应该很快就联想到了「分群」、「资料分布」,是的,我们这里处理的手法其实也差不多啦! 利用事件发生的平均机率,当作更新的转移矩阵,接着反复的寻找和更新,直到更新幅度很小这样。

Comment:

没有出现在数据集中的观察值,在更新的过程中,会被更新为0,一旦变成0,此事件路径发生的可能性即为0,因此不论计算Evaluate Problem或是Decording Problem此路径机率皆恒为0,意思是不会再更新,所以通常不会让没出现过的观察值机率为0,常理来说,会预设一个比0大,但很小的数字。 只有离散问题,会遇到此状况,连续则无。
因为每次的 update,都只与当下计算的观察序列有关,因此很容易看到第 n 个序列的时候,就忘掉一开始看到的几个序列的样子了,为了避免这样的状况产生,所以我们让每次要更新的值,与将要被更新的值取一个比例平衡,既不忘了过去的观察序列,也不会全然依照新的观察序列更新,常用的方式如底下公式…
在这里插入图片描述

当然有些人会困惑, 之前我们讨论的内容中,每个状态都会有固定对应的 M 个观察值,意思是,原先卖场饮料都是一罐一罐卖的,后来为了环保考量不用铝罐装,用一袋袋饮料装? 由于是一袋袋的,所以每一袋饮料的重量都有些许的误差,长久下来,观察值会由消费者买了架上第 k 种每瓶为 L ml 的饮料,变成是买了架上第 k 种每袋为 L ml 的饮料,因为不是每袋都能很准确的装刚好 L ml 的饮料,所以会有一点点偏差— 「连续型隐藏式马可夫模型 Continuous Hidden Markov Model」

六、 连续隐马尔可夫

上述的想法,大家思考一下,看到“bias 偏差”大家会想到啥? 八九不离十,是令人脑昏的“统计”,统计数据会想到啥? 「常态分布 Normal Distribution」。 没错,不管什么状态,未看先猜有「常态分布」,先对一半。 那什么东西训练中会与「常态分布」有关,眼睛闭着,也猜得到「EM Algorithm」,接着联想到的就是「Gaussian Distribution」、「Gaussian Mixture Model」。 既然有这些联想,那一切就好办了。 让我们走下去…

于是乎我们训练的目标中多了一个参数——在「状态 st」产生「观察值 ot」的机率。 目前我们以 Gaussian Mixture Model 为假设观察值 ot 所属分布,那马上就会想到,多了的训练参数是谁了吧!! 没错,就是「平均数 mean μ」和「变异数 covariance Σ」

在这里插入图片描述

有了这张图,大概就清楚明了了吧! 简单叙述整个问题,就是…圆仔每天都会去买饮料,所以我们纪录她每天买的饮料品项和饮料重量,然后每 7 天为一笔资料,目的是找出圆仔买东西的习惯和路径,以及买到东西多寡的分析,所以影响的因素和对应的名词有三个「卖场 →状态」、「饮料 →观察」、「饮料重量 →N( μ, Σ )」,目标是从这三者中计算出最可能是圆仔的习惯 — — 买东西的路径机率、选择买哪种饮料的机率、得到此饮料重量的机率。

一定会有人觉得紧张该怎么办,其实也不用怎么办啦!! 跟刚刚计算的方法差不多,只是多了要更新「平均值 μ」和「共变异数 Σ」而已
在这里插入图片描述
YA! 我们终于结束 Hidden Markov Model 系列啦!! 给自己一个欢呼吧! 其实一切都不难,不要看到数学是就害怕了。

Reference:
(1)算法笔记- Hidden Markov Model
(2)Hidden Markov Models — Stanford University

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python网络爬虫分步走】使用LXML解析网页数据

Python网络爬虫分步走 – 使用LXML解析网页数据 Web Scraping in Python - Using LXML to Parse Web Data By Jackson@ML Lxml作为Python的第三方库,提供易用的且功能强大的API,用来解析XML和HTML文档。事件驱动的API被用于分步骤解析。 本文简要介绍使用lxml库解析网页的基…

UML与设计模式

1、关联关系 关联关系用于描述不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。关联关系是一种静态关系,通常与运行状态无关,而是由“常识”、“规则”、“法律”等因素决定的,因此关联关系是一种强关联的关…

北斗三代一体式数传终端短报文

北斗三代一体式数传终端短报文M20C-V30针对船载通信和导航应用推出的一款支持北斗 RDSS/RNSS 功能的船载一体机。北斗数传终端内部集成了北斗多频天线、射频、基带以及主控等功能单元,可实现 RDSS 定位、短报文通信和 RNSS 导航定位等功能。M20C-V30型北斗数传终端体…

牛客练习题打卡(06-15)

run方法线程执行体 .start方法开启多线程 在java中 , 整数类型默认int,带小数默认double ; 如果要指定长整型加L;如果要指定为单精度加F ; 在java中,重载要求方法名相同, 参数列表必须不同(个数不同、或类型不同、参数…

Nginx+KeepAlived高可用负载均衡集群的部署

目录 一.KeepAlived补充知识 1.一个合格的群集应该具备的特点 2.健康检查(探针)常用的工作方式 3.相关面试问题 问题1 问题2 二.Keepealived脑裂现象 1.现象 2.原因 硬件原因 运用配置原因 3.解决 4.预防 方法1 方法2 方法3 方法4 三.…

WWDC 2024 回顾:Apple Intelligence 的发布与解析

一年一度的苹果全球开发者大会(WWDC)如期而至,2024 年的 WWDC 再次成为科技界的焦点。本次发布会中,苹果正式推出了他们在 AI 领域的全新战略——Apple Intelligence。这一全新概念旨在为用户打造“强大、易用、全面、个性化、注重…

DC/AC电源模块:为电动车充电基础设施提供高效能源转换

BOSHIDA DC/AC电源模块:为电动车充电基础设施提供高效能源转换 DC/AC电源模块是一种用于电动车充电基础设施的重要组件,它能够实现高效能源转换。在电动车的普及和推广过程中,DC/AC电源模块的重要性日益凸显。本文将从DC/AC电源模块的基本原…

CSS 实现个人资料卡

CSS 实现个人资料卡 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"imgBox"><img src"./bg.jpg" /></div><div class"content"><div class"details&quo…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…

38、基于卷积神经网络(CNN)的车牌自动识别系统(matlab)

1、原理及流程 1&#xff09;原理 CNN&#xff08;卷积神经网络&#xff09;是一种深度学习模型&#xff0c;可以用于图像识别和分类任务。车牌自动识别系统的原理基本上就是使用CNN模型对车牌图像进行处理和识别。 首先&#xff1a;系统需要收集大量的含有车牌的图像数据作…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南&#xff1a;如何用java写一个网站 Java 作为一门强大的编程语言&#xff0c;在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行&#xff0c;但 Java 凭借其稳定性、可扩展性和丰富的生态系统&#xff0c;仍然…

【SpringBoot】SpringBoot:构建实时聊天应用

文章目录 引言项目初始化添加依赖 配置WebSocket创建WebSocket配置类创建WebSocket处理器 创建前端页面创建聊天页面 测试与部署示例&#xff1a;编写单元测试 部署扩展功能用户身份验证消息持久化群组聊天 结论 引言 随着实时通信技术的快速发展&#xff0c;聊天应用在现代We…

redis aof写入以及aof重写的源码分析

这里写目录标题 版本aof的面试问题aof正常写入流程aof重写流程 版本 redis&#xff1a;6.2.7 aof的面试问题 最近找工作&#xff0c;面试被问倒了&#xff0c;记录一下 比如redis的aof指令会不会丢失&#xff1f;比如在重写aof的什么新来的操作怎么办&#xff1f; 在重写的…

【云计算】Docker部署Nextcloud网盘并实现随地公网远程访问

配置文件 切换root权限&#xff0c;新建一个nextcloud的文件夹&#xff0c;进入该目录&#xff0c;创建docker-compose.yml [cpslocalhost ~]$ su root Password: 666666 [rootlocalhost cps]# ls Desktop Documents Downloads Music Pictures Public Templates Vide…

【面经总结】Java集合 - Map

Map 概述 Map 架构 HashMap 要点 以 散列(哈希表) 方式存储键值对&#xff0c;访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数&#xff1a;初始容量和负载因子。 初始容量&#xff1a;哈希表创建时的容量负载因子&#xff1a;其容量自动扩容之前被允许的最大…

CPP多线程

什么是多线程&#xff1f; 多线程是一种允许程序同时运行多个线程的技术。每个线程可以执行不同的任务&#xff0c;这在处理需要并发执行的操作时&#xff08;例如&#xff0c;处理多个客户端的网络服务器&#xff0c;或者图形用户界面应用程序&#xff09;非常有用。多线程能够…

Github 2024-06-13开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2Shell项目1TypeScript项目1Swift项目1PHP项目1Blade项目1JavaScript项目1从零开始构建你喜爱的技术 创建周期:2156…

MySQL数据库管理(一)

目录 1.MySQL数据库管理 1.1 常用的数据类型​编辑 1.2 char和varchar区别 2. 增删改查命令操作 2.1 查看数据库结构 2.2 SQL语言 2.3 创建及删除数据库和表 2.4 管理表中的数据记录 2.5 修改表名和表结构 3.MySQL的6大约束属性 1.MySQL数据库管理 1.1 常用的数据类…

ElementPlus非表单组件ElUpload值更新后校验不消失问题

项目场景&#xff1a; el-form表单中有一个上传组件&#xff0c;有必填校验。 问题描述 先触发表单的必填校验(点击提交按钮)&#xff0c;然后再上传文件&#xff0c;必填校验的提示一直存在&#xff0c;如果再次点击提交&#xff0c;手动触发表单校验&#xff0c;必填校验消…