【理解】GAN 的理解与 TensorFlow 的实现

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

1GAN 的理解与 TensorFlow 的实现  

来源:AI研习社

作者:想飞的石头


   前言

本文会从头介绍生成对抗式网络的一些内容,从生成式模型开始说起,到 GAN 的基本原理,InfoGAN,AC-GAN 的基本科普,如果有任何有错误的地方,请随时喷,我刚开始研究 GAN 这块的内容,希望和大家一起学习。

   生成式模型

何为生成式模型?在很多 machine learning 的教程或者公开课上,通常会把 machine learning 的算法分为两类: 生成式模型、判别式模型;其区别在于: 对于输入 x,类别标签 y,在生成式模型中估计其联合概率分布,而判别式模型估计其属于某类的条件概率分布。 常见的判别式模型包括:LogisticRegression, SVM, Neural Network 等等,生成式模型包括:Naive Bayes, GMM, Bayesian Network, MRF 等等

   研究生成式模型的意义

生成式模型的特性主要包括以下几个方面:

  • 在应用数学和工程方面,生成式模型能够有效地表征高维数据分布;

  • 生成式模型能够作为一种技术手段辅助强化学习,能够有效表征强化学习模型中的 state 状态 (这里不扩展,后面会跟 RL 的学习笔记);

  • 对 semi-supervised learning 也有比较好的效果,能够在 miss data 下训练模型,并在 miss data 下给出相应地输出;

  • 在对于一个输入伴随多个输出的场景下,生成式模型也能够有效工作,而传统的机器学习方法通过最小化模型输出和期望输出的某个 object function 的值 无法训练单输入多输出的模型,而生成式模型,尤其是 GAN 能够 hold 住这种场景,一个典型的应用是通过场景预测 video 的下一帧。

生成式模型一些典型的应用:

  • 图像的超分辨率

  • iGAN:Generative Visual Manipulation on the Natural Image Manifold

  • 图像转换

   生成式模型族谱

上图涵盖了基本的生成式模型的方法,主要按是否需要定义概率密度函数分为:

  • Explicit density models

explicit density models 又分为 tractable explicit models 和逼近的 explicit model,怎么理解呢,tractable explicit model 通常可以直接通过数学方法来建模求解,而基于逼近的 explicit model 通常无法直接对数据分布进行建模,可以利用数学里的一些近似方法来做数据建模, 通常基于逼近的 explicit model 分为确定性(变分方法:如 VAE 的 lower bound)和随机性的方法(马尔科夫链蒙特卡洛方法)。

  • VAE lower bound:

马尔科夫链蒙特卡洛方法(MCMC),一种经典的基于马尔科夫链的抽样方法,通过多次来拟合分布。比较好的教程:A Beginner’s Guide to Monte Carlo Markov Chain MCMC Analysis, An Introduction to MCMC for Machine Learning.

  • Implicit density models

无需定义明确的概率密度函数,代表方法包括马尔科夫链、生成对抗式网络(GAN),该系列方法无需定义数据分布的描述函数。

  生成对抗式网络与其他生成式网络对比

生成对抗式网络(GAN)能够有效地解决很多生成式方法的缺点,主要包括:

  • 并行产生 samples;

  • 生成式函数的限制少,如无需合适马尔科夫采样的数据分布(Boltzmann machines),生成式函数无需可逆、latent code 需与 sample 同维度(nonlinear ICA);

  • 无需马尔科夫链的方法(Boltzmann machines, GSNs);

  • 相对于 VAE 的方法,无需 variational bound;

  • GAN 比其他方法一般来说性能更好。

  GAN 工作原理

GAN 主要由两部分构成:generator 和 discriminator,generator 主要是从训练数据中产生相同分布的 samples,而 discriminator 则是判断输入是真实数据还是 generator 生成的数据,discriminator 采用传统的监督学习的方法。这里我们可以这样类比,generator 是一个伪造假币的专业人士,discriminator 是警察,generator 的目的是制造出尽可能以假乱真的假钞,而 discriminator 是为了能 鉴别是否为假钞,最终整个 gan 会达到所谓的纳什均衡,Goodfellow 在他的 paperGAN 的理解与 TF 的实现 (http://t.cn/R9VAZMo)中有严格的数学证明,当 $p_G$==$p_{data}$ 时达到 全局最优:

另一个比较明显看得懂的图如下:

图中黑色点线为真实数据分布 $p_{data}$,绿色线为 generator 生成的数据分布 $p_{G}$, 而 Discriminator 就是蓝色点线,其目的是为了将 $p_{data}$ 和 $p_{G}$ 区分,(a) 中是初始状态,然后会更新 Discriminator 中的参数,若干次 step 之后,Discriminator 有了较大的判断力即到了 (b) 的状态,之后会更新 G 的模型使其生成的数据分布(绿色线)更加趋近与真实数据分布, 若干次 G 和 D 的模型参数更新后,理论上最终会达到 (d) 的状态即 G 能够产生和真实数据完全一致的分布 (证明见上一张图),如从随机数据分布生成人脸像。

  如何训练 GAN

因为 GAN 结构的不同,和常规训练一个 dl model 方法不同, 这里采用 simultaneous SGD,每一个 step 中,会有两个两个梯度优化的 过程,一个是更新 discriminator 的参数来最小化 $J_{(D)}$,一个是更新 generator 的参数来最小 $J_{(G)}$,通常会选用 Adam 来作为最优化的优化器, 也有人建议可以不等次数地更新 generator 和 discriminator(有相关工作提出,1:1 的在实际中更有效:Adam: A Method for Stochastic Optimization) 如何训练 GAN,在 Goodfellow 的 GAN 的 tutorial 还有一些代码中有更多的描述包括不同的 cost function, 这里我就不详细展开了。

  DCGAN

GAN 出来后很多相关的应用和方法都是基于 DCGAN 的结构,DCGAN 即”Deep Convolution GAN”,通常会有一些约定俗成的规则:

  • 在 Discriminator 和 generator 中大部分层都使用 batch normalization,而在最后一层时通常不会使用 batch normalizaiton,目的 是为了保证模型能够学习到数据的正确的均值和方差;

  • 因为会从 random 的分布生成图像,所以一般做需要增大图像的空间维度时如 77->1414, 一般会使用 strdie 为 2 的 deconv(transposed convolution);

  • 通常在 DCGAN 中会使用 Adam 优化算法而不是 SGD。

  各种 GAN

这里有个大神把各种 gan 的 paper 都做了一个统计 AdversarialNetsPapers

这里大家有更多的兴趣可以直接去看对应的 paper,我接下来会尽我所能描述下 infogan 和 AC-GAN 这两块的内容

1.InfoGAN

InfoGAN 是一种能够学习 disentangled representation 的 GAN,何为 disentangled representation?比如人脸数据集中有各种不同的属性特点,如脸部表情、是否带眼睛、头发的风格眼珠的颜色等等,这些很明显的相关表示, InfoGAN 能够在完全无监督信息(是否带眼睛等等)下能够学习出这些 disentangled representation,而相对于传统的 GAN,只需修改 loss 来最大化 GAN 的 input 的 noise(部分 fixed 的子集)和最终输出之间的互信息。

原理

为了达到上面提到的效果,InfoGAN 必须在 input 的 noise 来做一些文章,将 noise vector 划分为两部分:

  • z: 和原始的 GAN input 作用一致;

  • c: latent code,能够在之后表示数据分布中的 disentangled representation

那么如何从 latent code 中学到相应的 disentangled representation 呢? 在原始的 GAN 中,忽略了 c 这部分的影响,即 GAN 产生的数据分布满足 $P_{G}(x|C)=P(x)$, 为了保证能够利用 c 这部分信息, 作者提出这样一个假设:c 与 generator 的输出相关程度应该很大,而在信息论中,两个数据分布的相关程度即互信息, 即 generator 的输出和 input 的 c 的 $I(c;G(z,c))$ 应该会大。 所以,InfoGAN 就变成如下的优化问题:

因为互信息的计算需要后验概率的分布(下图红线部分),在实际中很难直接使用,因此,在实际训练中一般不会直接最大化 $I(c;G(z,c))$

这里作者采用和 VAE 类似的方法,增加一个辅助的数据分布为后验概率的 low bound: 所以,这里互信息的计算如下:

这里相关的证明就不深入了,有兴趣的可以去看看 paper。

实验

我写的一版基于 TensorFlow 的 Info-GAN 实现:Info-GANburness/tensorflow-101 random 的 label 信息,和对应生成的图像:

不同 random 变量控制产生同一 class 下的不同输出:

2. AC-GAN

AC-GAN 即 auxiliary classifier GAN,对应的 paper:[1610.09585] Conditional Image Synthesis With Auxiliary Classifier GANs, 如前面的示意图中所示,AC-GAN 的 Discriminator 中会输出相应的 class label 的概率,然后更改 loss fuction,增加 class 预测正确的概率, ac-gan 是一个 tensorflow 相关的实现,基于作者自己开发的 sugartensor,感觉和 paper 里面在 loss 函数的定义上差异,看源码的时候注意下,我这里有参考写了一个基于原生 tensorflow 的版本 AC-GAN.

实验

各位有兴趣的可以拿代码在其他的数据集上也跑一跑,AC-GAN 能够有效利用 class label 的信息,不仅可以在 G 时指定需要生成的 image 的 label,同事该 class label 也能在 Discriminator 用来扩展 loss 函数,增加整个对抗网络的性能。 random 的 label 信息,和对应生成的图像:

不同 random 变量控制产生同一 class 下的不同输出:

  总结

照例总结一下,本文中,我基本介绍了下生成式模型方法的各个族系派别,到 GAN 的基本内容,到 InfoGAN、AC-GAN,大部分的工作都来自于阅读相关的 paper,自己相关的工作就是 tensorflow 下参考 sugartensor 的内容重现了 InfoGAN、AC-GAN 的相关内容。

 当然,本人菜鸟一枚,难免有很多理解不到位的地方,写出来更多的是作为分享,让更多人了解 GAN 这块的内容,如果任何错误或不合适的地方,敬请在评论中指出,我们一起讨论一起学习 另外我的所有相关的代码都在 github 上:GAN, 相信读一下无论是对 TensorFlow 的理解还是 GAN 的理解都会 有一些帮助,简单地参考 mnist.py 修改下可以很快的应用到你的数据集上,如果有小伙伴在其他数据集上做出有意思的实验效果的,欢迎分享。

高质量延伸阅读

☞ 【意义】GAN 的发展对于研究通用人工智能有什么意义?

☞ 【应用】生成式对抗网络GAN有哪些最新的发展,可以实际应用到哪些场景中?

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

☞ 【智能自动化学科前沿讲习班第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背后的哲学思想及数学原理


登录查看更多
4

相关内容

专知会员服务
139+阅读 · 2020年5月19日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
198+阅读 · 2020年2月11日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
GANs最新综述论文: 生成式对抗网络及其变种如何有用
专知会员服务
70+阅读 · 2019年10月19日
GAN新书《生成式深度学习》,Generative Deep Learning,379页pdf
专知会员服务
202+阅读 · 2019年9月30日
从信息论的角度来理解损失函数
深度学习每日摘要
17+阅读 · 2019年4月7日
CNN图像风格迁移的原理及TensorFlow实现
数据挖掘入门与实战
5+阅读 · 2018年4月18日
生成式对抗网络(GAN)如何快速理解?
全球人工智能
8+阅读 · 2018年1月14日
在TensorFlow中对比两大生成模型:VAE与GAN
机器之心
12+阅读 · 2017年10月23日
【教程】详解如何使用Keras实现Wassertein GAN
GAN生成式对抗网络
7+阅读 · 2017年10月5日
VAE、GAN、Info-GAN:全解深度学习三大生成模型
数据派THU
20+阅读 · 2017年9月23日
GAN | GAN介绍(1)
KingsGarden
78+阅读 · 2017年3月13日
Arxiv
4+阅读 · 2019年9月26日
Arxiv
4+阅读 · 2018年5月21日
Arxiv
10+阅读 · 2018年3月23日
Arxiv
4+阅读 · 2018年3月23日
Arxiv
9+阅读 · 2018年1月30日
Arxiv
27+阅读 · 2017年12月6日
VIP会员
相关资讯
从信息论的角度来理解损失函数
深度学习每日摘要
17+阅读 · 2019年4月7日
CNN图像风格迁移的原理及TensorFlow实现
数据挖掘入门与实战
5+阅读 · 2018年4月18日
生成式对抗网络(GAN)如何快速理解?
全球人工智能
8+阅读 · 2018年1月14日
在TensorFlow中对比两大生成模型:VAE与GAN
机器之心
12+阅读 · 2017年10月23日
【教程】详解如何使用Keras实现Wassertein GAN
GAN生成式对抗网络
7+阅读 · 2017年10月5日
VAE、GAN、Info-GAN:全解深度学习三大生成模型
数据派THU
20+阅读 · 2017年9月23日
GAN | GAN介绍(1)
KingsGarden
78+阅读 · 2017年3月13日
Top
微信扫码咨询专知VIP会员