EM算法与变分推断

符号说明

  • x x x:已观测变量的集合 { x 1 , x 2 , x 3 , . . . , x N } \{x_1,x_2,x_3,...,x_N\} {x1,x2,x3,...,xN},长度为 N N N
  • z z z:隐变量(未观测变量)
  • θ \theta θ:分布参数
  • ( x , z ) (x,z) (x,z):完整数据
  • p ( x ∣ θ ) p(x|\theta) p(xθ):似然函数

KL散度

  • KL散度用于衡量原始分布与近似分布的差异,从公式来看,其计算的是原始分布与近似分布之间的对数差的期望,公式如下
    D K L ( p ∣ ∣ q ) = E [ ln ⁡ p ( x ) − ln ⁡ q ( x ) ] = ∑ i = 1 N p ( x i ) ln ⁡ p ( x i ) q ( x i ) = ∫ x p ( x i ) ln ⁡ p ( x i ) q ( x i ) d x D_{KL}(p||q)=E[\ln p(x)-\ln q(x)]=\sum_{i=1}^Np(x_i)\ln \frac{p(x_i)}{q(x_i)}=\int_x p(x_i) \ln \frac{p(x_i)}{q(x_i)}dx DKL(p∣∣q)=E[lnp(x)lnq(x)]=i=1Np(xi)lnq(xi)p(xi)=xp(xi)lnq(xi)p(xi)dx
  • KL散度大于等于0

EM算法

EM算法原理

  • EM算法常用于估计参数的隐变量,它是一种迭代式的方法,其基本想法是:如果参数 θ \theta θ已知,则可以根据训练数据推断出最优隐变量 z z z的值( E E E步)反之,若 z z z已知,则可以方便地对参数 θ \theta θ做极大似然估计( M M M步)
  • 假设我们要对参数 θ \theta θ做极大似然估计,则需要最大化对数似然
    ln ⁡ p ( x , z ∣ θ ) \ln p(x,z|\theta) lnp(x,zθ),但由于隐变量 z z z是未知的,因此上式无法直接求解,我们可以通过对上式计算关于 z z z的期望来最大化已观测数据x的边缘似然,即最大化
    ln ⁡ p ( x , z ∣ θ ) = ∫ z ln ⁡ p ( x , z ∣ θ ) p ( z ∣ x , θ ) d z \ln p(x,z|\theta)=\int_z \ln p(x,z|\theta)p(z|x,\theta)dz lnp(x,zθ)=zlnp(x,zθ)p(zx,θ)dz
  • 于是,EM算法的原型便是,以初始值 θ 0 \theta^0 θ0为起点,对上式可迭代执行以下步骤直至收敛:
    • 基于第 t t t步的 θ t \theta^t θt推断隐变量 z z z的分布 p ( z ∣ x , θ ) p(z|x,\theta) p(zx,θ)
    • 基于已观测变量 x x x p ( z ∣ x , θ ) p(z|x,\theta) p(zx,θ)对参数 θ \theta θ做极大似然估计得到 θ t + 1 \theta^{t+1} θt+1
  • 由此,我们可以得出EM算法的迭代方程
    θ t + 1 = arg max ⁡ θ ∫ z ln ⁡ p ( x , z ∣ θ t ) p ( z ∣ x , θ t ) d z \theta^{t+1}=\argmax_\theta\int_z \ln p(x,z|\theta^t)p(z|x,\theta^t)dz θt+1=θargmaxzlnp(x,zθt)p(zx,θt)dz

变分推断

问题背景

  • 通常而言,机器学习中需要解决的问题是由观察到的变量 x x x来估计隐变量 z z z的分布以及参数 θ \theta θ,也就是求解 p ( z ∣ x , θ ) p(z|x,\theta) p(zx,θ)以及 θ \theta θ

    用公式来表达,变量集合 x x x的联合分布为 p ( x ∣ θ ) = ∏ i = 1 N ∫ z p ( x i , z ∣ θ ) d z p(x|\theta)=\prod_{i=1}^N\int_zp(x_i,z|\theta)dz p(xθ)=i=1Nzp(xi,zθ)dz
    则其对应的对数似然函数就为
    ln ⁡ p ( x ∣ θ ) = ln ⁡ ∏ i = 1 N p ( x i , z ∣ θ ) = ∑ i = 1 N ln ⁡ [ ∫ z p ( x i , z ∣ θ ) d z ] \ln p(x|\theta)=\ln \prod_{i=1}^Np(x_i,z|\theta)=\sum_{i=1}^N\ln\left[\int_z p(x_i,z|\theta)dz\right] lnp(xθ)=lni=1Np(xi,zθ)=i=1Nln[zp(xi,zθ)dz]

  • 而概率模型中的参数估计通常以最大化对数似然函数为手段,对上式应用EM算法得到 θ t + 1 = arg max ⁡ θ ∫ z ln ⁡ p ( x , z ∣ θ t ) p ( z ∣ x , θ t ) d z \theta^{t+1}=\argmax_\theta\int_z \ln p(x,z|\theta^t)p(z|x,\theta^t)dz θt+1=θargmaxzlnp(x,zθt)p(zx,θt)dz p ( z ∣ x , θ t ) p(z|x,\theta^t) p(zx,θt)与隐变量 z z z的真实后验分布相等时, ∫ z ln ⁡ p ( x , z ∣ θ t ) p ( z ∣ x , θ t ) d z \int_z \ln p(x,z|\theta^t)p(z|x,\theta^t)dz zlnp(x,zθt)p(zx,θt)dz近似于对数似然函数,然而,由于隐变量 z z z是未知的,我们很难得知它的真实分布,因此我们实际使用的 p ( z ∣ x , θ t ) p(z|x,\theta^t) p(zx,θt)未必是隐变量 z z z的真实后验分布,而通常只是一个近似分布。

  • 因此,如何推断 z z z的真实后验分布 p ( z ∣ x , θ t ) p(z|x,\theta^t) p(zx,θt)成为了一个问题,此时我们便可以借助变分推断。假设我们现在要使用近似分布 q ( z ) q(z) q(z)去逼近真实分布 p ( z ∣ x , θ t ) p(z|x,\theta^t) p(zx,θt),我们可以很容易验证以下关系式
    ln ⁡ p ( x ∣ θ ) = L ( q ) + K L ( q ∣ ∣ p ) \ln p(x|\theta)=L(q)+KL(q||p) lnp(xθ)=L(q)+KL(q∣∣p)其中 L ( q ) = ∫ z ln ⁡ p ( x , z ∣ θ ) q ( z ) q ( z ) d z L(q)=\int_z \ln \frac{p(x,z|\theta)}{q(z)}q(z)dz L(q)=zlnq(z)p(x,zθ)q(z)dz K L ( q ∣ ∣ p ) = ∫ z ln ⁡ q ( z ) p ( z ∣ x , θ ) q ( z ) d z KL(q||p)=\int_z\ln \frac{q(z)}{p(z|x,\theta)}q(z)dz KL(q∣∣p)=zlnp(zx,θ)q(z)q(z)dz

  • 证明如下,通过将对数似然函数进行变换可以得到
    ln ⁡ p ( x ∣ θ ) = ln ⁡ p ( x , z ∣ θ ) − ln ⁡ p ( z ∣ x , θ ) = ln ⁡ p ( x , z ∣ θ ) q ( z ) − ln ⁡ p ( z ∣ x , θ ) q ( z ) \begin{aligned} \ln p(x|\theta) &= \ln p(x,z|\theta)-\ln p(z|x,\theta)\\ &= \ln \frac{p(x,z|\theta)}{q(z)}-\ln \frac{p(z|x,\theta)}{{q(z)}}\\ \end{aligned} lnp(xθ)=lnp(x,zθ)lnp(zx,θ)=lnq(z)p(x,zθ)lnq(z)p(zx,θ)对等式两边同时乘上 q ( z ) q(z) q(z)可得
    ln ⁡ p ( x ∣ θ ) q ( z ) = ln ⁡ p ( x , z ∣ θ ) q ( z ) q ( z ) − ln ⁡ p ( z ∣ x , θ ) q ( z ) q ( z ) \ln p(x|\theta)q(z) = \ln \frac{p(x,z|\theta)}{q(z)}q(z)-\ln \frac{p(z|x,\theta)}{{q(z)}}q(z) lnp(xθ)q(z)=lnq(z)p(x,zθ)q(z)lnq(z)p(zx,θ)q(z)等式两边同时对 z z z求积分,由于 ln ⁡ p ( x ∣ θ ) \ln p(x|\theta) lnp(xθ) z z z无关,因此积分后仍得原式,所以有
    ln ⁡ p ( x ∣ θ ) = ∫ z ln ⁡ p ( x , z ∣ θ ) q ( z ) q ( z ) d z − ∫ z ln ⁡ p ( z ∣ x , θ ) q ( z ) q ( z ) d z = ∫ z ln ⁡ p ( x , z ∣ θ ) q ( z ) q ( z ) d z + ∫ z ln ⁡ q ( z ) p ( z ∣ x , θ ) q ( z ) d z \begin{aligned} \ln p(x|\theta) &= \int_z \ln \frac{p(x,z|\theta)}{q(z)}q(z)dz-\int_z\ln \frac{p(z|x,\theta)}{{q(z)}}q(z)dz\\ &= \int_z \ln \frac{p(x,z|\theta)}{q(z)}q(z)dz+\int_z\ln \frac{q(z)}{p(z|x,\theta)}q(z)dz\\ \end{aligned} lnp(xθ)=zlnq(z)p(x,zθ)q(z)dzzlnq(z)p(zx,θ)q(z)dz=zlnq(z)p(x,zθ)q(z)dz+zlnp(zx,θ)q(z)q(z)dz L ( q ) = ∫ z ln ⁡ p ( x , z ∣ θ ) q ( z ) q ( z ) d z L(q)=\int_z \ln \frac{p(x,z|\theta)}{q(z)}q(z)dz L(q)=zlnq(z)p(x,zθ)q(z)dz K L ( q ∣ ∣ p ) = ∫ z ln ⁡ q ( z ) p ( z ∣ x , θ ) q ( z ) d z KL(q||p)=\int_z\ln \frac{q(z)}{p(z|x,\theta)}q(z)dz KL(q∣∣p)=zlnp(zx,θ)q(z)q(z)dz,则关系式得证。

  • 观察我们所得到的关系式,假如我们假设近似分布 q ( z ) q(z) q(z)无限接近于 p ( z ∣ x , θ ) p(z|x,\theta) p(zx,θ),那么KL散度便无限趋近于0,此时就有 ln ⁡ p ( x ∣ θ ) ≈ L ( q ) \ln p(x|\theta)\approx L(q) lnp(xθ)L(q)于是,我们就将最大化对数似然的问题就转化为找到一个q(z)能最大化 L ( q ) L(q) L(q)的问题

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

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

相关文章

pdffactory pro8.0虚拟打印机(附注册码)

PdfFactory pro是一款非常受欢迎的PDF虚拟打印机,可以帮助用户将你的其他文档保存为PDF格式。请为用户提供打印/发送/加密等多种实用功能,以及一套完善的PDF打印方案。 使用说明 下载pdfFactory Pro压缩包,解压后,双击exe文件&am…

LeetCode_LCR002做题总结(可变字符序列使用)

LCR 002. 二进制求和 方法一方法二遗落知识点字符串长度stringStringBuffer && StringBuilder 方法一 转换成十进制数,求和之后再转换成二进制数 class Solution {public String addBinary(String a, String b) {return Integer.toBinaryString(Integer.p…

算法提高之木棒

算法提高之木棒 核心思想:dfs 剪枝优化 1.搜索顺序优化:len从小到大遍历2**.剪枝(失败后):** (1) 跳过所有和第i根木棍相同长度的木棍(2) 如果当前木棍是新木棒的第一根就失败了 则之后不会搜到方案 return false(3) 下一根失败但是上一根成…

java获取到泛型信息后,需要包装到另一个父类型中。比如读取类型R,包装成Res<R>

问题 对于json解析来说&#xff0c;我们一般是通过jackson的TypeReference或者XXX.class来制定类型&#xff08;其他json框架同理&#xff09;&#xff0c;比如下列代码&#xff1a; ResponseBody<XxxClass> body JsonUtils.parseObject(response, new TypeReference&…

vue + element-plus项目做管理系统常用的组件,以及一些方便开发的设置

1.简化路径 //vite.consfig.ts import { defineConfig, ConfigEnv } from vite import vue from vitejs/plugin-vue import path from path export default defineConfig(({ command }: ConfigEnv) > {return {plugins: [vue(),],resolve: {alias: {: path.resolve(__dirn…

EEL中 python端的函数名是如何传递给js端的

python端的函数名是如何传递给js端的 核心步骤&#xff1a;将函数名列表注入到动态生成的 eel.js 中&#xff0c;这样前端一开始引用的eel.js本身已经包含有py_function的函数名列表了。你打开开发者工具看看浏览器中的 eel.js文件源代码就知道了。 具体实现&#xff1a; # 读…

全面解析OpenAI的新作——GPT-4o

5月14日凌晨1点、太平洋时间的上午 10 点&#xff0c;OpenAI的GPT-4o的横空出世&#xff0c;再次巩固了其作为行业颠覆者的地位。GPT-4o的发布不仅仅是一个产品的揭晓&#xff0c;它更像是向世界宣告AI技术已迈入了一个全新的纪元&#xff0c;连OpenAI的领航者萨姆奥特曼也不禁…

楼宇智慧公厕建设新方案-集成更简单!成本价更低!

在当今的大厦和写字楼中&#xff0c;公厕面临着诸多痛点。 办公楼公厕常常存在厕位难找的问题&#xff0c;使用者不得不花费时间逐一查看&#xff0c;导致效率低下&#xff1b;环境质量也令人担忧&#xff0c;异味、脏污等情况时有发生&#xff0c;影响使用者的心情和健康&…

【simulink】Scrambling 加扰

https://ww2.mathworks.cn/help/comm/ug/additive-scrambling-of-input-data-in-simulink.html 草图 simulink 代码图

leetcode-11. 盛最多水的容器(双指针)

11. 盛最多水的容器 /*** param {number[]} height* return {number}*/ var maxArea function (height) {// 时间复杂度 O(n)// 空间复杂度 O(1)let len height.length;let left 0,right len - 1;let res 0;while (left < right) {let area Math.min(height[left], h…

QT状态机10-QKeyEventTransition和QMouseEventTransition的使用

1、QMouseEventTransition的使用 首先明白 QMouseEventTransition 继承自 QEventTransition类。 关于QEventTransition类的使用,可参考 QT状态机9-QEventTransition和QSignalTransition的使用 回顾 QT状态机9-QEventTransition和QSignalTransition的使用 中的状态切换代码,如…

零基础10 天入门 Web3之第3天

10 天入门 Web3之第3天 什么是以太坊&#xff0c;以太坊能做什么&#xff1f;Web3 是互联网的下一代&#xff0c;它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术&#xff0c;该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划&…

AI+新能源充电桩数据集

需要的同学私信联系&#xff0c;推荐关注上面图片右下角的订阅号平台 自取下载。 随着我国新能源汽车市场的蓬勃发展&#xff0c;充电桩的需求量日益增加&#xff0c;充电桩的智能化程度不仅影响充电站运营商的经营效益&#xff0c;也大大影响着用户的充电体验。AI技术可以涵盖…

Flutter 中的 Listener 小部件:全面指南

Flutter 中的 Listener 小部件&#xff1a;全面指南 在Flutter中&#xff0c;Listener是一个可以监听多种类型事件的通用组件&#xff0c;它可以用来监听如滚动、震动、焦点等事件。Listener通常与GestureDetector等组件结合使用&#xff0c;以实现对用户交互的响应。本文将提…

python “名称空间和作用域” 以及 “模块的导入和使用”

七、名称空间和作用域 可以简单理解为存放变量名和变量值之间绑定关系的地方。 1、名称空间 在 Python 中有各种各样的名称空间&#xff1a; 全局名称空间&#xff1a;每个程序的主要部分定义了全局的变量名和变量值的对应关系&#xff0c;这样就叫做全局名称空间 局部名称…

04-单片机商业项目编程,从零搭建低功耗系统设计

一、本文内容 上一节《03-单片机商业项目编程&#xff0c;从零搭建低功耗系统设计-CSDN博客》我们确定了设计思路&#xff0c;并如何更有效的保持低功耗&#xff0c;这节我们就准备来做软件框架设计。在AI飞速发展的时代&#xff0c;我们也会利AI来辅助我们完成&#xff0c;让自…

浅谈C++ overload(重载) override(覆盖) overwrite(重写)

目录 1. 名词辨析2 含义解析1 overload重载2 override覆盖3 overwrite重写 3 区别4 代码示例 1. 名词辨析 关于这3个名词的中文翻译&#xff1a; overload翻译为重载&#xff0c;基本是没有歧义的&#xff1b;override和overwrite的翻译&#xff0c;我在参考了cppreference中…

.NET周刊【5月第2期 2024-05-12】

国内文章 C#在工业数字孪生中的开发路线实践 https://mp.weixin.qq.com/s/b_Pjt2oii0Xa_sZp_9wYWg 这篇文章探讨了C#在工业数字孪生技术中的应用&#xff0c;介绍了三种基于C#的数字孪生系统实现方案&#xff1a; WPF Unity&#xff1a;结合WPF技术和Unity引擎&#xff0c…

接口、会话控制

文章目录 接口介绍RESTful APIjson-server接口测试工具apipost公共参数和文档功能 会话控制cookie介绍和使用运行流程浏览器中操作Cookieexpress中cookie操作 Sessionsession运行流程&#xff1a;session中间件配置session 和 cookie 的区别CSRF跨站请求伪造 tokenJWT介绍与演示…

idea控制台日志控制

1.清除控制台log日志 测试的时候&#xff0c;控制台打印的日志比较多&#xff0c;速度有点慢而且不利于查看运行结果&#xff0c;所以接下来我们把这个日志处理下: 取消初始化spring日志打印&#xff0c;resources目录下添加logback.xml&#xff0c;名称固定&#xff0c;内容如…