别人家的高中生:入大学前,Ta详细梳理了GAN的发展脉络

有人「高考」完还在学习,说出来你可能不信。

昨天,reddit 上出现了一个关于梳理 GAN 发展脉络的博客,作者在博客中详细梳理了过去几年的 GAN 发展历程,包含众多 SOTA 论文及其代码和对应的学习资源。难能可贵的是,博客作者三月份才刚高中毕业,然后利用上大学之前的时间完成了这篇文章。

目前,作者已被伊利诺伊大学香槟分校(University of Illinois at Urbana-Champaign)录取并将于今年秋天入学。

如果你是一名 GAN 的入门学习者,那么这份材料可以帮你迅速理 GAN 发布以来的研究进展。

博客地址:https://blog.floydhub.com/gans-story-so-far/

作者在梳理过程中发现,GAN 的确是一个发展迅速的领域,短短五年就从模糊的灰度像素阵列发展到高度逼真的生成图像,让人无法一眼识别是真是假。

但领域越火,「水」论文的人可能就越多,因此从众多所谓「SOTA」论文中挑出真正做出实质性改进的「SOTA」就显得非常有必要。

一位读者在看完博客后表示,「比起那些最新 SOTA 文章,我更欣赏这种回顾性质的 SOTA 梳理……经常有人抱怨说,有些人只是对 GAN 进行了微小的调整,在 SOTA 基础上前进了一小步,然后就把论文发出去了,并声称『这是最新的 SOTA!』。这其实只是对别人研究的一种重复。因此,如果有更多这种 SOTA 的回顾性文章,就可以过滤掉那些水论文。通过这种回顾可以更加容易地评价那些新出现的研究。」

从 GAN 到 StyleGAN

首先,作者以发展路线图的形式梳理了这几年出现的比较有影响力的 GAN,从最初的 Goodfellow 版 GAN 到近来大火的 BigGAN、StyleGAN 等,博客的后续内容也是按照这张图的顺序进行的。

GAN 路线图。

Goodfellow 版 GAN

GAN 是由 Goodfellow 等人于 2014 年提出的(目前公认的说法)。其基本思想可以概括为:

GAN 包含两个神经网络,一个神经网络尝试生成真实的数据(主要是图片,也可能是其他数据的分布),而另一个网络尝试判别真实的和生成的数据。

标准的生成对抗网络结构。

这场「猫捉老鼠」的游戏会一直继续下去,直到系统达到所谓的「平衡」,即生成器生成的数据以假乱真到判别器无法判别。

Goodfellow 等人 2014 年提出的 GAN 生成的图像。

  • 论文地址:https://arxiv.org/abs/1406.2661

  • 代码实现地址:https://github.com/goodfeli/adversarial

  • 其他资源:https://arxiv.org/abs/1701.00160

DCGAN: 深度卷积生成对抗网络

DCGAN 的思路可以简单概括为:

  • 卷积神经网络=处理图像效果好

  • 生成对抗网络=生成数据效果好

  • 卷积神经网络+生成对抗网络=生成图像效果好

标准的 GAN 使用多层感知机作为网络结构。但是考虑到卷积神经网络在获取图像特征方面的效果,DCGAN 采用了它作为主要网络结构。同时,DCGAN 稍微做了一些调整,使用了转置卷积操作(transposed convolution operation),它的另一个名字是 Deconvolution。转置卷积帮助图像从低清晰度向高清晰度转换,同样的,采用多层转置卷积可以使图像变得生动多彩。

卷积核的工作原理。通过卷积方式将稀疏的图像矩阵转换为密集矩阵。

DCGAN 生成的图片。较 GAN 更清晰,有更多色彩。

  • 论文地址:https://arxiv.org/abs/1511.06434

  • 代码实现地址:https://github.com/floydhub/dcgan

  • 其他资源:https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

CGAN: 条件生成对抗网络

原始的 GAN 从噪声中生成图片。因此,如果训练的是一类图(例如,狗),其能生成这一类图片。但是,如果训练中同时有很多类(例如,狗和猫都有)图片,则生成的图片是这些图片模糊的混合。而 CGAN 可以让用户指定生成的图片分类。

具体的,CGAN 将 one-hot 向量 y 和随机噪声向量 z 拼接,组成如下的结构:

使用 CGAN 可以生成指定的 MNIST 数字。

  • 论文地址:https://arxiv.org/abs/1411.1784 (https://arxiv.org/abs/1511.06434)

  • 代码实现地址:https://github.com/PacktPublishing/Advanced-Deep-Learning-with-Keras (https://github.com/floydhub/dcgan)

  • 其他资源:https://wiseodd.github.io/techblog/2016/12/24/conditional-gan-tensorflow/

CycleGAN

利用 GAN 变体 CycleGAN 进行风格迁移。

GAN 不仅可以用来生成图像,还可以创造「马+斑马」这种叠加效果的图像,CycleGAN 解决的就是这种问题,即图像到图像的转换。

CycleGAN 包含两个生成器(G 和 F)和两个判别器(D_X 和 D_Y)。G 从 X 中得到一张图像,并尝试将其映射到 Y 中的某个图像。判别器 D_Y 预测一张图像究竟是由 G 生成的还是 Y 中的真实图像。

F 也进行类似的操作,即从 Y 中得到一张图像,并尝试将其映射到 X 中的某个图像。判别器 D_X 预测一张图像究竟是由 F 生成的还是 X 中的真实图像。

所有四个网络都是用普通 GAN 的方式训练的,直到得到强大的生成器 G 和 F,生成的图像分别骗过 D_X 和 D_Y。

CycleGAN 的结构。

利用 CycleGAN 将画家的画风移植到照片上。

  • 论文地址:https://arxiv.org/abs/1703.10593v6

  • 代码实现地址:https://github.com/junyanz/CycleGAN

CoGAN:成对(Coupled)生成对抗网络

想要更好的结果?为什么不试试两个 GAN?

CoGAN 的原作者这样解释:

「在这个系统中,有两个队伍,每个队伍有两个队员。生成模型是其中一个队,生成一个不属于一类图片的图片对来迷惑判别器队。判别器队尝试将图片的类,以及是否是训练数据或生成数据都判别出来。两个队伍共享权重。」

CoGAN 的结构。

CoGAN 的效果。相比 DCGAN 清晰度更高,更为真实。

  • 论文地址:https://arxiv.org/abs/1606.07536

  • 代码实现地址:https://github.com/mingyuliutw/CoGAN 

  • 其他资源:https://wiseodd.github.io/techblog/2017/02/18/coupled_gan/ 

ProGAN

训练 GAN 有很多问题,其中最大的问题是训练的不稳定性。

有时候,判别器和生成器无法从彼此学习数据。有时候,生成的图片变得非常奇怪。

ProGAN 可以通过逐层提高生成图片的分辨率来用来稳定 GAN 的训练。

这一逻辑是:生成 4x4 的图片比生成 1024x1024 图片要更简单。同时,从 16x16 的图片映射到 32x32 比从 2x2 的图片映射更容易。

因此 ProGAN 首先训练一个 4x4 的生成器和一个 4x4 的判别器,并在训练进程中逐渐增加层数,提高分辨率。

ProGAN 逐渐加深训练的过程。随着网络层数变深,图像越来越清晰。

  • 论文地址:https://arxiv.org/abs/1710.10196

  • 代码实现地址:https://github.com/tkarras/progressive_growing_of_gans 

WGAN:Wasserstein 生成对抗网络

WGAN 中的「W」指的是 Wasserstein。WGAN 提出了一种新的代价函数。

过去 GAN 的 minimax 目标函数

WGAN 使用:

GAN 的判别器和 WGAN 的判别器在学习区分高斯分布数据的情况。GAN 可能会出现梯度消失,但 WGAN 在空间内始终保持稳健的梯度变化。

新的代价函数在数学上可以防止梯度消失的情况,因此具有更好的训练稳定性。

WGAN(左)和 DCGAN(右)生成房子图片的效果对比。WGAN 更稳健,出错更少。

  • 论文地址:https://arxiv.org/abs/1701.07875v3

  • 代码实现地址:https://github.com/eriklindernoren/Keras-GAN

SAGAN:自注意力生成对抗网络

虽然使用转置卷积的 GAN 可以「扫描」图片的特征映射,但是其只能获得附近的信息。

SAGAN 使用自注意力机制,在全局图像中关注需要注意的特征信息。

SAGAN 使用注意力机制,高亮部位为注意力机制关注的位置。

  • 论文地址:https://arxiv.org/abs/1805.08318v1

  • 代码实现地址:https://github.com/heykeetae/Self-Attention-GAN 

BigGAN:大型生成对抗网络

BigGAN 由 DeepMind 提出,由于生成效果高度逼真而被誉为「史上最强 GAN 图像生成器」。

DeepMind 在研究 GAN 时尝试了前无古人的事情。他们用强大的深度学习技术训练 GAN 的网络。

首先,DeepMind 使用 SAGAN 作为基线,并添加了光谱特征作为输入。其次,他们将批大小提升了 50%,通道数提升了 20%。同时,研究人员使用了截断方法来提升样本的质量。最终,他们在新的数据集 JFT-300 上进行训练,这是一个类似于 ImageNet 的数据集,但是有 3 亿张图片。

BigGAN 生成的高清晰图片,包含各种类别。

  • 论文地址:https://arxiv.org/abs/1809.11096v2 

  • 代码实现地址:https://github.com/huggingface/pytorch-pretrained-BigGAN 

StyleGAN:基于风格的生成对抗网络

StyleGAN 来自英伟达的一项研究,关注的是损失函数、稳定性、架构等。

因此,StyleGAN 没有专注于生成更加逼真的图像,而是致力于提高 GAN 对生成图像的精确控制能力。

为了达到图像风格级别的控制,StyleGAN 使用了适应实例归一化(Adaptive instance normalization)、潜在向量映射网络、不断学习的输入等已有技术。

英伟达 StyleGAN 生成的图像。

  • 论文地址:https://arxiv.org/abs/1812.04948

  • 代码实现地址:https://github.com/NVlabs/stylegan

理论CycleGANBigGANWGANIan GoodfellowGAN
9
相关数据
DeepMind机构

DeepMind是一家英国的人工智能公司。公司创建于2010年,最初名称是DeepMind科技(DeepMind Technologies Limited),在2014年被谷歌收购。在2010年由杰米斯·哈萨比斯,谢恩·列格和穆斯塔法·苏莱曼成立创业公司。继AlphaGo之后,Google DeepMind首席执行官杰米斯·哈萨比斯表示将研究用人工智能与人类玩其他游戏,例如即时战略游戏《星际争霸II》(StarCraft II)。深度AI如果能直接使用在其他各种不同领域,除了未来能玩不同的游戏外,例如自动驾驶、投资顾问、音乐评论、甚至司法判决等等目前需要人脑才能处理的工作,基本上也可以直接使用相同的神经网上去学而习得与人类相同的思考力。

深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

高斯分布技术

正态分布是一个非常常见的连续概率分布。由于中心极限定理(Central Limit Theorem)的广泛应用,正态分布在统计学上非常重要。中心极限定理表明,由一组独立同分布,并且具有有限的数学期望和方差的随机变量X1,X2,X3,...Xn构成的平均随机变量Y近似的服从正态分布当n趋近于无穷。另外众多物理计量是由许多独立随机过程的和构成,因而往往也具有正态分布。

多层感知机技术

感知机(Perceptron)一般只有一个输入层与一个输出层,导致了学习能力有限而只能解决线性可分问题。多层感知机(Multilayer Perceptron)是一类前馈(人工)神经网络及感知机的延伸,它至少由三层功能神经元(functional neuron)组成(输入层,隐层,输出层),每层神经元与下一层神经元全互连,神经元之间不存在同层连接或跨层连接,其中隐层或隐含层(hidden layer)介于输入层与输出层之间的,主要通过非线性的函数复合对信号进行逐步加工,特征提取以及表示学习。多层感知机的强大学习能力在于,虽然训练数据没有指明每层的功能,但网络的层数、每层的神经元的个数、神经元的激活函数均为可调且由模型选择预先决定,学习算法只需通过模型训练决定网络参数(连接权重与阈值),即可最好地实现对于目标函数的近似,故也被称为函数的泛逼近器(universal function approximator)。

自注意力技术

自注意力(Self-attention),有时也称为内部注意力,它是一种涉及单序列不同位置的注意力机制,并能计算序列的表征。自注意力在多种任务中都有非常成功的应用,例如阅读理解、摘要概括、文字蕴含和语句表征等。自注意力这种在序列内部执行 Attention 的方法可以视为搜索序列内部的隐藏关系,这种内部关系对于翻译以及序列任务的性能非常重要。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

图像生成技术

图像生成(合成)是从现有数据集生成新图像的任务。

CycleGAN技术

GAN的一个变种

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

生成对抗网络技术

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

WGAN技术

就其本质而言,任何生成模型的目标都是让模型(习得地)的分布与真实数据之间的差异达到最小。然而,传统 GAN 中的判别器 D 并不会当模型与真实的分布重叠度不够时去提供足够的信息来估计这个差异度——这导致生成器得不到一个强有力的反馈信息(特别是在训练之初),此外生成器的稳定性也普遍不足。 Wasserstein GAN 在原来的基础之上添加了一些新的方法,让判别器 D 去拟合模型与真实分布之间的 Wasserstein 距离。Wassersterin 距离会大致估计出「调整一个分布去匹配另一个分布还需要多少工作」。此外,其定义的方式十分值得注意,它甚至可以适用于非重叠的分布。

推荐文章
暂无评论
暂无评论~