本文大约 3800 字,阅读大约须要 8 分钟git
要说最近几年在深度学习领域最火的莫过于生成对抗网络,即 Generative Adversarial Networks(GANs)了。它是 Ian Goodfellow 在 2014 年发表的,也是这四年来出现的各类 GAN 的变种的开山鼻祖了,下图表示这四年来有关 GAN 的论文的每月发表数量,能够看出在 2014 年提出后到 2016 年相关的论文是比较少的,可是从 2016 年,或者是 2017 年到今年这两年的时间,相关的论文是真的呈现井喷式增加。github
那么,GAN 到底是什么呢,它为什么会成为这几年这么火的一个研究领域呢?微信
GAN,即生成对抗网络,是一个生成模型,也是半监督和无监督学习模型,它能够在不须要大量标注数据的状况下学习深度表征。最大的特色就是提出了一种让两个深度网络对抗训练的方法。网络
目前机器学习按照数据集是否有标签能够分为三种,监督学习、半监督学习和无监督学习,发展最成熟,效果最好的目前仍是监督学习的方法,可是在数据集数量要求更多更大的状况下,获取标签的成本也更加昂贵了,所以愈来愈多的研究人员都但愿可以在无监督学习方面有更好的发展,而 GAN 的出现,一来它是不太须要不少标注数据,甚至能够不须要标签,二来它能够作到不少事情,目前对它的应用包括图像合成、图像编辑、风格迁移、图像超分辨率以及图像转换等。app
好比字体的转换,在 zi2zi 这个项目中,给出了对中文文字的字体的变换,效果以下图所示,GAN 能够学习到不一样字体,而后将其进行变换。机器学习
除了字体的学习,还有对图片的转换, pix2pix 就能够作到,其结果以下图所示,分割图变成真实照片,从黑白图变成彩色图,从线条画变成富含纹理、阴影和光泽的图等等,这些都是这个 pix2pixGAN 实现的结果。ide
CycleGAN 则能够作到风格迁移,其实现结果以下图所示,真实照片变成印象画,普通的马和斑马的互换,季节的变换等。函数
上述是 GAN 的一些应用例子,接下来会简单介绍 GAN 的原理以及其优缺点,固然也还有为啥等它提出两年后才开始有愈来愈多的 GAN 相关的论文发表。学习
GAN 的思想其实很是简单,就是生成器网络和判别器网络的彼此博弈。测试
GAN 主要就是两个网络组成,生成器网络(Generator)和判别器网络(Discriminator),经过这两个网络的互相博弈,让生成器网络最终可以学习到输入数据的分布,这也就是 GAN 想达到的目的--学习输入数据的分布。其基本结构以下图所示,从下图能够更好理解G 和 D 的功能,分别为:
在训练的过程当中,G 的目标是尽量生成足够真实的数据去迷惑 D,而 D 就是要将 G 生成的图片都辨别出来,这样二者就是互相博弈,最终是要达到一个平衡,也就是纳什均衡。
(如下优势和缺点主要来自 Ian Goodfellow 在 Quora 上的回答,以及知乎上的回答)
Pg(G)
没有显式的表达GAN 的本质就是 G 和 D 互相博弈并最终达到一个纳什平衡点,但这只是一个理想的状况,正常状况是容易出现一方强大另外一方弱小,而且一旦这个关系造成,而没有及时找到方法平衡,那么就会出现问题了。而梯度消失和模式奔溃其实就是这种状况下的两个结果,分别对应 D 和 G 是强大的一方的结果。
首先对于梯度消失的状况是D 越好,G 的梯度消失越严重,由于 G 的梯度更新来自 D,而在训练初始阶段,G 的输入是随机生成的噪声,确定不会生成很好的图片,D 会很容易就判断出来真假样本,也就是 D 的训练几乎没有损失,也就没有有效的梯度信息回传给 G 让 G 去优化本身。这样的现象叫作 gradient vanishing,梯度消失问题。
其次,对于模式奔溃(mode collapse)问题,主要就是 G 比较强,致使 D 不能很好区分出真实图片和 G 生成的假图片,而若是此时 G 其实还不能彻底生成足够真实的图片的时候,但 D 却分辨不出来,而且给出了正确的评价,那么 G 就会认为这张图片是正确的,接下来就继续这么输出这张或者这些图片,而后 D 仍是给出正确的评价,因而二者就是这么相互欺骗,这样 G 其实就只会输出固定的一些图片,致使的结果除了生成图片不够真实,还有就是多样性不足的问题。
更详细的解释能够参考 使人拍案叫绝的Wasserstein GAN,这篇文章更详细解释了原始 GAN 的问题,主要就是出如今 loss 函数上。
(0.2, 0.3, 0.1,0.2,0.15,0.05)
,那么变为 onehot是(0,1,0,0,0,0),若是softmax输出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot 仍然是(0, 1, 0, 0, 0, 0)
,因此对于生成器来讲,G 输出了不一样的结果, 可是 D 给出了一样的判别结果,并不能将梯度更新信息很好的传递到 G 中去,因此 D 最终输出的判别没有意义。对于鞍点,来自百度百科的解释是:
鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另外一条方向是不稳定的奇点,叫作鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫作鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要普遍一些,指在一个方向是极大值,另外一个方向是极小值的点。
鞍点和局部极小值点、局部极大值点的区别以下图所示:
训练的技巧主要来自Tips and tricks to make GANs work。
Tanh
激活函数在原始 GAN 论文中,损失函数 G 是要 , 但实际使用的时候是采用
,做者给出的缘由是前者会致使梯度消失问题。
但实际上,即使是做者提出的这种实际应用的损失函数也是存在问题,即模式奔溃的问题,在接下来提出的 GAN 相关的论文中,就有很多论文是针对这个问题进行改进的,如 WGAN 模型就提出一种新的损失函数。
参考文章:
注:配图来自网络和参考文章
以上就是本文的主要内容和总结,能够留言给出你对本文的建议和见解。
同时也欢迎关注个人微信公众号--机器学习与计算机视觉或者扫描下方的二维码,和我分享你的建议和见解,指正文章中可能存在的错误,你们一块儿交流,学习和进步!