Tutorial on Variational AutoEncoders

本文介绍了变分自编码器(VAE)的工作原理及其优化目标。VAE是一种生成模型,通过学习高维数据的概率分布来生成类似的数据。文章详细解释了隐变量的作用,并介绍了如何通过目标函数最大化对数似然概率并最小化预测分布与真实分布之间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是《Tutorial on Variational AutoEncoders》一文部分翻译的内容。

1.介绍

generative model,学习高维数据的概率分布 P(X) P(X)。学习到不同维度之间的相互依赖关系,比如手写数字的生成模型如果生成了8的左边一半像素,那么剩下的像素也就能够随之确定。

latent variable,给予生成模型一些信息用来生成数据。比如一个生成手写数字的生成模型,隐变量z就可以是从[0,…,9]中随机采样的整型,确定了隐变量模型才能生成像素点。

但是隐变量又不可能那么简单,因为对于一个能够表达出数据集特性的生成模型,对于每个数据点,生成模型都要能够产生出一个隐变量来生成一个非常相似的东西。对手写数字数据集来说,同样的一个8,可能大一点或者小一点,往左歪一点或者往右歪一点,字迹是粗一点还是细一点。所以,生成模型中隐变量需要表达更多的信息,需要一个高维度的向量来表示隐变量 zRZ z∈RZ,隐变量要能够自动的学习到这些信息的表示,而且这些影响手写数字生成的信息之间的相互影响和依赖,即隐变量的latent structure,也应该自动的学习。

2.目标函数

VAE的过程是:从概率密度函数P(z)中采样隐变量z之后,从确定性函数 f(z;θ) f(z;θ)得到的值,这个值要大概率和数据集中的数据很相似。

所以我们的目标是对数据集中的所有数据x,最大化:

P(X)=P(X|z;θ)P(z)dz P(X)=∫P(X|z;θ)P(z)dz

其中的条件概率 P(X|z;θ) P(X|z;θ)等于 N(X|f(z;θ),σI) N(X|f(z;θ),σI),也就是在标准VAE中,如果输出是实数向量,通常输出的分布是均值为 f(z;θ) f(z;θ)方差为 σI σI的高斯分布。

VAE要最大化P(x),就要解决两个问题:

  • 隐变量z如何表示?

使用标准正态分布 N(0,I) N(0,I),因为只要有一个n维标准正态分布的z,再找到一个足够复杂的函数g,那么g(z)就可以表示任意一个n维分布。

对上面的公式而言, f(z;θ) f(z;θ)就是一个多层神经网络组成的函数逼近器。可以将将隐变量映射到最后的输出。

  • P(X) P(X)的积分如何计算?

现在我们得到了 P(z)=N(0,I) P(z)=N(0,I),可以直接计算 P(X) P(X)了吗?还是不行,假如采用抽样的方式抽样出很多z来计算 P(X) P(X)的话就会发现,对于绝大多数z来说, P(X|z) P(X|z)都接近于0(因为z是标准正态分布的采样),这种方式非常低效。

VAE的解决这个问题的核心思想就是,试图抽样出有更大可能性产生X的z。而做到这一点是通过另一个分布 Q(z|X) Q(z|X)来实现的,这个分布产生的Q能够以较大的可能产生X。

但是我们使用了Q分布后, P(X) P(X)积分公式就变成了 EzQP(X|z) Ez∼QP(X|z),我们要找到后者和 P(X) P(X)之间的关系。根据 P(z|X)Q(z|X) P(z|X)和Q(z|X)的KL散度的公式进行推导,可以推出:

其中左侧的部分就是目标函数,我们要最大化这个目标函数就是在最大化对数似然概率的同时,最小化我们预测的分布Q和真实分布P之间的差异。

3.目标函数优化

那么 Q(z|X) Q(z|X)是一个什么分布呢?通常的选择是,也是一个多元高斯分布 N(z|μ(X),σ(X)) N(z|μ(X),σ(X)),其中的 μσ μ和σ都是由神经网络学习到的映射。

所以目标函数等号右侧的最后一项就变成了两个多元高斯分布的KL散度,因为我们假定 P(z) P(z)是标准多元高斯分布。在得到了Q分布之后,这一项是能够计算出来的(当然也能够利用梯度下降来优化)。

而右侧的第一项,也就是 EzQ[logP(X|z)] Ez∼Q[logP(X|z)],通过当前时刻的Q分布,从中采样出若干个z,然后从这若干个z中计算出 P(X|z) P(X|z)作为期望的逼近值。

但是这样做的话,由于采样操作对 μ μ σ σ不可导,反向传播无法进行,因此,实际的VAE中使用了一个叫做reparameterization的改进,以从 N(0,I) N(0,I)中抽样出数值 ϵ ϵ后,用 ϵ ϵ乘以方差再加上均值的结果代替从 N(z|μ(X),σ(X)) N(z|μ(X),σ(X))中抽样,如下图。

所以最终,VAE的优化目标就是,让最终的输出 f(z) f(z)与目标 x x足够接近的同时,隐变量的分布 QN(μ,σ2) Q∼N(μ,σ2)接近真实先验分布 PN(0,I2) P∼N(0,I2)

4.条件变分自编码器

为了解决某种问题,比如说给定某个人的手迹,要求生成另一些与他的手迹很像的手迹。这时候需要制定输入计算输出 P(Y|X) P(Y|X),为了解决这类问题,从变分自编码器衍生出条件变分自编码器。

模型在Encoder和Decoder的输入中,增加了条件输入X,如上图。当然这张图只是一个简化版本,实际的CVAE有很多论文提出了很多不同的版本。

原文地址: http://cairohy.github.io/2017/11/17/deeplearning/Tutorial%20on%20Variational%20AutoEncoders/

### 变分自编码器(VAE)相关学术论文 变分自编码器(Variational Autoencoder, VAE)是一种基于概率图模型和深度学习技术的生成模型,其核心思想在于通过优化证据下界(Evidence Lower Bound, ELBO),实现数据的概率建模[^5]。以下是几篇与VAE密切相关的经典研究论文: #### 经典基础理论 1. **Auto-Encoding Variational Bayes** 这是由Diederik P. Kingma和Max Welling于2013年发表的一篇开创性工作,首次提出了VAE的概念及其训练方法。该论文详细描述了如何利用重参数化技巧(Reparameterization Trick)来解决梯度估计中的不可微问题,并提供了完整的数学推导和实验验证[^3]。 2. **Tutorial on Variational Autoencoders** 此教程由Carl Doersch撰写,旨在为初学者提供关于VAE的基础知识、公式推导以及模型结构的理解。它不仅涵盖了基本原理,还讨论了一些常见的改进方向和技术细节[^2]。 #### 扩展与应用领域 3. **Improved Techniques for Training GANs and VAEGAN** 尽管这篇论文主要关注生成对抗网络(GAN),但它也探讨了将VAE与GAN相结合的方法(即VAEGAN)。这种方法试图结合两者的优势,在图像生成任务上取得了显著效果[^4]。 4. **SYNTHESIZER: Rethinking Self-Attention in Transformer Models** 虽然此论文的核心主题并非直接涉及VAE,但其中提到的一些注意力机制的设计理念可以启发研究人员探索更高效的序列建模方式,从而可能应用于条件VAE或其他复杂场景下的生成任务[^1]。 #### 实践指南与案例分析 除了上述理论性的文章外,还有许多针对特定应用场景的研究成果值得参考。例如医疗影像重建、自然语言处理等领域内的具体实践项目往往能够展示VAE的强大功能及其局限所在。 ```python import torch from torch import nn class Encoder(nn.Module): def __init__(self, input_dim, latent_dim): super(Encoder, self).__init__() self.fc_mu = nn.Linear(input_dim, latent_dim) self.fc_logvar = nn.Linear(input_dim, latent_dim) def forward(self, x): mu = self.fc_mu(x) log_var = self.fc_logvar(x) return mu, log_var def reparametrize(mu, log_var): std = torch.exp(0.5 * log_var) eps = torch.randn_like(std) z = mu + eps * std return z ``` 以上代码片段展示了简单的VAE编码部分及重新参数化的实现过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值