精华内容
参与话题
问答
  • 最近在研究深度学习相关的知识,看了CNN、RNN、DNN等经典的神经网络,然后研究了一下生成模型,也就是今天要讲的生成对抗网络(GAN),打算出一个系列,毕竟关于生成对抗网络的论文太多了,github上有整理,有兴趣...

    一、简介

           最近在研究深度学习相关的知识,看了CNN、RNN、DNN等经典的神经网络,然后研究了一下生成模型,也就是今天要讲的生成对抗网络(GAN),打算出一个系列,毕竟关于生成对抗网络的论文太多了,github上有整理,有兴趣的小伙伴可以自己看看原论文顺便跑一下代码,真的很有意思。

           GAN自诞生起一直颇受赞誉,后期也衍生了很多变种,大多数只是在损失函数这一块做文章,不过也有颇多成效,GAN也有它自身的缺点,不过在WGAN以后得到了很大的改善。GAN的提出者是Goodfellow, 据说他是在喝醉了以后偶然想出来的,唉,这大概也是人与人之间的差距吧。

           GAN本质上是一个minimax游戏,它会同时训练两个神经网络G和D。G负责生成样本;D负责判断这个样本是真实的样本还是G生成的样本。G和D是分开训练的,损失函数如下:

           (不是很会使用CSDN的公式编辑器,所以暂时截图代替)

           D(x)表示x来自于真实数据的概率。z为随机噪音,为生成器提供泛化能力。

           从判别器D的角度看,它要将生成的图片判别为fake(D(x)=0),  真实的训练图片判断为real (D(x)=1);从生成器的角度看,它要让生成的图片尽可能真实,对应于上式右边第二项。

    二、原理

           GAN的网络结构图如下

     

        (这是到网上找到的图片,如果有侵权请告知我)

          生成器和判别器是分开训练的,训练生成器时,判别器参数固定,整个网络只训练生成器;训练判别器时是一样的。整个网络存在最优解,此时,D(x=fake)=1/2,说明此时判别器无法区分出生成图片和训练图片,生成器的目的已经达到。

          

          以上便是GAN的训练算法,判别器训练k轮,生成器训练1轮,交替进行训练。

    三、效果

          我利用了github上的代码,代码的结构与上述说明一致。总共训练了30000轮。我们采用了mnist数据集。

          初始生成图片如下:

          

         就是一团随机噪音而已。

         训练1000轮后:

        

           开始有了数字的模样。

           训练5000轮以后:
     

       已经很不错了。训练30000次的效果和这差不多。

    原始GAN还有如下缺点:

           1.难以训练到收敛。这个问题从训练过程中可以看出来,最后的生成器误差大概在0.6左右,之后会在此上下波动,难以达到最佳的0.5。这个和生成器的损失函数有一定关系,后续的WGAN专门针对这个问题进行了改进。

           2.图片类别无法控制。比如对于mnist数据集,能够生成0-9的数字图片,但是我如果只想生成数字0的图片呢?原始GAN是无法做到的,这个在后面的GAN版本里有改进,措施是在训练的同时加入类别标签。

           3.生成器容易崩溃。这个问题的原因是生成器可能找到某种trick,用其来欺骗判别器。此时生成的图片不再具有参考意义。

    四、总结

           以上就是GAN的基本内容了。虽然GAN还有不少问题,但还是具有重大的指导意义,后来者也提出了一系列的改进方案,由此产生了一系列的衍生版本。

           如果本文有什么问题,可以与我探讨。

     

    展开全文
  • 生成对抗网络的基本思想: 生成对抗网络中有两个模型Generator和Discriminator,生成模型可以比作counterfeiters,判别模型可以比做是police,生成模型通过自身的优化产生越来越像真钞的假币 ,而判别模型也通过对...

    生成对抗网络的基本思想:

    生成对抗网络中有两个模型Generator和Discriminator,生成模型可以比作counterfeiters,判别模型可以比做是police,生成模型通过自身的优化产生越来越像真钞的假币

    ,而判别模型也通过对自身不断的优化提高自己判别假币的能力,两者相互对抗,直到仿品不能从真品中分辨出来。

    生成模型:

    比如一个图片的生成输入是高维的vector,输出为图片

    判别模型:输入为一张图片,输出一个标量值,判别器会给来自training 数据集的image高分,而对来自generator的image一个低分值

    上图是生成对抗网络中给的图解释如下:

    蓝色是D

    黑色圆点是Pdata分布

    绿色实线是Pg

    图a中D给来自Pdata中的数据给高分,来自G的数据低分

    图b中在训练过程中迭代。

    图c中,G根据判别器给的分不断调整G使得Pg接近Pdata

    图d当当两者分布一致时,判别器没有坏掉,不起判别作用

    生成对抗网络的基本原理:

    假如x是一张图片,在这张图片内部有很多种分布,但是在上面的图片中蓝色的区域有很高的概率表示一张图片,蓝色以外的部分的分布产生的图片往往是模糊的(很低的概率),所以我们就试图找到蓝色区域的分布Pdata(x)

    但是想要找到这样的分布十分的困难,只能从Pdata中采样,然后用最大似然法不断的逼近原始分布。(生成对抗网络从一个先验的分布中采样)

    最大似然等价于最小化KL divergence衡量两个分布之间的的差异,越小说明两个分布之间的差异越小

     

     

    所以求最大似然的过程就变成求两个分布之间的divergence的问题,但是目前Pdata和Pg我们都不知道,因为Pdata可以从training数据中采样从而得到分布,但是Pg是不能从任何分布中得到的,所以我们不能事先给定一个固定的分布因为:

    假设我们的Pg只是一个高斯分布,那么其有很多的限制,我们希望Pg是一个一般化的分布,可以不是高斯,也可以是比高斯分布更复杂的分布,但是如果他比高斯更复杂,我们将不能计算他的最大似然?

    那么我们如何定义一个一般化的Pg?

    如果把generator定义成一个network则可以产生任何形式的分布:因为network内部有很多hidden layer,所以他可以产生任何的一些复杂的分布,我们就可以根据网络产生的分布和原始training数据的分布作比较。

     

    那么问题变成:怎样计算Pg和Pdata两者的Divergence?

    生成对抗网络通过Discriminator计算两者之间的divergence(为什么Disriminator可以用来用来计算两者间的divergence呢?)

    虽然我们事先都不知道Pg和Pdata的分布,但是我们可以采样:

    判别模型对于来自database的数据给高分,来自生成模型的数据给低分

     

     

    根据训练的目标函数:训练Disrimimator的过程为:将从Pdata的数据x通过D,并给其高分,将从Pg中抽取的数据x通过D并给其低分,以使得目标函数最大,Discrimimator实际上是一个二分类的分类器。

    那么为什么这样的Discriminator可以表示两个分布之间的Divergence呢?

    proof如下:

    如下图当两个分布很接近的时候,其divergence很小,而这样的两个分布中通过Discriminator的时候也很难得到小的目标函数值,如果两个分布之前相差跟大,divergence很大,Discriminator的目标函数的值也很大

    所以我们优化的D的目标函数的时候,其实就是找到使得两个分布的divergence最大的D

    找G的过程就是找使得两个分布的divergence最小的那个那个G

    所以生成对抗网络是一个极小化极大值的游戏

     

    上面讨论了通过计算Discriminator的目标函数可以得到两个分布之间的divergence,那么如何计算这个目标函数

    上图中,通过假设D(x)是任意的函数,那么input一个x,他可以输出任意的值,所以对于

    中括号的式子带不同的x再求和

    把某个x拿出来,然后找一个D,保证式子

    的值越大越好,所有不同的x分开算

     

    那么现在的问题变成怎样找到这样的D(x)?

    方法是把D(x)当做自变量,然后对其求梯度,在梯度等于0的时候找到最大的D*

    为什么又进一步说求目标函数的过程是求JS divergence?proof:

     

     

    以上证明Discrimimator实际上是求两个分布之间的divergence(JS divergence)所以在找最佳Generator的时候:

     

    等于:

    上图三条曲线的解释为:对于固定的G找到最大的V,然后对于所有的G找到使得max V最小的那个,图片中符合条件的是G3

     

    2014年生成对抗网络文章中算法的介绍:

    算法的初始化:对生成器和判别器分别给初值

     

    首先固定G对L(G)求参数:(为什么带有max的函数可以求梯度呢?)

    为什么可以对含有max的函数求梯度是可行的?

    L(G)是一个函数的集合,对其求梯度是可能的,proof如下:对每个函数,f在这一区间是做大的,则对其求梯度

     

    首先固定G然后,找到迭代找到最适合的D*,(寻找D*的过程是类似于二分类中找到最优的判别器)然后在更新G的时候用D*去当裁判

    按照上图中给定的算法步骤,能确定每次都减少Decrease JS divergence呢,实际上,不一定每次都是减少了这个值,proof如下:

    图中G2的divergence并不比G0中的小,原因在于G1并不是G2,我们在每次迭代中都改变了G,所以在实际的操作中我们是假设G是非常像的

    并且不能频繁更新G

     

    完整算法:

    总结:

    根据上述描述:

    0.对于Pdata和Pg我们事先并不知道他的分布,但是我们可以通过采样获得分布

    1.生成对抗模型包含两个网络,Generator和Disriminator,而且两个都为neural nework

    2.Generator负责生成分布,使得分布不断接近training数据的分布

    3.Disriminator负责判别数据是来自training数据还是来自generator,并给来自training的数据高分,来自generator的数据低分

    4.D的目标实际上是最大化两个分布的JS divergence

    5.算法在训过程中是先固定G然后找到最优的D,然后用这个最优的D去判别G得到新的G(D在训练过程中迭代k次,然而G不能频繁更新)

    以上图片来自2014年的文章 https://arxiv.org/abs/1406.2661

    以及李宏毅老师的课件: http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html

     

    展开全文
  • 对抗样本和对抗网络

    千次阅读 2016-08-29 10:15:29
    前言:本文转载lancezhange 的博文《对抗样本和对抗网络》,文章介绍了对抗样本的概念和相关文献,并且进一步介绍了生成式对抗网络(Generative Adversarial Nets, GAN)。  所谓对抗 样本是指将实际样本略加...

    前言:本文转载lancezhange 的博文《对抗样本和对抗网络》,文章介绍了对抗样本的概念和相关文献,并且进一步介绍了生成式对抗网络(Generative Adversarial Nets, GAN)。

        所谓对抗 样本是指将实际样本略加扰动而构造出的合成样本,对该样本,分类器非常容易将其类别判错,这意味着光滑性假设(相似的样本应该以很高的概率被判为同一类别)某种程度上被推翻了。

        Intriguing properties of neural networks, by Christian Szegedy at Google, et al,2014. 这篇论文应该是最早提出对抗样本概念的。论文指出,包括卷积神经网络在内的深度学习模型在对抗样本面前都十分脆弱,从而将矛头直指深度学习,似乎要为深度学习热潮降一降温。

        Deep Neural Networks are Easily Fooled: High Confidence Predictions for Unrecognizable Images, by Nguyen A, et al, CVPR 15一文更是发现,面对一些人类完全无法识别的样本(论文中称为 Fooling Examples),深度学习模型居然会以高置信度将它们进行分类,例如将噪声识别为狮子。这意味着这些模型很容易被愚弄,例如垃圾邮件发送者可能利用对抗样本来骗过垃圾邮件识别系统,目下依赖人脸验证的人脸支付等新潮科技也将面临巨大风险。当然了,只要谷歌不公开他们的垃圾邮件过滤模型的架构,骗子们似乎也无法针对它大规模制造对抗样本,所以我们不用过分紧张,把模型藏好就可以了。然而,可怕的是,在不同训练子集上用不同的架构学习的不同的模型,居然能够被同一套对抗样本愚弄!这意味着骗子们可以自己训练出一个模型,并在此模型上找到一组对抗样本之后就能通吃其他模型了,想想还真是可怕。

        那么,对抗样本只是我们的模型照顾不到的一小部分法外之地吗?论文 Exploring the Space of Adversarial Images(ICLR 2016, under review)(代码在这里)给出了否定的答案,至少在图像空间中,对抗图片绝非孤立点,而是占据了很大一部分空间!

        这些研究的提出,一方面促使人们更深入思考机器和人的视觉的真正差异所在,一方面,加上深度模型本身具有的不可解释性缺陷,也让一些人开始认为深度学习不是deep learning, 而是deep flaw.对深度学习来说,这多少是不公平的指责,因为 kdnuggets上的一篇文章(Deep Learning’s Deep Flaws)’s Deep Flaws, by Zachary Chase Lipton指出,深度学习对于对抗样本的脆弱性并不是深度学习所独有的,事实上,这在很多机器学习模型中都普遍存在(Box 大人不就说吗,all models are wrong, but some are useful),而深度学习反而可能是目前为止对对抗训练最有抵抗性的技术。这篇文章吸引了包括 Bengio 大牛、Ian Goodfellow 等在内的许多人的热烈讨论,Ian Goodfellow(八卦一下,Ian Goodfellow 是 Bengio 的高徒,目前任职于谷歌,是对抗网络方面的大牛)更是结合这些评论和自己的工作,写了另外一篇文章: Deep Learning Adversarial Examples – Clarifying Misconceptions,中文翻译在此:深度学习对抗样本的八个误解与事实

        那么,导致深度模型对反抗样本力不从心的真实原因有哪些呢?一般我们知道,可能是模型过拟合导致泛化能力不够,泛化能力不够可能是由于模型均化不足或者正则不足,然而,通过更多模型均化和加入更多噪声训练等方式来应对对抗样本的企图均告失败。另外一个猜测是模型的高度非线性,深度模型动辄千百万的参数个数确实让人有点不太舒服(冯诺依曼不就说吗,给他四个参数,他就能模拟大象,五个参数,大象就能摇尾巴了(还真有人写论文探讨如何模拟大象,参见Drawing an elephant with four complext parameters)),但 Ian Goodfellow 在论文 explaining and harnessing adversarial examples, ICLR 2015 中,通过在一个线性模型中加入对抗干扰,发现只要线性模型的输入拥有足够的维度(事实上大部分情况下,模型输入的维度都比较大,因为维度过小的输入会导致模型的准确率过低,即欠拟合),线性模型也对对抗样本表现出明显的脆弱性,这驳斥了关于对抗样本是因为模型的高度非线性的解释。事实上,该文指出,高维空间中的线性性就足以造成对抗样本,深度模型对对抗样本的无力最主要的还是由于其线性部分的存在(primary cause of neural networks’ vulnerability to adversarial perturbation is their linear nature)。

        毫无疑问,对抗样本带来了对深度学习的质疑(如果能借此灭一灭深度学习的虚火,也是好的,现在相关领域的论文,无深度,不论文,灌水的太多,随便改一改模型的架构,调一调参数就能发表,结果好了也不知道好的原因 —- 吐槽完毕),但其实这也提供了一个修正深度模型的机会,因为我们可以反过来利用对抗样本来提高模型的抗干扰能力,因此有了对抗训练(adversarial training) 的概念。通过对抗训练,相当于加上了一种形式的正则,可以提高模型的鲁棒性。

        随着对对抗样本的更多更深入研究,人们逐渐发现,对抗样本并不是诅咒,而是祝福,因为可以利用对抗样本生成对抗网络(GANs)。Generative Adversarial Networks, by Ian Goodfellow, et al, 最早提出了 GANs 的概念。在 GANs 中,包含一个生成模型G和一个判别模型D,D要判别样本是来自G还是真实数据集,而G的目标是生成能够骗过D的对抗样本,可以将G看做假币生产者,而D就是警察,通过G和D的不断交手,彼此的技能都会逐渐提高,最终使得G生产的假币能够以假乱真。
        受此启发,Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks, by Emily Denton, et al通过为拉普拉斯金字塔中的每一个尺度建立一个生成模型,使得最终生成的图片与自然图片达到肉眼无法区分的地步,代码参见项目eyescream 。还有人用 GANs 生成猫脸的图片,也有人用它生成人脸,GANs 真是简直要被玩坏了。进一步,Conditional generative adversarial nets for convolutional face generationby Jon Gauthier提出了条件生成对抗网络。文中给出了一个将人脸老化并加上笑容的例子:



    展开全文
  • 生成对抗网络简介

    千次阅读 2017-06-19 19:57:49
    之前,我们已经有一篇关于生成对抗网络的简介(Generative Adversarial Networks 生成对抗网络的简单理解),配合之前使用TensorFlow搭建深度神经网络(TFboys:使用Tensorflow搭建深层网络分类器)

    原文详情:http://www.datalearner.com/blog/1051494816250033

    本文是Aylien上的一篇博客。之前,我们已经有一篇关于生成对抗网络的简介(Generative Adversarial Networks 生成对抗网络的简单理解),配合之前使用TensorFlow搭建深度神经网络(TFboys:使用Tensorflow搭建深层网络分类器),对于本篇博客的理解将更加容易。


    最近,大家对生成模型的兴趣又开始出现(OpenAI关于生成模型的案例)。生成模型可以学习如何生成数据,这些数据和我们给定的数据很类似(真实数据)。我们用一个例子来描述这背后的原理,比如,我们希望构建一个模型,可以生成高质量的新闻,那么它必须先学习很多的新闻文章。或者说,模型的内部应当有一个很好的关于新闻文档的表示方式。我们希望用这个表示方式来帮助我们完成相关的任务,比如通过主题给新闻进行分类。

    事实上,训练这样的一个模型并不容易,但是最近几年,此类研究进展很大。其中一个非常有名的模型就是生成对抗网络(Generative Adversarial Networks, GANs)。Facebook著名的AI研究院院长和深度学习研究专家Yann LeCun,最近将GANs称为深度学习中最为重要的发展:

    “There are many interesting recent development in deep learning…The most important one, in my opinion, is adversarial training (also called GAN for Generative Adversarial Networks). This, and the variations that are now being proposed is the most interesting idea in the last 10 years in ML, in my opinion.” – Yann LeCun

    这篇博客剩下的部分就来详细描述GAN的形成,并提供一个非常简单的示例(包含一个TensorFlow代码),使用GAN来解决一个小问题。

    判别模型 vs. 生成模型

    GAN是一个非常有趣的想法,它首先由University of Montreal的Ian Goodfellow(现在在OpenAI)在2014年提出的。GAN背后的想法包含两个竞争性的神经网络模型。其中一个将噪音作为输入,并产生一些样本(生成器)。另一个模型(判别器)则同时接受生成器生成的数据和真实的数据,并分别出它们的来源。这两个网络坐连续的博弈,其中生成器会生成的数据应当与真实数据越来越像,而判别器则逐渐具有更好的判别能力。这两个神经网络同时训练,并最终使得生成模型生成的数据与真实数据几乎没有差异。

    在这里,经常可以看到生成器一般被类比为伪造者尝试生产假币,而判别器被当作是警察,尝试甄别出假币。这个设定和增强学习有点像,生成器会从判别器那里接受到一个奖励信号,可以知道它生成的数据是否正确。但是增强学习和GAN最大的区别是我们可以从判别模型到生成模型反向传播梯度信息。所以生成器知道如何调整参数以更好的生成数据并骗过判别器。

    目前,GANs主要运用在自然图像的建模中。他们可以完成非常棒的图像生成任务。他们可以生成比其它用极大似然作为训练目标的模型更锐利的图像。如下图,是GANs产生的一些图像示例:


    Generated bedrooms. Source: “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks” https://arxiv.org/abs/1511.06434v2


    Generated CIFAR-10 samples. Source: “Improved Techniques for Training GANs” https://arxiv.org/abs/1606.03498

    剩余内容请见:http://www.datalearner.com/blog/1051494816250033

    展开全文
  • 生成对抗网络和对抗神经网络 如果您最近一直在关注人工智能(AI)新闻媒体,则可能听说过Google的顶级AI人物之一Ian Goodfellow于三月份移居了Apple 。 Goodfellow在2017年被麻省理工学院评为35岁以下创新者之一,在...
  • 对抗样本与生成式对抗网络

    千次阅读 2017-05-31 15:56:53
    对抗样本和对抗网络,从最开始YannLeCun在Quora上直播时表示生成对抗网络是近期人工智能最值得期待的算法之一,到生成对抗网络的发明者IanGoodfellow在Quora上直播讲述自己的学习经历和研究,成了人工智能领域...
  • TensorFlow 人脸识别网络与对抗网络搭建

    万次阅读 热门讨论 2017-11-16 00:00:00
    人脸识别网络与对抗网络搭建」,「阅读原文」查看交流实录 「文末高能」 编辑 | 嘉仔 写在前面的话 本次文章坑挖的有些大,有些很不好写,想了想其实人脸识别网络大约也是一个简单的前馈神经网络。 但是...
  • 深度卷积对抗生成网络(DCGAN)

    万次阅读 2016-12-25 20:31:35
    卷积神经网络在有监督学习中的各项任务上都有很好的表现,但在无监督学习领域,却比较少。本文介绍的算法将有监督学习中的CNN和无监督学习中的GAN结合到了一起。
  • 生成对抗网络GANs理解(附代码)

    万次阅读 多人点赞 2017-01-20 12:36:28
    对抗网络是14年Goodfellow Ian在论文Generative Adversarial Nets中提出来的。 记录下自己的理解,日后忘记了也能用于复习。生成模型和判别模型理解对抗网络,首先要了解生成模型和判别模型。判别模型比较好理解,...
  • 生成对抗网络——GAN(一)

    万次阅读 多人点赞 2018-07-30 23:38:08
    Generative adversarial network 据有关媒体统计:CVPR2018的论文里,有三分之一的论文与GAN有关!...生成对抗网络GAN,是当今的一大热门研究方向。在2014年,被Goodfellow大神提出来,当时的G...
  • 深度学习之对抗网络

    千次阅读 2017-03-02 22:37:35
     对抗网络 是个新词,全名叫 生成式对抗网络(Generative adversarial nets),就像深度学习一样,发明时间并不长。  Ian Goodfellow(生成对抗性网络的发明者)定义了 对抗网络;  Yann LeCun(三巨头之一)在...
  • 小说生成对抗网络GANs

    2017-07-14 11:57:06
    自从 Ian Goodfellow 在2014 年发表 论文 Generative Adversarial Nets 以来,生成式对抗网络 GAN 广受关注,加上学界大牛 Yann Lecun 在 Quora 答疑时曾说,他最激动的深度学习进展是生成式对抗网络,这使得 GAN ...
  • 对抗样本和对抗生成网络demo,包括一个简单的tensorflow编写的gan网络
  • 基于生成对抗网络的对抗样本攻击方法,田宇,刘建毅,随着深度学习技术的广泛应用,深度学习安全问题也逐渐引起人们关注,其中,对抗样本攻击是深度学习在安全领域中的热点。如何对深
  • 对抗网络提出的背景就是,深度学习出现了绊脚石:对抗样本;深度网络不能解决对抗样本带来的问题,降低深度模型实际的应用价值;  图1 对抗样本的定义 正如图1右边展示的那样,当对熊猫数据加上一定...
  • 生成对抗网络

    千次阅读 2017-03-29 00:13:49
    1.前言机器学习可以分为两类模型,一种是判别模型(discrimination model),给定一个输入,模型通过判别输入的类别。另一种是生成模型(generative model),给定输入,通过模型从而逼近数据的原始概率分布。...
  • 生成对抗网络模型

    2018-12-26 16:11:33
    生成对抗网络GAN网络的原理,进展,方向。综述的比较详细了
  • 条件对抗网络

    2017-09-08 09:22:59
    转载:http://blog.csdn.net/hjimce/article/details/54407981

空空如也

1 2 3 4 5 ... 20
收藏数 19,206
精华内容 7,682
关键字:

对抗