初步认识GAN(生成对抗网络)

初步认识GAN(生成对抗网络)

1.GAN的发明

生成模型的基本思想是输入一个训练样本集合,形成样本概率分布的表征。 常用的生成模型是直接推断他的密度概率函数。

好的生成模型有以下几方面的实际应用;
1. 提升图片的质量(高分辨率)
2. 预测未来状态的规划
3.生成缺失数据和标签
4.模拟实验结果
5. 生成高质量语音
2014年,lan Goodfellow 机及其蒙特利尔大学的同事引入了生成对抗网络(GAN)。这是一种全新的方法用于学习数据的基本分布,使得生成的人工对象和真实对象直接达到惊人的相似。

GAN的思想其实就是两个网络——生成器和检测器的博弈。生成器的目标是生成一个对象,使之和真实对象一样。而检测器的目标是找出生成对象和真实对象之间的差别。
在这里插入图片描述
这个图片是生成对抗网络的一个大体概述。最重要的就是要理解GAN就是将两个网络放在一起工作的方法——生成器和鉴别器都有其自己的架构。

那么我们应该思考一个问题,如果网络分类图像的能力比大多数人还好,我们应该如何欺骗他?

对抗样本

对于给定一个训练之后的分类器,我们可以生成一个可以骗过该网络的样本。也就是说,我们利用生成器生成的样本,和真实对象看起来毫无差别,使得分类网络得到错误的分类结果(使得生成器生成的对象被检测成真实对象)。并且我们还可以对图像通过变形的方式得到一个新图,和真实图片看起来毫无差别,但使得分类网络得到错误的分类结果,这个过程被称为对抗攻击。

对抗样本是指经过精心计算得到的旨在误导分类器的样本(也就是使得分类器辨别不出来的样本)。

图像分类器其实是高维空间中复杂的决策边界。但在图像分类中,我们无法画出这样的决策边界。但是我们可以肯定的假设,这个分类器只能用于训练集中的样本,不能泛化到所有图像,这样的泛化很可能不能很好的近似真实情况。也就是说,这个分类网络和我们的训练数据过拟合了——我们可以利用这一点来欺骗网络。

首先我们在图像中加入一些随机噪声,情怯确保噪声接近于0。我们可以通过控制噪声的L2范式来实现这一点(所谓的L2范式,可以看做是图像像素越多,其平均的L2范式就越大)。所以,如果你的噪声的范数足够低,你就可以认为他在视觉上是不可感知的,但在向量空间中,加入噪声的图像和原始图像相差甚远。

如果H* W的图像是一个向量,我们加入其中的H*W 也是一个向量,原始图像上有各种各样相当密集的颜色——这会增加L2范式。另一方面,噪声从视觉看上去是一张混乱且非常苍白的图像——一个小范式的向量。最后加在一起,得到的受损图像和原图像很接近,但是会被错误的分类!

如果原始图的决策边界没有那么远,那么增加的噪声会将图像带到决策边界之外!

每张图片都是高维空间中的一个向量,在他们之上的训练的分类器就是将【所有猴子】定义为【这个用隐含参数描述的高维blob(二进制大象)中的所有向量】。我们将这个blob成为该类的决策边界。

扫描二维码关注公众号,回复: 4060916 查看本文章

这就是通过增加随机噪声来欺骗网络。

生成器和鉴别器

根据上述所讲的对抗样本,我们把上面所讲的分类器网络(也就是所提及的二分类(真和假)),根据Goodfellow等人所写的原始论文,我们称之为鉴别器(Discriminator)。

现在我们增加一个网络,让其生成鉴别器错误分类的图像。这个过程和对抗样本使用的过程湾区一样,这个网络我们称之为生成器。

训练的每一步,鉴别器都要区分训练集和假样本的图像,这样他的区分能力越来越强。在统计学习理论中,这本质上就意味着学习到了数据的底层分布。

那么一个有趣的话题随之而来,当鉴别器非常善于辨别真假时,欺骗它又有什么好处呢?

没错!能用来学习以假乱真的赝品~!
在这里插入图片描述
左图用训练集中的样本训练鉴别器,右图通过加入噪声利用生成器得到图像样本,使鉴别器进行分类。

有一个古老但睿智的数学结果最小最大定理(Minimax theorem)开启了我们所知的博弈论的先河,其表明:对于零和博弈中的两个玩家而言,最小最大解决方案与纳什均衡是一样的。

哇!这都说的啥!

简单来说,当两个玩家(D 和 G)彼此竞争时(零和博弈),双方都假设对方采取最优的步骤而自己也以最优的策略应对(最小最大策略),那么结果就已经预先确定了,玩家无法改变它(纳什均衡)。
在这里插入图片描述
图片来自:Goodfellow, 2017
也就是说当训练次数足够到的时候,我们的生成器可以 学会如何从真实图像中采样,生成非常接近真实图像的图像,鉴别器无法将其鉴别出来。

上手学习的最佳架构

回顾一些经典架构,并提供一些相关链接。

深度卷积生成对抗网络(DCGAN)

     在开始的训练GAN中,模型很不稳定,需要大量的调整。2015 年时,Radford 等人发表了题为《使用深度卷积生成对抗网络的无监督表征学习(Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks)》的论文,描述了之后被称为 DCGAN 的著名模型。
     DCGAN,在大多数情况下都是稳定的。这是第一篇使用向量运算描述的生成器学习到的表征的固有性质的论文:这与Word2Vec中的词向量使用的技巧一样,但却是对图像操作的!
     后面会提供一些关于DCGAN学习的链接。

在这里插入图片描述
图片来自:Radford et al., 2015

条件GAN(Conditional GAN)

     这是研究者提出的一种 GAN 的元架构的扩展,以便提升生成图像的质量,你也可以把它称为一个小技巧,百分之百没问题。其思想是,如果你的一些数据点有标签,你可以使用它们来构建显著的表征。这和你使用了哪种架构无关——这个扩展每次都是一样的。你需要做的全部事情就是为其生成器添加另一个输入。

在这里插入图片描述
图片来自:Mirza, 2014
所以,现在又如何呢?现在假如你的模型可以生成各种各样的动物,但你其实喜欢猫。现在你不再为生成器传递生成的噪声然后期待有最好的结果,而是为第二个输入增加一些标签,比如「猫」类别的 ID 或词向量。在这种情况下,就说生成器是以预期输入的类别为条件的。

诀窍和技巧

在GitHub上克隆,使之正常运行。使用哪种随机梯度算法,目前还无普遍共识。并且在进行长时间的训练之前要对学习率进行仔细调节。一般的流程如下;

  1. 采样训练样本的一个 minibatch,然后计算它们的鉴别器分数;
  2. 得到一个生成样本 minibatch,然后计算它们的鉴别器分数;
  3. 使用这两个步骤累积的梯度执行一次更新。
    值得注意的是,要分开处训练和生成的minibatch,并且为不同的bath 计算batch norm,这个很关键,可以确保鉴别器有快速的初始训练。

有时候,当生成器执行一步时,让鉴别器执行一步以上的效果更好。如果你的生成器在损失函数方面开始「获胜」了,不妨试试这么做。

基本而言,每个bath都会得到同样的结果,其中只是会稍微有些不同,该如何防止这种情况发生呢?一种方法是预算平均像素和标准差,然后每次都使用 ,这尝尝会导致过拟合。作为代替,还有一种被称为虚拟批归一化(Virtual Batch Normalization)的妙招:在你开始训练之前预定义一个batch(让我们称其为R),对于每一个新的batch X,都使用R和X的级联来计算归一化参数。

另一个有趣的技巧是从一个球体上采样输入噪声,而不是从一个立方体上。我们可以通过控制噪声向量的范数来近似实现这一目标,但是从高维立方体上真正均匀地采样会更好一点。

下一个诀窍是避免使用稀疏梯度,尤其是在生成器中。只需将特定的层换成它们对应的「平滑」的类似层就可以了,比如:

1.ReLU 换成 LeakyReLU

  1. 最大池化换成平均池化、卷积+stride

3.Unpooling 换成去卷积

演讲

教程

代码库

1.TensorFlow 实现 DCGAN:https://github.com/carpedm20/DCGAN-tensorflow
2.PyTorch 实现 DCGAN:https://github.com/pytorch/examples/tree/master/dcgan
3. 使用条件 GAN 生成动画人物:https://github.com/m516825/Conditional-GAN

论文

  1. 生成对抗网络(Generative Adversarial Networks):https://arxiv.org/abs/1406.2661)
  2. 使用深度卷积生成对抗网络的无监督表征学习)Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks):https://arxiv.org/abs/1511.06434
  3. 条件生成对抗网络(Conditional Generative Adversarial Nets):https://arxiv.org/abs/1411.1784

本文参考链接:https://sigmoidal.io/beginners-review-of-gan-architectures/
如有侵权,请作者联系我及时删除!

猜你喜欢

转载自blog.csdn.net/weixin_43088933/article/details/84026260