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

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处 https://blog.csdn.net/qq_40147863/article/details/85052341

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

先来看一下 百度百科-GAN 的解释

生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。

模型通过框架中(至少)两个模块:生成模型(Generative Model)和 判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。

一个优秀的生成式对抗网络应用需要有 良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。

生成式对抗网络是属于 机器学习 / 计算机视觉 领域

有点懵?举个例子


男: 你看,我给你拍的照片的好不好看?
女: 这是什么鬼,你不能学学 XXX 的构图吗?
男: 哦,
……

男: 这次你看我拍的行不行?
女: 你看看你的后期,再看看 YYY 的后期吧,ε=(´ο`*)))唉
男: 哦,
……
男: 这次好点了吧?
女: 呵呵,我看你这辈子是学不会摄影了
……
男: 这次呢?
女: 嘿嘿,还不错,我拿去当头像了

上面这段对话讲述了一位 “男朋友摄影师” 的成长历程。

很多人可能会问:这个故事和生成式对抗网络(GAN)有什么关系?其实,只要你能理解这段故事,就可以了解 生成式对抗网络的工作原理

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

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

GAN 的工作原理是这样的

文章开头描述的场景中有两个参与者,一个是摄影师(男生),一个是摄影师的女朋友(女生)。男生一直试图拍出像众多优秀摄影师一样的好照片,而女生一直以挑剔的眼光找出“自己男朋友”拍的照片和“别人家的男朋友”拍的照片的区别。

于是两者的 交流过程 类似于:男生拍一些照片 ->女生分辨男生拍的照片和自己喜欢的照片的区别->男生根据反馈改进自己的技术,拍新的照片->女生根据新的照片继续提出改进意见->……,这个过程直到均衡出现:即女生不能再分辨出“自己男朋友”拍的照片和“别人家的男朋友”拍的照片的区别。

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

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

上述这种 博弈式的训练过程,如果采用神经网络作为模型类型,则被称为 生成式对抗网络(GAN)

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。

在这里插入图片描述

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

参考:原文链接

猜你喜欢

转载自blog.csdn.net/qq_40147863/article/details/85052341