variational inference

article/2025/8/22 17:13:20

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 likelihood的lower bound 应该是 q(z)*ln p(x,z)/q(z)这个玩意, complete likelihood 乘除q(z)


ref:http://www.crescentmoon.info/?p=709#more-709

问题描述


变分推断是一类用于贝叶斯估计和机器学习领域中近似计算复杂(intractable)积分的技术,它广泛应用于各种复杂模型的推断。本文是学习PRML第10章的一篇笔记,错误或不足的地方敬请指出。

先给出问题描述。记得在上一篇EM的文章中,我们有一个观察变量 X={x{1},,x{m}} 和隐藏变量 Z={z{1},,z{m}} , 整个模型 p(X,Z) 是个关于变量 X,Z 的联合分布,我们的目标是得到后验分布 P(Z|X) 的一个近似分布。This is our goal

在之前介绍过Gibbs Sampling这一类Monte Carlo算法,它们的做法就是通过抽取大量的样本估计真实的后验分布。而变分推断不同,与此不同的是,变分推断限制近似分布的类型,从而得到一种局部最优,但具有确定解的近似后验分布。

之前在EM算法中我们有似然的式子如下:

lnp(X)=L(q)+KL(q||p)(1)

其中
L(q)=q(Z)lnp(X,Z)q(Z)dZ原文写是p(z)
KL(q||p)=q(Z)lnp(Z|X)q(Z)dZ

这里公式中不再出现参数 θ ,因为参数不再是固定的值,而变成了随机变量,所以也是隐藏变量,包括在 Z 之内了。

因为这里假设参数theta是给定的,所以lnp(X|theta)是定值,所以要min KL(q||p),只需要maxL(q) 这个incomplete likelihood lower bound即可。


这里的KL散度 KL(q||p) 描述了估计分布与真实分布的差别。当 KL(q||p)=0 时,俩分布就是相同的。但是因为我们不知道真实的后验分布是啥,所以直接最小化KL是做不到的,所以我们通过最大化 L(q)  来达到这个目的可以认为 L(q) 越大,则模型对数据拟合程度越好。要注意到 lnp(X)L(q)  始终成立,所以 L(q) 被称作证据下界(evidence lower bound),见图1。

admin-ajax

为了极大化 L(q) ,我们需要选择合适的函数 q ,使其便于计算。要注意到 L(q) 并非普通的函数,而是以函数 q 为自变量的函数,这就是泛函。泛函可以看成是函数概念的推广,而变分方法是处理泛函的数学领域,和处理函数的普通微积分相对。变分法最终寻求的是极值函数:它们使得泛函取得极大或极小值。

条件独立假设

如果参数之间具有相互依赖关系(mutually dependent),求积分时会比较麻烦。所以我们为 q(Z) 的分布加一个限制条件,将 Z 分为 M 组变量,组与组之间变量相互独立,这样 q 的分布就可以分解为

q(Z)=i=1Mqi(Zi)(4)

要注意我们对每个 q(Zi) 的函数形式并没有做任何限制。这种将 q 分解的方法叫做平均场理论(mean field theory),主要基于基于系统中个体的局部相互作用可以产生宏观层面较为稳定的行为这个物理思想。

求解过程

根据以上假设,我们来最大化下界 L(q) ,因为假设 qi(Zi) 分布之间都是独立的,所以我们依次轮流来优化,以 qj(Zj) 为例(为了简单起见,缩写为 qj )。

L(qj)=iqj{lnp(X,Z)ilnqi}dZ=qj{lnp(X,Z)ijqidZi}dZjqjlnqjdZj+const=qjlnp~(X,Zj)dZjqjlnqjdZj+const(5)

这里我们定义一个新分布 lnp~(X,Zj)
lnp~(X,Zj)=lnp(X,Z)ijqidZi(6)

我们发现它刚好是除去与 qj 分布相关的 zj 之后原似然的期望值,有
lnp~(X,Zj)=Eij[lnp(X,Z)]+const(7)

然后看式(5)的最后部分,就是 qj(Zj) lnp~(X,Zj) 的KL散度的负值,这里我们固定 qij 不变,那么最大化 L(q) 就变成了最小化这个KL散度,而KL 散度的最小值在 qj(Zj)=lnp~(X,Zj) 时取到。所以,最优解 qj(Zj)
lnqj(Zj)=Eij[lnp(X,Z)]+C(8)
这里每个q_j都有自己的variational parameter,每一个q_j都是求上式期望迭代得到的,ln P(x,z)是 complete likelihood


另加的这个C是为了归一化整个分布,有 C=exp(Eij[lnp(X,Z)])dZj  。然后依次更新其他 Zj ,最终相互迭代达到稳定。

变分下界

我们也可以直接衡量模型的下界。在实际应用中,变分下界可以直接判断算法是否收敛,也可以通过每次迭代都不会降低这一点来判断算法推导和实现的部分是否存在问题。

L(q)=q(Z)lnp(X,Z)/q(Z)dZ=Eq[lnp(X,Z)]Eq[lnq(Z)]


值得一提的是,如果我们能知道变分后验每个因子的函 形式的话,我们还有另一种估计参数的方法,这个详见 例子

变分推断和Gibbs Sampling之间的联系

变分推断和Gibbs sampling其实挺相似的:

  • 在Gibbs Sampling中,我们从条件分布 P(Zj|Z¬j) 中抽样。
  • 在变分推断中,我们迭代 Zj 的分布 Q(Zj)1Cexp{Eij[lnp(X,Z)]}

参考:
1.《Pattern_Recognition_and_Machine_Learning》第10章
2.http://en.wikipedia.org/wiki/Variational_Bayesian_methods



http://chatgpt.dhexx.cn/article/6O1aGowv.shtml

相关文章

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

嵌入式c语言教程 题库 百度云,嵌入式c语言视频教程尚观主讲视频教程

嵌入式C语言培训-01C语言概述-01C语言概念-发展历史-特点.mp4 嵌入式C语言培训-01C语言概述-02C基本程序结构-第一个helloworld程序-Linux下编辑编译执行.mp4 嵌入式C语言培训-01C语言概述-03C语言第2个程序第3个程序.mp4 嵌入式C语言培训-01C语言概述-04C程序开发过程.mp4 嵌入…

《嵌入式C语言》C语言介绍及环境搭建

--最具价值的嵌入式C语言1 C语言简介 C语言是国际上广泛流行的高级语言,是在B语言的基础上发展起来的, 1970年, 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作系统。 1973年, D.M.Ritchie 在B语言的基础…