VAEGAN:理解 VAE 与 GAN【图像生成】

标准VAE(Variational Autoencoder)的原理:

在autoencoder模型中,我们加入一个编码器,它能帮我们把图片编码成向量。然后解码器能够把这些向量恢复成图片。

VAEGAN:理解 VAE 与 GAN【图像生成】
标准自编码器

我们现在获得了一个有点实际用处的网络了。而且我们现在能训练任意多的图片了。如果我们把这些图片的编码向量存在来,那以后我们就能通过这些编码向量来重构我们的图像。我们称之为标准自编码器。

 但是,我们想建一个产生式模型,而不是一个只是储存图片的网络。现在我们还不能产生任何未知的东西,因为我们不能随意产生合理的潜在变量。因为合理的潜在变量都是编码器从原始图片中产生的。

这里有个简单的解决办法。我们可以对编码器添加约束,就是强迫它产生服从单位高斯分布的潜在变量。正式这种约束,把VAE和标准自编码器给区分开来了。现在,产生新的图片也变得容易:我们只要从单位高斯分布中进行采样,然后把它传给解码器就可以了

VAEGAN:理解 VAE 与 GAN【图像生成】

这里有一些使用VAE好处,就是我们可以通过编码解码的步骤,直接比较重建图片和原始图片的差异,但是GAN做不到。

另外,VAE的一个劣势就是没有使用对抗网络,所以会更趋向于产生模糊的图片。

VAEGAN的原理

我们知道 VAE 可以实现从原始分布编码到一个 normal 的分布,再从 normal 的分布解码回原始分布的功能,然后这个解码用到的 decoder 就可以单独被提取出来作为生成器使用。但是,VAE 有一个很大的问题就是,解码产生的图片往往都比较模糊。那为什么产生的图片会模糊?我会在之后学习 VAE 的过程中再去研究,目前我们只是知道,VAE 产生的图片是容易模糊的。于是就出现了 VAEGAN,它的作用,就是给 VAE 加上了 GANs 的架构, 通过判别器使得 VAE 产生的图片变得清晰。因此我们可以理解为,VAEGAN 就是利用 GANs 去提升了 VAE 的图片生成质量。

VAEGAN:理解 VAE 与 GAN【图像生成】

 我们来说明一下这个架构。首先输入一张真实图像X𝑖𝑛,通过一个 encoder 变成一个 normal 的分布 z,然后 z 再输入到 decoder 中产生生成图像X𝑜𝑢𝑡这时 VAE 希望X𝑜𝑢𝑡与X𝑖𝑛 之间的 loss 越小越好,但是 loss 小不见得图片就清晰,于是X𝑜𝑢𝑡又会被放入一个判别器中, 去让判别器判断输入的图片属于P𝑑𝑎𝑡𝑎还是P𝐺,这样最终X𝑜𝑢𝑡就会与X𝑖𝑛不仅相似还清晰。

而关于 VAEGAN,有趣的一点是,我们不仅可以用 GANs 来提升 VAE,也可以用 VAE 来 提升 GANs。如果是被用作后者的话,“GANVAE”其实就等效为 CycleGAN 的一部分,如下图 所示。

VAEGAN:理解 VAE 与 GAN【图像生成】

 这两者的差别在于,把 X encode 成 z 的过程是放在生成器的前面还是后面,如果放在前面,就是 VAEGAN;如果放在后面,就是 CycleGAN。

VAEGAN的变种

上一节的 VAEGAN 存在一个问题,就是 Encoder 编码出的 z 不一定完全符合我们期望的 normal z 的样式,也就是编码出的 z 和我们输入的 z 可以存在细微的不同,但是通过生成器的处理,它们产生的输出都能够骗过判别器。 为了解决这一问题 VAEGAN 提出了一个变种,它改变了判别器,使得判别器能更精细的鉴别输入图像的种类,共包括三个种类:真实图片,重构图片,与生成图片。

VAEGAN:理解 VAE 与 GAN【图像生成】

其中重构图片与生成图片的差异是,重构图片X𝑟𝑒𝑐是真实图片通过 encoder 与 decoder 之后产生的图片,如下图所示:

VAEGAN:理解 VAE 与 GAN【图像生成】

而生成图片X𝑔仅仅是一个初始分布 z 通过 decoder 之后产生的图片,如下图所示:

VAEGAN:理解 VAE 与 GAN【图像生成】

 于是现在X𝑟𝑒𝑐与X𝑔的差异能够被判别器学到,又因为生成器是共用的,那为了消除这种 差异只能让输入 z 接近一致,也就是 encoder 编码出的 z 不断逼近我们给定的输入 z,最终几乎完全一样。结果证明,这种模型在实验中比 VAEGAN 有少量的提升。

VAE(Variational Autoencoder)的原理 – Shiyu_Huang – 博客园

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户

相关推荐