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

时间:2017-05-11

 

男:哎,你看我给你拍的好不好?

女:这是什么鬼,你不能学学XXX的构图吗?

男:哦

……

男:这次你看我拍的行不行?

女:你看看你的后期,再看看YYY的后期吧,呵呵

男:哦

……

男:这次好点了吧?

女:呵呵,我看你这辈子是学不会摄影了

……

男:这次呢?

女:嗯,我拿去当头像了

上面这段对话讲述了一位“男朋友摄影师”的成长历程。很多人可能会问:这个故事和生成式对抗网络(GAN)有什么关系?其实,只要你能理解这段故事,就可以了解生成式对抗网络的工作原理。

首先,先介绍一下生成模型(generative model),它在机器学习的历史上一直占有举足轻重的地位。当我们拥有大量的数据,例如图像、语音、文本等,如果生成模型可以帮助我们模拟这些高维数据的分布,那么对很多应用将大有裨益。

针对数据量缺乏的场景,生成模型则可以帮助生成数据,提高数据数量,从而利用半监督学习提升学习效率。语言模型(language model)是生成模型被广泛使用的例子之一,通过合理建模,语言模型不仅可以帮助生成语言通顺的句子,还在机器翻译、聊天对话等研究领域有着广泛的辅助应用。

那么,如果有数据集S={x1,…xn},如何建立一个关于这个类型数据的生成模型呢?最简单的方法就是:假设这些数据的分布P{X}服从g(x;θ),在观测数据上通过最大化似然函数得到θ的值,即最大似然法:

 

GAN的工作原理是这样的

文章开头描述的场景中有两个参与者,一个是摄影师(男生),一个是摄影师的女朋友(女生)。男生一直试图拍出像众多优秀摄影师一样的好照片,而女生一直以挑剔的眼光找出“自己男朋友”拍的照片和“别人家的男朋友”拍的照片的区别。于是两者的交流过程类似于:男生拍一些照片 ->女生分辨男生拍的照片和自己喜欢的照片的区别->男生根据反馈改进自己的技术,拍新的照片->女生根据新的照片继续提出改进意见->……,这个过程直到均衡出现:即女生不能再分辨出“自己男朋友”拍的照片和“别人家的男朋友”拍的照片的区别。

我们将视线回看到生成模型,以图像生成模型举例。假设我们有一个图片生成模型(generator),它的目标是生成一张真实的图片。与此同时我们有一个图像判别模型(discriminator),它的目标是能够正确判别一张图片是生成出来的还是真实存在的。那么如果我们把刚才的场景映射成图片生成模型和判别模型之间的博弈,就变成了如下模式:生成模型生成一些图片->判别模型学习区分生成的图片和真实图片->生成模型根据判别模型改进自己,生成新的图片->····

这个场景直至生成模型与判别模型无法提高自己——即判别模型无法判断一张图片是生成出来的还是真实的而结束,此时生成模型就会成为一个完美的模型。这种相互学习的过程听起来是不是很有趣?

上述这种博弈式的训练过程,如果采用神经网络作为模型类型,则被称为生成式对抗网络(GAN)用数学语言描述整个博弈过程的话,就是:假设我们的生成模型是g(z),其中z是一个随机噪声,而g将这个随机噪声转化为数据类型x,仍拿图片问题举例,这里g的输出就是一张图片。D是一个判别模型,对任何输入x,D(x)的输出是0-1范围内的一个实数,用来判断这个图片是一个真实图片的概率是多大。令Pr和Pg分别代表真实图像的分布与生成图像的分布,我们判别模型的目标函数如下:

类似的生成模型的目标是让判别模型无法区分真实图片与生成图片,那么整个的优化目标函数如下:

这个最大最小化目标函数如何进行优化呢?最直观的处理办法就是分别对D和g进行交互迭代,固定g,优化D,一段时间后,固定D再优化g,直到过程收敛。

一个简单的例子如下图所示:假设在训练开始时,真实样本分布、生成样本分布以及判别模型分别是图中的黑线、绿线和蓝线。可以看出,在训练开始时,判别模型是无法很好地区分真实样本和生成样本的。接下来当我们固定生成模型,而优化判别模型时,优化结果如第二幅图所示,可以看出,这个时候判别模型已经可以较好的区分生成数据和真实数据了。第三步是固定判别模型,改进生成模型,试图让判别模型无法区分生成图片与真实图片,在这个过程中,可以看出由模型生成的图片分布与真实图片分布更加接近,这样的迭代不断进行,直到最终收敛,生成分布和真实分布重合。

以上就是生成式对抗网络的基本核心知识,下面我们看几个在实际中应用的例子。

GAN在图像中的应用——DCGAN

为了方便大家更好地理解生成式对抗网络的工作过程,下面介绍一个GAN的使用场景——在图片中的生成模型DCGAN。

在图像生成过程中,如何设计生成模型和判别模型呢?深度学习里,对图像分类建模,刻画图像不同层次,抽象信息表达的最有效的模型是:CNN (convolutional neural network,卷积神经网络)。

CNN是深度神经网络的一种,可以通过卷积层(convolutional layer)提取不同层级的信息,如上图所示。CNN模型以图片作为输入,以图片、类别抽象表达作为输出,如:纹理、形状等等,其实这与人类对图像的认知有相似之处,即:我们对一张照片的理解也是多层次逐渐深入的。

那么生成图像的模型应该是什么样子的呢?想想小时候上美术课,我们会先考虑构图,再勾画轮廓,然后再画细节,最后填充颜色,这事实上也是一个多层级的过程,就像是把图像理解的过程反过来,于是,人们为图像生成设计了一种类似反卷积的结构:Deep convolutional NN for GAN(DCGAN)

DCGAN采用一个随机噪声向量作为输入,如高斯噪声。输入通过与CNN类似但是相反的结构,将输入放大成二维数据。通过采用这种结构的生成模型和CNN结构的判别模型,DCGAN在图片生成上可以达到相当可观的效果。如下是一些生成的案例照片。

GAN在半监督学习中的应用

再来看一个GAN在半监督学习(semi supervised learning)中的例子。假如我们面对一个多分类的任务,手里只有很少有标注的样本,同时有很多没有标注的样本,怎么能够利用GAN的思路合理使用无标签数据,提高分类性能呢?

在去年NIPS大会上,来自OpenAI的作者提供了如下思路:考虑一个K分类任务,有一个判别模型 G可以帮助生成样本,与此同时,有一个判别模型做一个K+1分类任务,其中新加的类是预测样本是否是由生成模型生成的。跟传统GAN不同,这里我们最终需要的是判别模型,而不是生成模型。

简单而言,目标函数针对不同数据,可以分为两部分。对于有标注的样本,目标是希望判别模型能够正确输出标签。而对于没有标注的生成样本,则是由GAN定义的loss。

该作者认为这样处理的好处是可以充分利用未标注数据来学习样本分布,从而辅助监督学习的训练过程。实验结果也显示通过这种处理方法训练出来的判别模型,在合理利用未标注数据方面,有着比其他方法更好的效果。

GAN的改进——WGAN

刚才谈到很多GAN的优点、应用和变种,那么GAN真的是完美无缺的吗?

其实使用过GAN的人应该知道,训练GAN有很多头疼的问题。例如:GAN的训练对超参数特别敏感,需要精心设计。GAN中关于生成模型和判别模型的迭代也很有问题,按照通常理解,如果判别模型训练地很好,应该对生成的提高有很大作用,但实际中恰恰相反,如果将判别模型训练地很充分,生成模型甚至会变差。那么问题出在哪里呢?

在ICLR 2017大会上有一篇口头报告论文提出了这个问题产生的机理和解决办法。问题就出在目标函数的设计上。这篇文章的作者证明,GAN的本质其实是优化真实样本分布和生成样本分布之间的差异,并最小化这个差异。特别需要指出的是,优化的目标函数是两个分布上的Jensen-Shannon距离,但这个距离有这样一个问题,如果两个分布的样本空间并不完全重合,这个距离是无法定义的。

作者接着证明了“真实分布与生成分布的样本空间并不完全重合”是一个极大概率事件,并证明在一些假设条件下,可以从理论层面推导出一些实际中遇到的现象。

既然知道了问题的关键所在,那么应该如何解决问题呢?该文章提出了一种解决方案:使用Wasserstein距离代替Jensen-Shannon距离。并依据Wasserstein距离设计了相应的算法,即WGAN。新的算法与原始GAN相比,参数更加不敏感,训练过程更加平滑。

GAN的未来

无论是无监督学习、半监督学习,GAN给我们提供了一个处理问题的崭新思路,就是把博弈论引入到机器学习过程中来。可以预见,GAN本身的算法以及看问题的角度,必将对未来设计算法、以及解决实际问题产生深远的影响。

那么,GAN当前有哪些急需解决的问题呢:

首先,针对图片生成问题而言,一个至关重要的问题是GAN和其他方法比,到底好多少?GAN框架中的各种衍生算法相互比较,谁好谁坏?很可惜的是,现在没有一个客观的公认标准去衡量不同图片生成算法的差异性。其实这本身就是一个难题,因为人会从多角度判断一张图片是否真实,如图片是否清晰、图片物体线条颜色是否正确、图片里是否有一些反直觉的物体等,只有有了合理的衡量标准,才能科学系统地研究并改进GAN的算法。

其次,GAN是着眼于对所有生成模型的学习,并不局限于图像生成一个应用层面。那么GAN如何运用于其他问题,如机器翻译、对话生成、语音生成等?这些都是有趣、富有挑战的事情。其实还有更有趣的事情,如GAN能不能生成真实场景作为模拟器,帮助训练自动驾驶?GAN能否生成逼真的虚拟视觉给人们提供全新的游戏体验?

也许盗梦空间离我们很近,也许盗梦空间的创造者就是你。

参考文献:

1.Wasserstein GAN,https://arxiv.org/abs/1701.07875

2.Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks,https://arxiv.org/abs/1511.06434

3.Improved techniques for training gans,https://arxiv.org/abs/1606.03498

4."Generative Adversarial Networks," NIPS 2016 tutorial by Ian Goodfellow,

http://www.iangoodfellow.com/slides/2016-12-04-NIPS.pdf

作者简介

贺笛

贺笛,微软亚洲研究院副研究员。主要研究方向为深度学习和增强学习的算法设计、理论分析及在实际问题中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式缓存Redis+Memcached经典面试题和答案

Redis相比memcached有哪些优势? (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 (2) redis的速度比memcached快很多 (3) redis可以…

卖萌屋福利场:《机器阅读理解》免费送送送!

一只小狐狸带你解锁 炼丹术&NLP 秘籍在送书之前,先来了解一下机器阅读理解是什么~已经很熟悉的小伙伴可以快速下拉进入福利场~机器阅读理解是什么机器阅读理解(Machine Reading Comprehension,MRC)是一种利用算法使…

CCKS 2018 | 工业界论坛报告简介

China Conference on Knowledge Graph and Semantic Computing 天津,2018年8月14日-8月17日主题1:智能交互中的知识图谱时间:2018.08.17 (14:00-15:00)地点:天津滨海一号大会场报告1:报告题目&a…

BAT Java面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!

JavaList面试题汇总 1、List集合:ArrayList、LinkedList、Vector等。 2、Vector是List接口下线程安全的集合。 3、List是有序的。 4、ArrayList和LinkedList数据结构不一样,前者用在查询较多的场合,后者适用于插入较多的场合。 5、ArrayL…

基于在线百科知识库的多义词词义消歧项目

WordMultiSenseDisambiguation WordMultiSenseDisambiguation, chinese multi-wordsense disambiguation based on online bake knowledge base and semantic embedding similarity compute,基于百科知识库的中文词语多义项获取与特定句子词语语义消歧. 项目地址:https://gith…

文本查询TextQuery类文件编写

读取用户指定的任意文本文件,然后允许用户从该文件中查找单词。查询的结果是该单词出现的次数,并列出每次出现所在的行。如果某单词在同一行中多次出现,程序将只显示该行一次。行号按升序显示,即第 7 行应该在第 9 行之前输出&…

什么是小样本学习?这篇综述文章用166篇参考文献告诉你答案

一只小狐狸带你解锁 炼丹术&NLP 秘籍来源:机器之心什么是小样本学习?它与弱监督学习等问题有何差异?其核心问题是什么?来自港科大和第四范式的这篇综述论文提供了解答。数据是机器学习领域的重要资源,在数据缺少的…

CCKS 2018 | 前沿技术讲习班

时间:8月14日-15日地点:南开大学泰达学院大报告厅日程安排时间主题特邀讲者8月14日上午(8:30 – 10:00)Deep Knowledge Graph Reasoning(10:30-12:00)Exploiting and Reasoning With Open Knowledge GraphW…

Java必考题目之JVM面试题目和答案

JVM内存模型 首先我们来了解一下JVM的内存模型的怎么样的: 1.堆:存放对象实例,几乎所有的对象实例都在这里分配内存 堆得内存由-Xms指定,默认是物理内存的1/64;最大的内存由-Xmx指定,默认是物理内存的1/4…

听说读论文也有trick?这篇文章告诉你深度学习论文阅读最佳姿势

2020年的今天,我们的专业是deep learning,但是我们要keep learning,每天早上一睁眼,arxiv每天更新上百篇的论文,著名微博博主爱可可-爱生活保持也在推送最新的deep learning资讯和论文。我们不缺少计算机视觉论文&…

屏幕Screen类文件编写

注意&#xff1a; inline 定义的函数必须放在 .h 文件中&#xff0c;否则编译器报错&#xff01; 其次&#xff0c;注意写全称在 .h 里&#xff0c;如 std:: screen.h 头文件 #ifndef SCREEN_H #define SCREEN_H #include<string> #include<iostream>class Scre…

机器翻译自动评估-BLEU算法详解

机器翻译自动评估-BLEU算法详解 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq_31584157/article/details/77709454 </div><link rel"stylesheet" href"https://csdnimg.cn/re…

论文浅尝 | 利用Lattice LSTM的最优中文命名实体识别方法

本文转载自公众号&#xff1a;机器之心。选自arXiv作者&#xff1a;Yue Zhang、Jie Yang机器之心编译参与&#xff1a;路、王淑婷近日&#xff0c;来自新加坡科技设计大学的研究者在 arXiv 上发布了一篇论文&#xff0c;介绍了一种新型中文命名实体识别方法&#xff0c;该方法利…

最全MySQL面试60题和答案

Mysql中有哪几种锁&#xff1f; 1.表级锁&#xff1a;开销小&#xff0c;加锁快&#xff1b;不会出现死锁&#xff1b;锁定粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。 2.行级锁&#xff1a;开销大&#xff0c;加锁慢&#xff1b;会出现死锁&#xff1b;…

中文幽默语料库构建与计算项目(幽默等级识别,幽默类型识别,隐喻类型识别,隐喻情绪识别)

ChineseHumorSentiment chinese Humor Detection or Computation based on corpus and nlp methods, 基于语料库与NLP方法的中文幽默计算与检测项目 项目地址:https://github.com/liuhuanyong/ChineseHumorSentiment 项目介绍 幽默多指令人发笑的品质或者具有发笑的能力&…

账户Account类文件编写(static成员使用)

static类成员是该类所有成员共享一份的数据&#xff0c;一处修改了&#xff0c;全部变更&#xff1b; static成员函数只能调用static成员数据&#xff1b; static const整形int&#xff0c;char&#xff0c;可以在类内声明和初始化&#xff0c;类外不必再声明&#xff08;跟编译…

百度机器阅读理解比赛赛后总结

百度机器阅读理解比赛赛后总结 <!-- 文章内容 --><div data-note-content"" class"show-content"><div class"show-content-free"><p>2018年4-5月间&#xff0c;笔者参加了百度举办的<a href"https://links.jia…

课程 | 《知识图谱》第二期重磅来袭!

参团&#xff0c;咨询&#xff0c;查看课程&#xff0c;请点击【阅读原文】↓↓

All in Linux:一个算法工程师的IDE断奶之路

一只小狐狸带你解锁 炼丹术&NLP 秘籍在合格的炼丹师面前&#xff0c;python可能被各种嫌弃前不久卖萌屋的lulu写了一篇vim的分享《算法工程师的效率神器——vim篇》&#xff0c;突然想起来自己也有一篇攒了几年灰的稿子&#xff0c;在小伙伴的怂恿下跟小夕强行翻新了一下&a…

2019 阿里Java 4轮面试题,含必考题答案参考!

Java一面 hashmap源码问题 HashMap底层结构 put操作讲一下 HashMap、HashMap如何保证线程安全、ConcurrentHashMap JVM有哪些回收算法&#xff0c;对应的收集器有哪些&#xff1f; jvm g1的内存模型讲一下&#xff0c;G1和CMS收集器的区别&#xff1f;以及G1收集器对CMS的改…