彭泊词,邵一峰
(北京师范大学人工智能学院,北京 100875)
近年来,机器学习领域发展迅速。在机器学习中,深度学习已经在人脸识别[1-3]、人机对话[4-5]、机器翻译[6-7]等领域取得了良好的效果。机器学习任务中的无监督学习不依赖于大量带有标记的数据,是一个非常具有研究前景的方向。生成模型是无监督学习的一项关键技术,但是早期的生成模型建模比较困难,因此发展缓慢。生成对抗网络GAN 自Goodfellow[8]等人提出后,由于其新颖的对抗思想以及优秀的生成效果,被学术界和工业界所重视。
GAN 最初是在 2014 年由 Goodfellow 等人[8],受博弈论中的零和博弈启发,在NIPS 中提出的。GAN 由两个神经网络构成:生成模型G 和判别模型D。其中,生成模型G 用来生成与真实样本相近的生成样本G(z)。判别模型D 用来判别输入的样本是否是真实样本,若判别模型认为输入数据x 为真实样本则输出D(x)=1,否则输出D(x)=0 。GAN 模型结构如图1所示。
图1 GAN模型结构
通过交替训练两个模型,使得G 生成的样本能够“欺骗”D 以逼近于真实样本,D 能够更准确的判断输入的样本是来自于真实样本还是由生成模型生成的样本。当训练D 的时候,对于真实输入的样本,我们期望得到接近于1 的输出值,即D(x)趋向于1;如果给定样本是来自于生成模型生成的,那么我们期望得到接近于0 的输出值,即D(G(z))趋向于0,这里的z是输入到生成模型的服从某一个简单分布(如:高斯分布)的随机噪声。而当训练G 的时候,我们期望得到的生成样本能够“骗过”判别模型,也就是D(G(z))趋向于1。根据以上所述的原理,可以构造出如下所示的目标函数:
如图1 所示,在GAN 的训练过程中,先固定G 的参数,训练D,根据输出结果调整参数,使得D 的性能最优。然后固定D 的参数,训练G,得到G 网络的参数。当pz=pdata,达到纳什平衡,此时为全局最优。当D 判别样本的准确率稳定在即生成模型无法判断出给定的样本是来自于真实样本还是由生成模型生成的生成样本。
GAN 模型相较于其他的模型,具有显著优势。与其他的生成网络有所不同,GAN 在计算的时候可以不使用马尔科夫链,仅仅只需要通过BP 反向传播算法来获得梯度。除此之外,输入到GAN 模型中的数据先验假设较少,数据可以是任意简单的分布,如:高斯分布。并且相较于其他模型,GAN 输出的生成样本更加清晰真实。
虽然GAN 的优势特别突出,但是同时也存在着很多缺点。一方面,模型要使得G 和D 训练保持同步,但是实际情况是二者很难保持同步,因此GAN 模型的训练很不稳定。另一方面,原始的GAN 模型是用KL散度和JS 散度来衡量两个分布的差异的,而当判别模型训练到最优的时候,如果两个分布没有重叠的(在实际中出现最多的就是这种情况),JS 散度就会变成一个常数,这时梯度为0,因而生成模型无法获得梯度信息。这就是梯度消失现象。除此之外,GAN 模型还具有模式崩溃的缺点。模式崩溃现象是指GAN 模型生成的样本不具备多样性,这样的话就大大削弱了其在数据增强中的效果。产生这种现象的原因是,同一类别的高维数据,往往集中在某个低维流形附近,因此生成模型为了安全,会生成一些重复的样本,造成模型的退化。
由于GAN 存在训练困难等问题,研究者们不断地对GAN 进行改进,出现了很多GAN 的变体。下面就几种常用的变体进行讨论。
针对原始GAN 生成过于自由的问题,Mirza M 等人[9]通过增加约束条件来控制生成过于自由的问题,提出了CGAN,如图2 所示。在生成模型和判别模型的输入中增加一个约束条件y,这样CGAN 成为有监督学习,可以向着给定的方向生成数据。其目标函数为:
图2 CGAN结构
虽然CGAN 控制了生成过于自由的问题,但并没有解决训练不稳定的问题。
LAPGAN[10]是在CGAN 的基础上,利用多个CGAN构建高斯金字塔和拉普拉斯金字塔[11]生成高分辨率的图像。拉普拉斯金字塔的公式如下:
图3 LAPGAN训练过程[10]
如图3 所示,对于拉普拉斯金字塔的第0 层,也就是原始图像I0,通过下采样得到l,再对其上采样得到I0,进而得到第0 层的拉普拉斯金字塔h0=I0-l0,将其作为CGAN 的真实样本数据,而后将I0作为CGAN 的条件变量,通过输入噪声z0生成虚假数据。通过不断训练使得不断逼近h0,以此类推,逐层完成训练。
训练完成后,将低分辨率图像z3输入到G3中,得到图像I3,对其上采样得到G2的条件变量l2,通过对G2输入噪点z2得到h2,将其与l2相加即得到I2。同样的方式可以得到I1和I0,I0即LAPGAN 得到的高分辨率图像。
DCGAN[12]是尝试解决GAN 模型训练不稳定的一大经典模型,它为后序很多工作奠定了基础。DCGAN通过将GAN 与CNN 结合,可以很好地从图像中学习到特征。为了使模型更加稳定,DCGAN 在架构上相比于CNN 做出了如下改进:将池化层替换为了步幅卷积和微步幅卷积;在生成模型和判别模型中使用批量归一化进行训练;去掉了全连接层,只在最后进行平均池化;并且在生成模型的输出层使用tanh 激活函数,而在其他隐藏层中使用ReLU 激活函数;在判别模型的所用层中使用Lecky ReLU 激活函数。
DCGAN 虽然在一定程度上提高了模型的稳定性,并且能够生成多样性的图像,但是仍然存在一些形式的模型不稳定性,例如,随着模型的时间更长,有时会将一些过滤器的子集塌缩为单个的振荡模式。
由于传统GAN 网络是无监督学习模式,随机噪声z 的约束性低,可读性很差,也就是说我们很难确定生成图像的特征对应于z 的哪一维度,而InfoGAN[13]通过将随机噪声z 分为c 和z’两个部分来实现控制生成图像中的特定特征,其中c 表示隐含编码,即随机噪声中已知对应特征的某一维度向量,而z’表示未知的不可压缩的随机噪声信号。
图4 InfoGAN结构
如图4 所示,InfoGAN 的生成模型的输出改为了G(z’,c),同时判别模型D 不仅要判别输入数据的真假,还要通过分类器实现隐含编码c 的校验和更新。相较于传统GAN,InfoGAN 的损失函数为:
其中λI(c;G(z',c))表示c与G(z',c)的互信息,即隐含编码与生成图像特征的相关性大小,以此选择性忽略掉相关性较小或者“不重要”的隐含编码。
WGAN 是通过对目标函数进行优化,进而提高模型性能的一个典型例子。原始的GAN 模型的目标函数是通过JS 散度表征的,因此,当两个分布互不重叠或者重叠部分可以忽略时,目标函数会趋向于一个常数,这也是梯度消失的原因[14]。
于是,Arjovsky 等人[15]将JS 散度替换为了Wasserstein 距离(又称 EM 距离)。Wasserstein 距离具有平滑性,同时当两个分布没有重叠或重叠可以忽略时,Wasserstein 距离依然可以很好地反映它们的距离,这样梯度消失的问题就可以在理论上得到解决。
Wasserstein 距离与GAN 模型加以结合,于是判别模型的目标函数变为:
生成模型的目标函数变为:
WGAN 除了在理论层面上解决了梯度消失的问题,还解决了训练不稳定的问题。除此之外,还确立了一个判断模型训练好坏的标准。
WGAN 虽然在理论层面上解决了梯度消失的问题,但是该问题在实验中却经常发生。因为,WGAN 采用了权重剪枝的方法来实施Lipschitz 约束。然而,满足Lipschitz 约束条件的情况大多数都不满足权重剪枝。
针对这个问题,产生了WGAN-GP[16]。WGAN-GP放弃了权重剪枝,而是采用一种梯度惩罚的方式。具体来说,就是将Lipschitz 约束正则化,通过把约束写成目标函数的惩罚项,以近似Lipschitz 约束条件。
WGAN-GP 在实验层面也解决了梯度消失的问题,并且具有较强的稳定性。但是,WGAN-GP 存在着收敛速度慢的问题,对于同一个数据集,WGAN-GP 需要训练更多的次数,才能收敛。
EBGAN[17]从能量的角度解决了传统GAN 梯度消失问题,其与传统GAN 显著区别在于其判别模型D 在本质上是一个能量函数,判定输入数据的能量越高则说明输入数据越接近真实数据,反之能量越低则说明越接近虚假数据中。
如图5 所示,相较于传统 GAN 网络,EBGAN 并不需要通过比较KL 散度和JS 散度来判别输入的数据x是否为真实数据,而是直接将x 输入到自编码器中,依据x 与自编码器输出的结果x’的误差来判别x 是否为真实数据。由于自编码器预先训练的数据就是EBGAN 实际输入的真实数据,将未被输入过自编码器的生成数据与已经作为训练数据输入过的真实数据所输出的结果差异往往会非常大。也因此EBGAN 比传统的GAN 模型更加稳定,但收敛速度较慢。
图5 EBGAN结构
LSGAN[18],即最小二乘GAN,其与传统GAN 网络的主要区别在于,将目标函数的判别标准由交叉熵替换为最小二乘。其损失函数如下:
其中 a、b、c 有b-c=1,b-a=2 和c=b两种取值方法,其中需要注意的是,不再去求V(D)的最大值,而是求其最小值,即本质上,交叉熵与最小二乘相比,后者不仅要是生成样本欺骗判别模型,还要使距离决策边界较远的生成图像尽可能靠近决策边界,因此LSGAN 可以有效提高生成图像的质量。但同时,LSGAN 只是将KL 散度替换为了Pearson 卡方散度,并没有解决梯度消失的问题。
风格迁移就是将目标图像的风格迁移到原图像中,使得原图像在图像内容不变的前提下获得目标图像的风格。简单来说,就是将一幅图像的风格转化为另一种风格,例如说:照片转化为素描画,照片转化为梵高绘画风格。pix2pix[19]在CGAN 模型的基础上,生成模型和判别模型分别使用了U-NET[20]架构和Patch-GAN 分类模型,实现了成对图像之间的风格迁移。CycleGAN[21]提出了循环一致性的思想,使得两类图像经过两次对应的映射后,又变为了原来的图像,该模型消除了pix2pix 只能寻找相互配对的图像的劣势,不需要配对的图像数据就可以实现图像的翻译。DualGAN[22]是一种无监督的模型,此模型应用了对偶学习的思想,并且将损失函数改为了WGAN 的损失函数,能够在没有标签数据的前提下,实现在两个不同域之间的图像迁移,大大降低了增添标签的成本。除了上述模型之外,GANILLA[23]是一种能将自然图像转变为儿童读物风格的模型,在这一领域GANILLA 取得了显著的效果,如图6 所示。
图6 CycleGAN实现风格迁移[21]
图像的还原与修复是一项重要的工作,应用场景也非常的广泛,例如:破损名画的修复、密集场所犯罪嫌疑人识别等。GAN 模型在图像还原与修复上具备着良好的性能。Yah 等人[24]提出了一种基于GAN 网络,通过在潜在的图像流中寻找与需要修复图片最接近的编码来实现修复的模型。Li 等人[25]提出了一个深度生成补全图片补全模型,这个模型通过编码-解码生成器、两个对抗判别器来合成用随机噪声遮挡的部分,在面部合成任务上可以直接生成缺失区域的内容,达到了良好的效果,如图7 所示。
图7 图像修复[25]
超分辨率图像生成前景广阔。多种GAN 模型在生成超分辨率图像方面有着出色的效果,例如前文所提到的 LAPGAN[10],Ledig 等人提出的 SRGAN[26],以及Xintao Wang 等人提出的 ESRGAN[27]。其中 SRGAN 通过提出一种感知损失函数,来实现对自然图像的四倍放大。而ESRGAN 则是在SRGAN 基础上,进行了改进,它引入了RRDB 的概念,同时也对SRGAN 中的网络结构、感知损失和对抗损失进行了改进,可以生成比SRGAN 纹理更加真实的图片。此外,Kupyn 等人提出的DeblurGAN[28]在动态模糊移除方面有着出色的效果,以及同样是由Kupyn 提出在DeblurGAN 基础上改进的Deblur-v2[24],显著提高了生成图像的质量和效率,如图8 所示。
图8 SRGAN(左)、ESRGAN(中)和真实图像(右)对比[27]
数据不足是科研工作者常常遇到的难题,并且当今隐私保护问题愈发受到重视,如何在合法的前提下获取高质量的数据集就成了一个非常重要问题。多种GAN 模型在生成数据方面效果显著,例如DCGAN[12]就可以稳定生成多样的数据,也可以使用CGAN[9]生成我们所期望得到的数据类型,类似的,InfoGAN[13]以无监督的方式同样可以生成特定的数据。GAN 可以通过插入不同的噪声生成不同的数据,实现对原本数据集的增广,例如由一辆黑色的汽车我们可以通过GAN 训练输出白色、棕色等不同颜色的同类型汽车。但与此同时,如果数据集过小,也可能会出现异常数据比例较低或过高的现象,导致数据集的客观性减弱。
GAN 在其他领域同样具有良好的表现。例如人脸检测方面,人脸表情识别[29]、人脸生成[30]等。对于时间序列数据,MoCoGAN[31]通过分解动作和内容进行视频的生成;Dual Motion GAN[32]通过对偶学习能够精准预测视频下一帧的内容;除了处理视频以外,GAN 还可以生成音乐[33-34]。在图像处理方面,GAN 可以应用在图像分割[35]、根据文本生成图像[36]等。不仅如此,GAN 还在自动驾驶[37]、机器翻译[38]、密码破译[39]、医疗影像分割[40]、重症监护室ICU 记录生成[41]等也取得了比较出色的效果。
GAN 是无监督学习的一个强大的计算框架,并且其零和博弈思想也为人工智能领域注入了活力。GAN以其强大的生成能力以及无限建模能力,已经在图像生成等领域展现了绝佳的效果。虽然GAN 还面临着很多难题,例如说模式坍塌以及模型的生成能力的可解释性的问题,但是相信在未来,这些问题都会得到解决。希望本文能为我国生成对抗网络研究提供参考与启示。