近似推断 - 期望最大化(EM)篇
前言
近似推断是统计学和机器学习中一个至关重要的领域,尤其在处理复杂模型和不完全数据时显得尤为重要。期望最大化( Expectation Maximization \text{Expectation Maximization} Expectation Maximization,简称 EM \text{EM} EM)算法是近似推断中的一种重要方法,它专门用于解决含有隐变量的参数估计问题。在实际应用中,我们常常面临数据不完整或属性缺失的情况,这时传统的参数估计方法便显得力不从心。而 EM \text{EM} EM算法通过迭代的方式,巧妙地利用现有数据对隐变量进行估计,并据此优化模型参数,从而为我们提供了一种有效的解决方案。
序言
EM \text{EM} EM算法的核心思想在于其两个交替进行的步骤: E-step \text{E-step} E-step(期望步骤)和 M-step \text{M-step} M-step(最大化步骤)。在 E-step \text{E-step} E-step中,我们根据当前的参数估计值,计算出隐变量的期望值;而在 M-step \text{M-step} M-step中,我们则利用这些期望值来重新估计模型参数,以最大化似然函数。这两个步骤不断迭代,直至收敛至最优解。这种迭代优化的方式使得 EM \text{EM} EM算法在处理复杂模型和不完全数据时具有显著的优势。
期望最大化
-
我们介绍的第一个最大化下界 L \mathcal{L} L 的算法是期望最大化 ( expectation maximization, EM \text{expectation maximization, EM} expectation maximization, EM) 算法。
- 在潜变量模型中,这是一个非常热门的训练算法。
- 在这里我们描述 Neal and Hinton (1999) \text{Neal and Hinton (1999)} Neal and Hinton (1999) 所提出的 EM \text{EM} EM算法。
- 与大多数我们在本章中介绍的其他算法不同的是, EM \text{EM} EM并不是一个近似推断算法,但是是一种能够学到近似后验的算法。
-
EM \text{EM} EM算法包含了交替进行两步运算直到收敛的过程:
- E \textbf{E} E步 ( expectation step \text{expectation step} expectation step):
- 令 θ ( 0 ) \boldsymbol{\theta}^{(0)} θ(0) 表示在这一步开始时的参数值。
- 对任何我们想要训练的(对所有的或者 minibatch \text{minibatch} minibatch数据均成立)索引为 i i i 的训练样本 v ( i ) \boldsymbol{v}^{(i)} v(i) 令 q ( h ( i ) ∣ v ) = p ( h ( i ) ∣ v ( i ) ; θ ( 0 ) ) q(\boldsymbol{h}^{(i)} \mid \boldsymbol{v}) = p(\boldsymbol{h}^{(i)} \mid \boldsymbol{v}^{(i)}; \boldsymbol{\theta}^{(0)}) q(h(i)∣v)=p(h(i)∣v(i);θ(0))。
- 通过这个定义,我们认为 q q q 在当前参数 θ ( 0 ) \boldsymbol{\theta}^{(0)} θ(0) 下定义。
- 如果我们改变 θ \boldsymbol{\theta} θ,那么 p ( h ∣ v ; θ ) p(\boldsymbol{h} \mid \boldsymbol{v}; \boldsymbol{\theta}) p(h∣v;θ) 将会相应的变化,但是 q ( h ∣ v ) q(\boldsymbol{h} \mid \boldsymbol{v}) q(h∣v) 还是不变并且等于 p ( h ∣ v ; θ ( 0 ) ) p(\boldsymbol{h} \mid \boldsymbol{v}; \boldsymbol{\theta}^{(0)}) p(h∣v;θ(0))。
- M \textbf{M} M步 ( maximization step \text{maximization step} maximization step):
- 使用选择的优化算法完全地或者部分地最大化关于 θ \boldsymbol{\theta} θ 的:
∑ i L ( v i , θ , q ) \sum\limits_i\mathcal{L}(\boldsymbol{v}^{i},\boldsymbol{\theta},q) i∑L(vi,θ,q) — 公式1 \quad\textbf{---\footnotesize{公式1}} —公式1
- 使用选择的优化算法完全地或者部分地最大化关于 θ \boldsymbol{\theta} θ 的:
- E \textbf{E} E步 ( expectation step \text{expectation step} expectation step):
-
这可以被看做通过坐标上升算法来最大化 L \mathcal{L} L。在第一步中,我们更新 q q q 来最大化 L \mathcal{L} L,而另一步中,我们更新 θ \boldsymbol{\theta} θ 来最大化 L \mathcal{L} L。
-
基于潜变量模型的随机梯度上升可以被看做是一个 EM \text{EM} EM算法的特例,其中 M \textbf{M} M步包括了单次梯度操作。
- EM \text{EM} EM算法的其他变种可以实现多次梯度操作。
- 对一些模型族来说, M \textbf{M} M步甚至可以通过推出解析解直接完成,不同于其他方法,在给定当前 q q q 的情况下直接求出最优解。
-
即使 E \textbf{E} E 步采用的是精确推断,我们仍然可以将 EM \text{EM} EM算法视作是某种程度上的近似推断。
- 具体地说, M \textbf{M} M步假设了一个 q q q 分布可以被所有的 θ \boldsymbol{\theta} θ 值分享。
- 当 M \textbf{M} M步越来越远离 E \textbf{E} E步中的 θ ( 0 ) \boldsymbol{\theta}^{(0)} θ(0) 时,这将会导致 L \mathcal{L} L 和真实的 log p ( v ) \log p(\boldsymbol{v}) logp(v) 的差距。
- 幸运的事,当下一个循环时, E \textbf{E} E 步把这种差距又降到了 0 0 0。
-
EM \text{EM} EM算法包含了一些不同的解释。
- 首先,学习过程的一个基本思路就是,我们通过更新模型参数来提高整个数据集的似然,其中缺失变量的值是通过后验分布来估计的。
- 这种特定的性质并不仅仅适用于 EM \text{EM} EM算法。
- 例如,使用梯度下降来最大化似然函数的对数这种方法也利用了相同的性质。
- 计算对数似然函数的梯度需要对隐藏单元的后验分布来求期望。
- EM \text{EM} EM算法另一个关键的性质是当我们移动到另一个 M \textbf{M} M 时候,我们仍然可以使用旧的 q q q。
- 在传统机器学习中,这种特有的性质在推导大 M \textbf{M} M步更新时候得到了广泛的应用。
- 在深度学习中,大多数模型太过于复杂以致于在最优大 M \textbf{M} M步更新中很难得到一个简单的解。
- 所以 EM \text{EM} EM算法的第二个特质,更多为其所独有,较少被使用。
总结
期望最大化算法作为近似推断中的一种重要工具,为我们提供了一种有效的处理不完全数据和隐变量问题的解决方案。通过迭代优化的方式, EM \text{EM} EM算法能够逐步逼近最优解,从而实现对模型参数的准确估计。无论是在科学研究、社会调查,还是在经济学、医学等领域的实际应用中, EM \text{EM} EM算法都展现出了其强大的实用性和灵活性。因此,深入理解和掌握EM算法的原理和应用,对于我们提高数据处理和模型优化的能力具有重要意义。
往期内容回顾
近似推断 - 引言篇
相关文章:
近似推断 - 期望最大化(EM)篇
前言 近似推断是统计学和机器学习中一个至关重要的领域,尤其在处理复杂模型和不完全数据时显得尤为重要。期望最大化( Expectation Maximization \text{Expectation Maximization} Expectation Maximization,简称 EM \text{EM} EM࿰…...
arp欺骗及其实验
ARP欺骗(ARP Spoofing)是一种网络攻击技术,攻击者通过伪造ARP(地址解析协议)消息,将其MAC地址与目标IP地址关联,从而实现对网络流量的截获、篡改或重定向。以下是ARP欺骗的详细信息:…...
HDU The Boss on Mars(容斥原理)
题目大意: ACM 有 n 名员工,现在是他们从老板那里拿薪水的时候了。所有员工都从 1 到 n 编号。原因不明,如果员工的工作编号是 k,他今年可以获得 k^4 Mars 美元。所以为 ACM 工作的员工非常富有。 因为员工人数太多,…...
nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理
目录 1. 数据集处理 1.1 实现脚本 1.2 json文件 2. 设置读取路径 2.1 设置路径 2.2 数据集转换 2.3 数据集预处理 2.4 训练(3d_fullres) 3. 训练结果展示 关于nnUnet 数据集的处理和环境搭建,参考上文:第四章:nnUnet大模…...
Java中的数据结构与集合源码
目录 一、数据结构 1.1 数据结构概念 1.2 研究对象 1.3 常见存储结构 1.3.1 数组 1.3.2 链表 1.单向链表 2.双向链表 1.3.3 二叉树 1.3.4 栈(FILO,先进后出) 1.3.5 队列(FIFO,先进先出) 二、集合…...
Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端
一、背景 上文已把覆盖率数据采集好了,并提供远程连接的tcp地址及端口。 jacoco cli文档jacoco cli jar包 jacococli.jar 我下载好了,放在github工程里。 本文主要是介绍如何使用jacoco cli 客户端读取并生成覆盖率报告。 二、使用 1、dump覆盖率统…...
Deepin V23 / 统信UOS 下安装与配置 tftp
几个月前,我将开发系统从 ubuntu 切换到 Deepin,当时写过一篇文章《使用国产操作系统作为开发系统》。几个月下来,没有感觉有什么不适应,Ubuntu 能做的事情,在 Deepin 上都能做。而且有 UOS 应用商店的加持,…...
java基础学习:定时任务常见实现方式
一、Timer解析 TaskQueue:小顶堆,存放timeTask。 TimerThread:任务执行线程 死循环不断检查是否有任务需要开始执行,有就执行它。始终是一个线程在执行。 单线程执行任务,任务有可能相互阻塞: schedul…...
句柄是什么?有什么用?举例说明
在C#编程中,“句柄”(Handle)是一个与操作系统资源相关联的标识符。句柄是一个指针或者索引,用于在程序代码中引用系统资源,如窗口、文件、线程等。由于直接操作这些资源非常危险且复杂,操作系统提供句柄作…...
Jenkins学习笔记
Jenkins学习笔记 NumTitleComments1官网 官方网站 中文文档2基础Jenkins基础3groovy1.groovy语法 2.groovy 入门4pipelinepipeline基本语法介绍5Github actiongithub action6Shared library1 2...
AI 解读软考高级操作系统顺序存取、直接存取、随机存取、相联存取的区别
这几个术语描述了不同类型的存储方式,它们涉及数据存取的顺序和灵活性。为了更好地理解,我们可以先通过生活中的例子来感受这些概念。 生活化例子 1. 顺序存取: 想象你在看一盘录像带(比如老式的VHS录像带)。如果你想…...
STM32烧写准备
目录 一.安装stlink驱动二.烧写器固件升级三.安装烧写程序四.进行测试1.流水灯 五.出现的问题1.升级固件问题2.测试时连接问题 一.安装stlink驱动 amd64是用在64位的,x86用在32位;双击运行即可 出现以下情况表示安装完成当连接上STM32开发板时ÿ…...
为Windows Terminal 配置zsh + Oh-My-Zsh!
参考: 为Windows Terminal 配置zsh Oh-My-Zsh! [非WSL] https://zhuanlan.zhihu.com/p/625583037 Package: zsh - MSYS2 Packages 安装配置 1、安装 Windows Terminal(必须) Method 1: 打开 Microsoft Store,搜索 “Windows Terminal”。点击 “…...
RNN、LSTM 与 Bi-LSTM
一. RNN 循环神经网络(Recurrent Neural Network, RNN)是深度学习领域一类具有内部自连接的神经网络能够学习复杂的矢量到矢量的映射。 最大特点:前面的序列数据可以用作后面的结果预测中。 一个简单的循环神经网络结构,其结构包…...
第一性原理
第一性原理是指从最基本的真理出发,分析和推导复杂现象或问题,不依赖于传统的假设或经验,而是从根本的原则出发进行思考。 将复杂问题拆解为更小的部分,逐一分析。在理解了这些基本部分的基础上,再进行组合和构建&…...
DOM NamedNodeMap 接口详解
DOM NamedNodeMap 接口详解 引言 在文档对象模型(DOM)中,NamedNodeMap 接口提供了一种方式来操作元素的属性集合。它是一种特殊的 NodeList,其中的每个节点都有一个名称和值。本文将详细介绍 NamedNodeMap 接口,包括其属性、方法和使用场景。 NamedNodeMap 接口概述 N…...
EasyExcel自定义下拉注解的三种实现方式
文章目录 一、简介二、关键组件1、ExcelSelected注解2、ExcelDynamicSelect接口(仅用于方式二)3、ExcelSelectedResolve类4、SelectedSheetWriteHandler类 三、实际应用总结 一、简介 在使用EasyExcel设置下拉数据时,每次都要创建一个SheetWr…...
Burp Suite Professional 2024.9 for macOS x64 ARM64 - 领先的 Web 渗透测试软件
Burp Suite Professional 2024.9 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件 世界排名第一的 Web 渗透测试工具包 请访问原文链接:https://sysin.org/blog/burp-suite-pro-mac/ 查看最新版。原创作品,转载请保留出处。 作者主页࿱…...
使用Mock库进行依赖注入的实用指南
使用Mock库进行依赖注入的实用指南 在现代软件开发中,测试是确保代码质量的重要环节。尤其是在进行单元测试时,依赖注入(Dependency Injection, DI)是一种常用的设计模式,它可以帮助我们更好地管理依赖关系,提高代码的可测试性。本文将深入探讨如何使用Python的unittest…...
nosql课本习题
nosql题目 1. 文档数据库相比其他 NoSQL 的突出优势和特点是什么? 答案: 文档数据库的突出优势在于它的灵活性和可扩展性。不同于传统的关系型数据库,文档数据库允许存储半结构化和非结构化数据,每个文档可以有不同的字段&#x…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
python可视化:俄乌战争时间线关键节点与深层原因
俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...
