欢迎来到秒速赛车官网!

热线电话: 400-201-6521
您当前所在的位置:主页 > 新闻资讯 > 继电器作用 >

在你知道了什么是 VAE 以及如何实现它之后

  变分自编码器(VAE)与生成对抗网络(GAN)经常被相互比较,其中前者在图像生成上的应用范围远窄于后者。VAE 是不是只能在 MNIST 数据集上生成有意义的输出?在本文中,作者尝试使用 VAE 自动生成动漫人物的头像,并取得了不错的结果。

  以上是通过变分自编码器生成的动画图片样本。想要获得本文在 Github 代码仓库中的相关代码请点击:

  在图像生成领域,人们总是喜欢试着将变分自编码器(VAE)和对抗生成网络(GAN)相比较。人们的共识是,VAE 更容易被训练,并且具有显式的分布假设(高斯分布)用于显式的表示和观察,而 GAN 则能够更好地捕获观测值的分布并且对观测分布没有任何的假设。结果就是,每个人都相信只有 GAN 能够创造出清晰而生动的图片。虽然可能确实是这样,因为从理论上讲,GAN 捕获到了像素之间的相关性,但是没有多少人试过用比 28*28 维的 MNIST 数据更大的图片作为输入训练 VAE 来证明这一点。

  在 MNIST 数据集上有太多变分自编码器(VAE)的实现,但是很少有人在其他的数据集上做些不一样的事情。这是因为最原始的变分自编码器的论文仅仅只用 MNIST 数据集作为了一个例子吗?

  现在,让我们做一个「流言终结者」的实践来看看 VAE 图像生成器的效果是多么不尽人意。例如,下面这些图像。

  我们从寻找一些 GAN 的对比组开始。我在 Google 上搜索了」GAN 应用程序」,并且发现了一个非常有趣的 Github 代码仓库,这个代码仓库总结了一些 GAN 应用程序:

  为什么「GAN 应用程序」就可以呢?好吧,很难找到不是图像生成的 GAN 应用程序,不是吗?为了让这个实践更加令人兴奋,我们这次将尝试用生成模型输出一些动漫形象!

  首先,让我们看看一个 GAN 模型完成这个任务的效果有多好。下面的两组图片来自于两个做动漫图片生成的项目,它们被很多人选择并且以此为基础开展工作:

  尽管这些图片里面有些重影,但它们看上去更好。我猜窍门是放大图像,仅仅只看人脸。

  很不幸,在网络上没有可以得到的标准动漫形象数据集。但是这不能阻止像我这样的人去寻找它。在浏览了一些 GitHub 代码仓库之后,我得到了一些提示:

  本文假设你已经阅读了大量关于变分自编码器的帖子。如果你没有的话,我想向你推荐下面这几篇文章:

  所以,在你知道了什么是 VAE 以及如何实现它之后,现在的问题就是「如果知道目标函数和实现方法就足够去训练一个变分自编码器了吗?」我认为答案是肯定的,但是它并不想通常说的那么简单。例如,这个目标函数来自哪里的问题,以及 KL 散度分量在这里有什么作用。在这篇帖子中,我会试着去解释 VAE 背后隐藏的奥秘。

  变分推断是一种在概率图模型(PGM)中推断复杂分布的技术。直观地说,如果你不能很容易地捕获复杂分布的最优点,你就可以用一些像高斯分布这样的简单分布来近似估计它的上界或者下界。例如,下图展示了如何使用高斯分布近似估计局部最优解。

  请忽略标题中的 EM(最大期望算法)。这是一个在概率图模型中经典的优化方法,它能够更新变分下界,但是现在你在深度学习中会使用随机梯度下降算法(SGD)。

  KL 散度是另外一个在概率图模型中会用到的非常重要的技术。它用来测量两个分布之间的差异。它不是一个距离度量,因为 KL[QP] 不等于 KL[PQ]。下面的幻灯片展示了这种差异。

  显然,在 Q0 时,KL[QP] 不允许 P=0. 换句话说,当最小化 KL[QP] 时,你想用 Q 分布来捕获 P 分布的一些模式,但是你必然会忽略一些模式的风险。并且,在 P0 时,KL[PQ] 不允许 Q=0。换句话说,当最小化 KL[PQ] 时,你想让 Q 捕获整个分布,而且如果有需要的话,完全忽略掉 P 的模式。

  这是我对 VAE 的推导。尽管它似乎与你可能在论文中看到的看起来不同,但这是我认为最容易理解的推导。

  给定一些图像作为训练数据,我们想要拟合一些能够尽可能准确地表示训练数据的参数(theta)。正式一点说,我们想要拟合用于最大化观测值的联合概率的模型。因此,你会得到左边的表达式。

  z 是创造观测值(图像)的潜在表示。直观地说,我们假设一些神秘的画家在数据集中创作这些图像(x),我们将它们称作 Z。并且,我们发现 Z 是不确定的,有时 1 号画家创作了图片,有时候是 2 号画家创作了图片。我们仅仅知道所有的艺术家都对他们所画的图片有着特别的偏爱。

  Jensen 不等式如下所示。注意: log 是凹函数,所以在我们的例子中,不等式反过来的。

  我们不能对无穷的可能的 z 做几分,所以我们使用数值逼近,这意味着我们从分布中进行抽样来对期望取近似。

  在变分自编码器中,我们假设它是高斯函数。这就是为什么在优化 VAE 时,要做均方误差(MSE)。

  P(xz) 的假设: 高斯和伯努利分布。代码显示了负的对数似然,因为我们总是希望最小化错误,而不是在深度学习中显式地最大化似然。

  你在 Github 中看到如此多的 softmax 函数的原因是,对于像 MNIST 这样的二进制图像,我们假设分布是伯努利分布。

  这是高斯分布。这就是为什么你看到 KL 散度的实现是一个近似的解。不明白吗?不要担心,你可以看看这篇里:

  等式中有两类参数。参数 theta 是用来对分布 P(xz) 建模的,它将 z 解码为图像 x。变体的 theta 是用来对分布 Q(zx) 建模的,它将 x 编码成潜在的表示 z。

  自制的变分自编码器的示意图。绿色和蓝色的部分是可微的,琥珀色的部分代表不可微的白噪声。每个人都用著名的猫的图片,所以这里我使用了狗。我不知道我从哪里得到的这张可爱的狗狗图片。如果你知道,请告诉我,这样我可以正确地引用原始网站。

  如果我们完全忽略 KL 项,变分自编码器将收敛到标准的自编码器,它将删除目标函数中的随机部分。因此,VAE 不能生成新的图像,只能记住并且展示训练数据(或者创造纯粹的噪声,因为在那个潜在的位置没有编码的图像!)如果你足够幸运的话,理想的结果是实现了核主成分分析!

  如果我们完全忽略了重构项,那么潜在的分布会退化成标准的正态分布。所以无论输入是什么,你总是得到类似的输出。

  我看到人们经常将 KL 项设定为一个像 0.001×KL + Reconstruction_Loss 这样的值,这是不正确的!顺便问一下,这就是很多人只在 MNIST 数据集上做 VAE 的原因吗?

  还有什么值得注意的呢?模型的复杂程度是支撑损失函数的关键因素。如果解码器太复杂,那么即使是较弱的损失也不能阻止它过拟合。结果是,潜在的分布被忽略了。如果解码器太简单了,模型就不能合理地解码潜在的表示,最终只能捕获一些粗略的轮廓,就像我们之前所展示的图像那样。

  关于 VAE 只能生成模糊的图片的流言是真实的,但是我仍然认为这是可以接受的。

上一篇:光电开关的分类方法:按检测方式可分为反射式 下一篇:它们可以自动地创建对书籍、游戏的描述