【深度学习】生成对抗网络Generative Adversarial Nets

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shenxiaolu1984/article/details/52215983

Goodfellow, Ian, et al. “Generative adversarial nets.” Advances in Neural Information Processing Systems. 2014.

理念

本文是Ian Goodfellow在2014年的经典之作,在许多tutorial中作为非监督深度学习的代表作给予推广。
本文解决了非监督学习中的著名问题:给定一批样本,训练一个系统,能够生成(generate)类似的新样本。

作者给出了基于Pylearn21的源码(戳这里)。不过本文的结果稍显平凡,以理解思想为主,代码仅做参考。
CIFAR-10上的结果

忆苦思甜

在本文之前,大家是怎样做非监督学习的呢?

直白的想法是,根据训练集估计样本分布p(x)。之后对p(x)进行采样,可以生成“和训练集类似”的新样本。

对于低维样本,可以使用简单的,只有少量参数的概率模型(例如高斯)拟合p(x),但高维样本(例如图像)就不好办了。

一个经典方法是使用RBM(Restricted Boltzmann Machine)构造一个无向图,图的能量和节点取值的概率有指数关系。利用训练集设定图中节点和边的系数,用来表述x中单个元素和相连元素的关系。这个方法推导繁琐2,计算复杂,采样时马尔科夫链的混合速度慢

还有一种方法是DBN(Deep Belief Networks),用单个RBM和若干有向层构成网络。一样存在计算复杂的问题。

这两种方法在本次DL热潮早期(2010年之前),曾经和CNN并驾齐驱,但如今在图像领域已经鲜有应用。CNN虽然在分类、分割等监督学习方面立竿见影,但如何进行非监督学习一直是个难题。

对抗网络

本文采取的方法如下,使用两个网络互相竞争,称之为对抗式(adversarial)结构。
这里写图片描述
生成器(Generator)和鉴别器(Discriminator)都是常见的卷积+全连网络。前者从随机向量生成一个样本,后者鉴别生成的样本以及训练集样本究竟谁真谁假。
两者同时训练。在训练鉴别器时,最小化鉴别误差;在训练生成器时,最大化鉴别误差。两个目的均可以通过反向传播方法实现。

训练好的生成网络,能把任意一个噪声向量转化成和训练集类似的样本。该噪声可以看做该样本在低维空间的编码

训练

针对不同数据集,作者设计了不同复杂程度的网络。

MNIST

生成网络
这里写图片描述

鉴别网络
这里写图片描述

CIFA-10全连

生成网络。隐结点维度增大,但编码(输入噪声)仍然是100维。
这里写图片描述

鉴别网络
这里写图片描述

CIFA-10卷积

生成网络。在最后一级,用解卷积网获得图像。
这里写图片描述

鉴别网络
这里写图片描述

轮流迭代

在训练时,每更新一次生成网络,要更新k次鉴别网络。文中给出的理由是:避免生成器overfitting,学习出过于狭隘的生成规则。(实际使用的k=1

后续发展

FaceBook AI Reasearch提供了一个在线页面,可以看到实时生成的模拟图像。

2015年的DCGAN把类似的理念应用到人脸图像上。通过对编码(输入的随机向量)进行代数运算,控制生成人脸图像的属性。
这里写图片描述

Yan LeCun在Quora的这个回答中,给出了更多扩展阅读。


  1. Pylearn2是蒙特利尔大学LISA实验室基于Theano开发的一个机器学习库。
  2. 不服的看这儿
展开阅读全文

没有更多推荐了,返回首页