生成对抗网络 订阅
生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。 展开全文
生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。
信息
属    于
无监督学习方法
简    称
GAN
构    成
生成模型和判别模型
中文名
生成式对抗网络
外文名
Generative Adversarial Networks
领    域
机器学习 / 深度学习
Gan发展历史
Ian J. Goodfellow等人于2014年10月在Generative Adversarial Networks中提出了一个通过对抗过程估计生成模型的新框架。框架中同时训练两个模型:捕获数据分布的生成模型G,和估计样本来自训练数据的概率的判别模型D。G的训练程序是将D错误的概率最大化。这个框架对应一个最大值集下限的双方对抗游戏。可以证明在任意函数G和D的空间中,存在唯一的解决方案,使得G重现训练数据分布,而D=0.5。在G和D由多层感知器定义的情况下,整个系统可以用反向传播进行训练。在训练或生成样本期间,不需要任何马尔科夫链或展开的近似推理网络。实验通过对生成的样品的定性和定量评估证明了本框架的潜力 [1]  。
收起全文
精华内容
参与话题
问答
  • 生成对抗网络

    千次阅读 2017-03-29 00:13:49
    另一种是生成模型(generative model),给定输入,通过模型从而逼近数据的原始概率分布。 目前,比较有名的生成模型有: Deep RBM VAE 关于VAE,可以参考之前的博文 然而,不管是RBM还是VAE,他们本身要么是...

    1.前言

    机器学习可以分为两类模型,一种是判别模型(discrimination model),给定一个输入,模型通过判别输入的类别。另一种是生成模型(generative model),给定输入,通过模型从而逼近数据的原始概率分布。
    目前,比较有名的生成模型有:

    Deep RBM
    VAE
    关于VAE,可以参考之前的博文

    然而,不管是RBM还是VAE,他们本身要么是通过复杂的马尔科夫链进行逼近(RBM通过马尔科夫链来避免explain away),而VAE则是通过复杂的变分推断从而逼近变分下界。他们的计算都过于麻烦。而生成对抗网络最大的优点,就是避免了复杂的马尔科夫过程。

    2. 生成对抗网络

    对抗网络是一种深度学习的算法构架,和之前很火的对抗样本是两码事。
    生成对抗网络采用了真实样本与生成器之间相互博弈,达到均衡的目的来训练生成网络。整个网络包含两部分,生成器Generative,简称G,和判别网络Discrimination,简称D。
    给定数据x,设生成器的概率分布为pg,通过一个噪声的pz(z)进行控制。这样就可以通过生成器G,将z映射到一个生成的样本x,之后将生成的样本和真实图像输入判别模型D。其整个网络结构如下图所示。

    其目标函数为:

    minGmaxDV(D,G)=Epdata[logD(x)]+Epz[log(1D(G(z)))]

    在文中可以证明:

    pg=pdata

    整个算法收敛于最优解。整个优化的过程可以看做下图:
    这里写图片描述

    当训练完成后,整个判别器对于输入的样本的是否属于生成模型生成的结果的概率停留在50%。这也就达到了博弈的均衡点

    展开全文
  • 最近在研究深度学习相关的知识,看了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

     

    展开全文
  • 针对此问题,提出了一种基于生成对抗网络的热红外人脸图像生成方法,采用条件生成对抗网络结合L1损失从可见光图像中生成红外热像。在USTC-NIVE数据库上的实验结果验证了所提出的红外热像生成方法的有效性。同时,将...
  • 【深度学习】生成对抗网络Generative Adversarial Nets

    万次阅读 热门讨论 2016-08-17 19:05:51
    介绍非监督深度学习经典论文GAN(Generative Adversarial Nets)

    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)。之后对p(x)p(x)p(x)进行采样,可以生成“和训练集类似”的新样本。

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

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

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

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

    对抗网络

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

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

    训练

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

    MNIST

    生成网络
    这里写图片描述

    鉴别网络
    这里写图片描述

    CIFA-10全连

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

    鉴别网络
    这里写图片描述

    CIFA-10卷积

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

    鉴别网络
    这里写图片描述

    轮流迭代

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

    后续发展

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

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

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


    1. Pylearn2是蒙特利尔大学LISA实验室基于Theano开发的一个机器学习库。 ↩︎

    2. 不服的看这儿↩︎

    展开全文
  • 生成对抗网络GANs理解(附代码)

    万次阅读 多人点赞 2017-01-20 12:36:28
    生成模型和判别模型理解对抗网络,首先要了解生成模型和判别模型。判别模型比较好理解,就像分类一样,有一个判别界限,通过这个判别界限去区分样本。从概率角度分析就是获得样本x属于类别y的概率,是一个条件概率P...
  • 生成对抗网络——GAN(一)

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

空空如也

1 2 3 4 5 ... 20
收藏数 4,875
精华内容 1,950
关键字:

生成对抗网络