【从头开始GAN】Goodfellow开山之作到DCGAN等变体

2017 年 8 月 20 日 GAN生成式对抗网络

1Goodfellow开山之作到DCGAN等变体  

Flood Sung 授权新智元转载

来源:知乎


【导读】   虽然目前GAN的酷炫应用还集中在图像生成上,但是GAN也已经拓展到NLP,Robot Learning上了。


前言


GAN的火爆想必大家都很清楚了,各种GAN像雨后春笋一样冒出来,大家也都可以名正言顺的说脏话了[微笑脸]。虽然目前GAN的酷炫应用还集中在图像生成上,但是GAN也已经拓展到NLP,Robot Learning上了。与此同时,在与NLP的结合过程中,我们很惊讶的发现,GAN和增强学习的Actor-Critic有曲艺同工之妙呀!Deepmind 的大神Oriol Vinyals也特地写了篇文章Connecting Generative Adversarial Networks and Actor-Critic Methods 来倡议大家研究一下两者的结合。这大大引起了我对GAN的兴趣,感觉条条大路通AI呀。GAN和RL有点像当年的量子力学和相对论,那么是不是会有一个GAN和RL的统一场论呢?这显然值得期待。


因此,好好从头分析一下GAN还是很有必要的。



Generative Adversarial Nets



既然是从头开始GAN,那么要说的第一篇文章必须是GAN的开篇,也就是2014年Ian Goodfellow的这篇开山之作。


在这篇paper,我们发现其实Ian Goodfellow仅用一段话就说完了GAN:



简单的说GAN就是以下三点:


(1)构建两个网络,一个G生成网络,一个D区分网络。两个网络的网络结构随意就好.

(2)训练方式。G网络的loss是,而D的loss是  注意这里并不是Cross Entropy。

(3)数据输入。G网络的输入是noise。而D的输入则混合G的输出数据及样本数据。

那么我们来分析一下这样的训练会产生什么情况?G网络的训练是希望趋近于1,这样G的loss就会最小。而D网络的训练就是一个2分类,目标是分清楚真实数据和生成数据,也就是希望真实数据的D输出趋近于1,而生成数据的输出即趋近于0。OK,这就是GAN两个网络相互对抗的本质。

那么,这样相互对抗会产生怎样的效果呢?Ian Goodfellow用一个简单的图来描述:


我们也好好说一下上面这几个图。第一个图是一开始的情况,黑色的线表示数据x的实际分布,绿色的线表示数据的生成分布,我们希望绿色的线能够趋近于黑色的线,也就是让生成的数据分布与实际分布相同。然后蓝色的线表示生成的数据x对应于D的分布。在a图中,D还刚开始训练,本身分类的能力还有限,因此有波动,但是初步区分实际数据和生成数据还是可以的。到b图,D训练得比较好了,可以很明显的区分出生成数据,大家可以看到,随着绿色的线与黑色的线的偏移,蓝色的线下降了,也就是生成数据的概率下降了。


那么,由于绿色的线的目标是提升概率,因此就会往蓝色线高的方向移动,也就是c图。那么随着训练的持续,由于G网络的提升,G也反过来影响D的分布。假设固定G网络不动,训练D,那么训练到最优,

 

因此,随着趋近于 , 会趋近于0.5,也就是到图d,是最终的训练结果。到这里,G网络和D网络就处于平衡状态,无法再进一步更新了。


作者在文章中花了很大的篇幅证明整个网络的训练最终会收敛到

 ,我们这里就不探讨了,还是看看具体的算法及实现。


这里面包含了一些重要的trick及训练方法:


(1)G和D是同步训练的,但是两者的训练次数不一样,G训练一次,D训练k次。这主要还是因为初代的GAN训练不稳定。


(2)注意D的训练是同时输入生成的数据和样本数据计算loss,而不是cross entropy分开计算。实际上为什么GAN不用cross entropy是因为,使用cross entropy会使D(G(z))变为0,导致没有梯度,无法更新G,而GAN这里的做法D(G(z))最终是收敛到0.5。


(3)在实际训练中,文章中G网络使用了RELU和sigmoid,而D网络使用了Maxout和dropout。并且文章中作者实际使用来代替 ,从而在训练的开始使可以加大梯度信息,但是改变后的loss将使整个GAN不是一个完美的零和博弈。


在这篇开山之作的最后,作者就分析了GAN的优缺点。GAN可以任意采样,可以使用任意的可微模型(也就是任意神经网络都可以)。GAN生成的图像更加sharp,也就是work更好,这个是最关键的,意味着它值得推广。当然了,作者也直接说了GAN不好训练这一bug。


在Future work中,作者也提到了使用GAN的各种可能性,包括conditional GAN,半监督学习等等。也许Ian Goodfellow在发表这篇文章的时候就已经意识到这将开创一个新的领域了。



DCGAN ( Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks)



GAN开始出名恐怕是因为DCGAN这篇文章。该文章做出了让人难以置信的效果如上图所示。这是GAN在图像生成上的第一次非常成功的应用,也从此开始,一大堆和图像生成相关的paper就出来了。


那么这篇paper对GAN做了什么改造呢?核心可以说就一点,就是使用卷积神经网络,并且实现有效训练:


GAN在开山之作中就提出了,不好训练。那么DCGAN不但训练成功了,还拓展了维度,这就比较厉害了。DCGAN一共做了一下几点改造:


(1)去掉了G网络和D网络中的pooling layer。

(2)在G网络和D网络中都使用Batch Normalization

(3)去掉全连接的隐藏层

(4)在G网络中除最后一层使用RELU,最后一层使用Tanh

(5)在D网络中每一层使用LeakyRELU。


文章中作者也没有说为什么就这么做,只是因为看起来效果好。就是纯粹工程调出来了一个不错的效果。


那么具体说一下DCGAN的网络模型:


(1)G网络:100 z->fc layer->reshape ->deconv+batchNorm+RELU(4) ->tanh 64x64

(2)D网络(版本1):conv+batchNorm+leakyRELU (4) ->reshape -> fc layer 1-> sigmoid


D网络(版本2):conv+batchNorm+leakyRELU (4) ->reshape -> fc layer 2-> softmax


G网络使用4层反卷积,而D网络使用了4层卷积。基本上G网络和D网络的结构正好是反过来的。那么D网络最终的输出有两种做法,一种就是使用sigmoid输出一个0到1之间的单值作为概率,另一种则使用softmax输出两个值,一个是真的概率,一个是假的概率。两种方法本质上是一样的。


网上最出名的复现当属 carpedm20/DCGAN-tensorflow,而另一个极简版本是sugyan/tf-dcgan


下面我们来说说经过GAN训练后的网络学到了怎样的特征表达。


首先是用DCGAN+SVM做cifar-10的分类实验,从D网络的每一层卷积中通过4x4 grid的max pooling获取特征并连起来得到28672的向量然后SVM,效果比K-means好。然后将DCGAN用在SVHN门牌号识别中,同样取得不错的效果。这说明D网络确实无监督的学到了很多有效特征信息。


然后就是比较有意思的了,看G可以通过改变z向量,生成怎样不同的图片。不同的z向量可以生成不同的图像,那么,z向量可以线性加减,然后就可以输出新的图像,前面的图就是这种演示。非常神奇,说明z向量确实对应了一些特别的特征,比如眼镜,性别等等。这也说明了G网络通过无监督学习自动学到了很多特征表达。


总的来说,DCGAN开创了图像生成的先河,让大家看到了一条崭新的做深度学习的路子,如何更好的生成更逼真的图像成为大家争相研究的方向,而这一路到BEGAN,已经可以生成超级逼真的图像了,真是难以置信。



CGAN(Conditional Generative Adversarial Nets)



GAN中输入是随机的数据,没有太多意义,那么我们很自然的会想到能否用输入改成一个有意义的数据,最简单的就是数字字体生成,能否输入一个数字,然后输出对应的字体。这就是CGAN要做的事。


做法是非常的简单的:


就是在G网络的输入在z的基础上连接一个输入y,然后在D网络的输入在x的基础上也连接一个y:


改变之后,整个GAN的目标变成:



训练方式几乎就是不变的,但是从GAN的无监督变成了有监督。只是大家可以看到,这里和传统的图像分类这样的任务正好反过来了,图像分类是输入图片,然后对图像进行分类,而这里是输入分类,要反过来输出图像。显然后者要比前者难。

基于这样的算法,作者做了两个任务:一个是MNIST的字体生成任务,另一个是图像多标签任务。这里就谈MNIST字体生成任务,要求输入数字,输入对应字体。那么这里的数字是处理成one hot的形式,也就是如果是5,那么对应one hot就是[0,0,0,0,0,1,0,0,0,0]。然后和100维的z向量串联输入。


然后大家可以发现,这样的训练通过调整z向量,可以改变输出。这样就解决了多种输出问题:


可以看到可以生成不同形状的字体,只是生成质量还是有待改进,但是这已经足够验证CGAN的有效性了。


InfoGAN



有了CGAN,我们可以有一个单一输入y,然后通过调整z输出不同的图像。但是CGAN是有监督的,我们需要指定y。那么有没有可能实现无监督的CGAN?这个想法本身就比较疯狂,要实现无监督的CGAN,意味着需要让神经网络不但通过学习提取了特征,还需要把特征表达出来。对于MNIST,如何通过无监督学习让神经网络知道你输入y=2时就输出2的字体?或者用一个连续的值来调整字的粗细,方向?感觉确实是一个非常困难的问题,但是InfoGAN就这么神奇的做到了。


怎么做呢?作者引入了信息论的知识,也就是mutual information互信息。作者的思路就是G网络的输入除了z之外同样类似CGAN输入一个c变量,这个变量一开始神经网络并不知道是什么含义,但是没关系,我们希望c与G网络输出的x之间的互信息最大化,也就是让神经网络自己去训练c与输出之间的关系。mutual information在文章中定义如下:

其中的H为c的entropy熵,也就是log(c)*c,Q网络则是反过来基于X输出c。基于I,整个GAN的训练目标变成:



有了这样的理论之后,就具体如何训练的问题了。


相比CGAN,InfoGAN在网络上做了一定改变:


(1)D网络的输入只有x,不加c。

(2)Q网络和D网络共享同一个网络,只是到最后一层独立输出。



说明



这是很早之前写的,因为觉得写的1w字貌似也还有点用,还是发出来吧。由于时间有限加上知乎上也已经有大量GAN的分析解读,本来打算把GAN最新的文章也拿来分析分析,决定还是算了,望见谅。


本文来自知乎用户Flood Sung。




高质量延伸阅读

☞ 【智能自动化学科前沿讲习班第1期】上海交大倪冰冰副教授:面向图像序列的生成技术及应用初探

☞ 【智能自动化学科前沿讲习班第1期】University of Central Florida 的Guojun Qi:LS-GAN

☞ 【智能自动化学科前沿讲习班第1期】微软秦涛主管研究员:从单智能体学习到多智能体学习

☞ 【智能自动化学科前沿讲习班第1期】王坤峰副研究员:GAN与平行视觉

☞ 【原理】十个生成模型(GANs)的最佳案例和原理 | 代码+论文

☞ 【插画】AI可能真的要代替插画师了……

☞ 【教程】经得住考验的「假图片」:用TensorFlow为神经网络生成对抗样本

☞ 【模型】基于深度学习的三大生成模型:VAE、GAN、GAN的变种模型

☞ 【大会】还记得Wasserstein GAN吗?不仅有Facebook参与,也果然被 ICML 接收

☞ 【开发】 用GAN来做图像生成,这是最好的方法

☞ 【学界】邢波团队提出contrast-GAN:实现生成式语义处理

☞  【专栏】阿里SIGIR 2017论文:GAN在信息检索领域的应用

☞ 【学界】康奈尔大学说对抗样本出门会失效,被OpenAI怼回来了!

☞ 警惕人工智能系统中的木马、病毒 ——深度学习对抗样本简介

☞ 【生成图像】Facebook发布的LR-GAN如何生成图像?这里有一篇Pytorch教程

☞ 【智能自动化学科前沿讲习班第1期】国立台湾大学(位于中国台北)李宏毅教授:Anime Face Generation

☞ 【变狗为猫】伯克利图像迁移cycleGAN,猫狗互换效果感人

☞ 【论文】对抗样本到底会不会对无人驾驶目标检测产生干扰?又有人发文质疑了

【智能自动化学科前沿讲习班第1期】王飞跃教授:生成式对抗网络GAN的研究进展与展望

【开发】看完立刻理解GAN!初学者也没关系

【专栏】基于对抗学习的生成式对话模型的坚实第一步 :始于直观思维的曲折探索

☞ 【重磅】平行将成为一种常态:从SimGAN获得CVPR 2017最佳论文奖说起

☞ 【最新】OpenAI:3段视频演示无人驾驶目标检测强大的对抗性样本!

☞  【干货】生成对抗网络(GAN)之MNIST数据生成

☞ 【论文】CVPR 2017最佳论文出炉,DenseNet和苹果首篇论文获奖

☞   AI侦探敲碎深度学习黑箱

☞ 【深度学习】解析深度学习的局限性与未来,谷歌Keras之父「连发两文」发人深省

☞   苹果重磅推出AI技术博客,CVPR合成逼真照片论文打响第一枪

☞ 【Ian Goodfellow 五问】GAN、深度学习,如何与谷歌竞争

☞ 【巨头升级寡头】AI产业数据称王,GAN和迁移学习能否突围BAT垄断?

☞ 【高大上的DL】BEGAN: Boundary Equilibrium GAN

☞ 【最详尽的GAN介绍】王飞跃等:生成式对抗网络 GAN 的研究进展与展望

☞ 【最全GAN变体列表】Ian Goodfellow推荐:GAN动物园

☞   二十世纪的十大科学骗局

☞ 【DCGAN】深度卷积生成对抗网络的无监督学习,补全人脸合成图像匹敌真实照片

【学界】让莫奈画作变成照片:伯克利图像到图像翻译新研究

☞ 【DualGAN】对偶学习的生成对抗网络

☞ 【开源】收敛速度更快更稳定的Wasserstein GAN(WGAN)

☞ 【Valse 2017】生成对抗网络(GAN)研究年度进展评述

☞ 【开源】谷歌新推BEGAN模型用于人脸数据集:效果惊人!

☞ 【深度】Ian Goodfellow AIWTB开发者大会演讲:对抗样本与差分隐私

☞   论文引介 | StackGAN: Stacked Generative Adversarial Networks

☞ 【专题GAN】GAN应用情况调研

☞ 【纵览】从自编码器到生成对抗网络:一文纵览无监督学习研究现状

☞ 【论文解析】Ian Goodfellow 生成对抗网络GAN论文解析

☞ 【VALSE 前沿】利用对抗学习改进目标检测的结果

☞ 【干货】全面分析GAN,以及如何用TF实现GAN?

☞   苹果首份AI论文横空出世,提出SimGAN训练方法

☞ 【推荐】条条大路通罗马LS-GAN:把GAN建立在Lipschitz密度上

☞   到底什么是生成式对抗网络GAN?

☞   看穿机器学习(W-GAN模型)的黑箱

☞   看穿机器学习的黑箱(II)

【Geometric GAN】引入线性分类器SVM的Geometric GAN

☞ 【征稿】“生成式对抗网络GAN技术与应用”专刊

☞ 【GAN for NLP】PaperWeekly 第二十四期 --- GAN for NLP

☞ 【学界 】 从感知机到GAN,机器学习简史梳理

☞ 【Demo】GAN学习指南:从原理入门到制作生成Demo

☞ 【学界】伯克利与OpenAI整合强化学习与GAN:让智能体学习自动发现目标

☞ 【解读】通过拳击学习生成对抗网络(GAN)的基本原理

☞ 【人物 】Ian Goodfellow亲述GAN简史:人工智能不能理解它无法创造的东西

☞ 【DCGAN】DCGAN: 一类稳定的GANs

☞ 【DCGAN】DCGAN:深度卷积生成对抗网络的无监督学习,补全人脸合成图像匹敌真实照片

☞ 【原理】 直观理解GAN背后的原理:以人脸图像生成为例

☞ 【干货】深入浅出 GAN·原理篇文字版(完整)

☞   带你理解CycleGAN,并用TensorFlow轻松实现

☞   PaperWeekly 第39期 | 从PM到GAN - LSTM之父Schmidhuber横跨22年的怨念

☞ 【CycleGAN】加州大学开源图像处理工具CycleGAN

☞ 【SIGIR2017满分论文】IRGAN:大一统信息检索模型的博弈竞争

☞ 【贝叶斯GAN】贝叶斯生成对抗网络(GAN):当下性能最好的端到端半监督/无监督学习

☞ 【贝叶斯GAN】贝叶斯生成对抗网络(GAN):当下性能最好的端到端半监督/无监督学习

☞ 【GAN X NLP】自然语言对抗生成:加拿大研究员使用GAN生成中国古诗词

☞    ICLR 2017 | GAN Missing Modes 和 GAN

☞ 【论文汇总】生成对抗网络及其变体

☞ 【AI】未来AI这样帮你一键修片,那还有PS什么事?

☞ 【学界】CMU新研究试图统一深度生成模型:搭建GAN和VAE之间的桥梁

☞ 【专栏】大漠孤烟,长河落日:面向景深结构的风景照生成技术

☞ 【开发】最简单易懂的 GAN 教程:从理论到实践(附代码)

☞ 【论文访谈】求同存异,共创双赢 - 基于对抗网络的利用不同分词标准语料的中文分词方法

☞ 【LeCun论战Yoav】自然语言GAN惹争议:深度学习远离NLP?

☞ 【争论】从Yoav Goldberg与Yann LeCun争论,看当今的深度学习、NLP与arXiv风气

☞ 【观点】Yoav Goldberg撰文再回应Yann LeCun:「深度学习这群人」不了解NLP(附各方评论)

☞   PaperWeekly 第41期 | 互怼的艺术:从零直达 WGAN-GP

☞ 【业界】CMU和谷歌联手研制左右互搏的对抗性机器人

☞ 【谷歌 GAN 生成人脸】对抗创造新艺术风格,128 像素扩展到 4000

☞ 【原理】模拟上帝之手的对抗博弈——GAN背后的数学原理

☞ 【原理】只知道GAN你就OUT了——VAE背后的哲学思想及数学原理



登录查看更多
3

相关内容

相较原始的GAN,DCGAN几乎完全使用了卷积层代替全链接层,判别器几乎是和生成器对称的,整个网络没有pooling层和上采样层的存在,实际上是使用了带步长(fractional-strided)的卷积代替了上采样,以增加训练的稳定性
Fariz Darari简明《博弈论Game Theory》介绍,35页ppt
专知会员服务
106+阅读 · 2020年5月15日
【CVPR2020】MSG-GAN:用于稳定图像合成的多尺度梯度GAN
专知会员服务
26+阅读 · 2020年4月6日
GANs最新综述论文: 生成式对抗网络及其变种如何有用
专知会员服务
70+阅读 · 2019年10月19日
生成式对抗网络GAN异常检测
专知会员服务
114+阅读 · 2019年10月13日
GAN新书《生成式深度学习》,Generative Deep Learning,379页pdf
专知会员服务
196+阅读 · 2019年9月30日
万字综述之生成对抗网络(GAN)
PaperWeekly
43+阅读 · 2019年3月19日
一文详解生成对抗网络(GAN)的原理,通俗易懂
人工智能头条
6+阅读 · 2018年5月6日
GAN的数学原理
算法与数学之美
14+阅读 · 2017年9月2日
【原理】GAN的数学原理
GAN生成式对抗网络
8+阅读 · 2017年8月30日
GAN | GAN介绍(2)
中国科学院网络数据重点实验室
43+阅读 · 2017年8月4日
GAN | GAN介绍(1)
KingsGarden
78+阅读 · 2017年3月13日
Adversarial Transfer Learning
Arxiv
12+阅读 · 2018年12月6日
Arxiv
8+阅读 · 2018年5月21日
Arxiv
4+阅读 · 2018年3月23日
VIP会员
相关资讯
万字综述之生成对抗网络(GAN)
PaperWeekly
43+阅读 · 2019年3月19日
一文详解生成对抗网络(GAN)的原理,通俗易懂
人工智能头条
6+阅读 · 2018年5月6日
GAN的数学原理
算法与数学之美
14+阅读 · 2017年9月2日
【原理】GAN的数学原理
GAN生成式对抗网络
8+阅读 · 2017年8月30日
GAN | GAN介绍(2)
中国科学院网络数据重点实验室
43+阅读 · 2017年8月4日
GAN | GAN介绍(1)
KingsGarden
78+阅读 · 2017年3月13日
Top
微信扫码咨询专知VIP会员