VAE论文阅读

news2024/12/24 9:38:08

在网上看到的VAE解释,发现有两种版本:

  1. 按照原来论文中的公式纯数学推导,一般都是了解生成问题的人写的,对小白很不友好。
  2. 按照实操版本的,非常简单易懂,比如苏神的。但是却忽略了论文中的公式推导,导致论文中公式一点不懂。

下面是我对VAE的理解:

1 VAE生成模型的数学描述

我们见到的生成模型,一般都有这几个步骤:

  1. 采样一个随机噪声(为啥要随机噪声,因为随机噪声我们是能获得的,调用一个torch.randn()就可以。)
  2. 输入神经网络一通计算
  3. 最后输出了图片。

这个过程应该怎么用数学描述呢?在VAE论文中是这样的:

在这里插入图片描述

作者的意思是整个模型分为两步:

  1. 从一个先验分布中采样一个值z,对应之前的第一步
  2. 从一个后验分布中生成一个值x,对应之前的第二步

模型可以描述为:

p θ ( x ) = ∫ p θ ( z ) p θ ( x ∣ z ) d z p_θ(x) = ∫ p_θ(z)p_θ(x|z) dz pθ(x)=pθ(z)pθ(xz)dz

这里解释几点:

1. 生成模型为什么是一个概率密度呢,我希望直接有表达式,比如采样了一个噪声z,那么图片 X = g(z),这样多好

其实有了概率密度,可以直接在里面采样。这里是推导过程,大家都这么写。在实际操作的时候,所有的p都会变成一个已知的分布,否则无法计算的。比如假如生成模型的表达式是:

p θ ( x ) = 一些公式 p_\theta(x) = 一些公式 pθ(x)=一些公式

这些公式计算后发现是一个高斯分布 N ( μ , σ ) N(\mu, \sigma) N(μ,σ),那么操作的时候可以写为:
x = μ + σ ε x = \mu + \sigma \varepsilon x=μ+σε
其中 ϵ \epsilon ϵ是随机采样的噪声。所以说,两种形式必须都能看懂才行。

2. 上面的式子含义是什么?

上面的式子中: p θ ( x ) p_\theta(x) pθ(x)是x的概率密度,它的含义是生成模型生成了值为x的样本的概率是多少。

PS 本文中所有的概率都应该是概率密度。但是为了便于理解,就当作概率来写了。

式子的右边是一个全概率公式,意思是计算生成样本x的概率,应该根据生成z的概率,和从z中计算出x的概率计算。

上面的式子其实涵盖了采样+通过采样的z计算x的过程。

2 VAE的损失函数

对生成函数建模后 ,下面考虑如何从z中计算x。下面先说明下实际操作是怎样的,然后结合着理解文中的数学公式。

在这里插入图片描述

这里借用了VAE原文中的图。z可以理解为噪声空间,x可以理解为生成的图片空间。这里训练分为两步。

  1. 首先从样本中获得一个值x,然后通过神经网络计算出对应的z的分布(虚线)
  2. 从z的分布中采样出一个z
  3. 根据z重新计算出x(实线)

损失函数包含两项:

  1. 重建的x和原始的x之间的差值
  2. z的分布尽可能接近标准正态,因此使用了z的分布和标准正态的KL散度。

使用2的原因是:最终我们需要从标准正态中采样一个z,而不是从样本中计算z,因此让z的分布接近标准正态是为了采样时效果更好。

以上的过程非常符合直觉,遗憾的是这两项是通过数学推导出来的,VAE背景的论文中都会包含数学推导,看懂数学推导的大概意思是必不可少的。下面是推导过程:

VAE损失函数的数学推导

首先VAE模型的目标是最大化似然函数。这里可以理解为:有一个分布中,参数 θ \theta θ是未知的,但是有一组采样结果 x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn是已知的,似然函数表示了采样出这组结果的概率,但是包含了参数 θ \theta θ。通过最大似然函数可以计算出 θ \theta θ的取值。

似然函数的其他内容可以看这篇文章: 文章地址

这里和我们的情况很像:已有的数据可以看成是从一个分布中采样出来的,我们需要求解的是这个分布的参数。
在我们的问题中似然函数可以表示为:
log ⁡ p θ ( x ( 1 ) , ⋅ ⋅ ⋅ , x ( N ) ) = ∑ i = 1 N log ⁡ p θ ( x ( i ) ) \log p_θ(x^{(1)}, · · · , x^{(N)}) = \sum^N_{i=1} \log p_θ(x^{(i)}) logpθ(x(1),⋅⋅⋅,x(N))=i=1Nlogpθ(x(i))
用更加通俗的话来说就是:模型生成一个数据xi的概率是p(xi), 那么生成出所有数据的概率是p(x1)乘到p(xi)。但是p中有一个参数是未知的,x1到xi是已知的。现在这个参数应该取什么值才能让模型生成出x1到xi的概率最大呢?

求和其实用处不大,下面对某一个数据xi的损失函数进行计算:

log ⁡ p θ ( x ( i ) ) = D K L ( q φ ( z ∣ x ( i ) ) ∣ ∣ p θ ( z ∣ x ( i ) ) ) + L ( θ , φ ; x ( i ) ) \log p_θ(x^{(i)}) = D_{KL}(q_{φ}(z|x^{(i)})||p_{θ}(z|x^{(i)})) + L(θ, φ; x^{(i)}) logpθ(x(i))=DKL(qφ(zx(i))∣∣pθ(zx(i)))+L(θ,φ;x(i))

其中: L ( θ , φ ; x ( i ) ) = E q φ ( z ∣ x ) [ − log ⁡ q φ ( z ∣ x ) + log ⁡ p θ ( x , z ) ] L(θ, φ; x^{(i)}) = E_{q_φ(z|x)} [− \log q_{φ}(z|x) + \log p_θ(x, z)] L(θ,φ;x(i))=Eqφ(zx)[logqφ(zx)+logpθ(x,z)]

上面这串到底怎么来的,本来就一个 p θ p_\theta pθ好好的,怎么多了一个 q ϕ q_{\phi} qϕ??

q ϕ q_{\phi} qϕ其实就是encoder,也就是如何把x反向映射到z上。简单来说,整个VAE的训练过程是:

  1. 在p(z)中采样一个z (采样一个噪声)
  2. 通过 q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(zx) 计算出x对应的z
  3. 通过 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(xz) 计算出z对应的x

这里 p ( x ∣ y ) p(x|y) p(xy)有两种理解方式:

  1. 给定y之后x的概率是多少
  2. 给定y之后如何计算x

由于有两个神经网络,所以自然有两个参数。这里p, q其实没什么区别,主要是参数的区别。

OK, 那么上面那个KL散度里面两个分布是怎么回事呢?

其实这个也挺魔幻的,大概就是如果我计算出了 θ \theta θ

  1. p θ ( z ) p_{\theta}(z) pθ(z),和 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(xz)就都是已知的
  2. 那么其实 p θ ( z ∣ x ) p_{\theta}(z|x) pθ(zx)也是已知的 (根据贝叶斯公式)
  3. encoder q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(zx) 同时也描述了这个关系。那么这两个关系应该是接近的

换句话说,我知道了噪声z的分布,同时我有一个样本x,那么我有两种方式计算x对应的z。

  1. 神经网络decodeer输入z,输出x,再加上贝叶斯公式就能告诉我们应该如何通过x计算z。
  2. 神经网络encoder输入x,输出z,天然的告诉了我们如何通过x计算z。

这两个过程应该是一致的才行。比如给了一个x, 那么神经网络1+贝叶斯计算的z分布,应该和encoder计算出来的是一样的才行。

好吧,那么似然函数是怎么变成KL散度+ELBO的呢?

推导过程如下:

K L ( q ϕ ( z ∣ x ) ∣ ∣ p θ ( z ∣ x ) ) = ∫ q ϕ ( z ∣ x ) log ⁡ q ϕ ( z ∣ x ) p θ ( z ∣ x ) d z = ∫ q ϕ ( z ∣ x ) log ⁡ q ϕ ( z ∣ x ) d z − ∫ q ϕ ( z ∣ x ) log ⁡ p θ ( z ∣ x ) d z = E q ϕ ( z ∣ x ) [ log ⁡ q ϕ ( z ∣ x ) ] − ∫ q ϕ ( z ∣ x ) log ⁡ p θ ( z , x ) d z + ∫ q ϕ ( z ∣ x ) log ⁡ p θ ( x ) d z = E q ϕ ( z ∣ x ) [ log ⁡ q ϕ ( z ∣ x ) ] − E q ϕ ( z ∣ x ) [ log ⁡ p θ ( z , x ) ] + E q ϕ ( z ∣ x ) log ⁡ p θ ( x ) = − E L B O + log ⁡ p θ ( x ) \begin{split} KL(q_{\phi}(z|x)||p_{\theta}(z|x)) &=\displaystyle\int q_{\phi}(z|x)\log\frac{ q_{\phi}(z|x)}{p_{\theta}(z|x)}dz\\ &=\displaystyle\int q_{\phi}(z|x)\log q_{\phi}(z|x)dz-\int q_{\phi}(z|x)\log p_{\theta}(z|x)dz\\ &=\mathbb{E}_{q_{\phi}(z|x)}[\log q_{\phi}(z|x)]-\int q_{\phi}(z|x)\log p_{\theta}(z,x)dz+\int q_{\phi}(z|x)\log p_{\theta}(x)dz\\ &=\mathbb{E}_{q_{\phi}(z|x)}[\log q_{\phi}(z|x)]-\mathbb{E}_{q_{\phi}(z|x)}[\log p_{\theta}(z,x)]+\mathbb{E}_{q_{\phi}(z|x)}\log p_{\theta}(x)\\ &=-ELBO+\log p_{\theta}(x)\\ \end{split} KL(qϕ(zx)∣∣pθ(zx))=qϕ(zx)logpθ(zx)qϕ(zx)dz=qϕ(zx)logqϕ(zx)dzqϕ(zx)logpθ(zx)dz=Eqϕ(zx)[logqϕ(zx)]qϕ(zx)logpθ(z,x)dz+qϕ(zx)logpθ(x)dz=Eqϕ(zx)[logqϕ(zx)]Eqϕ(zx)[logpθ(z,x)]+Eqϕ(zx)logpθ(x)=ELBO+logpθ(x)

经过变换就可以获得似然函数如何表示为KL散度+ELBO的了。

VAE损失函数的数学推导(续)

重写表示了似然函数之后,其实只需要关心ELBO即可,因为KL散度是恒大于0,并且非常难计算,因此最大化似然函数,其实是最大化ELBO罢了。

下面重新改下ELBO:

E L B O = − E q ϕ ( z ∣ x ) [ log ⁡ q ϕ ( z ∣ x i ) ] + E q ϕ ( z ∣ x ) [ log ⁡ p θ ( z , x i ) ] = − E q ϕ ( z ∣ x ) [ log ⁡ q ϕ ( z ∣ x i ) ] + E q ϕ ( z ∣ x ) [ log ⁡ p θ ( z ) p θ ( x i ∣ z ) ] = − E q ϕ ( z ∣ x ) [ log ⁡ q ϕ ( z ∣ x i ) ] + E q ϕ ( z ∣ x ) [ log ⁡ p ( z ) ] + E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x i ∣ z ) ] = − K L ( q ϕ ( z ∣ x i ) ∣ ∣ p ( z ) ) + E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x i ∣ z ) ] \begin{array}{rl} ELBO &= -\mathbb{E}_{q_{\phi}(z|x)}[\log q_{\phi}(z|x_i)]+\mathbb{E}_{q_{\phi}(z|x)}[\log p_{\theta}(z,x_i)]\\ &=-\mathbb{E}_{q_{\phi}(z|x)}[\log q_{\phi}(z|x_i)]+\mathbb{E}_{q_{\phi}(z|x)}[\log p_{\theta}(z)p_{\theta}(x_i|z)]\\ &=-\mathbb{E}_{q_{\phi}(z|x)}[\log q_{\phi}(z|x_i)]+\mathbb{E}_{q_{\phi}(z|x)}[\log p(z)]+\mathbb{E}_{q_{\phi}(z|x)}[\log p_{\theta}(x_i|z)]\\ &=-KL(q_{\phi}(z|x_i)||p(z))+\mathbb{E}_{q_{\phi}(z|x)}[\log p_{\theta}(x_i|z)] \end{array} ELBO=Eqϕ(zx)[logqϕ(zxi)]+Eqϕ(zx)[logpθ(z,xi)]=Eqϕ(zx)[logqϕ(zxi)]+Eqϕ(zx)[logpθ(z)pθ(xiz)]=Eqϕ(zx)[logqϕ(zxi)]+Eqϕ(zx)[logp(z)]+Eqϕ(zx)[logpθ(xiz)]=KL(qϕ(zxi)∣∣p(z))+Eqϕ(zx)[logpθ(xiz)]

可以看出新的ELBO具有两部分,

  1. 后面一部分可以看作从 x -> q -> z -> x 的过程(这是因为z符合的是q的分布),似然函数需要最大。因此我们最小化了重构损失,这和目标1是一致的。
  2. 前面一部分可以看作是encoder生成的z必须和z的原始分布相近,在实际中就是encoder通过x计算出的z必须符合正态分布。和我们之前的目标2是一致的

通过不断努力,我们终于从直觉上以及数学上解释了VAE的损失函数构成!

Quiz:

  1. 在VAE中,重构损失(reconstruction loss)常采用哪种度量方式?
    A. 均方误差(MSE)
    B. 交叉熵损失
    C. Hinge损失
    D. Huber损失

  2. VAE的主要组成部分有哪些?
    A) 编码器和解码器
    B) 编码器和分类器
    C) 解码器和分类器
    D) 编码器和优化器

  3. 在VAE中,隐变量(latent variable)是从哪个分布中采样的?
    A) Bernoulli分布
    B) 伽马分布
    C) 正态分布
    D) 均匀分布

  4. VAE通过什么技术来实现隐变量的采样?
    A) 反向传播
    B) 梯度下降
    C) 重参数化技巧(Reparameterization trick)
    D) 动量法

  5. VAE的目标函数由哪两个主要部分组成?
    A) 生成对抗损失和重构损失
    B) 重构损失和KL散度
    C) 交叉熵损失和KL散度
    D) 生成对抗损失和交叉熵损失

  6. 在VAE中,KL散度(Kullback-Leibler divergence)用于什么?
    A) 测量真实数据分布和生成数据分布之间的差异
    B) 测量编码器输出和隐变量标准正态分布之间的差异
    C) 测量编码器输出和解码器输出之间的差异
    D) 测量真实数据分布和隐变量标准正态分布之间的差异

  7. 在训练VAE的过程中,编码器的输出通常是什么?
    A) 一个隐变量的确定值
    B) 一个隐变量的分布参数(均值和方差)
    C) 一个图像
    D) 一个分类标签

  8. VAE中的解码器负责什么任务?
    A) 将隐变量分布转换为编码器输出
    B) 将隐变量样本转换为重构数据
    C) 将数据转换为隐变量分布参数
    D) 将数据转换为分类标签

  9. 为什么在VAE中使用重参数化技巧?
    A) 为了简化编码器的计算
    B) 为了让梯度能够通过随机采样传播
    C) 为了提高生成数据的质量
    D) 为了减少模型的计算复杂度

  10. 变分自编码器(VAE)主要用于以下哪种任务?
    A. 图像分类
    B. 图像生成
    C. 文本翻译
    D. 语音识别

答案:

  1. A
  2. A
  3. C
  4. C
  5. B
  6. B
  7. B
  8. B
  9. B
  10. A

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

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

相关文章

jquery中pdf在页面的显示和导出

jquery中pdf在页面的显示和导出 01 显示pdf01 .pdf结尾在线接口显示到页面 (pdf.js库怎么安装及使用):只显示一页02 如何用PDF.JS显示整个PDF (而不仅仅是一页)?03 jQuery实现在线预览PDF文件(通过a标签链接跳转): 02 …

【网络安全】PostMessage:分析JS实现XSS

未经许可,不得转载。 文章目录 前言示例正文 前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口(例如,来自同一域名下的不同页面或者不同域名下的跨域页面)进行通信,而无需通过服务器…

【STM32 HAL库】全双工DMA双buffer的I2S使用

1、配置I2S 我们的有效数据是32位的,使用飞利浦格式。 2、配置DMA **这里需要注意:**i2s的DR寄存器是16位的,如果需要发送32位的数据,是需要写两次DR寄存器的,所以DMA的外设数据宽度设置16位,而不是32位。…

ArrayLis练习

代码呈现 import java.util.ArrayList;public class ArrayListTest {public static void main(String[] args) {//创建集合ArrayList<String> list new ArrayList();//添加元素list.add("A");list.add("B");list.add("C");list.add(&quo…

222.买卖股票的最佳时机(力扣)

代码解决 class Solution { public:int maxProfit(vector<int>& prices) {// 初始化最小买入价为第一个价格int min1 prices[0];// 初始化最大利润为0int max1 0;// 从第二天开始遍历价格数组for (int i 1; i < prices.size(); i) {// 计算当前价卖出的利润&a…

C++:智能指针shared_ptr、unique_ptr、weak_ptr的概念、用法即它们之间的关系

智能指针 (1)概述 A.Why&#xff08;C为什么引入智能指针&#xff09; C引入智能指针的根本原因就是解决手动管理动态内存所带来的问题&#xff0c;手动管理动态内存常见的问题如下&#xff1a;内存泄漏、悬挂指针、释放操作未定义等 内存泄漏问题&#xff1a; 当程序用光了它…

React的usestate设置了值后马上打印获取不到最新值

我们在使用usestate有时候设置了值后&#xff0c;我们想要更新一些值&#xff0c;这时候&#xff0c;我们要想要马上获取这个值去做一些处理&#xff0c;发现获取不到&#xff0c;这是为什么呢&#xff1f; 效果如下&#xff1a; 1、原因如下 在React中,当你使用useState钩子…

线程安全(七)ReentrantLock 简介、Condition 条件变量、锁的工作原理、synchronized 与 Lock 的区别

目录 一、ReentrantLock 简介1.1 Reentrant 的特性:1.2 基本语法1.3 ReentrantLock 的主要方法:1.4 lock()、tryLock()、lockInterruptibly() 的区别:二、Condition 条件变量2.1 什么是 Condition 条件变量?2.2 Condition 的核心方法:2.3 Condition 使用示例1:等待与唤醒…

PJA1介导的焦亡抑制是鼻咽癌产生耐药性的驱动因素

引用信息 文 章&#xff1a;PJA1-mediated suppression of pyroptosis as a driver of docetaxel resistance in nasopharyngeal carcinoma. 期 刊&#xff1a;Nature Communications&#xff08;影响因子&#xff1a;14.7&#xff09; 发表时间&#xff1a;2024年6月2…

LLaMA-Factory

文章目录 一、关于 LLaMA-Factory项目特色性能指标 二、如何使用1、安装 LLaMA Factory2、数据准备3、快速开始4、LLaMA Board 可视化微调5、构建 DockerCUDA 用户&#xff1a;昇腾 NPU 用户&#xff1a;不使用 Docker Compose 构建CUDA 用户&#xff1a;昇腾 NPU 用户&#xf…

变阻器与电位器有什么区别?

变阻器和电位器都是可以改变电阻值的电子元件&#xff0c;它们在电路中的作用和调节方式有一定的相似性&#xff0c;但它们之间还是存在一些区别的。 1. 结构上的区别&#xff1a;变阻器主要由固定电阻体和可动滑片组成&#xff0c;通过滑动滑片来改变电阻体的电阻值。而电位器…

数据库(创建数据库和表)

目录 一&#xff1a;创建数据库 二&#xff1a;创建表 2.1&#xff1a;创建employees表 2.2&#xff1a;创建orders表 2.3&#xff1a;创建invoices表 一&#xff1a;创建数据库 mysql> create database mydb6_product; Query OK, 1 row affected (0.01 sec) mysql&g…

linux centos limits.conf 修改错误,无法登陆问题修复 centos7.9

一、问题描述 由于修改/etc/security/limits.conf这个文件中的值不当&#xff0c;重启后会导致其账户无法远程登录&#xff0c;本机登录。 如改成这样《错误示范》&#xff1a; 会出现&#xff1a; 二、解决 现在知道是由于修改limits.conf文件不当造成的&#xff0c;那么就…

智慧农业新纪元:解锁新质生产力,加速产业数字化转型

粮食安全乃国家之根本&#xff0c;“浙江作为农业强省、粮食生产重要省份&#xff0c;在维护国家粮食安全大局中肩负着重大使命。浙江粮食产业经济年总产值已突破4800亿元&#xff0c;稳居全国前列&#xff0c;然而&#xff0c;同样面临着规模大而不强、质量效益有待提升、数字…

JVM高频面试点

文章目录 JVM内存模型程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池 Java对象对象的创建如何为对象分配内存 对象的内存布局对象头实例数据对齐填充 对象的访问定位 垃圾收集器找到垃圾引用计数法可达性分析&#xff08;根搜索法&#xff09; 引用概念的扩充回收方…

字符数组的魅力:C语言字符数组与字符串编程实践

1.概念 字符数组&#xff0c;数组元素是char(字符型)的数组&#xff0c;它可以是一维数组&#xff0c;也可以是二维数组。 2.定义的时候赋值 char ch1[]{c,h,i,n,a}; char ch2[]{"china"}; //相当于 char ch2[] "china"; 元素个数为6&#xff0c;默认会…

探索Linux世界 —— shell与权限的相关知识

一、shell以及其运行原理 1、什么是shell Linux严格意义上说的是一个操作系统&#xff0c;我们称之为“核心&#xff08;kernel&#xff09;“ &#xff0c;但我们一般用户&#xff0c;不能直接使用kernel。而是通过kernel的“外壳”程序&#xff0c;也就是所谓的shell&#x…

6个高效再利用的UI作品集设计模板

UI 作品集是指用户界面设计师的个人作品集。它展示了设计师的设计能力、技巧和风格&#xff0c;也是充分展示他们设计能力的证明。优秀的UI 作品集应具有简洁明了、美观大方、良好的互动体验和明确的目标。本文将从两个方面的介绍 Ui 作品集模板的全部内容&#xff1a;UI 作品集…

Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git、gdb)

目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…

近距离无线通信技术简介

个人早几年整理的材料&#xff0c;学识有限&#xff0c;喜欢指正。