GANs - 生成对抗网络系列论文学习笔记

最近对生成对抗网络(GANs, Generative Adversarial Networks)相关研究感兴趣,阅读了一些论文。

GANs - 生成对抗网络系列论文学习笔记

本文主要按照论文发表的时间顺序概览生成对抗网络领域的主要研究。

0 背景

相关资料:

新智元介绍文章:必读!生成对抗网络GAN论文TOP 10

GitHub相关专题:nightrome / really-awesome-gan

1 GANs

Goodfellow I, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[C]//Advances in neural information processing systems. 2014: 2672-2680.

生成对抗网络GANs, Generative Adversarial Networks)由Ian Goodfellow等人于2014年提出。

已有研究主要关注概率分布函数的参数估计,通过参数方法实现生成器。但似然函数难以处理,需要大量近似。例如:深层波兹曼机依赖似然函数。因此需要生成模型,避免依赖形式明确的似然函数。

GANs通过同时对抗训练两个模型:生成模型\(G\)Generative model)和判别模型\(D\)Discriminative model)来取得高质量的生成模型。

生成模型\(G\)的目的在于捕捉数据分布信息。生成模型的输入是噪声,通过传递输入噪声生成拟合训练集样本概率分布的生成样本。

判别模型\(D​\)的目的在于估测样本来自于训练集(真实样本,而非生成模型伪造的生成样本)的概率。判别模型的输入是高维的、丰富的信息,输出是类型标记。

对抗网络框架(adversarial nets framework),包含:生成模型\(G\)和判别模型\(D\),它们通过对抗来决定样本究竟来自模型分布还是数据分布。对抗生成网络基于最小最大化博弈(minimax game),生成模型和判别模型作为博弈的双方,训练过程中的目标分别是最小化和最大化价值函数(value function)。训练最后的结果就是判别模型无法分辨真实数据和生成数据,此时它的概率分布,例如:就是恒为\(\frac{1}{2}\)

\[ \min\limits_G\max\limits_D{V(D, G)} = \mathbb E_{x \sim p_{data}(x)}[\log D(x)] + \mathbb E_{z \sim p_{z}(z)}[\log (1 - D(G(z)))] \]

以造假币者(counterfeiters)为例:造假币者即生成模型,而分辨和调查假币的警察就是判别模型。造假币者和警察互相对抗,在对抗中,造假币者不得不制造更加逼近真币的假币,而警察也会在持续的对抗中提升自己的判别能力。总而言之,对抗带来的训练会提高判别模型和生成模型各自的能力。

该论文中的生成模型和判别模型均通过多层感知机实现。

2 Conditional GANs

Mirza M, Osindero S. Conditional generative adversarial nets[J]. arXiv preprint arXiv:1411.1784, 2014.

条件生成对抗网络(Conditional GANs(在一些论文亦中称为cGANs), Conditional Generative Adversarial Nets)由Mehdi MirzaSimon Osindero在2014年提出。

Conditional GANs是在GANs的基础上发展出的新模型,其主要特点是可以对生成器和判别器施加条件。

GANs为无条件生成模型,无法控制数据生成模式。GAN的值函数(value func)的\(x​\)是无条件的,\(x​\)均来自训练样本,无类别分类。仅需额外的辅助数据\(y​\)就可以将GAN拓展为Conditional GAN。辅助数据\(y​\)可以是类别标签、也可以是来自其他模态的数据(例如:\(x​\)\(y​\)文)。添加一个输入层(input layer)即可增加条件输入\(y​\)\(x​\)\(z​\)\(y​\)并行输入)。生成器:通过联合隐层表示来结合\(z​\)\(y​\)

相较于GAN中的值函数中的\(D(x)\)\(G(z)\),Conditional GAN的目标函数(object func)的区别就在于\(D(x|y)\)\(G(z|y)\)都增加了条件\(y​\)

\[ \min\limits_G\max\limits_D{V(D, G)} = \mathbb E_{x \sim p_{data}(x)}[\log D(x|y)] + \mathbb E_{z \sim p_{z}(z)}[\log (1 - D(G(z|y)))] \]

作者在MNIST手写字符数据集上做了单模态(unimodal)实验,以真实手写字符样本为x,对应数字为y,训练Conditional GANs来生成指定类别(数字0~9)所对应的手写字符图像。作者在Flickr的图文数据上开展了多模态(multimodal)实验,以图片为x,用户生成元数据(UGM, user-generated metadata)为y,训练Conditional GANs来生成tag-vectors。评价方法:为每个图片生成100个样本,其中每个样本计算top-20近义词,统计以上100×20个词,取其中top-10最频繁词作为图片的生成标记(generated tags

3 DCGANs

Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.

深度卷积生成对抗网络( DCGANs, deep convolutional generative adversarial networks)由Alec Radford、Luke Metz和Soumith Chintala在2015年提出。

DCGANs可以学习从目标部分到场景的多层表示(图像特征提取),利用GANs结构来学习大量无标记数据得到可复用的特征表示继而用于有监督学习任务。

论文主要包含以下四点内容:

  1. DCGAN:提出并评价了一系列限制条件,主要用于解决GANs训练不稳定问题。详细参阅论文第3节APPROACH AND MODEL ARCHITECTURE的论述和Architecture guidelines for stable Deep Convolutional GANs总结框。
  2. 指出判别器在图像分类任务上相较于其它无监督学习算法有优势。
  3. 指出GANs习得的过滤器可以学会描绘特定目标。
  4. 指出生成器的向量算术属性可以便捷地操纵生成样本的语义质量。

该论文在的典型实验,通过尝试控制输入噪声,继而完全移除生成模型生成图像中的窗户,说明了生成模型通过训练学习到了场景中的物体特征。

4 Improved Techniques for Training GANs

Salimans T, Goodfellow I, Zaremba W, et al. Improved techniques for training gans[C]//Advances in neural information processing systems. 2016: 2234-2242.

本文由Tim Salimans等人于2016年发表。

本文提出了一系列对GANs模型的训练的改进方法以实现收敛的GANs,改进技术包含:

  1. Feature matching
  2. Minibatch discrimination
  3. Historical averaging
  4. One-sided label smoothing
  5. Virtual batch normalization

没细看,不展开写。

5 pix2pix

Isola P, Zhu J Y, Zhou T, et al. Image-to-image translation with conditional adversarial networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1125-1134.

本文由Phillip Isola等人于2017年发表于ICCV。

本文主要研究图到图变换(image-to-image translation)问题。

cGANs不仅学习图到图之间的映射,还学习实际任务的损失函数。

已有研究存在问题:

  1. 需要人工设计有效的损失函数
  2. 设计有效的损失函数十分困难

思路:可否寻找更高层面上的目标取代因具体任务而人工设计的损失函数?

cGANs模型非常适合实现图到图变换问题: 1. GANs通过对抗(最小最大化博弈)来训练生成器和判别器,无须人工设计指定任务的损失函数; 2. cGANs可输入条件控制输出,适合用于实现可控的图到图翻译。

本文主要贡献:

  1. 阐述cGANs在广泛的图到图变换任务上的有效性;
  2. 提出一个简单且效果不错的框架,并分析架构选择细节

本文框架特点: 1. 生成器基于U-Net架构; 2. 判别器基于卷积PatchGAN分类器。

本文生成器的目标: 1. 既要骗过判别器; 2. 又要输出接近真值的图像。

因此增加L2/L1惩罚项,以减小生成图像与真值图像的差异。使用L1相较于L2可减少生成图像模糊。本文的生成器通过dropout机制引入并控制GANs的噪声

本文于项目pix2pix关联,各个社群的人们把pix2pix应用到了各不相同的图到图变换任务上。

6 StackGAN

Zhang H, Xu T, Li H, et al. Stackgan: Text to photo-realistic image synthesis with stacked generative adversarial networks[C]//Proceedings of the IEEE International Conference on Computer Vision. 2017: 5907-5915.

StackGAN由Han Zhang等人于2017年发表于ICCV。

StackGAN实现的功能基于自然语言文本描述,生成256×256的仿真照片级图像(photo-realistic images)。

基于GANs生成高分辨率图像主要难题:真实自然图像的分布与应用模型的分布在高维像素空间中难以重叠。已有研究类似于本文Stage-Ⅰ GAN的工作,只能生成粗略的低分辨率图像。

StackGAN设计思路: 模仿人类绘画,将高清图像生成分解为两个子问题:

  1. 从无到有:从文本到低分辨率粗略图;
  2. 从有到精:从低分辨率粗略图+文本到高分辨率精细图。

StackGAN模型结构:

  1. Stage-Ⅰ GAN:输入时文本描述,输出是仅含形状和色彩的初步生成图像。

  2. Stage-Ⅱ GAN:输入时Stage-Ⅰ GAN输出的初步图像和文本描述,输出是高清的、逼真摄影细节的图像

本文还提出了条件增强(Conditioning Augmentation)技术。相较于以往研究把文本嵌入(text embedding\(\varphi_t​\)直接作为cGANs的条件变量,直接输入生成模型。本文认为,文本嵌入所在的隐空间(latent space)是相当高维的(通常高达100维以上),相较于高维的文本嵌入隐空间,实际的文本图片对的数据量会显得很少,相对少量的文本嵌入在隐空间中会出现隐数据簇(latent data manifold)不连续(discontinuity)的问题。这种隐数据簇不连续问题会对生成模型的训练和学习带来很不利的影响,例如:会造成生成器模型对隐空间中的训练数据(数据量小)过拟合。

条件增强技术的方案是从独立高斯分布\(\mathcal{N}(\mu(\varphi_t), \Sigma(\varphi_t))​\)中随机采样取得隐变量\(\hat{c}​\)作为生成模型的条件输入。条件增强技术使得生成模型的输入不再只依赖有限的真实样本作为训练输入,而是通过建立独立高斯分布,取得无限多的生成模型条件输入来训练生成模型。这使得生成模型对样本扰动具备更好的鲁棒性(robustness)。为了保障在条件簇(conditioning manifold)上的平滑度,且避免过拟合,为生成模型训练的目标函数中增加正则化项: \[ D_{KL}(\mathcal{N}(\mu(\varphi_t), \Sigma(\varphi_t)) || \mathcal{N}(0, I)) \]

Kullback-Leibler divergence (KL divergence):

相对熵(relative entropy),又称为KL散度,信息散度,信息增益。衡量两个概率分布之间的差异度。

通过将该项作为正则化项,在训练生成模型时,梯度下降最小化生成模型目标函数(包含该正则化项),可以减小独立高斯分布\(\mathcal{N}(\mu(\varphi_t), \Sigma(\varphi_t))\)\(\mathcal{N}(0, I)​\)的差异性。

本文使用了Inception score来计算评价矩阵(evaluation metrics)来评价生成模型。 \[ I = \exp(\mathbb E_xD_{KL}(p(y|x)||p(y))) \] Inception score基于KL散度,生成模型越好,则\(p(y|x)\)\(p(y)\)之间的KL散度会更大。简单地来说,条件\(x​\)输入到生成模型后,概率分布是有明显不同的。

7 CycleGAN

Zhu J Y, Park T, Isola P, et al. Unpaired image-to-image translation using cycle-consistent adversarial networks[C]//Proceedings of the IEEE international conference on computer vision. 2017: 2223-2232.

CycleGAN由Jun-Yan Zhu等人于2017年发表于ICCV。

CycleGAN主要研究的是如何在没有成对样本的情况下,学习把图像从领域X转换到领域Y?(成对训练数据难以获得)

本文提出了循环一致性损失(cycle consistency loss)来应对这种高度欠约束的映射学习。

思路是,在没有成对数据的情况下,通过学习两个图片集各自特征,实现相互转换。

初步思想:

  1. 生成模型:\(G: X→Y​\)\(\hat y = G(x)​\),根据\(X​\)中的样本生成类\(Y​\)样本;
  2. 判别模型:判别\(\hat y\)(或\(y\))是生成样本还是真实的\(Y\)中样本。

根据初步思想建立的对抗网络模型会遇到问题,因为\(G: X→Y\)不意味着\(x→y\)是有意义的对应关系。实际的实验中,会遭遇模式溃缩(mode collapse)难题——所有的输入图片都映射到了同一个输出图片。

为了应对mode collapse难题,作者提出模型必须是循环一致的(cycle consistent)。\(G: X→Y\)\(F: Y→X\)\(G\)\(F\)映射必须是逆序后一致的。例如:英语句子\(x\)转换为法语句子\(y\),法语句子\(y\)转换为英语后应该与原始英语句子\(x\)尽可能一致。为了保证循环一致,本文提出了循环一致性损失:把循环一致性损失加入到对抗生成网络的损失中,争取\(F(G(x))≈x\)\(G(F(y))≈y​\)的循环一致性。

循环一致性损失包含:

  1. 正向(forward)循环一致性:从x到G(x),再通过F(G(x))逆向变换回去须接近原始x。

  2. 反向(backward)循环一致性:从y到F(y),再通过G(F(y))逆向变换回去须接近原始y。

\[ {\mathcal L}_{cyc}(G,F)={\mathbb E}_{x \sim p_{data}(x)}[{\|F(G(x))-x\|}_{1}]+{\mathbb E}_{y \sim p_{data}(y)}[{\|G(F(y))-y\|}_{1}] \]

循环一致性损失计入了正向一致性损失(从x开始变换)和反向一致性损失(从y开始变换)。损失通过计算L1范数距离取得。

完整的目标损失:计入\(X→Y\)\(G\)\(D_Y\)损失、\(Y→X\)\(F\)\(D_X\)损失以及\(X\)\(Y\)互转的循环一致性损失。