生成对抗网络是目前深度学习领域中发展最快的一个分支之一,Facebok AI部门主管Yann LeCun曾经说过:生成对抗网络及其变种已经成为最近10年以来机器学习领域最为重要的思想。它可以用于图像编辑和着色、风格转换、物体变形、照片增强等多个领域。

下面的内容是我在GAN方面的学习及总结,这篇文章的定位是增加大家对GAN系列网络的广度知识,希望每个不同的GAN网络分支能给大家带来一些启发,同时每个网络的paper我都已经收集,大家有需要深入研究可以自行下载,感谢大家的关注,有不足指出还望大家指出。以下,enjoy:

一.原始GAN网络

1.GAN(Generative Adversarial Network)

GAN论文
如果想了解GAN数学原理以及详解知识点可以看这篇文章点我
生成模型的特点:
1.生成样本
2.训练并不包含最大似然估计
3.由于生成器不会看到训练数据,过拟合的风险更低
4.GAN十分擅长捕获模式的分布

GAN定义理解:
核心思想来自于博弈论:极大极小博弈,整个过程被称之为对抗性过程。
即生成器生成数据,判别器区分数据是真实数据还是生成器生成的假数据。在这个过程中两个网络一起进化优化。

GAN的目标函数:
在这里插入图片描述
GAN模型的框架:

在这里插入图片描述
GAN还有强大的表达能力:它可以在潜在空间(向量空间)内执行算数运算,并将其转化为对应特征空间内的运算。
在这里插入图片描述

2.DCGAN

DCGAN
深度卷积生成对抗网络是可以生成图片和图像矫正及修补的模型,它将卷积层应用于GAN网络。

DCGAN的架构:
在这里插入图片描述
图像矫正和修补是关于补充图像上丢失或者损坏部分的技术。
该算法需要下面的两部分信息:
1.上下文信息:根据丢失像素周边的像素信息进行推导。
2.感知信息:根据现实生活或者其他图像来让修补的部分变得看起来更自然。

3.SSGAN

SSGAN

半监督学习生成对抗网络最初的动机是利用生成器生成的样本能力来提升图像分类任务的性能,进而提升判别器的泛化能力。其核心的思想:将其中一个网络同时当作分类器和判别器进行训练。

SSGAN模型架构:
在这里插入图片描述

4.GAN模型的缺陷

训练GAN本质上是生成器网络和判别器网络互相竞争并达到最优的过程,也称为纳什均衡。但理想总是丰满的,而现实总是骨干的,GAN在训练的时候会遇到很多问题需要我们特别注意。
1.初始化问题:参数的选择可能导致训练优化过程进入振荡,判别器损失等于0。由于GAN模型中的判别和生成模型需要进行相互对抗,如果在训练之初就获得了一个相当准确的判别模型,能够区分大量生成的模型样本,那么生成模型所的损失值将会变得极大,从而使得模型参数无法正常更新。
2.模型坍塌:生成器生成一模一样的图像,本质上梯度不再变化。
3.计数,角度,全局结构方面的问题。

5.优化训练的方法

  1. 特征匹配:让生成器产生的样本与真实样本在判别器中间层的响应一致,即使得判别器从真实数据和生成数据中提取的特征一致,而不是在判别器网络的最后一层才做判断,有助于提高模型的稳定性;其实验也表明在一些常规方法训练GAN不稳定的情况中,若用特征匹配则可以有效避免这种不稳定。
  2. Minibatch Discrimination:在判别器中,不再每次对每一个生成数据与真实数据的差异性进行比较,而是一次比较一批生成数据与真实数据的差异性。这种做法提高了模型的鲁棒性,可以缓解生成器输出全部相似或相同的问题。
  3. 历史平均:其思想是加入一个惩罚项来惩罚那些和历史平均权重相差过多的权重值。在生成器和判别器的目标函数中各加一个对参数的约束项其中θ[i]表示在时刻i的模型参数,该操作可以在一些情况下帮助模型达到模型的平衡点。
  4. 单侧标签平滑:通常情况下我们用标签1表示图像是真实的,标签0表示图像是伪造的,不要受局限,我们也可以用一些更平滑的标签,例如0.1或者0.9,使得网络更加健壮。
  5. 输入归一化:将图像归一化到[-1,1],并使用tanh函数作为最后一层的激活函数。
  6. 批规范化:核心思想是针对真实数据和生成数据构建不同的Batch,每个Batch只能全是真实数据或者生成数据。
  7. 使用优化器:对生成器使用ADAM作为优化器,对判别器使用SGD作为优化器。
  8. 不要呆板:有时使用一些直觉。

二.根据特定条件或者特性来生成或者编辑图像的技术

1.CGAN(Condition GAN)主要用于图像生成

Conditional Generative Adversarial Nets

CGAN详细知识点看这篇文章
在条件GAN中,生成器并不是从一个未知的噪声分布开始学习,而是通过一个特定的条件或者某些特征(比如一个图像的标签或者其他更加细节的一些特征)开始学习如何生成假样本。

所以我们在原始GAN的目标函数中加入条件变量y,得到CGAN的目标函数:
在这里插入图片描述
CGAN的网络结构如下图所示:
在这里插入图片描述

2.WGAN(Wasserstein GAN)主要用于图像生成

WGAN
这个网络用来解决原始GAN存在的模型坍塌和评估收敛指标缺失的问题。

这个模型试图通过给网络提供简单梯度:输出为真则加一,输出为假则减一的方法来最小化"推土机"距离。

3.BEGAN 主要用于图像生成

BEGAN

BEGAN的主要思想是通过一个自动编码器作为判别器来生成一个新的损失函数。
值得注意的是:BEGAN允许在每一步以对抗的方式同时训练两个网络。
其判别器中有多个3*3的卷积层和一个指数线性单元(ELU)。

4.CycleGAN

CycleGAN

循环一致生成网络主要用来寻找不需要其他额外的信息就能将一张图像从源领域映射到目标领域的方法:比如将灰度图转换成彩色图像,图像语义标签的生成,边缘图生成照片,马变斑马等等。

其核心思想是: 两个转换器F和G,其中F会将图像从域A转换到域B,而G会将图像从域B转换到域A。

三.根据文本来生成相应的图像

1.StackGAN

StackGAN

通过文本内容来生成相应的图像在计算机视觉领域是一个极具挑战的问题,并且有着极其广泛的应用场景。
该模型借鉴了CGAN的条件变量,进行了条件强化。
算法分为两个阶段:
第一阶段GAN网络需要学习:
根据文本内容描述的条件生成物体大致的形状和基本的颜色。
通过先前的分布和随机噪声样本生成背景区域。
第二阶段GAN网络需要学习:
专注于勾勒细节内容。

模型架构:
在这里插入图片描述模型样例:
在这里插入图片描述

2.DiscoGAN 主要用于跨领域的关系探索

DiscoGAN

发现跨域之间的关系对于我们人类来说是一件很自然的事情,我们可以不需要经过监督学习的过程就很轻易地发现两个不同数据域之间的联系:比如分辨出一个英文句子和翻译后的西班牙句子之间的关系,或者选择一个和裙子风格搭配的鞋子。

DiscoGAN探索了两个视觉域之间的关系,成功地将一个域的图像转换到另一个域,并且不需要任何两个域之间关系的信息

其基本思想是: 确保所有在域1内的图像都可以用域2里的图像进行表示,利用重构损失来衡量原始图像经过两次转换,即从域1转换到域2再转换回域1后被重构的效果。

4.利用多种方法和生成模型生成图像

深度学习在更大的数据和更深的模型下能发挥更大的力量。这就导致了我们可能需要花数周的时间来训练上百万个参数。
但实验室或者我们的硬件设备并没有足够的资源,所以我们可以使用迁移学习和用Apache Spark或者BigDL进行大规模分布式学习模型。

1.迁移学习(Transfer Learning)

迁移学习是将知识(特征)在不同域之间转换的技术。

迁移学习的通常方法是先训练一个基本网络,然后将网络的前n层复制到目标网络的前n层。目标网络的其他层被随机地初始化,并向着我们目标场景的方法进行训练。大部分修改只在最后一层进行分类或者回归的权重更新。

主要应用场景:
1.小数据集
2.少量的资源

使用预训练模型的方法:
1.使用预训练架构:除了使用预训练模型的权重外,我们还可以只利用架构在新的数据集上重新训练。
2.特征提取:一个预训练模型可以被用来进行特征提取。我们只需要移除预训练网络的输出层,并将剩余层冻结,为新数据的提取特征。
3.网络部分冻结:除了仅仅替换最终层并从之前所有层提取特征外,我们还可以通过部分层来训练模型,也就是保持初始几层的权重不变,重新训练其他剩余的层。

小数锯集大数据集
若高数据相似度:我们仅需修改预训练模型的输出层权重若高数据相似度:我们可以复用预训练模型的架构和初始权重
若低数据相似度:我们可以先冻结前n层,训练剩下的m-n层若低数据相似度:不如从头开始训练自己的模型

2.SRGAN 主要用于生成高分辨率图像

SRGAN

超分辨率生成网络在从低分辨率图像生成高分辨率图像方面十分优秀。

网络架构:
在这里插入图片描述
论文中的效果:
在这里插入图片描述

3.DeepDream

DeepDream是谷歌开源的一个由普通图片生成艺术图片的算法,大家有兴趣可以了解以下。

4.ProgressiveGAN

2017年年底,英伟达研究院发布了一项图像生成效果非常惊人的研究ProgressiveGAN,利用了渐进增大式的方式使得训练后的网络可以生成非常高质量的图像。如下图所示:

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐