生成式对抗网络简介
来源:Esri北京研发中心
作者:云中仙鹤
到底是么是GANs呢?简而言之,它是一个神经网络的新品种。不同于其他的神经网络,GAN包含两个模型:一个生成模型(Generative Model)和一个判别模型(Discriminative Model)。关于这两个模型作用,网络上有各种有意思的说法。最流行的比喻是,生成模型是做假画的,判别模型是鉴别专家。两者在不停地博弈当中共同成长。
生成网络是怎么做假画呢?首先,它的输入分布是随机分布。然后,它根据训练数据集进行建模,最后根据模型生成数据。生成数据的分布应该接近训练数据的分布。这个样本就是所谓的假画了。判别模型就是一个分类器。它的输入是生成模型产生的样本或是真实数据。输出是一个类别判断。这两个模型同时训练,最后达成一个均衡状态:生成器产生的数据与训练数据接近,判别模型也无法区分训练数据和生成数据。
概念挺好懂的。那咱们来看看它到底能做啥。GAN比较著名的应用是视频。它可以根据场景或文本自动生成一些视频。如果不仔细看的话,它的输出是相当逼真的(不过还是不要仔细看吧,个别图片有点吓人)。哇,这是不是说,AI要抢演员的饭碗了?
另外一个应用就是变脸。和咱们手机上那些瘦脸,加动画特效的APP不一样的地方是,GANs可以做人脸的场景合成。哇,这是不是说以后,拍电影,化妆师都不需要了。演员素面朝天。拍完之后,按情节,智能绘制妆容。哦,差点忘了。以后可能连演员都不需要了。
GANs还可以重建样本。做一些深层次的图片合成。未来简史里面说,未来地球上就只会有人和人养的动物。我们想看看新物种,或许要依赖GANs了。
作为一种神经网络,GANs也支持 Style Transfer.它可以把一个照片变艺术画,也可以把一张艺术画变成有照片感觉的图片。另外,GANs还支持边涂鸦,边渲染。我们输入简单涂鸦,GANs帮助我们生成油画。这样看来,我们离人人都是艺术家的日子不远了。
另外呢,GANs也可以做图像的改善。这包括补缺,像素提升,和图像对象识别等。
大家比较看好的一个应用是特征转变。例子就是下图。GANs根据包包的特征,绘制出一个同等特征的鞋子。这就意味,今后可能出现超级网店。你搜了一些包包。突然发现,店铺推荐了匹配的鞋子。而且你搜遍其他地方,根本找不到这些鞋子。你只好下单了。其实,你下单之前,这些鞋子是不存在的,这些鞋子是GANs根据你的喜好,临时设计出来的。你下单的同时,超级工厂才开始生产你的鞋子。
最后两个应用是地学方面的。GANs 可以用来做三维建模。也可以做纹理的自动生成。其实这两个应用和其他应用并没有显著差别。主要是他们的输入是地学相关的数据。另外算法也考虑了数据空间上的一定程度的相关性。
看了这么多的应用,小编一方面很兴奋,另外一方面感到一点小失望。这些应用,其实不是新鲜事物。不用GANs,用其他神经网络也可以实现。那为什么,学术界像打了鸡血一样的努力研究GANs呢?看了很多资料以后,小编来总结一下GANs的优势。
首先它不仅仅是一种神经网络模型。它是一种神经网络的组织和构建方式。因此它有很大的改进空间。它可以结合其他的神经网络。也就是说只要是可微分函数都可以用来构建生成模型和判读模型。比方说,最近最火爆的GANs是Facebook AI lab提出的深层卷积云对抗网路(Deep convolutional generative adversarial network)。这就是GANs和深层卷积云网络的结合。
另外GANs代表了一种无监督或半监督学习的新思路。GANs有博弈论的基因。它的生成式模型和判别式模型的训练过程是一种对抗过程。因此它的生成模型里面的参数更新不但包含学习的结果,还包含来自判断模型的反馈(判断模型也可以用作提取特征)。这种学习模式非常接近人类的学习模式。因为模型学习过程不需要遍布参数分布空间,这同时意味着,模型的训练不需要马可夫链过程。这样可以大大提高模型的训练效率。
从概念上来想的话,GANs还有更广阔的发展空间。看到这里,大家是不是跃跃欲试了呢?小编给大家推荐几个练手的好资料。大家可以参考一下参考文献里面的【3】和【6】。 【6】包含了上百篇文献的链接。【3】包含了Github上面GANs的各种实现。
GANs的小白当然还是要拿大名鼎鼎的MNIST数据作为起点。小编特别体贴的提供了一个地图切片下载代码【11】。大家可以下载一些地图切片。专门供GANs小白练手用。
所谓树大招风。很多文献也提到了GAN的一些缺点的,比方说,输入如果完全是随机数,模型比较不好控制。生成式模型和判别式模型的沟通如果控制不好,模型很难达到均衡。另外模型不一定是收拢过程,所以还有可能崩溃。已经有不少文献在解决这些问题。看起来,GAN的应用会越来越多。最近还有一些新的网络模型被发明出来,声称可以秒渣GANs.这些新算法也是很值得学习的。另外值得一提的是吴恩达的deeplearning.ai 上面开了一门Deep Learning课程。里面也介绍了一些GANs的基础知识。Youtube上面有大神 Ian Goodfellow的培训资料。在youtube上,还有一个叫Siraj Raval的学生也制作了非常有趣的GANs的简介。GANs的实现可以用tensoreflow, pytorch或是caffe2。Github上有不少例子。心动不如行动。动手搜一搜,开始看代码吧。
参考文献:
【1】
https://github.com/wiseodd/generative-models
【2】
https://github.com/nightrome/really-awesome-gan
【3】
https://drscotthawley.github.io/Crash-Course-On-GANs/
【4】https://blog.acolyer.org/2017/03/02/unsupervised-learning-and-gans/
【5】
http://www.asimovinstitute.org/neural-network-zoo/
【6】https://github.com/wiseodd/generative-models
【7】https://www.scientificamerican.com/article/when-will-computers-have-common-sense-ask-facebook/
【8】https://www.oreilly.com/learning/generative-adversarial-networks-for-beginners
【9】https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f
【10】http://wiseodd.github.io/techblog/2016/09/17/gan-tensorflow/
【11】https://github.com/Lorcha/usefulscript/blob/master/fetchtiles.py
☞ 【最详尽的GAN介绍】王飞跃等:生成式对抗网络 GAN 的研究进展与展望
☞ 【智能自动化学科前沿讲习班第1期】王飞跃教授:生成式对抗网络GAN的研究进展与展望
☞ 【智能自动化学科前沿讲习班第1期】王坤峰副研究员:GAN与平行视觉
☞ 【重磅】平行将成为一种常态:从SimGAN获得CVPR 2017最佳论文奖说起
☞ 【分析】图像分类、目标检测、图像分割、图像生成……一文「计算机视觉」全分析
☞ 【智能自动化学科前沿讲习班第1期】哈工大左旺孟教授:多领域视觉数据的转换、关联与自适应学习