TensorFlowNews 2018-02-01
生成模型是使用无监督学习来学习任何类型的数据分布的有效方式,并且在短短几年内取得了巨大的成功。所有类型的生成模型都旨在学习训练集的真实数据分布,从而产生具有一些变化的新数据点。但是,隐式或者显式地学习我们的数据的确切分布并不总是可能的,所以我们试图对与真实数据分布尽可能相似的分布建模。为此,我们可以利用神经网络的能力来学习一个能够将模型分布逼近真实分布的函数。
两种最常用和最有效的方法是变分自动编码器(VAE)和生成敌对网络(GAN)。 VAE的目标是最大化降低数据逻辑可能性的下限,而GAN旨在实现发生器和鉴别器之间的平衡。在这篇文章中,将解释VAE和GAN的工作以及他们背后的故事。
变分自动编码器
这里假设你们已经熟悉了一个 vanilla autoencoder的工作。我们可以使用自动编码器将输入图像编码为更小的维度表示,这可以存储有关输入数据分布的潜在信息。但在 vanilla autoencoder中,编码矢量只能使用解码器映射到相应的输入。它当然不能用于生成具有某些变化的相似图像。
为了实现这一点,模型需要学习训练数据的概率分布。 VAE是以非监督的方式使用神经网络学习复杂数据分布的最流行的方法之一,例如使用神经网络。这是一个基于贝叶斯推理的概率图模型,即该模型旨在学习训练数据的潜在概率分布,以便它可以容易地从该学习分布中提取新的数据。这个想法是学习一个被称为潜变量的训练数据的低维潜在表示(我们假设已经产生了我们的实际训练数据的潜变量(这些变量不是直接观察到的,而是通过数学模型推断的)。这些潜在变量可以存储有关模型需要生成的输出类型的有用信息。潜变量z的概率分布用P(z)表示。选择高斯分布作为学习分布P(z)的先验,以便在推理时间内容易地采样新的数据点。
现在主要的目标是用一些参数来模拟数据,这些参数使得训练数据X的可能性最大化。总之,我们假设一个低维的潜在向量产生了我们的数据x(x∈X),我们可以映射这个潜在的矢量数据x使用确定性函数f(z;θ)参数化θ然后评估(见图1)。在这个生成过程中,我们的目标是最大化X中每个数据的概率,
P(X)=∫Pө(X,Z)dz =∫Pө(X | z)Pө(z)
这里,f(z;θ)已被分布P(X | z)所取代。1
这个最大似然估计背后的直觉是,如果模型可以从这些潜在变量中产生训练样本,那么它也可以产生具有一些类似的变化样本。换句话说,如果我们从P(z)中抽取大量潜在变量,并从这些变量中生成x,则生成的x应与数据分布Pdata(x)相匹配。现在我们有两个问题需要回答。如何捕捉潜在变量的分布以及如何将方程1整合到z的所有维数上?
显然,手工指定想要在潜在矢量中编码的相关信息以生成输出图像是一项繁琐的任务。相反,我们依靠神经网络来计算z,假设这个潜在向量可以很好地近似为一个正态分布,以便在推理时很容易地进行采样。如果我们在n维空间中有一个正态分布,则总是可以使用足够复杂的函数生成任何类型的分布,并且可以使用此函数的逆来学习潜在变量本身。
在方程1中,积分在z的所有维上进行,因此是棘手的。但是,可以使用蒙特卡罗方法来计算,这是不容易实现的。所以我们采用另一种方法来近似最大化等式1中的P(X)。VAE的想法是使用我们不知道的P(z | X)来推断P(z)。我们使用称为变分推理的方法来推断P(z | X),这种方法基本上是贝叶斯统计中的一个优化问题。我们首先使用易于发现的简单分布Q(z | X)对P(z | X)进行建模,并且我们尝试使用KL散度度量方法来最小化P(z | X)和Q之间的差异,这样我们的假设就接近真实的分布。接下来是大量的数学方程,这里不解释,但是你可以在原文中找到它。
VAE的最终目标是:
上面的等式有一个非常好的解释。术语Q(z | X)基本上是我们的编码器网络,z是我们对数据x(x∈X)的编码表示,P(X | z)是我们的解码器网络。所以在上面的方程中,我们的目标是在DKL [Q(z | X)||)给定的一些误差下使数据分布的对数似然最大化。 P(Z | X)]。由于P(z | X)不易处理,但KL发散项≥> 0,因此可以很容易地看出,VAE试图使日志(P(X))的下界最小。这与最大化E [logP(X | z)]和最小化DKL [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)) - DKL [Q(z | X)‖P(z)],其中第二个的解如上所示。
因此,我们的损失函数将包含两个项。第一个是输入到输出的重建损失,第二个损失是KL散度项。现在我们可以使用反向传播算法来训练网络。但是存在一个问题,那就是第一项不仅取决于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,并将其馈送到解码器网络以生成新的数据点。由于我们正在优化较低的变分界限,所以生成的图像的质量相对于生成的对抗网络(Artrative Adversarial Networks)之类的最新技术相比确实是有点差别的。
VAE最好的一点就是学习生成模型和推理模型。尽管VAE和GAN都是使用无监督学习来学习基础数据分布的方法,但与VAE相比,GAN产生更好的结果。在VAE中,我们优化了较低的变分边界,而在GAN中,没有这样的假设。事实上,GAN不处理任何明确的概率密度估计。 VAE在产生清晰图像方面的失败意味着模型不能学习真正的后验分布。 VAE和GAN在训练方式上主要不同。现在让我们进入生成对抗网络。
生成对抗网络
对抗训练彻底改变了我们教神经网络完成特定任务的方式。生成对抗网络不像任何明确的密度估计一样工作,如变分自动编码器。相反,它是基于博弈论的方法,目标是找到两个网络,发电机和鉴别器之间的纳什均衡。其思想是从像高斯这样的简单分布中抽样,然后学习利用通用函数逼近器(如神经网络)将这种噪声转换为数据分布。
这是通过这两个网络的对抗性训练来实现的。生成器模型G学习捕获数据分布,鉴别器模型D估计样本来自数据分布而不是模型分布的概率。基本上,生成器的任务是生成自然的图像,鉴别器的任务是决定图像是假的还是真实的。这可以被认为是两个网络的性能随着时间的推移而改善的迷你max双人游戏。在这个游戏中,发生器试图通过尽可能地产生真实图像来欺骗鉴别器,并且通过提高鉴别能力,发生器不会被鉴别器所愚弄。下图显示了GAN的基本架构。
我们定义一个先验输入噪声变量P(z),然后生成器将其映射到使用具有参数өg的复微分函数的数据分布。除此之外,我们还有另一个网络称为鉴别器,它接受输入x并使用另一个带参数的微分函数。输出表示x来自真实数据分布Pdata(x)的概率的单个标量值。 GAN的目标函数被定义为
在上面的等式中,如果鉴别器的输入来自真实的数据分布,那么D(x)应该输出1来使上述目标函数最大化,而如果图像从生成器产生,则D(G(z))应该输出1以使目标函数最小化。从本质上来说,意味着G应该产生这样的现实图像,它可以愚弄D。采用梯度上升法和最小二乘法对鉴别器的t参数进行分析。但是在优化发电机目标方面存在一个问题。在游戏开始时,发电机还没有学到任何东西,梯度通常非常小,而且运行良好时,梯度非常高(见图4)。但是我们想要相反的行为。因此我们将E [log(D(G(z))]最大化,而不是使E [log(1-D(G(z))]最小化。
训练过程包括同时应用随机梯度下降的鉴别器和发生器。在训练过程中,我们交替进行优化D的k级步骤并在小批量上优化G的一个步骤。当鉴别器不能区分ρg和ρdata,即D(x,өd)= 1/2或ρg=ρdata时,训练过程停止。
GAN应用卷积神经网络最早的模型之一是DCGAN,它代表了深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Networks)。该网络将从均匀分布画出的100个随机数作为输入,并输出所需形状的图像。该网络由许多卷积、反卷积和完全联通的层组成。网络使用许多反卷积层将输入噪声映射到所需的输出图像,批量标准化用于稳定网络的训练。 ReLU激活在生成器中除了使用tanh层的输出层之外的所有层,并且在Discriminator中的所有层使用Leaky ReLU。这个网络是使用小批量随机梯度下降训练的,Adam优化器被用来加速训练和调整的超参数。这篇论文的结果非常有趣。作者指出,这些生成器具有有趣的矢量算术性质,我们可以用想要的方式来处理图像。
GAN最广泛使用的变体之一是有条件的GAN,它是通过简单地将条件向量与噪声向量一起添加而构成的(见图7)。在cGAN之前,我们从随机的噪声样本z中随机生成图像。如果我们想要生成具有某些所需功能的图像,该怎么办?有什么方法可以为模型提供额外的信息,不管我们想要生成什么类型的图像?答案是肯定的,有条件的GAN是这样做的。通过对提供给生成器和鉴别器的附加信息调整模型,可以指导数据生成过程。有条件的GAN用于各种任务,如文本、图像的生成、图像到图像的转换,自动图像标记等。下图显示了这两个网络的统一结构。
GAN的一个很酷的地方是,即使用小的训练数据也可以训练他们。事实上,GAN的结果是有希望的,但是训练过程并不简单,尤其是建立网络的超参数。而且,由于不容易聚合,所以GAN难以优化。当然有一些技巧和窍门来破解GAN,但是它们可能并不总是有帮助的。你可以在这里找到一些建议。此外,除了检查生成的图像是否有知觉现实,我们对结果定量评价没有任何标准。
结论
深度学习模型在监督学习中真正实现了人类水平的表现,但对于无监督学习来说,情况并非如此。尽管如此,深度学习的科学家正在努力提高无监督模型的性能。在这篇文章中,我们看到了两个最著名的无监督生成模型的学习框架是如何工作的。我们了解了变分自动编码器中的问题,以及为什么敌对网络能更好地生成逼真的图像。但是,GANs存在一些问题,比如稳定他们的训练,这仍然是一个活跃的研究领域。然而,GAN功能非常强大,目前它们正被用于高质量图像(参见本视频)和视频生成,文本到图像转换、图像增强、图像对象的3D模型重建,音乐生成,癌症药物发现等。除此之外,许多深度学习的研究人员也正在努力将这两种模型统一起来,并使这两种模型得到最好的结果。看到深度学习的进步速度越来越快,相信GANs会开放许多人工智能的封闭门,比如半监督学习和强化学习。在接下来的几年中,生成模型对于图形设计,有吸引力的用户界面的设计等将会非常有帮助。使用生成敌对网络生成自然语言文本也是可能的。