隐式马尔科夫模型中的Baum-Welch算法详解

2023-10-14 07:50

本文主要是介绍隐式马尔科夫模型中的Baum-Welch算法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、Baum-Welch算法流程
  • 二、EM算法公式推导
    • 1)EM算法基础概念
    • 2)E步骤
    • 3)M步骤
  • 三、前置内容
    • a)条件概率和联合概率
    • b)拉格朗日乘子法的理解
    • c)隐数据
    • d)完全数据
  • 四、引用


前言

本篇分别从Baum-Welch算法流程和EM算法中所涉及公式的推导这两个方面来介绍Baum-Welch算法,旨在读者能理解如何使用Baum-Welch算法,以及掌握算法步骤中公式的来龙去脉。
为了保证阅读效率,一些前置知识点会被安排在文章末尾。
有任何的建议欢迎在评论区留言,随时看随时修改哦~谢谢大家【鞠躬


一、Baum-Welch算法流程

  1. 输入训练观测数据O=(o1,o2,…,oT). 同时初始化模型参数,从n=0开始,选取a0,b0,π0,得到模型λ0

  2. 递推n,n=1,2,…,n
    在这里插入图片描述
    接着用观测数据O和λn开始计算
    图中公式的γ和ζ将在EM公式推导中介绍。
    3)得到模型参数λ(n+1)
    根据第二步中即将展现的推导可知,在n+1时可以获得极大值。
    在这里插入图片描述
    第四步需要我们自己设置2个阈值,用来停止迭代。

二、EM算法公式推导

1)EM算法基础概念

首先,假设我们有许多组模型参数,λ1~λn,求每一个模型和O匹配的可能性(概率)P(O|λ),那么可能性最大的那个就最有可能成为隐式马尔科夫模型的参数。
O是观测序列,I是状态序列,λ是参数,λ中有3个子参数,分别是
在这里插入图片描述
同时隐式马尔科夫模型公式在EM算法中的意义为:
在这里插入图片描述
EM算法,最大似然估计,简单的说就是根据结果找出最有可能的条件。
隐式马尔科夫模型可以通过EM算法实现其参数学习。EM算法在隐式马尔科夫模型学习中的具体体现就是Baum-Welch 算法。
EM算法可以分成两个步骤,1:E步骤;2:M步骤。

2)E步骤

1)首先先进行初始化。
观测数据O=(o1,o2,…,oT), 所有隐数据写成I=(i1,i2,…,iT),确定完全数据【观测和状态在一起就是完全数据,借用完全数据的公式求这里的不完全数据(I是隐数据)】(O,I)=(o1,o2,…,oT,i1,i2,…,iT).的对数似然函数logP(O,I|λ)
在这里我们引入一个函数
在这里插入图片描述

第一个λ是表示要极大化的参数,第二个横线λ是参数当前的估计值,每一次的迭代都是在求Q函数及其极大值。
定义:完全数据的对数似然函数,在给定观测数据O,和当前参数横线λ下,隐数据I的可能性的期望称为Q函数。
Q函数在E步骤中就是求到函数内两个λ。9.11是Q函数之前的样子,E是求和符号,Z是I θ是λ,Y是O 展开就变成10.33了
在这里插入图片描述
【极大似然估计值】也就是【最大可能性的条件】。对数似然函数(9.12)和下面这一行很像(10.32)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后用琴声不等式得到下界,E(φ(x))≥ φ(E(x)),琴声不等式得到的下界会更加松【这是官方说法】更加靠下,所以在迭代上升时,上升空间更多。在优化尺度迭代中同样用到了琴生不等式,
在这里插入图片描述
此时只要等式右边【下界】变大左边一定变大,如果右边是极大值了,左边也一定是极大值了。
在这里插入图片描述
对于一个θi找到最大的θ,也就是最符合θi的参数,将其作为θ(i+1)放入下次迭代。所以对于θi来说,θ(i+1)总是极大的。
在这里插入图片描述
上图中9.17的第二行,是由第一行L(θi)展开以后log加法转乘法与第二项分母相消得来。
至此,Q函数的公式推完了,让我们继续来看E步骤的后续。
在这里插入图片描述
这个公式要注意几点不一样的,对数只取前面一部分。
在这里插入图片描述要放在log的外面。
第二,在这里插入图片描述是一个确定的值,在0到1之间,根据横线λ算出。根据9.17的公式,10.33就是在对隐函数I求期望值。
在这里插入图片描述
这里πi1是初始点,bi1观测概率,o1是当前观测,ai1i2是状态转移概率。把这个代入Q再展开
在这里插入图片描述
λ被展开成三个参数【λ参数的调用就是用到哪个调哪个,但是存放是一起存放的】,log可以吧乘转为加法。

3)M步骤

EM算法的M步,就是分别计算刚刚3项,然后对各项分别极大化,这里统一使用拉格朗日乘子法。
使用拉格朗日乘子法的原因是,拉格朗日乘子法可以对有约束等式求极值,具体在前置内容的b点中。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
上面三个公式最后的结果分别是
在这里插入图片描述
这时我们引入2个变量:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在ζ中使用的前后项的递推计算,所以我们使用
在这里插入图片描述
最后对γ和ζ的期望值进行归纳
在这里插入图片描述
随后我们将γ和ξ代入三个拉格朗日之后的参数公式
在这里插入图片描述
接着得到
在这里插入图片描述
10.39、10.40、10.41便是BW算法流程中的三个公式形式。

三、前置内容

a)条件概率和联合概率

先讲一个知识点,条件概率和联合概率
P(A|B)是在B发生的情况下,A发生的概率
P(A,B)是A,B同时发生的概率
乍一看是一样的。
举个例子
52张扑克牌。我们要找出红色4,红色四分为桃心和方片,所以有两张
P(4|红) 是先分出红黑,再找出4,
在这里插入图片描述
所以P(4|红)=1/13
P(4,红)是在全部牌中分出红色4
P(4,红)= 1/26
因为总池子不一样,条件概率的池子由条件的个数决定,联合概率的池子是不带条件的全体。
但是在不知道准确个数,没法通过比例的方法求解时,条件概率必须通过朴素贝叶斯才能求得,
否则简单相乘求的就是联合概率。

b)拉格朗日乘子法的理解

在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。
一般情况下,最优化问题通常是指对于给定的函数f(x),求其在指定作用域上【作用域即约束】的全局最小值(最小值与最大值很容易转化,所以都一样,比如两边求倒数)
具体推导不展开,但是拉格朗日乘子法可以将带有约束的等式转化为无约束等式,这就是在等式约束时使用拉格朗日乘子法的原因。

c)隐数据

上文中E步骤中的隐数据为HMM模型本身自带,因为HMM模型本身就有未知条件和未知参数。

d)完全数据

上文说过完全数据必须要观测和状态同时存在且显式,所以HMM模型是不完全数据,但是如果我们需要确定选用什么样的概率模型,就必须要先假设数据形态为完全数据。举个例子,在上文中完全数据的形态是对数似然函数,所以我们选用对数似然函数作为不完全数据的概率模型。

四、引用

1)李航 (2011). 《统计学习方法》

这篇关于隐式马尔科夫模型中的Baum-Welch算法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/209133

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input