怎样教机器画一张从未见过的人脸呢?我们知道计算机可以存储大量照片,但它并不知道像素与外观是如何关联起来的。
多年来,各种各样的生成模型都试图解决这个问题。它们使用不同的假设模拟底层数据分布,但那些假设通常并不实用。
目前的实现方法都不是最优解:隐马尔可夫模型生成的文本非常枯燥,由上一句就能预测下一句;变分自编码器(Variational Autoencoders)生成的图像是模糊的,图像之间尽管名称不同,但实际上变化很小,缺乏多样性。
要解决这些问题就要采用一种全新的方法,生成式对抗网络(GAN)应运而生。
在这篇文章中,我们会全面介绍GAN的基础概念,展示其主要架构,并提供大量能显著优化结果的技巧。
生成模型主要是用来收集训练样本并表示样本的概率分布,解决方案通常是直接推断其概率密度函数。
生成模型的初学者会好奇,既然有这么多真实的训练案例,那为什么还要去找这些生成模型呢? 这里是一些通过好的生成模型可能实现的应用,也可以算作这个问题的答案:
1.模拟实验可能的结果,降低损耗,加快研究速度
2.能够预测未来的行动规划,想象一个GAN能预先知道下一步“路况”
3.生成缺失的数据和标签:缺乏正确格式的清洗的数据会导致过度拟合
4.生成高质量语音
5.照片的自动优化(图像的超分辨率重建)
2014年,蒙特利尔大学的Ian Goodfellow和他的同事创造了生成式对抗网络(GAN)。它可以通过学习生成逼真物体的底层数据分布。
GAN背后的原理很简单,就是生成器和判别器的相互作用。生成器的目标是生成一个逼真的物体,试图以假乱真。判别器的目标是分辨生成图像和真实图像之间的差异。
上图是GAN的整体结构。目前最重要的是明白GAN是一种让生成器和判别器协同工作的方法,并且二者都有自己的体系结构。
在训练中的每一步,判别器都要辨别训练集中的假图像,所以判别器的判断力会随着训练越来越强。正如统计学习理论中讲到的,这实际上是在学习数据的基本分布。
当生成器足够擅长生成假图像的时,可以骗过判别器吗?答案是肯定的。下面我们看看生成器是如何生成以假乱真的图像的。
△ 图片来自Goodfellow,2016年
对这个神经网络来说,如果我们训练它的时间足够长,生成器将从样本的真实“分布”中学习,会逐渐生成逼真图像,直到判别器分辨不出图像真假。
有意思的是,量子位之前报道过一篇GAN诞生记,这个目前最火的AI模型竟然来自一群博士的酒后争吵。
机器学习方面的知识离不开练习,但很多学习者止步于了解理论皮毛。幸运地是,我们找到了一些实用的贴士帮助实践。在这篇文章中,我们先回顾一些GAN的基本架构。
Goodfellow的首篇GAN论文发表一年后,大家发现GAN模型不稳定,并且需要大量的技巧。2016年,Radford等人发表了一篇名为《无监督代表性学习与深度卷积生成式对抗性网络》的论文,文中提出了GAN架构的升级版,命名为DCGAN模型。
△ 图片来自Radford等人,2015年
让人欣喜的是,大多数情况下DCGAN架构比较稳定。这是首批证明向量运算可以作为从生成器中学习的固有属性表征的论文,和Word2Vec中的向量技巧类似,只不过是适用于图像的。
△ 图片来自Radford等人,2015年
DCGAN是我们推荐的入门模型中最简单稳定的。还有一些训练与实现的实用技巧资源,在文章结尾可以查看。
条件生成式对抗网络是GAN元架构的扩展形式,它能大幅提高生成图像的质量。如果你有一些数据点的标签,可用它帮助网络构建显著表征。不管使用什么架构,扩展是一样的,都需要向生成器添加另一个输入。
△ 图片来自Mirza,2014年
那么,条件生成式对抗网络是怎样应用的?假设你很喜欢猫,而你的模型恰好能生成各种各样的动物。相比把生成噪音传至生成器中,还有一种更好的方法,你可以在第二个输入中加入一些标签或词向量作为猫这个分类的id。在这种情况下,生成器就能根据预设的输入输出特定物体了。
练习是学习GAN不可或缺的一环,仅从论文中学习还是远远不够的。很多时候论文中的方法只适用于论文中的数据集,我们希望提供一组通用工具让入门者直接拿来研究。
一般来说,训练GAN的工作流程简洁明确,大致可分下面三步走:
抽取minibatch的训练示例并估算判别器的评分
生成minibatch的样本并估算判别器的评分
用上两步中累积的梯度完成更新
分别处理训练和生成minibatch并分别计算这些不同批次的batch norm是必要的,可以帮助我们确定判别器的快速初始训练。
下面是一个正确生成minibatch的说明:
在生成器的每一步中判别器运行次数大于1有时是好的,因此,如果您的生成器在有损失函数的情况下能生成出判别器分辨不了的东西,可以考虑这样做。
如果在生成器中使用batch norm层,可能内部批量的强关联,比如下图中的这个例子。
△ 图片来自Goodfellow,2016年
本质上说,每个batch都会产生轻微的变化,怎样避免这种情况发生呢?
一种方法是预计算平均像素和标准偏差并每次都用它,但这种解决方法经常导致过度拟合。因此,我们采用Virtual Batch Norm方法,在开始训练前先定义一个batch R作为参考,对于每个新batch X,利用R和X的关联计算标准化参数。
第二种方法是,从球体而不是立方体中搜集输入的噪音。虽然仅通过控制噪声向量模量就可以实现这种近似,但从高维立方体中均匀采样更可取。
还有一个技巧是避免使用稀疏的梯度,特别是在生成器中。我们可以通过将某些图层转换成“平滑”的类似效果来实现,比如:
ReLU -> LeakyReLU
MaxPooling -> AvgPooling, Convolution+stride
Unpooling ->Deconvolution
在这篇文章中,我们解释了生成式对抗模型,并讲解了一些实用技巧。原文中还有一些实现GAN的资料,在GAN生成式对抗网络微信公众号(ID:GAN_Works)对话界面回复“实现”两个字,可以获得这份学习资源大礼包。
— 完 —
☞ 【实战】GAN网络图像翻译机:图像复原、模糊变清晰、素描变彩图
☞ 【干货】可能是近期最好玩的深度学习模型了:CycleGAN的原理与实验详解
☞ 【学界】牛津大学ICCV 2017 Workshop论文:利用GAN的单视角图片3D建模技术
☞ 【深度】Yann LeCun最新演讲再谈预测学习:记忆网络和对抗训练是很有前景的方向
☞ 【分享】三角兽首席科学家分享实录:基于对抗学习的生成式对话模型
☞ 【学界】清华朱军团队探索DNN内部架构,采用对抗性例子监督网络生成及错误
☞ 【几何图景】GAN的几何图景:样本空间的Morse流,与鉴别网络D为何不可能真正鉴别真假
☞ 【应用】生成式对抗网络GAN有哪些最新的发展,可以实际应用到哪些场景中?
☞ 【从头开始GAN】Goodfellow开山之作到DCGAN等变体
☞ 【智能自动化学科前沿讲习班第1期】上海交大倪冰冰副教授:面向图像序列的生成技术及应用初探
☞ 【智能自动化学科前沿讲习班第1期】University of Central Florida 的Guojun Qi:LS-GAN
☞ 【智能自动化学科前沿讲习班第1期】微软秦涛主管研究员:从单智能体学习到多智能体学习
☞ 【智能自动化学科前沿讲习班第1期】王坤峰副研究员:GAN与平行视觉
☞ 【原理】十个生成模型(GANs)的最佳案例和原理 | 代码+论文
☞ 【教程】经得住考验的「假图片」:用TensorFlow为神经网络生成对抗样本
☞ 【模型】基于深度学习的三大生成模型:VAE、GAN、GAN的变种模型
☞ 【大会】还记得Wasserstein GAN吗?不仅有Facebook参与,也果然被 ICML 接收
☞ 【学界】邢波团队提出contrast-GAN:实现生成式语义处理
☞ 【专栏】阿里SIGIR 2017论文:GAN在信息检索领域的应用
☞ 【学界】康奈尔大学说对抗样本出门会失效,被OpenAI怼回来了!
☞ 警惕人工智能系统中的木马、病毒 ——深度学习对抗样本简介
☞ 【生成图像】Facebook发布的LR-GAN如何生成图像?这里有一篇Pytorch教程
☞ 【智能自动化学科前沿讲习班第1期】国立台湾大学(位于中国台北)李宏毅教授:Anime Face Generation
☞ 【变狗为猫】伯克利图像迁移cycleGAN,猫狗互换效果感人
☞ 【论文】对抗样本到底会不会对无人驾驶目标检测产生干扰?又有人发文质疑了
☞【智能自动化学科前沿讲习班第1期】王飞跃教授:生成式对抗网络GAN的研究进展与展望
☞【专栏】基于对抗学习的生成式对话模型的坚实第一步 :始于直观思维的曲折探索
☞ 【重磅】平行将成为一种常态:从SimGAN获得CVPR 2017最佳论文奖说起
☞ 【最新】OpenAI:3段视频演示无人驾驶目标检测强大的对抗性样本!
☞ 【论文】CVPR 2017最佳论文出炉,DenseNet和苹果首篇论文获奖
☞ 【深度学习】解析深度学习的局限性与未来,谷歌Keras之父「连发两文」发人深省
☞ 苹果重磅推出AI技术博客,CVPR合成逼真照片论文打响第一枪
☞ 【Ian Goodfellow 五问】GAN、深度学习,如何与谷歌竞争
☞ 【巨头升级寡头】AI产业数据称王,GAN和迁移学习能否突围BAT垄断?
☞ 【高大上的DL】BEGAN: Boundary Equilibrium GAN
☞ 【最详尽的GAN介绍】王飞跃等:生成式对抗网络 GAN 的研究进展与展望
☞ 【最全GAN变体列表】Ian Goodfellow推荐:GAN动物园
☞ 【DCGAN】深度卷积生成对抗网络的无监督学习,补全人脸合成图像匹敌真实照片
☞ 【开源】收敛速度更快更稳定的Wasserstein GAN(WGAN)
☞ 【Valse 2017】生成对抗网络(GAN)研究年度进展评述
☞ 【开源】谷歌新推BEGAN模型用于人脸数据集:效果惊人!
☞ 【深度】Ian Goodfellow AIWTB开发者大会演讲:对抗样本与差分隐私
☞ 论文引介 | StackGAN: Stacked Generative Adversarial Networks
☞ 【纵览】从自编码器到生成对抗网络:一文纵览无监督学习研究现状
☞ 【论文解析】Ian Goodfellow 生成对抗网络GAN论文解析
☞ 【推荐】条条大路通罗马LS-GAN:把GAN建立在Lipschitz密度上
☞【Geometric GAN】引入线性分类器SVM的Geometric GAN
☞ 【GAN for NLP】PaperWeekly 第二十四期 --- GAN for NLP
☞ 【Demo】GAN学习指南:从原理入门到制作生成Demo
☞ 【学界】伯克利与OpenAI整合强化学习与GAN:让智能体学习自动发现目标
☞ 【人物 】Ian Goodfellow亲述GAN简史:人工智能不能理解它无法创造的东西
☞ 【DCGAN】DCGAN:深度卷积生成对抗网络的无监督学习,补全人脸合成图像匹敌真实照片
☞ 带你理解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
☞ 【学界】CMU新研究试图统一深度生成模型:搭建GAN和VAE之间的桥梁
☞ 【专栏】大漠孤烟,长河落日:面向景深结构的风景照生成技术
☞ 【开发】最简单易懂的 GAN 教程:从理论到实践(附代码)
☞ 【论文访谈】求同存异,共创双赢 - 基于对抗网络的利用不同分词标准语料的中文分词方法
☞ 【LeCun论战Yoav】自然语言GAN惹争议:深度学习远离NLP?
☞ 【争论】从Yoav Goldberg与Yann LeCun争论,看当今的深度学习、NLP与arXiv风气
☞ 【观点】Yoav Goldberg撰文再回应Yann LeCun:「深度学习这群人」不了解NLP(附各方评论)
☞ PaperWeekly 第41期 | 互怼的艺术:从零直达 WGAN-GP
☞ 【谷歌 GAN 生成人脸】对抗创造新艺术风格,128 像素扩展到 4000
☞ 【原理】只知道GAN你就OUT了——VAE背后的哲学思想及数学原理