第 1 章 生成对抗网络简介

第 1 章 生成对抗网络简介

本章介绍生成对抗网络GAN),这是一种使用无监督机器学习算法生成数据的深度神经网络架构。2014年,Ian Goodfellow、Yoshua Bengio和Aaron Courville在论文“Generative Adversarial Nets”中首次提出了GAN。GAN有多种应用,包括图像生成和药物开发等。

本章会介绍GAN的核心组件及其工作原理、GAN背后的重要概念和技术、GAN的优势和缺陷,以及GAN的实际应用。

本章将探讨以下主题。

  • 什么是GAN
  • GAN架构
  • GAN相关的重要概念
  • GAN的不同变体
  • GAN的优缺点
  • GAN的实际应用

1.1 什么是GAN

GAN是一种由生成网络和判别网络组成的深度神经网络架构。通过在生成和判别之间多次循环,两个网络相互对抗,试图胜过对方,从而训练了彼此。

1.1.1 什么是生成网络

生成网络使用现有数据生成新数据,比如使用现有图像来生成新图像。生成网络的核心任务是从随机生成的由数字构成的向量(称为“潜在空间”,latent space)中生成数据(比如图像、视频、音频或文本)。在构建生成网络时需要明确该网络的目标,例如生成图像、文本、音频、视频,等等。

1.1.2 什么是判别网络

判别网络试图区分真实数据和由生成网络生成的数据。对于输入的数据,判别网络需要基于事先定义的类别对其分类。这可能是多分类或二分类。通常,GAN中进行的是二分类。

1.1.3 GAN通过对抗竞赛进行训练

GAN中的网络通过对抗竞赛进行训练:两个网络互相竞争。例如用GAN生成艺术品赝品。

(1) 第一个网络,即生成网络,并未见过艺术品实物,但试图生成形似艺术品实物的作品。

(2) 第二个网络,即判别网络,试图判断一件艺术品是真品还是赝品。

(3) 生成网络在不断迭代中生成看起来更加真实的艺术品,试图骗过判别网络,让它相信这些生成的赝品是真品。

(4) 判别网络不断优化区分真假的标准,试图胜过生成网络。

(5) 在每轮迭代中,它们会将自己所做调整中的成功尝试反馈给对方,这就是GAN的训练过程。

(6) 最终,在判别网络的帮助下,生成网络已经训练得让判别网络无法区分哪件是真品、哪件是赝品了。

在该竞赛中,两个网络是同时受训的。当判别网络无法区分真品和赝品时,该网络就进入了一种名为“纳什均衡”的状态。本章稍后会详述。

1.2 GAN的实际应用

GAN的一些实际应用非常实用,例如下面这些。

  • 图像生成。在简单的图像数据上训练后的生成网络可生成逼真的图像。例如想生成新的狗狗图像,就可以在成千上万的狗狗图像的数据集上训练一个GAN。训练完成之后,生成网络就可以生成一些不同于训练集的新图像。图像生成可用于市场营销、logo制作、娱乐和社交媒体等领域。下一章会介绍动画人物面部图像的生成。
  • 文本到图像的合成。GAN的一个有趣应用是基于文本生成图像。这对于电影行业来说很有用,因为GAN可以基于一段文本生成新的图像数据。对于漫画行业,它甚至可以自动生成一段故事。
  • 人脸老化。该应用对娱乐行业和监控领域都很有用,尤其是对于人脸验证方面,因为企业无须在员工的年龄增长之后更新安防系统了。Age-cGAN可以生成不同年龄的图像,可用于构建强大的人脸验证模型。
  • 图像到图像的变换。图像到图像的变换可用于将白天拍摄的图像转换成夜晚拍摄的图像,将草图转换成绘画,将图像转换成毕加索或者梵高的风格,将航拍图自动转换成卫星图像,以及把马的图像转换成斑马的图像,等等。这些应用有助于节约时间,非常具有开创性。
  • 视频合成。GAN也可以用于生成视频。用GAN生成内容快于人工创作,可以提高电影制作效率,也能帮助那些希望在业余时间制作创意视频的爱好者。
  • 高清图像生成。GAN可以为用低像素相机拍摄的照片生成高清版,同时不损失任何关键细节。这有助于设计网站。
  • 补全缺损图像。如果图像缺失了某些部分,GAN可以帮助恢复。

1.3 GAN的具体架构

GAN主要由两部分构成:生成网络和判别网络。每个网络都可以是任何神经网络,比如普通的人工神经网络(artificial neural network,ANN)、卷积神经网络(convolutional neural network,CNN)、循环神经网络(recurrent neural network,RNN)或者长短期记忆(long short term memory,LSTM)网络。判别网络则需要一些全连接层,并且以分类器收尾。

下面详细介绍GAN架构的组件。以一个简单的GAN为例。

1.3.1 生成网络的架构

这个简单的GAN中的生成网络是一个5层的简单前馈神经网络(feed-forward neural network),含1个输入层、3个隐藏层以及1个输出层,具体配置见表1-1。

表 1-1

层序号

层名称

配置

1

输入层

input_shape=(batch_size, 100), output_shape=(batch_size, 100)

2

全连接层

neurons=500, input_shape=(batch_size, 100), output_shape=(batch_size, 500)

3

全连接层

neurons=500, input_shape=(batch_size, 500), output_shape=(batch_size, 500)

4

全连接层

neurons=784, input_shape=(batch_size, 500), output_shape=(batch_size, 784)

5

输出层

input_shape=(batch_size, 784), output_shape=(batch_size, 28, 28)

上表列出了网络中输入层、隐藏层以及输出层的配置情况。

图1-1展示了生成网络里的张量(tensor)流,以及每一层输入和输出的张量的形状。

图1-1 生成网络的架构

该前馈神经网络通过正向传播处理信息的过程如下。

  • 输入层从正态分布采样一个100维的向量,不做任何修改,直接传递给第一个隐藏层。
  • 3个隐藏层分别是具有500、500和784个单元的全连接层。第1个隐藏层将一个形状为(batch_size, 100)的张量变换成(batch_size, 500)
  • 第2个隐藏层(基于上一层输出的结果)将张量形状变换为(batch_size, 500)
  • 第3个隐藏层继续将张量形状变换为(batch_size, 784)
  • 最后的输出层将张量的形状从(batch_size, 784)变换为(batch_size, 28, 28)。这意味着该神经网络会生成一批图像,其中每张图像的形状为(28, 28)

1.3.2 判别网络的架构

该GAN中的判别网络是一个5层的前馈神经网络,包括1个输入层、1个输出层以及3个全连接层。判别网络是一个分类器,和生成网络有些区别。它会处理图像,然后输出该图像属于某个类别的概率。

图1-2展示了判别网络中的张量流,以及每一层输入和输出的张量的形状。

图1-2 判别网络的架构

判别网络在训练过程中利用正向传播来处理数据的过程如下。

(1) 首先读取一个形状为28×28的张量输入。

(2) 输入层接收形状为(batch_size, 28, 28)的输入张量,不做任何修改,直接传递给第一个隐藏层(扁平化层)。

(3) 扁平化层将该张量转换成784维,然后将其传递给第一个隐藏全连接层。经过前两个隐藏层的处理,张量转换成了500维。

(4) 最后一层是输出层,也是全连接层,只有一个单元(神经元),使用sigmoid激活函数。它只输出0或1:输出0意味着判别网络认为输入图像是假的;输出1意味着判别网络认为输入图像是真的。

1.3.3 GAN相关重要概念

前面介绍了GAN的架构,下面简单介绍一些重要概念。首先介绍KL(Kullback-Leibler)散度和JS(Jensen-Shannon)散度,它们是评估模型质量的重要手段;然后介绍纳什均衡,这是在训练过程中希望达到的状态;最后重点介绍目标函数,理解目标函数有助于实现GAN。

  1. KL散度

    KL散度,也称相对熵,用于判定两个概率分布之间的相似度。它可以测量一个概率分布p相对于另一个概率分布q的偏离。

    如下公式用于计算两个概率分布p(x)q(x)之间的KL散度。

    D_{{\rm DL}}(p\|q)=\int_xp(x)\log\frac{p(x)}{q(x)}{\rm d}x

    如果p(x)q(x)处处相等,则此时KL散度为0,达到最小值。

    由于KL散度具有不对称性,因此不用于测量两个概率分布之间的距离,因此也不用作距离的度量(metric)。

  2. JS散度

    JS散度,也称信息半径(information radius,IRaD)或者平均值总偏离(total divergence to the average),是测量两个概率分布之间相似度的另一种方法。它基于KL散度,但具有对称性,可用于测量两个概率分布之间的距离。对JS散度开平方即可得到JS距离,所以它是一种距离度量。

    计算两个概率分布pq之间JS散度的公式如下。

    D_{{\rm JS}}(p\|q)=\frac{1}{2}D_{{\rm DL}}(p\|\frac{p+q}{2})+\frac{1}{2}D_{{\rm DL}}(q\|\frac{p+q}{2})

    其中,(p+q)/2pq的中点测度,D_{{\rm KL}}是KL散度。

    介绍过了KL散度和JS散度,下面介绍GAN中的纳什均衡。

  3. 纳什均衡

    博弈论中的纳什均衡描述了一种在非合作博弈中可以达到的特殊状态。其中每个参与者都试图基于对其他参与者行为的预判,选择使自己获益最多的最佳策略。最终形成的局面是,所有参与者都基于其他参与者的选择,采取了对自己来说最佳的策略,此时已经无法通过改变策略获益了。这种状态就称为纳什均衡。

    达到纳什均衡的一个著名例子是囚徒困境。两名犯罪嫌疑人(A和B)因为犯罪被逮捕了,分别关在不同的牢房,无法互相交流。检察官的证据只够将他们以较小的罪名定罪,而无法以主要罪行定罪(如果可以的话就会在监狱里关很久)。为了能以主要罪行定罪,检察官给他们提供了如下选择。

    • 如果A和B同时检举对方的主要罪行,他们都会被关押2年。
    • 如果A检举了B而B选择保持沉默,A会被直接释放,而B会被关押3年(反之亦然)。
    • 如果A和B都选择保持沉默,他们会因为较小罪名而都被关押1年。

    从这3种结果来看,对于A、B两人整体而言,最佳结果显然是都选择保持沉默,然后都被关押1年。然而选择保持沉默的风险在于,他俩都不知道对方是否也会选择保持沉默。这样对于两人来说最佳策略其实是检举对方,因为在任何情况下这样做都是好处更大而惩罚更小。这样的局面一旦形成,任何罪犯都无法通过改变策略来获得任何好处,也就达到了纳什均衡。

  4. 目标函数

    为了使生成网络生成的图像能以假乱真,应尽量提高生成网络所生成数据和真实数据之间的相似度。可使用目标函数测量这种相似度。生成网络和判别网络各有目标函数,训练过程中也分别试图最小化各自的目标函数。GAN最终的目标函数如下所示。

    \min_G\max_DV(D,G)=\mathbb{E}_{x\sim p_{{\rm data}}}(x)[\log D(x)]+\mathbb{E}_{z\sim p_z(z)}[\log(1-D(G(z)))

    其中,D(x)是判别网络模型,G(z)是生成网络模型,p(x)是真实数据分布,p(z)是生成网络生成的数据分布,\mathbb{E}是期望输出。

    在训练过程中,D(判别网络,discriminator)试图最大化公式的最终取值,而G(生成网络,generator)试图最小化该值。如此训练出来的GAN中,生成网络和判别网络之间会达到一种平衡,此时模型即“收敛”了。这种平衡状态就是纳什均衡。训练完成之后,就得到了一个可以生成逼真图像的生成网络。

1.3.4 评分算法

GAN的准确度容易计算。GAN的目标函数不是均方误差(mean-square error)或者交叉熵(cross entropy)这样确定的函数,而是在训练过程中习得的。研究者们提出了多种可以测量模型准确度的评分算法,下面介绍其中几个。

  1. Inception分数

    Inception分数(IS)是应用最广泛的GAN评分算法。它使用一个在Imagenet上预训练过的Inception V3网络分别提取真实图像和生成图像的特征。Shane Barrat和Rishi Sharma在论文“A Note on the Inception Score”中首次提出了该方法。IS测量生成图片的质量和多样性。计算IS的公式如下。

    {\rm IS}(G)=\exp(\mathbb{E}_{\chi\sim p_g}D_{{\rm DL}}(p(y|\chi)\|p(y)))

    其中,p_g表示一个概率分布,\chi\sim p_g表示chi是该概率分布中的一个抽样。p(y|\chi)是条件类别分布,p(y)是边缘类别分布。

    计算Inception分数的步骤如下。

    (1) 首先从模型生成的图像中抽取N个样本,记为chi^i

    (2) 然后使用如下公式构建边缘类别分布。

    p(y)=\int_{\chi}p(y|\chi)p_g(\chi)

    (3) 接着使用如下公式计算KL散度以及期望值。

    {\rm IS}(G)=\exp(\mathbb{E}_{\chi\sim p_g}D_{{\rm KL}}(p(y|\chi)\|p(y)))

    (4) 最后计算上述结果的指数,即可得到IS。

    IS越高,说明模型质量越好。IS虽然是重要的测度(measure),却也存在一些问题。比如模型对于每个类别只生成一张图像,其IS仍然可以很高,但这样的模型缺乏多样性。为了解决该问题,人们又提出了其他一些性能测度,稍后会介绍其中一种。

  2. Fréchet Inception距离

    为了克服Inception分数的一些缺陷,Martin Heusel等人在论文“GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium”中提出了Fréchet Inception距离(Fréchet Inception Distance,FID)。

    计算FID分数的公式如下。

    {\rm FID}=\Bigl\|\mu_r-\mu_g\Bigr\|^2+T_r(\Sigma_r+\Sigma_g-2(\Sigma_r\Sigma_g)^{1/2})

    上面的公式表示真实图像集x和生成图像集g之间的FID分数。要计算FID分数,首先抽取Inception网络的一个中间层的特征映射,构建一个多元正态分布来学习这些特征映射的概率分布,然后使用该多元正态分布的均值\mu和协方差Σ来计算FID分数。FID分数越低,说明模型的质量越好,其生成多样化的、高质量的图像的能力就越强。完美的生成模型的FID分数应该为0。FID分数优于IS之处在于对噪声的抵抗力较好,并且可以更好地测量图像的多样性。

     关于FID的TensorFlow实现,可访问https://www.tensorflow.org/api_docs/python/tf/contrib/gan/eval/frechet_classifier_distance。学术界和业界的研究者还提出了其他评分算法,本书没有涉及。继续下面的内容之前,请先了解评分算法Mode分数。

1.4 GAN变体

目前,GAN的变体数以千计,并且这个数字还在快速增长。下面简单介绍6种流行的GAN架构,后续章节会详述。

1.4.1 深度卷积生成对抗网络

Alec Radford、Luke Metz和Soumith Chintala在论文“Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”中首次提出了深度卷积生成对抗网络(deep convolutional GAN,DCGAN)。普通GAN通常不包含CNN,DCGAN将其引入了GAN。第3章会介绍如何使用DCGAN生成动画人物面部图像。

1.4.2 StackGAN

StackGAN是由Han Zhang、Tao Xu、Hongsheng Li等人在论文“StackGAN: Text to PhotoRealistic Image Synthesis with Stacked Generative Adversarial Networks”中首次提出的。他们使用StackGAN进行文本到图像的合成,效果极佳。StackGAN可以基于文本生成逼真图像。第6章会介绍如何使用StackGAN基于文本生成逼真的图像。

1.4.3 CycleGAN

CycleGAN是由Jun-Yan Zhu、Taesung Park、Phillip Isola和Alexei A. Efros在论文“Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks”中首次提出的。CycleGAN有一些非常有趣的应用,例如将照片转换成绘画(或者反过来),将夏天拍摄的照片转换成冬天拍摄的照片(或者反过来),以及将马的图像转换为斑马的图像(或者反过来)。第7章会介绍如何使用CycleGAN将绘画转换成照片。

1.4.4 3D-GAN

3D-GAN是由Jiajun Wu、Chengkai Zhang、Tianfan Xue、William T. Freeman以及Joshua B. Tenenbaum在论文“Learning a Probabilistic Latent Space of Object Shapes via 3D Generative-Adversarial Modeling”中首次提出的。生成物体的3D模型在制造业和3D模型产业都有广泛用途。在物体的3D模型数据上训练之后,3D-GAN可以为不同物体生成新的3D模型。第2章会介绍如何使用3D-GAN生成物体的3D模型。

1.4.5 Age-cGAN

Age-cGAN是由Grigory Antipov、Moez Baccouche和Jean-Luc Dugelay在论文“Face Aging with Conditional Generative Adversarial Networks”中首次提出的。人脸老化用途广泛,包括跨年龄人脸识别、找寻失踪儿童以及娱乐应用等。第3章会介绍如何训练可以生成特定年龄的人脸图像的cGAN。

1.4.6 pix2pix

pix2pix是由Phillip Isola、Jun-Yan Zhu、Tinghui Zhou和Alexei A. Efros在论文“Image-to-Image Translation with Conditional Adversarial Networks”中首次提出的。pix2pix网络和CycleGAN有相似的应用,可以将建筑标签转换成建筑图像(第8章有相关示例),将黑白图像转换成彩色图像,将白天拍摄的照片转换成夜间拍摄的照片,将草图转换成照片,以及将航拍图像转换成地图图像。

 如感兴趣,可阅读Avinash Hindupur的文章“GAN Zoo”,里面列举了现有的所有GAN。

1.5 GAN的优势

相比其他监督学习方法或者无监督学习方法,GAN的优势如下。

  • GAN是无监督学习方法。带标注数据需要人工制作,非常耗时。GAN不需要带标注数据,而可以通过无标注数据进行训练,学习数据的内在表现形式。
  • GAN可以生成数据。GAN可以生成能跟真实数据媲美的数据,应用潜力巨大。GAN可以生成图像、文本、音频和视频等,并且和真实数据相差无几。用GAN生成图像可应用于市场营销、电子商务、游戏、广告等很多行业。
  • GAN可以学习数据的概率密度分布。GAN可以学习数据的内在表现形式。前面提到了GAN可以学习混乱而复杂的数据概率分布,有助于解决机器学习领域的很多问题。
  • 训练后的判别网络是分类器。GAN训练完成之后会得到一个判别网络和一个生成网络,而判别网络可用作分类器。

1.6 训练GAN的问题

像很多技术那样,GAN也存在一些问题。这些问题通常与训练过程有关,包括模式塌陷、内部协变量转移以及梯度消失等。下面具体探讨这些问题。

1.6.1 模式塌陷

模式塌陷问题指的是生成网络所生成的样本之间差异不大,有时甚至始终只生成同样的图像。有一些概率分布是多峰的(multimodal),构造十分复杂。数据可能是通过不同类型的观测得来的,因此样本中可能会暗含一些细类,每个细类下的样本之间比较相似。这样会导致数据的概率分布出现多个“峰”,每个峰对应一个细类。如果数据的概率分布是多峰的,GAN有时就会出现模式塌陷问题,无法成功构建模型。如果生成的所有样本几乎都相同,这种情况就被称为“完全塌陷”。

解决模式塌陷问题有多种方法,例如:

  • 针对不同的峰训练不同的GAN模型;
  • 使用多样化的数据训练GAN。

1.6.2 梯度消失

在反向传播过程中,梯度从最后一层反向流动到第一层,并且会越来越小。有时梯度过小会导致前几层的学习速度非常慢,或者根本无法学习。在这种情况下,梯度无法改变前几层的权重值,所以网络前几层的训练没有任何效果。该问题称作梯度消失

如果使用基于梯度的优化方法训练更大的神经网络,问题会更严重。基于梯度的优化方法是通过计算参数值上的小幅变动对神经网络输出的影响来优化参数的。如果参数值的变动对神经网络的输出影响非常小,优化算法对参数值的调整也会很小,所以神经网络的学习就停滞了。

使用像sigmoid和tanh这样的激活函数,梯度消失问题同样会存在。sigmoid激活函数将输出值限定在0到1,较大的输入会映射为接近1的数值,较小的输入或者负数输入会映射为接近0的数值。类似地,tanh激活函数将输出值限定在-1到1,较大的输入会映射为接近1的数值,较小的数值会映射为接近-1的数值。反向传播过程需要用到微分上的链式法则,会产生乘数效应。当反向传播到达神经网络的前几层的时候,梯度已经非常小了,就会出现梯度消失的问题。

为了解决该问题,可以使用ReLU、LeakyReLU或者PReLU等激活函数。这些激活函数的梯度不会在反向传播过程中被耗散掉,因此可以有效训练神经网络。另一个解决办法是使用批归一化,该方法对网络中隐藏层接收的输入先进行归一化,然后才传递给隐藏层。

1.6.3 内部协变量转移

内部协变量转移问题之所以产生,是因为神经网络输入数据的概率分布发生了变化。输入数据的概率分布改变之后,隐藏层会试图适应新的概率分布,训练速度因此放缓,需要很长时间才会收敛到全局最小值。神经网络输入数据的概率分布和该网络之前接触的数据概率分布之间差异过大是问题根源。解决方法包括批归一化以及其他归一化技术,下面会探讨这些技术。

1.7 解决GAN训练稳定性问题

GAN可能出现训练不稳定的问题,严重时会导致GAN永远无法在某些数据集上收敛。下面介绍可以提高GAN稳定性的一些办法。

1.7.1 特征匹配

在GAN的训练过程中,判别网络的目标函数需要最大化,而生成网络的目标函数需要最小化。这样的目标函数存在一些严重的缺陷,比如没有考虑生成数据和真实数据的分布特征。

特征匹配是Tim Salimans和Ian Goodfellow等人在论文“Improved Techniques for Training GANs”中首次提出的技术,引入了一种新的目标函数来提高GAN的收敛能力。使用新的目标函数,便于生成网络生成在分布特征上和真实数据更为接近的数据。

在特征映射技术中,判别网络不再输出二元标签,而改为输出某个中间层对于输入数据的“激活映射”,也称“特征映射”。这样可以训练判别网络学习真实数据的分布特征,并且使用这些特征来区分真实数据和虚假数据。

首先引入一些计法,以便从数学上讲解该方法。

  • f(x):判别网络某中间层对于真实数据的激活映射或者特征映射。
  • f(G(z)):判别网络某中间层对于生成网络生成的数据的激活映射或者特征映射。

新的目标函数如下所示。

\Bigl\|\mathbb{E}_{\chi\sim p_{{\rm data}}}f(x)-\mathbb{E}_{z\sim p_z(z)}f(G(z))\Bigr\|^2_2

使用该目标函数可以获得更好的结果,但不能保证收敛。

1.7.2 小批量判别

小批量判别也能让GAN训练更稳定。该方法由Ian Goodfellow等人在论文“Improved Techniques for Training GANs”中首次提出。介绍该方法之前,先说明该方法所解决的问题。训练GAN的过程中,如果判别网络接收的输入图像彼此不相关,它们的梯度之间无法产生联系,判别网络就无法学习如何区分生成网络生成的不同种类的图像。这会导致前面介绍过的模式塌陷问题1。小批量判别可以解决该问题。图1-3很好地展现了该过程。

1因为生成网络得不到判别网络的相应反馈,也就不知道如何生成多样化的图像。——译者注

图1-3 通过小批量判别解决模式塌陷

小批量判别是一个多步骤过程。为神经网络添加小批量判别的步骤如下。

(1) 抽取样本的特征映射,然后乘以张量T\in R^{A\times B\times C},得到矩阵\boldsymbol{M}_i\in R^{A\times B}

(2) 使用如下公式计算\boldsymbol{M}_i矩阵各行之间的L1距离。

c_b(x_i,x_j)=\exp(-\Bigl\|M_{i,b}-M_{j,b}\Bigr\|_{L1})\in\mathbb{R}

(3) 对于某个输入数据x_i,计算步骤(2)得到的所有距离之和。

o(x_i)_b=\sum^n_{j=1}c_b(x_i,x_j)\in\mathbb{R}

(4) 将o(x_i)f(x_i)拼接起来,作为输入传递给神经网络的下一层。

\begin{aligned}o(x_i)=[o(x_i)&_1,o(x_i)_2,\cdots,o(x_i)_B]\in\mathbb{R}^B\\&o(X)\in\mathbb{R}^{n\times B}\end{aligned}

为了从数学上理解,下面具体解释这些表达式。

  • f(x_i):判别网络某个中间层对于第i个样本的激活映射或者特征映射。
  • T\in R^{A\times B\times C}:一个三维张量,用于和f(x_i)相乘。
  • \boldsymbol{M}_i\in R^{A\times B}:张量Tf(x_i)相乘生成的矩阵。
  • o(x_i):对于某样本x_i,计算其\boldsymbol{M}_i所有行之间L1距离之和。

小批量判别有助于避免峰坍塌,提高训练的稳定性。

1.7.3 历史平均

历史平均计算历史参数的平均值,然后将该值分别加入生成网络和判别网络的成本函数中。该方法是由Ian Goodfellow等人在论文“Improved Techniques for Training GANs”中首次提出的。

计算历史平均的公式如下。

\left\|\theta-\frac{1}{t}\sum^t_{i=1}\theta[i]\right\|^2

公式中的\theta[i]是全部参数在某一时刻i的取值。该方法也可以提高GAN的稳定性。

1.7.4 单面标签平滑

在之前的例子中,分类器的标签(即目标值)只可取0或者1,0代表假图像,1代表真图像。在这样的设定下,GAN很容易受到对抗样本问题的影响。对抗样本是一种特殊的输入数据,如果在输入数据中叠加对抗样本,原本可以正常进行分类的神经网络会产生错误的分类结果。标签平滑技术可以为判别网络提供平滑后的标签,比如使用0.9(真)、0.8(真)、0.1(假)或者0.2(假),而不是对所有样本都标注1(真)或者0(假)。真图像和假图像的目标值(标签值)都需要进行平滑处理。标签平滑有助于降低GAN出现对抗样本的风险。具体做法是为图像标注0.9、0.8、0.7以及0.1、0.2、0.3等标签。关于标签平滑的更多信息,可参考论文“Improved Techniques for Training GANs”。

1.7.5 批归一化

批归一化技术是将特征向量归一化,使其均值为0,方差为1。该技术可提高学习过程的稳定性,以及解决权重值初始化效果差的问题。将该技术作为预处理步骤应用于神经网络的隐藏层,有助于缓解内部协变量转移的问题。

批归一化是在2015年由Ioffe和Szegedy在论文“Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”中首次提出的。

批归一化的优势如下。

  • 缓解内部协变量转移问题。批归一化可以通过数值归一化缓解内部协变量转移问题。
  • 加速训练。如果神经网络接收的输入值呈正态分布,那么可提高该网络的训练速度。批归一化可以提升神经网络内部各层所接收数值的质量,提高训练的整体速度(不过由于添加了额外的计算,每轮迭代会变慢)。
  • 提高准确性。批归一化可以提高模型的准确性。
  • 提高学习速率。神经网络通常需要使用较低的学习速率训练,需要很长时间才会收敛。借助批归一化,可以采用更高的学习速率,使神经网络更快地达到全局最小值。
  • 减少对随机失活技术的依赖。使用随机失活会损失神经网络内部各层的一些关键信息。批归一化可以起到正则项的作用,避免使用随机失活层。

批归一化需要对所有隐藏层应用,而不仅仅是输入层使用。

1.7.6 实例归一化

前面提过,批归一化基于一批数据的整体信息进行归一化。实例归一化有所不同,对一个特征映射进行归一化时只使用该特征映射的信息。实例归一化是由Dmitry Ulyanov和Andrea Vedaldi在论文“Instance Normalization: The Missing Ingredient for Fast Stylization”中首次提出的。

1.8 小结

本章介绍了GAN、GAN标准架构的组件以及GAN变体。基于GAN的基本概念,本章还介绍了有关GAN构建和功能的深层概念、GAN的优势和缺陷,以及克服缺陷的一些办法,最后介绍了GAN的各种实际应用。

基于本章讲述的GAN关键知识,下一章会介绍如何使用GAN生成不同的图形。

目录

  • 版权声明
  • 前言
  • 第 1 章 生成对抗网络简介
  • 第 2 章 使用3D-GAN生成图形
  • 第 3 章 使用cGAN实现人脸老化
  • 第 4 章 使用DCGAN生成动画人物
  • 第 5 章 使用SRGAN生成逼真图像
  • 第 6 章 StackGAN:基于文本合成逼真图像
  • 第 7 章 使用CycleGAN将绘画转换为照片
  • 第 8 章 使用cGAN实现图像对图像变换
  • 第 9 章 预测GAN的未来