变分推断(Variational Inference)

article/2025/8/22 17:22:54

1.变分推断简称VI,是一种确定性近似推断方法

2.基于平均场理论的VI是假设q(z)可以分解为M个独立qi

3.采取坐标上升法可以求解VI问题

4.VI有两个局限:假设太强,同时积分也不一定能算

5.为了解决积分不能算问题,考虑采取随机梯度法进行求解,这就有SGVI

6.变分L(Φ)关于q(z)的梯度通过期望相联系,这个期望通过蒙特卡洛采样来近似

7.由于期望有个log符号,采样需要很多样本,且方差很大

8.通过重参数化技巧解决方差大的问题,主要思想是把z的随机成分去掉,转移到一个确定性分布p(ε)

变分推断,英文Variational Inference,简称VI,是一种近似推断的方法,属于确定性近似。它跟EM算法都是求解隐变量后验分布的算法,在EM算法中,隐变量z和未知参数θ是分开的,在变分推断里面,它们合并在一起,依然用z代替。

因此,其推导过程与EM算法差不多,建议读者先熟悉小编在文章EM算法的推导过程。

公式推导

展开对数似然函数:


两边同时乘以q(z),

做积分与恒等转换:

红色部分就是我们在EM算法提到的ELBO,这里我们称为变分,记做L(q);蓝色部分为KL散度,恒大于等于0.

在EM算法中我们介绍过,E步本质是求隐变量后验分布p(z|x),如果没办法得到该后验,一种思想是使得q(z)去逼近p(z|x)

这样就能让KL散度为0,那么求解变分的最大值,就是似然对数的最大值。因此,优化问题变为:

下面我们就求解q(z).

第一步我们利用了统计物理学的平均场理论的思想,假设q(z)可以分解为M个独立的qi:

求解的想法是先固定其他M-1个分量,只求解其中一个qj,重复M次,就得到所有的q(z).

展开L(q):

代入qi,对于红色部分:

对于蓝色部分:

注:倒数第二个等号化简过程如下

合并起来,得到:

这样,变分推断问题转化为一个最优问题:

最大L(q)的解是满足:


这个解是基于平均场理论假设的结果.

公式求解

我们基于上一节的结果求解其参数,展开最优解公式:

利用坐标上升迭代法可以求解各个参数:

每轮更新上面1-m个参数,直至L(q)收敛。

这个基于平均场假设的模型有很大的局限性,主要体现在:

  • 假设太强,Z非常复杂的情况下,假设不适用

  • 期望中的积分,可能无法计算

SGVI

从Z到 X的过程叫做生成过程或译码,反过来叫推断过程或编码过程,基于平均场的变分推断可以导出坐标上升的算法,但是这个假设在一些情况下假设太强,同时积分也不一定能算。

优化方法除了坐标上升,还有梯度上升的方式,我们希望通过梯度上升来得到变分推断的另一种算法。这里采取随机梯度法,结合变分推断,导出来的算法叫随机梯度变分推断英文是Stochastic Gradient Variational Inference,简写SGVI.

为了方便推导,我们假定q(z)是有关Φ参数的概率分布:

那么,变分L(q)改写成:

最优化问题是:

我们直接对它求梯度:

蓝色部分等于0是因为:

继续化简L(Φ)梯度:

这样,变分关于q(z)的梯度通过期望相联系。这个期望可以通过蒙特卡洛采样来近似,从⽽得到梯度,然后利⽤梯度上升的⽅法来得到参数

但是由于求和符号中存在⼀个对数项,于是直接采样的方差很大(high variance),需要采样的样本⾮常多。

为了解决⽅差太⼤的问题,我们采⽤重参数化技巧( Reparameterization Trick) .

考虑z~Φ之间的随机关系,我们把z的随机成分去掉,转移到一个确定性分布p(ε):

于是有:


代入变分L(Φ)公式:

最后,通过蒙特卡洛采样近似:

得到梯度更新值:


http://chatgpt.dhexx.cn/article/s99oWtYF.shtml

相关文章

【因果推断与机器学习】Causal_inference: Chapter 4

Chapter4: Estimation 一旦我们找到了识别因果量的策略,我们就需要选择如何使用统计方法估计这些因果量。我们使用受实际计算应用程序启发的示例来描述最常用的方法。首先,我们介绍因果估计的基础知识:如何从已确定的估计值到估计器&#xf…

variational inference

theta: org parameter, theta_P: variational parameter 1. goal: 估计p(z|x) 2. 找p(x|theta)likelihood的lower bound,再max这个lower bound 就能找到 p(z|x)的近似分布q(z|theta_P) 3. 找complete likelihood ln[p(x,z)]的关于qj j!i的期望 4. incomplete lik…

Paddle Inference(模型推理)实例分析

一、Paddle推理生态 二、API说明 create_predictor 方法 # 根据 Config 构建预测执行器 Predictor # 参数: config - 用于构建 Predictor 的配置信息 # 返回: Predictor - 预测执行器 paddle.inference.create_predictor(config: Config)加载预测模型 - 非Combined模型 impo…

对于jetson nano 的docker部署jetson-inference等模型

对于Nvidia jetson nano来说是一款十分优秀的网络模型部署设备我对于nano来说也是学习了2个星期左右.这也是对我这一阶段做一个复习总结吧! 目录 烧录 下载jetson-inference dock镜像部署操作 跑个例程助助兴 找到函数接口进行调整 我用的是jetson nano a02 版本 是4GB内存…

LLM Inference 串讲

大家好,这里是 NewBeeNLP。 本文主要概述一下当前LLM 是如何生成文本及为什么对应的资源(cost/latency)与prompt 和completion 都有关系。更佳阅读体验请点击原博客地址:LLM Inference 串讲(https://xv44586.github.io/2023/03/10/llm-inf/) …

【PaddleInferenceSharp】基于C#和Paddle Inference 部署PaddlePaddle模型

1. 项目介绍 Paddle Inference 是飞桨的原生推理库, 提供服务器端的高性能推理能力,直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的推理;Paddle Inference 功能特性丰富,性能优异,针对不同平台不…

Paddle Inference C++ 依赖库安装(Windows)

Paddle Inference C 依赖库安装 1. 环境准备2. 下载安装库3. 设置环境变量4. VS C 项目配置 Paddle Inference 是飞桨的原生推理库, 提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的…

ESIM:Enhanced LSTM for Natural Language Inference

原文链接:https://aclanthology.org/P17-1152.pdf ACL 2017 概述 对于自然语言推理任务,Bowman等人在2015年提出了一个大数据集,大多数工作就开始使用神经网络来对该任务进行训练。但作者认为序列模型的潜力还没有完全被挖掘,因此…

Triton Inference Server教程2

本文介绍如何编写一个config文件,config.pbtxt文件中包含哪些可以配置的参数,这些参数又会对triton server产生什么影响。 必须指定的模型参数 platform/backend:模型要在什么backend上面运行,可以用两种参数指定,一…

变分推断(variational inference)/variational EM

诸神缄默不语-个人CSDN博文目录 由于我真的,啥都不会,所以本文基本上就是,从0开始。 我看不懂的博客就是写得不行的博客。所以我只写我看得懂的部分。 持续更新。 文章目录 1. 琴生不等式2. 香农信息量/自信息I3. 信息熵4. 相对熵/KL散度/信…

Hugging Face - 推理(Inference)解决方案

每天,开发人员和组织都在使用 Hugging Face 平台上托管的模型,将想法变成概念验证(proof-of-concept)的 demo,再将 demo 变成生产级的应用。 Transformer 模型已成为广泛的机器学习(ML)应用的流…

变分推断(Variational Inference)解析

一、什么是变分推断 假设在一个贝叶斯模型中, x x x为一组观测变量, z z z为一组隐变量(参数也看做随机变量,包含在 z z z中),则推断问题为计算后验概率密度 P ( z ∣ x ) P(z|x) P(z∣x)。根据贝叶斯公式…

深度学习-在线推断(Inference)技术

深度学习一般分为训练和在线推断两个部分,大家平时经常关注的多为训练阶段,也就是搜索和求解模型最优参数的阶段。而当模型参数已经求解出来,如何使用模型,以及在在线环境中部署模型,也是非常重要的。 一般会比较关注其…

推理(Inference)与预测(Prediction)

在机器学习的背景下,很多人似乎混淆了这两个术语。这篇文章将试图澄清我们所说的这两个词是什么意思,每一个词在哪里有用,以及它们是如何应用的。在这里,我将举几个例子来直观地理解两者之间的区别。 推理和预测这两个术语都描述…

嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

关注星标公众号,不错过精彩内容 来源 | 宅学部落 最近,阅读了王工(王利涛)赠送的一本由他编著的书籍《嵌入式C语言自我修养》,感觉写的挺不错。今天分享一下这本书籍《嵌入式C语言自我修养》:从芯片、编译器…

进行嵌入式C语言编程调试的通用办法

总结了一下调试我们嵌入式C程序的一些基本的办法和思想,供大家学习参考: 打印日志:在代码中添加打印语句,输出变量值、函数调用等信息,以便在程序运行时观察程序执行情况。 断点调试:在代码中添加断点&…

linux c与c语言的区别吗,嵌入式c语言与c语言的区别

原标题:嵌入式c语言与c语言的区别 最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言;它曾用于以前用汇编语言构建的应用程序中。嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌入式软件,那么二者之间究竟有什么差异呢? 一、启动过程 1. 通用c…

嵌入式C语言——常见面试题

1、描述一下gcc编译过程? gcc编译过程分为4步骤:预处理、编译、汇编、链接。 预处理:头文件包含、宏替换、条件编译、删除注释。编译:主要进行词法、语法、语义分析等等,检查无误后把预处理好的文件编译成汇编文件。…

c语言对嵌入式的作用是什么,关于嵌入式C语言它有些什么意义

描述 首先,在当前产业结构升级的大背景下,机械行业未来的自动化、智能化程度会越来越高,所以机械类相关专业的知识结构必然会不断得到丰富和发展,而学习编程语言对于机械类专业来说具有较为实际的意义,尤其是C语言。 机…

总结嵌入式C语言难点(2部分)

结构类型和对齐 C语言提供自定义数据类型来描述一类具有相同特征点的事务,主要支持的有结构体,枚举和联合体。其中枚举通过别名限制数据的访问,可以让数据更直观,易读,实现如下: 联合体的是能在同一个存储…