探幽深度生成模型的两种方法:VAE和GAN

2018 年 3 月 10 日 AI前线 深度学习

作者 | Prakash Pandey
译者 | Sambodhi
编辑 | Debra Chen,Emily
AI 前线导读:近年来,深度生成模型(Deep Generative Models)取得了令人瞩目的成功。其中有两种强大的深度生成模型学习框架:变分自编码器(Variational Autoencoders,VAE)和生成对抗网络(Generative Adversarial Networks,GAN),这是两种不同的范式。VAE 的好处是可以通过编码解码的步骤,直接比较重建图片和原始图片的差异,而这一点 GAN 做不到。VAE 的劣势是没有使用对抗网络,因此会更趋向于产生模糊的图片。为了了解深度生成模型的两种方法工作机制,AI 前线翻译了 Prakash Pandey 撰写的博文 [1],有助于读者进一步了解 VAE 和 GAN 的方方面面。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

生成模型是一种利用无监督学习来学习任何类型的数据分布的强有力方法,它在短短几年内取得了巨大的成功。所有类型的生成模型都致力于学习训练集的真实数据分布,从而产生具有一些变化的新数据点。但我们并不总能够隐式或显式地了解我们数据的确切分布。因此,我们要试图建立一个与真实数据分布尽可能相似的分布建模。为此,我们可以利用神经网络的能力来学习一个函数,它可以将模型分布逼近真实分布。

最常用、最有效的两种方法是变分自编码器(Variational Autoencoders,VAE)和生成对抗网络(Generative Adversarial Networks,GAN)。VAE 的目标是最大限度降低数据对数似然(log-likelihood)的下限,而 GAN 的目标是实现生成器(Generator)和判别器(Discriminator)之间的平衡。在本文中,作者将解释 VAE 和 GAN 的工作及它们背后的直觉。

变分自编码器(Variational Autoencoder)

假设读者已经熟悉 vanilla autoencoder 的工作机制。我们知道,我们可以使用自编码器将输入图像编码为更小的维度表示,它可以存储关于输入数据分布的潜在信息。但是在一个 vanilla autoencoder 中,编码向量只能通过解码器映射到相应的输入。它当然不能用于生成具有可变性的相似图像。

AI 前线: vanilla 是神经网络领域的常见词汇,比如 Vanilla Neural Networks、Vanilla CNN 等。Vanilla 本意是香草,在这里基本等同于 raw。比如 Vanilla Neural Networks 实际上就是 BP 神经网络,而 Vanilla CNN 实际上就是最原始的 CNN。

为了实现这一点,模型需要学习训练数据的概率分布。VAE 是一种最流行的学习复杂数据分布的方法,它使用无监督的方式使用神经网络。这是一个基于贝叶斯推理(Bayesian inference)的概率图模型。该模型的目的是了解训练数据集数据的潜在概率的分布,以便能够很容易地从所学的分布中采样新的数据。我们的想法是学习一种被称为隐变量(latent variables)的训练数据的低维潜在表示(这些变量不是直接观察到的,而是通过数学模型推导出来的),我们假设这些变量产生了我们实际的训练数据。这些隐变量可以存储模型需要生成的输出类型的有用信息。隐变量 z 的概率分布用 P(z) 表示。选择高斯分布(Gaussian distribution)作为学习分布 P(z) 的先验,以便在推理时方便采样新的数据点。

现在主要目标是用一些参数对数据进行建模,这最大化了训练数据 X 的可能性。简而言之,我们假设一个低维的特征向量(latent vector)产生了我们的数据 x(x∈X),我们可以用一个确定函数 f(z;θ) 将这个特征向量映射到数据 x 上然后评估(见图 1)。在这种生成过程中,我们的目标是最大化 X 中每个数据的概率,

Pө(X) = ∫Pө(X, z)dz = ∫Pө(X|z)Pө(z)dz (1)

在这里,f(z;θ) 已被分布 Pө(X|z) 取代了。

这个极大似然估计(maximum likelihood estimation)背后的直觉是,如果模型可以从这些隐变量产生训练样本,那么它也可以产生具有一些变化的相似样本。换句话说,如果我们从 P(z) 中抽取大量的隐变量,并从这些变量中生成 x,则生成的 x 应与数据分布 Pdata(x) 相匹配。现在我们有两个问题需要回答。如何捕捉隐变量的分布以及如何将方程 1 整合到 z 的所有维上?

显然,手动指定我们想要在特征向量中编码的相关信息以生成输出图像是一项繁琐的任务。相反,我们依靠神经网络来计算 z,假设这个特征向量可以很好地近似为正态分布,以便在推理时很容易地进行采样。如果我们在 n 维空间中有 z 的正态分布,那么就可以用一个足够复杂的函数来生成任何类型的分布,并且可以使用此函数的逆来学习隐变量本身。

在方程 1 中,积分在 z 的所有维上进行,因此难以处理。但是,它可以使用蒙特卡罗积分(Monte-Carlo integration)方法来计算,这不容易实现。所以我们采用另一种方法来近似地最大化方程 1 中的 Pө(X) 。VAE 的想法是使用我们不知道的 P(z|X) 来推断 P(z)。我们使用一种称为变分推断(variational inference)的方法来推断 P(z|X),这种方法基本上是贝叶斯统计(Bayesian statistics)中的一个优化问题。我们首先用易于发现的简单分布 Q(z|X) 对 P(z|X) 进行建模,我们试着用 KL 散度度量(KL-divergence metric)方法来尽量减小 P(z|X) 和 Q(z|X) 之间的差异,从而使我们的假设接近真实的分布。接下来是大量的数学方程,笔者不再赘述,如你有兴趣可在原文中找到它。如果你有了 VAE 的直觉,这些方程就不难理解了。

VAE 的最终目标是:

上面的方程有一个非常好的解释。术语 Q(z|X) 基本上是我们的编码器网络,z 是我们对数据 x(x∈X) 的编码表示,P(X|z) 是我们的解码器网络。因此,在上面的方程中,我们的目标是在 D_KL[Q(z|X)||P(z|X)],在某些误差下,极大似然估计数据分布。由于 P(z|X) 不易处理,但 KL 散度项≥0,因此很容易看出 VAE 试图最小化 log(P(X)) 的下界。这和最大化 E[logP(X|z)] 和最小化 D_KL[Q(z|X)||P(z|X)] 是一样的。我们知道最大化 E[logP(X|z)] 是一个极大似然估计,并使用解码器网络进行建模。正如我前面说过的,我们希望我们的潜在表示接近于高斯函数,因此我们假设 P(z) 为 N(0,1)。按照这个假设,Q(z|X) 也应该接近这个分布。如果我们假设它是具有参数μ(X) 和Ʃ(X) 的高斯分布,则由 KL 散度给出的这两个分布(即 P(z) 和 Q(z|X))之间的差异导致的误差的封闭形式的解,解决方案如下:

我们优化了较低的变分边界,优化函数是:

log(P(X|z))−D_KL[Q(z|X)‖P(z)],第二个解如上图所示。

因此,我们的损失函数将包含两项。第一个是输入到输出的重建损失,第二个损失是 KL 散度项。现在我们可以使用反向传播(Backpropagation)算法来训练网络。但是有一个问题,第一项不仅依赖于 P 的参数,也依赖于 Q 的参数,但是这个依赖性并没有出现在上面的方程中。所以我们如何从分布 Q(z|X) 或 N[μ(X), Ʃ(X)] 中随机穿过我们抽样的层 z,以便 P 可以解码。渐变不能流过随机节点。我们使用重新参数化技巧(见图所示)使网络可微。我们从 N(μ(X), Σ(X)) 中抽样ε∼N(0,I),然后计算 z=μ(X)+Σ1/2(X)∗ε。

图 2 中显示的非常完美。应该注意的是,前馈步骤对于这两个网络(左侧和右侧)都是相同的,但是渐变只能通过正确的网络进行反向传播。

在推断时,我们可以简单地从 N(0,1) 中采样 z 并将其馈送到解码器网络以生成新的数据点。由于我们正在优化较低的变分边界,因此生成的图像的质量相对于像生成对抗网络(Generative Adversarial Networks,GAN)这样的最新技术来说是比较差的。

VAE 最好的一点是它同时学习生成模型和推理模型。虽然 VAE 和 GAN 都是非常令人兴奋的方法,它们都可以使用无监督学习来学习基础数据分布,但与 VAE 相比,GAN 能产生更好的结果。在 VAE 中,我们优化了较低的变分边界;而在 GAN 中,没有这样的假设。事实上,GAN 并不处理任何显式的概率密度估计。VAE 在生成清晰图像方面的失败意味着模型无法学习真实的后验分布。VAN 和 GAN 主要在训练方式上有所不同。现在让我们进入生成对抗网络。

生成对抗网络(Generative Adversarial Networks)

Yann LeCun 说,对抗训练是有史以来最酷的东西。我想大多数人都会同意他的观点,因为我们都看到了对抗网络的广为流行,以及它们所产生的的结果和质量。对抗训练完全改变了我们教会神经网络做特定任务的方式。生成对抗网络不使用任何显式的密度估计,如变分自编码器。相反,它是基于博弈论(game theory)的方法,目的是在两个网络,生成器和判别器之间的纳什均衡(Nash equilibrium)。这个想法是从一个简单的分布,比如高斯分布,然后学习利用通用函数逼近器(如神经网络)将噪声转化为数据分布。

这是通过这两个网络的对抗训练来实现的。生成器(Generator)模型 G 学习捕捉数据分布,判别器(Discriminator)模型 D 估计样本来自数据分布而非模型分布的概率。基本上,生成器的主要任务是生成自然的图像,而判别器的任务是判断图像是假的还是真实的。这可以认为是一款迷你 max 的双人游戏,随着时间的推移,两个网络的性能都会提高。在这个游戏中,生成器试图通过生成真实图像来欺骗判别器,并通过提高其识别能力来避免被判别器迷惑。下图显示了 GAN 的基本架构。

我们定义一个先验输入噪声变量 P(z),然后生成器将其映射到使用具有参数өg 的复微分函数的数据分布。除此之外,我们还有另一个网络称为判别器,它接受输入 x 并使用另一个带参数的微分函数。输出表示 x 来自真实数据分布 Pdata(x) 的概率的单个标量值。GAN 的目标函数被定义为:

在上面的方程中,如果判别器的输入来自真实的数据分布,那么 D(x) 应该输出 1 来最大化上述关于 D 的目标函数,如果图像是由生成器生成的,那么 D(G(z)) 应该输出 1,以使关于 G 的目标函数最小化。从本质上说,G 应该生成这样的显示图像,它可以欺骗 D。采用梯度上升法(Gradient Ascent)使有关判别器的参数最大化,采用梯度下降法(Gradient Descent)最小化有关生成器的参数。但是在优化生成器目标方面存在一个问题,在游戏开始时,生成器还没有学到任何东西时,梯度通常非常小,当运行良好时,梯度非常高(见图 4)。但我们想要的是相反的行为。因此,我们将 E[log(D(G(z))] 最大化,而不是最小化 E[log(1-D(G(z))]。

训练过程包括随机梯度下降(Stochastic Gradient Descent)对判别器和生成器的同步应用。在训练过程中,我们交替优化 D 的 k 级步骤和小批量上优化 G 的一步。当判别器无法区分ρg 和ρdata 时,即 D(x,өd)=½或者ρg=ρdata 时,则停止训练过程。

GAN 应用卷积神经网络最早的模型之一是 DCGAN,它代表了深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Networks,DCGAN)。该网络从均匀分布中提取的 100 个随机数作为输入,并输出所需形状的图像。该网络由许多卷积、反卷积和完全连通的层组成。网络使用许多反卷积层将输入噪声映射到所需的输出图像。批量标准化用于稳定网络的训练。除了使用 tanh 层和 Leaky ReLU 的输出层外,所有层都使用 ReLU 激活。该网络使用小批量随机梯度下降法进行训练,并使用 Adam 优化器来加速训练,对超参数进行优化。这篇论文的结果很有趣。作者指出,这些生成器具有又去的向量运算性质,可以用我们想要的方式来处理图像。

GAN 使用最广泛的变体之一是有条件的 GAN(conditional GAN,cGAN),它是通过简单地将条件向量与噪声向量一起添加而构成的(见图 7)。在 cGAN 之前,我们从随机的噪声样本 z 中随机生成图像。如果我们想要生成具有某些所需特征的图像,有没有什么方法可以为模型提供额外的信息,无论我们想要生成什么样的图像?答案是肯定的,有条件的 GAN 是这样做的。通过对提供给生成器和判别器的附加信息调整模型,可以指导数据生成过程。有条件的 GAN 用于各种任务,如文本到图像的生成、图像到图像的转换、图像的自动标记等。下图显示了这两个网络的统一结构。

GAN 的一个很酷的地方就是,即使训练数据很小,也可以进行训练。确实,GAN 的结果是有希望的,但训练过程并不简单,尤其是建立网络的超参数。此外,GAN 很难进行优化,因为它们不容易收敛。当然,有一些技巧和窍门来破解 GAN,但它们可能并非总是有用的。你可以访问 https://github.com/soumith/ganhacks 找到一些建议。另外,除了检查生成的图像是否看上去很真实之外,我们对结果的定量评价没有任何标准。

结论

深度学习模型在监督学习中确实达到了人类水平的表现,但在无监督学习中却不是这样。尽管如此,研究深度学习的科学家们正在努力改进无监督模型的性能。在这篇博文中,我们看到了两个最著名的无监督学习框架的生成模型是如何工作的。我们了解了变分自编码器的问题,以及为什么对抗网络能更好地生成逼真的图像。但是 GAN 也存在一些问题,比如稳定它们的训练,这仍然是一个活跃的研究领域。然而 GAN 非常强大,目前它们正被用于高质量图像(参见以下视频)和视频生成、文本到图像的转换、图像增强、图像中物体 3D 模型重建、音乐生成、发现抗癌药物等等。除此之外,许多深度学习研究人员也在努力统一这两种模型,并使这两种模型得到最好的结果。随着深度学习的不断提高,我相信 GAN 将会打开人工智能的封闭之门。在接下来的几年里,生成模型将对于图形设计、设计有吸引力的用户界面等非常有帮助。也可能会使用生成对抗网络来生成自然语言文本。


[1]:Deep Generative Models 

https://towardsdatascience.com/deep-generative-models-25ab2821afd3


AI前线
紧跟前沿的AI技术社群
如果你想看到更多这类文章,请点个赞再走!
登录查看更多
15

相关内容

专知会员服务
108+阅读 · 2020年5月21日
自回归模型:PixelCNN
专知会员服务
26+阅读 · 2020年3月21日
GANs最新综述论文: 生成式对抗网络及其变种如何有用
专知会员服务
70+阅读 · 2019年10月19日
万字综述之生成对抗网络(GAN)
PaperWeekly
43+阅读 · 2019年3月19日
CMU论文解读:基于GAN和VAE的跨模态图像生成
PaperWeekly
9+阅读 · 2018年8月20日
【论文笔记】ICLR 2018 Wasserstein自编码器
专知
30+阅读 · 2018年6月29日
已删除
将门创投
7+阅读 · 2018年4月18日
【干货】一文读懂什么是变分自编码器
专知
12+阅读 · 2018年2月11日
在TensorFlow中对比两大生成模型:VAE与GAN
机器之心
12+阅读 · 2017年10月23日
VAE、GAN、Info-GAN:全解深度学习三大生成模型
数据派THU
20+阅读 · 2017年9月23日
GAN | GAN介绍(2)
中国科学院网络数据重点实验室
43+阅读 · 2017年8月4日
A Probe into Understanding GAN and VAE models
Arxiv
9+阅读 · 2018年12月13日
Arxiv
5+阅读 · 2018年5月21日
Arxiv
11+阅读 · 2018年3月23日
VIP会员
相关资讯
万字综述之生成对抗网络(GAN)
PaperWeekly
43+阅读 · 2019年3月19日
CMU论文解读:基于GAN和VAE的跨模态图像生成
PaperWeekly
9+阅读 · 2018年8月20日
【论文笔记】ICLR 2018 Wasserstein自编码器
专知
30+阅读 · 2018年6月29日
已删除
将门创投
7+阅读 · 2018年4月18日
【干货】一文读懂什么是变分自编码器
专知
12+阅读 · 2018年2月11日
在TensorFlow中对比两大生成模型:VAE与GAN
机器之心
12+阅读 · 2017年10月23日
VAE、GAN、Info-GAN:全解深度学习三大生成模型
数据派THU
20+阅读 · 2017年9月23日
GAN | GAN介绍(2)
中国科学院网络数据重点实验室
43+阅读 · 2017年8月4日
Top
微信扫码咨询专知VIP会员