VAE(变分自编码器)

自编码器 (Autoencoder)

自动编码器是一种数据的压缩算法,其中数据的压缩和解压缩函数是数据相关的、有损的、从样本中自动学习的。在大部分提到自动编码器的场合,压缩和解压缩的函数是通过神经网络实现的。
自编码器的基本结构
自编码器的基本结构,摘自 深度学习之自编码器AutoEncoder
因为是压缩算法,衡量性能的标准自然就是重建图像与原图像的差距了,因此网络的损失函数 (Loss function)就是原始输入和输出的diff。

变分自编码器(Variational Auto-Encoder, VAE)

相比于自编码器,VAE更倾向于数据生成。只要训练好了decoder,我们就可以从标准正态分布生成数据作为解码器的输入,来生成类似但不同于训练数据的新样本,作用类似GAN。
VAE跟GAN的目标基本是一致的——希望构建一个从隐变量Z生成目标数据X的模型,但是实现上有所不同。更准确地讲,它们是假设了Z服从某些常见的分布(比如正态分布或均匀分布),然后希望训练一个模型X=g(Z),这个模型能够将原来的概率分布映射到训练集的概率分布,也就是说,它们的目的都是进行分布之间的变换。VAE的结构比自编码器多了中间Z的部分。
在这里插入图片描述 摘自 变分自编码器:原来是这么一回事
那现在假设Z服从标准的正态分布,那么我就可以从中采样得到若干个Z1,Z2,…,Zn,然后对它做变换得到X’1=g(Z1),X’2=g(Z2)…,X’n=g(Zn)g有读者说不是有KL散度吗?当然不行,因为KL散度是根据两个概率分布的表达式来算它们的相似度的,然而目前我们并不知道它们的概率分布的表达式,我们只有一批从构造的分布采样而来的数据{X’1,X’2…,X’n},还有一批从真实的分布采样而来的数据{X1,X2,…,Xn}(也就是我们希望生成的训练集)。我们只有样本本身,没有分布表达式,当然也就没有方法算KL散度。

首先我们有一批数据样本{X1,X2,…,Xn},其整体用X来描述,我们本想根据{X1,X2,…,Xn}得到X的分布p(X),如果能得到的话,那我直接根据p(X)来采样,就可以得到所有可能的X了(包括{X1,X2,…,Xn}以外的),这是一个终极理想的生成模型了。当然,这个理想很难实现,于是我们将分布改一改
p ( X ) = ∑ Z p ( X ∣ Z ) p ( Z ) p(X)=\sum\limits_{Z} p(X|Z)p(Z) p(X)=Zp(XZ)p(Z) 这里我们就不区分求和还是求积分了,意思对了就行。此时p(X|Z)就描述了一个由Z来生成X的模型,由网络中的decoder来实现,而我们假设Z服从正态分布,也就是p(Z)=N(z_mean,z_log_var),我们就可以先在正态分布中采样一个Z,然后根据Z来算出一个X。那么问题来了,当我们要进行反向求导的时候,我们发现采样操作并不是可导的,这样我们就不能愉快地使用梯度下降了。为此作者采用了一个reparemerization的技巧(trick),在计算出均值和方差之后不直接对相应的正态分布采样,而是从标准正态分布中采样一个 ϵ \epsilon ϵ,然后乘方差加均值。这样一来,对于z_mean和z_log_var而言就是线性操作而不是采样操作了,变得可导,梯度下降得以顺利进行,而我们并不需要对 ϵ \epsilon ϵ进行求导。完整的VAE结构如下图所示:
VAE 结构框架VAE 结构框架,摘自 变分自编码器(Variational Auto-Encoder,VAE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值