VAE学习与理解

本文深入探讨了变分自编码器(VAE)的原理和改进,从自动编码器(AE)的局限出发,详细解释了VAE如何通过生成隐变量分布来解决这一问题。通过学习《Auto-Encoding Variational Bayes》论文,作者介绍了VAE的结构、生成模型、采样策略以及与生成对抗网络(GAN)的对比。此外,作者还分享了个人理解,包括重构误差、KL散度的作用,并提供了实验结果展示。
摘要由CSDN通过智能技术生成

之前学习GAN的时候就听说过VAE,两者经常被用来对比,这段时间对VAE进行了学习,也算是有了一定的收获,在这里总结一下。
本次学习的论文是《Auto-Encoding Variational Bayes》,首先附一下这次学习参考的两个教程:Tutorial on Variational Autoencoders(参考1),Understanding Variational Autoencoders (VAEs)(参考2)。

1 从AE(autoencoder)说起

讲VAE自然绕不开AE,但这部分我只是说一个大概的思路,便于后面VAE的理解,并不是这篇文章的主题,感兴趣的同学可以自己找一下资料。AE可以看作是降维方法的一种,其思想比较简单,通过一个编码器将样本 x x x映射到一个低维的空间得到隐变量 z z z,然后用一个解码器将 z z z映射回原维度得到重构结果 x ^ \hat {x} x^,通过减小 x x x x ^ \hat {x} x^的差异来对网络进行优化。

2 VAE的理解

在开始VAE正文之前我们先说明一下符号意义,下面会用到。
P ( x ) P(x) P(x):样本的真实分布
P ( z ) P(z) P(z):隐变量的先验分布
P ( x ∣ z ) P(x|z) P(xz):样本关于隐变量的后验分布
P ( z ∣ x ) P(z|x) P(zx):隐变量关于样本的后验分布
Q ( z ∣ x ) Q(z|x) Q(zx):通过神经网络对 P ( z ∣ x ) P(z|x) P(zx)的近似
{ x 1 , x 2 , . . . , x N } \{x_{1},x_{2},...,x_{N}\} { x1,x2,...,xN}:样本集

2.1 AE的局限

前面简单提了一下AE,那么AE有哪些局限呢?我们以下图为例:

在这里插入图片描述
通过AE,我们可以将满月图编码并解码得到满月的重构图,可以将弦月图编码并解码得到弦月的重构图,但我们取两者编码结果的中间值,并进行解码,能够得到一个凸月吗,在我们看来这是一个理所应当的结果,但AE却无法保证这个结果,因为从上面的描述不难发现,给AE送进一组样本,编码器只能得到一组离散的编码结果,它不能捕捉到这样一个渐变的过程,这也正是VAE所做的事情。(如果不理解可以直接参照下面的3.2节或者前面的参考2)

2.2 VAE的改进

VAE相较于AE,一个大的改进就是,针对一个样本,编码器不再生成一个隐变量,而是生成一个隐变量分布,我们用公式表示一下就是, e n c o d e r a e ( x i ) = z i encoder_{ae}(x_{i})=z_{i} encoderae(xi)=zi e n c o d e r v a e ( x i ) = P ( z i ∣ x i ) encoder_{vae}(x_{i})=P(z_{i}|x_{i}) encodervae(xi)=P(zixi),这样我们就可以克服AE只能得到一组离散的隐变量的问题,从而得到一组分布,这为获取两个样本之间的渐变过程提供了可能。
下面是VAE的结构图(在网上找的,侵权即删),其中均值方差计算模块就是编码器,生成器就是解码器,可以看到每个样本不再生成一个编码,而是生成一个分布。这里只是让大家有个大概的认识,不懂的话没关系,跟着下面的思路走就行了。
在这里插入图片描述

2.2 VAE生成模型

我们先撇过去前面提到的这个改进,因为要到后面才会用到,之所以提到主要是想让大家对VAE有个初步的认识。
我们知道VAE是一个生成模型,那我们就考虑一个问题,如何生成一个新样本?如果我们知道样本的真实分布 P ( x ) P(x) P(x),我们可以利用 P ( x ) P(x) P(x)进行采样,从而生成一个新样本。但 P ( x ) P(x) P(x)往往是不知道的,且很难获得。
我们从隐变量的角度很容易写出 P ( x ) = ∫ P ( x ∣ z ; θ ) P ( z ) d z P(x)=\int P(x|z;\theta )P(z)dz P(x)=P(xz;θ)P(z)dz(式1)
这个式子描述了这样一个过程,从隐变量分布 P ( z ) P(z) P(z)中采样得到一个隐变量,然后用这个隐变量得到关于x 的分布,从而采样生成新样本,其实这个过程和混合高斯模型很像,只不过GMM中只有有限个高斯分布,而这里有无穷个分布。接下来我们的重心就在于如何获取 P ( z ) P(z) P(z) P ( x ∣ z ) P(x|z) P(xz)

2.3 P ( z ) P(z) P(z) P ( x ∣ z ) P(x|z) P(xz)

VAE中直接假设 P ( z ) P(z) P(z)就是标准正态分布,即 z ∼ N ( 0 , I ) z\sim N(0,I) zN(0,I),这么做是否合理,参考1中有一段话:“ The key is to notice that any distribution in d dimensions can be generated by taking a set of d variables that are normally distributed and mapping them through a sufficiently complicated function”,就是说所有的d维分布都可以从一个简单的d维分布得到,例如 N ( 0 , I ) N(0,I) N(0,I),我们可以通过一个足够复杂的函数,将d维的正态分布映射到任意的d维分布,文中还给出一个例子:
在这里插入图片描述
左图为变量z的分布,可以看到是一个正态分布,右边是一个完全不同的类似圆环的分布,我们可以定义函数 g ( z ) = z / 10 + z / ∣ ∣ z ∣ ∣ g(z)=z/10+z/||z|| g(z)=z/10+z/z,通过g(z),我们便可以把左侧的正态分布转变为右侧的圆环分布。
我们有了 P ( z ) P(z) P(z),接下来讨论函数g如何获取,即如何得到 P ( x ∣ z ; θ ) P(x|z;\theta ) P(xz;θ),前面有提到函数g是a sufficiently complicated function,而神经网络的模拟能力足够强,我们就直接用神经网络来逼近这个 P ( x ∣ z ; θ ) P(x|z;\theta ) P(xz;θ),这也就是VAE中解码器的工作,其中 θ \theta θ是解码器的参数。

2.4 P ( z ∣ x ) P(z|x) P(zx) Q ( z ∣ x ) Q(z|x) Q(zx)

通过上面的讲述,我们有了 P ( z ) P(z) P(z),还知道用神经网络来学习 P ( x ∣ z ) P(x|z) P(xz),我们可以算联合概率 P ( x 1 , x 2 , . . . x N ) = ∏ i = 0 N P ( x i ) P(x_{1},x_{2},...x_{N})=\prod_{i=0}^{N}P(x_{i}) P(x1,x2,...xN)=i=0NP(xi),那么 P ( x i ) P(x_{i}) P(x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值