精华内容
下载资源
问答
  • 生成对抗网络和对抗神经网络_生成对抗网络简介
    2020-07-13 06:35:19

    生成对抗网络和对抗神经网络

    如果您最近一直在关注人工智能(AI)新闻媒体,则可能听说过Google的顶级AI人物之一Ian Goodfellow于三月份移居了Apple 。 Goodfellow在2017年被麻省理工学院评为35岁以下创新者之一,在2019年被外交政策杂志评为100位全球思想家之一。他还被称为机器学习概念之父,称为生成对抗网络(GAN) 。 Facebook AI主管Yann LeCun表示,GAN是“过去10年机器学习中最有趣的想法”。

    几乎每个人都知道机器学习领域现在有多热。 Google正在做机器学习。 亚马逊正在进行机器学习。 Facebook正在进行机器学习。 星球上的每个公司都想对机器学习有所作为。 美国商人,投资者(包括在《 鲨鱼坦克》真人秀中)和达拉斯小牛NBA球队的老板马克·库班(Mark Cuban)最近表示, 每个人都应该学习机器学习

    如果机器学习是我们应该学习的东西,而GAN是机器学习中最热门的想法,那么可以肯定的是,更多地了解GAN是个好主意。

    互联网上有很多有趣的文章,视频和其他学习材料可以解释GAN。 本文是GAN和一些开源项目和资源的非常入门的指南,您可以在其中扩展您对GAN和机器学习的知识。

    如果您想快速入门,我强烈建议您从斯坦福大学在YouTube上有关生成模型的讲座开始。 同样,Ian Goodfellow的原始论文“ Generative Adversarial Networks ”也可以PDF格式下载。 否则,请继续阅读一些背景信息以及其他对您有帮助的工具和资源。

    统计分类模型

    在学习GAN之前,重要的是要了解广泛用于机器学习和统计的统计分类模型之间的差异。 在统计分类中,这是一个研究领域,旨在确定一组类别中新观察结果的位置,其中有两个主要模型: 判别模型和生成模型。 判别模型属于监督学习 ,生成模型属于非监督学习。 斯坦福大学演讲的这张幻灯片解释了两者的区别:

    判别模型

    区分模型尝试根据从新项目中发现的特征识别特定新项目在类别中的位置。 例如,假设我们要创建一个非常简单的区分模型系统,该系统将给定的对话分配给特定的电影类别,在这种情况下,是否来自电影《复仇者联盟》。 这是一行示例对话:

    “他是复仇者联盟的一员,该组织将尽一切力量确保世界安全。Loki最好提防。”

    我们预先定义的“复仇者联盟”关键字组可以包括“复仇者联盟”和“ Loki”。 我们的判别模型算法将尝试匹配给定文本中与“复仇者联盟”相关的关键字,并报告在0.0到1.0之间的概率,其中接近1的数字表示最有可能来自“复仇者联盟”的对话, 接近0的数字表明事实并非如此。

    这是判别模型的一个非常简单的示例,但是您可能会明白。 您可以看到,区分模型在很大程度上取决于预定义类别的质量,但是仅作了一些假设。

    生成模型

    生成模型不是通过标记数据而是通过尝试从特定数据集中获取一些见识来工作。 如果您还记得高中时可能学过的高斯分布,则可能马上就想到了。

    Example of Gaussian Distribution

    例如,假设这是一班100名学生的期末考试成绩列表。

    • 10名学生达到80%或以上
    • 80名学生获得70%至80%
    • 10名学生的分数达到或低于70%

    根据这些数据,我们可以推断出大多数学生在70年代得分。 此洞察力基于特定数据集的统计分布。 如果我们看到其他模式,也可以收集该数据并进行其他推断。

    您可能听说过的生成模型包括高斯混合模型,贝叶斯模型,隐马尔可夫模型和变异编码器模型。 GAN也属于生成模型,但有所不同。

    GAN的模型

    GAN试图通过生成模型随机生成数据,然后使判别模型对数据进行评估并使用结果来改善下一个输出,从而将区分模型和生成模型进行组合

    这是GAN的简化视图:

    Simplified GAN model

    GAN的实际实现要比这复杂得多,但这是一个总的想法。

    理解GAN的最简单方法是考虑一个场景,其中侦探和伪造者正在玩重复性的猜谜游戏,其中伪造者试图制造100美元的钞票的伪造品,而侦探则判断每个物品是真品还是假品。 这是这种情况的假设对话:

    造假者: “这100美元看起来像真钱吗?”
    侦探: “不!那看上去根本不是一张真正的100美元钞票。”
    伪造者 (持有一种新设计):“这张100美元的钞票看起来像真钱吗?”
    侦探: “那更好,但仍不如真实。”
    伪造者 (持有设计的变体):“现在呢?”
    侦探: “那很接近,但仍然不像真实。”
    伪造者 (持有另一个变种):“这应该像真实的,对吧?”
    侦探: “是的!那非常接近!”

    好。 因此,侦探实际上是犯罪分子。 在这个例子中,伪造者是产生者,而侦探是鉴别者。 随着游戏的反复进行,伪造货币与真实货币相似的可能性可能会越来越高。

    假冒伪劣侦探示例与GAN之间的主要区别在于GAN的主要目的不是创建一个只有一个答案的100%实际输出。 相反,您可以将GAN视为某种超级创意引擎 ,它可以生成许多意外的输出,这些输出既可以使您感到惊讶,又可以满足您的好奇心和期望。

    机器学习

    在开始使用GAN之前,您需要一些有关机器学习及其背后的数学知识的背景知识。

    如果您不熟悉机器学习,则可以免费使用Goodfellow的Deep Learning教科书 ,也可以根据需要通过其网站上的Amazon链接购买印刷版。

    您还可以在YouTube上观看斯坦福大学有关用于视觉识别的卷积神经网络的讲座。

    但是,开始进行机器学习的最佳方法可能是通过大规模开放式在线课程(MOOC)上免费课程,例如:

    既然数据科学对机器学习有所帮助,请了解Kaggle ,这是最著名的数据科学家和机器学习者在线社区

    您还将希望熟悉最受欢迎的机器学习工具:

    另外,请务必查看有关机器学习的其他Opensource.com文章:

    GAN入门

    现在,我们了解了有关机器学习和GAN的一些基础知识,您可能已经准备好开始使用GAN。 首先,根据BSD 3-条款“ New”或“ Revised”许可在GitHub上访问Goodwell的原始GAN代码

    GAN也有几种变体:

    您可以使用GAN的方式

    GAN有无限可能的用例,但以下是人们尝试过的一些方法:

    您使用过GAN吗? 您还有其他资源要分享吗? 如果是这样,请在评论中留下注释。

    翻译自: https://opensource.com/article/19/4/introduction-generative-adversarial-networks

    生成对抗网络和对抗神经网络

    更多相关内容
  • 对抗神经网络.pptx

    2021-09-19 17:38:33
    对抗神经网络.pptx
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • 生成对抗神经网络matlab代码西罗网 这是提交给 ICRA 2018 的论文“SilhoNet: An RGB Method for 3D Object Pose Estimation and Grasp Planning”中 SilhoNet 的 Tensorflow 实现。该代码支持轮廓预测和 3D 方向估计...
  • GAN对抗神经网络.pdf

    2021-03-09 11:12:37
    对抗神经网络论文
  • 生成对抗神经网络matlab代码神经网络的鲁棒性 团队成员: 里查·辛格 FNU萨钦 注意:由于文件较大,我们无法上传 EMNIST 数据集 emmist-balanced.mat 文件。 这个数据集可以在链接上找到。 如果找不到,请发送电子...
  • 各种对抗神经网络(GAN)大合集
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • 生成对抗神经网络matlab代码反洗钱最终项目 团队成员: 里查·辛格 FNU萨钦 注意:由于文件较大,我们无法上传 EMNIST 数据集 emmist-balanced.mat 文件。 这个数据集可以在链接上找到。 如果找不到,请发送电子邮件...
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • GAN对抗神经网络简介

    2018-10-10 18:42:09
    GAN对抗神经网络简介,本文主要是对Generative Adversarial Networks的讲解。
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • 基于深度卷积对抗神经网络的多状态自适应+人脸识别方法.pdf
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • Python利用对抗神经网络实现根据真人头像生成动漫头像项目源码 Python利用对抗神经网络实现根据真人头像生成动漫头像项目源码 Python利用对抗神经网络实现根据真人头像生成动漫头像项目源码 Python利用对抗...
  • 资源内容为GAN对抗神经网络的各种常用变体。 项目源自Github:https://github.com/eriklindernoren/Keras-GAN 如果没有积分或者打不开的朋友可以联系邮箱:1454196320@qq.com 具体内容包括: 1.GAN(经典) 2.半监督...
  • 生成式对抗神经网络

    2019-03-20 08:44:55
    基于TensorFlow的生成式对抗神经网络实例,实际复现过,保证可以使用,入门经典代码
  • 对抗神经网络

    千次阅读 2018-08-20 11:40:28
    对抗NN简介 概念介绍 对抗名字的由来及对抗过程 对抗NN的模型 对抗NN的模型和训练 判别网络D的最优值 模拟学习高斯分布 ... 对抗网络相关论文 论文引用 一、对抗NN简介 大牛Ian J. Goodfellow 的20...

    转载于:https://blog.csdn.net/column/details/13914.html 

    • 对抗NN简介
    • 概念介绍
    • 对抗名字的由来及对抗过程
    • 对抗NN的模型
    • 对抗NN的模型和训练
    • 判别网络D的最优值
    • 模拟学习高斯分布
    • 对抗NN实验结果
    • 《生成对抗NN》代码的安装与运行
    • 对抗网络相关论文
    • 论文引用

    一、对抗NN简介

    大牛Ian J. Goodfellow 的2014年的《Generative Adversative Nets》第一次提出了对抗网络模型,短短两年的时间,这个模型在深度学习生成模型领域已经取得了不错的成果。论文提出了一个新的框架,可以利用对抗过程估计生成模型,相比之前的算法,可以认为是在无监督表示学习(Unsuperivised representation learning)上一个突破,现在主要的应用是用其生成自然图片(natural images)。

    二、概念介绍

    机器学习两个模型——生成模型和判别模型。

    • 生成模型(Generative):学习到的是对于所观察数据的联合分布 比如2-D: p(x,y).
    • 判别模型:学习到的是条件概率分布p(y|x),即学习到的是观察变量x的前提下的非观察变量的分布情况。

      通俗的说,我们想通过生成模型来从数据中学习到分布情况,来生成新的数据。比如从大量的图片中学习,然后生成一张新的Photo. 
      而对于判别模型,最经典的应用,比如监督学习,那么对于分类问题,我想知道输入x,输出y的情况,那么y的值可以理解为数据的label。

    而其中的对抗神经网络就是一个判别模型(Discriminative, D)和一个生成模型(Generative ,G)的组成的。

    三、对抗名字的由来及对抗过程

    刚才介绍了对抗网络其实是一个D和一个G组成的,那么G和D之间是如何对抗的呢? 
    先看以下一个场景:

    • D是银行的Teller
    • G是一个Crook,专门制造假币。

      那么其中的对抗过程就是,对于D来说,不断的学习,来进行真币的判断,G则是不断学习,制造更像真币的假币,来欺骗D,而最后的训练结果则是——D可以很好的区分真假币,但是G制造了“如假包换”的假币,而D分辨不出。

    而对于对抗网络来说,D和G都是一个神经网络模型——MLP,那么D(判别模型)的输出是一个常量,这个常量表示“来自真币”的可能性。而对于G的输出则是一组向量,而这个向量表示的就是”假币”。

    四、对抗NN的模型

    这里写图片描述 

    图片1

     

    图片1中的Z是G的输入,一般情况下是高斯随机分布生成的数据;其中G的输出是G(z),对于真实的数据,一般都为图片,将分布变量用X来表示。那么对于D的输出则是判断来自X的可能性,是一个常量。

    五、对抗NN的训练和优化

    对于G来说,要不断的欺骗D,那么也就是:

    max log(D(G(z)))                           目标函数1
    

    对于D来说,要不断的学习防止被D欺骗,那么也就是:

    max log(D(x)) + log(1 - D(G(z)))           目标函数2
    

    使用梯度下降法(GD)训练,那么梯度如下。

    对于目标函数1来说:

    这里写图片描述

    对于目标函数2来说:

    这里写图片描述

    训练过程

    论文[1]给出了Algorithm 1,详细内容请查看原文,就是先进行训练D,然后训练G。其中论文也给出了公式来证明算法的可收敛性。

    训练的几个trick:

    • 论文提到的dropout的使用(应该是maxout layer)
    • 每次进行多次D的训练,在进行G的训练,防止过拟合。
    • 在训练之前,可以先进行预训练。

    六、判别网络D的最优值

    将X的概率密度分布函数(pdf)定义为这里写图片描述 
    将G(Z)的pdf定义为这里写图片描述

    那么对于每一次训练,G如果固定的话,最优的输出D的值可以认为是

    这里写图片描述

    而且,最后训练的结果,是D=1/2=0.5。即此时有:

    这里写图片描述

    关于此详细证明可以查看原文。

    七、对抗NN的实验结果

    论文1用到的数据集包括,MNIST a)、TFD b)、CIFAR-10 c) d),数据集。对于不同的数据集,原文用到了不同的网络模型。

    这里写图片描述 

    图片2-实验结果

     

    模型如下。

    数据集G模型D模型
    mnistrelu+sigmoid 激活函数maxout+sigmoid
    tfd没有提到没有提到
    CIFAR-10 c)全连接+激活函数maxout+sigmoid
    CIFAR-10 d)反卷积层+激活函数maxoutconv+sigmoid

    详细模型介绍请查看开源项目中的yaml文件

    https://github.com/goodfeli/adversarial

    八、模拟学习高斯分布

    论文给出的一张图。如下:

    这里写图片描述

    • D , blue , dashed line
    • X , black , dotted line
    • G , green , solid line

    其中是通过对抗网络,让G(z)学习到x的分布,而x是符合高斯分布的,z是均匀分布。其中从(a)到(d)就是不断学习的过程,刚开始,G(z)和X的pdf是不吻合的,因为刚开始G(z)不可能一下就从随机变量中生成目标分布的数据。不过,最后,我们也可以看到(d)是最后学习到图像,其中下边两条平行线,z经过G()的映射已经和x的分布完全吻合(当然这是一个理想的情况),而且,D的输出是一条直线,就像上文提到的,D() = 1/2 一个常量。

    Tensorflow 相关代码

    (1)Discriminator’s loss

    batch=tf.Variable(0)
    obj_d=tf.reduce_mean(tf.log(D1)+tf.log(1-D2))
    opt_d=tf.train.GradientDescentOptimizer(0.01)
                  .minimize(1-obj_d,global_step=batch,var_list=theta_d)
    

    (2)Generator’s loss

    batch=tf.Variable(0)
    obj_g=tf.reduce_mean(tf.log(D2))
    opt_g=tf.train.GradientDescentOptimizer(0.01)
                  .minimize(1-obj_g,global_step=batch,var_list=theta_g)
    •  

    (3)Training Algorithms 1 , GoodFellow et al. 2014

    for i in range(TRAIN_ITERS):
        x= np.random.normal(mu,sigma,M)    
        z= np.random.random(M)      
        sess.run(opt_d, {x_node: x, z_node: z})    //先训练D 
        z= np.random.random(M)     
        sess.run(opt_g, {z_node: z})               //在训练G
    • 以上代码是Tensorflow实现的用对抗NN生成高斯分布的例子。

    九、大牛Good fellow 论文代码的安装与运行

    对抗网络的作者Goodfellow也开源了自己的代码。

    (1)项目链接

    Adversarial链接

    (2)下载与依赖库的安装

    • 项目依赖pylearn2 ,要先安装pylearn2
    • 本人git clone 了 pylearn2,adversarial 两个项目。添加了三个环境变量(根据自己路径添加)。
    export PYLEARN2_VIEWER_COMMAND="eog --new-instance"
    export PYLEARN2_DATA_PATH=/home/data
    export PYTHONPATH=/home/code
    
    • 其他python 依赖库可以通过pip或者apt-get安装。

    (3)训练和测试

    • 调用pylearn2的 train.py 和mnist.yaml进行训练。
    pylearn2/scripts/train.py ./adversarial/mnist.yaml
    • 测试如下
    • 在adversarial 目录下运行
    python show_samples_mnist_paper.py mnist.pkl
    •  

    十、对抗网络相关论文和应用

    博主做了一个开源项目,收集了对抗网络相关的paper和论文。 
    欢迎star和Contribution。

    https://github.com/zhangqianhui/AdversarialNetsPapers

    对抗NN的应用。这些应用都可以从我的开源项目中找到

    (1)论文[2]其中使用了CNN,用于图像生成,其中将D用于分类,取得了不错的效果。

    (2)论文[3]将对抗NN用在了视频帧的预测,解决了其他算法容易产生fuzzy 块等问题。

    这里写图片描述

    (3)论文[4]将对抗NN用在了图片风格化处理可视化操作应用上。

    这里写图片描述

    十一、论文引用

    [1]Generative Adversarial Networks.Goodfellow. 
    [2]Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks.Alec Radford. 
    [3]Deep multi-scale video prediction beyond mean square error.Michael Mathieu. 
    [4]Generative Visual Manipulation on the Natural Image Manifold.Jun-Yan Zhu.ECCV 2016.

    展开全文
  • 使用对抗网络,我们可以在训练过程中包括系统和理论不确定性的先验来源。 这为在逐个事件的基础上实现更可靠的事件分类铺平了道路,并为执行粒子物理数据的参数拟合提供了新颖的方法。 我们在一个示例中明确考虑了...
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • gan对抗神经网络

    2018-03-10 20:36:17
    gan对抗神经网络
  • 对抗神经网络压缩

    千次阅读 2022-01-17 20:41:12
    对抗神经网络压缩摘要 参考论文AutoGAN-Distiller: Searching to Compress Generative Adversarial Networks 代码位置 摘要         大概意思就是现在,GAN网络已经非常...


    参考论文AutoGAN-Distiller: Searching to Compress Generative Adversarial Networks
    代码位置
    !!本篇论文的图片与表格均来自上面的参考论文!!

    摘要

            大概意思就是现在,GAN网络已经非常好用了,但是它的复杂与庞大的特点,使得其很难用于计算资源限制的移动设备上。所以对于压缩GAN网络的呼声越来越高,但是目前又没有人在这个方面有很好的研究,已有的GAN压缩算法不具备普适性,即只能够压缩特定的对抗网络,而且大多需要GAN的判别器,非常不实用。然后本篇论文就是设计了一个自动的、仅需要GAN生成器参加的、能够适用于各种各样的GAN网络的压缩算法。

    我们的模型:AutoGAN-Distiller (AGD)

    模型的任务

            给定一个训练好的GAN模型G0在数据集X上,我们的目标就是找到一个G,使得G计算量少,能够适应移动设备,且没有过于牺牲G的生成质量,即G0≈G,x∈X。

    一般设计理念

            许多NAS工作(理解为自动在数据集上寻找最优的网络结构)的搜索空间为有向无环图的方式来进行搜索。这造成了许多不规则且密集的连接,通常对于硬件是不太友好的。所以,本论文采用顺序的搜素空间,在顺序的流程中,每一个独立的可搜素的模块仅仅包含单一的一个操作(cnn,relu之类的),并且他们之间是顺序连接,没有分支。

    为特定程序构建的网络

            不同的GAN任务通常会有不同的网络结构,比如说,对于常见的图像到图像的GAN任务中,图像增强更喜欢更深的网络来恢复纹理并且在像素级预测中是精确的,而风格迁移通常指较浅的架构,并且更多地关注全局样式的一致性而不是局部细节。

    图像到图像的一个例子:
    在这里插入图片描述

    风格迁移的一个例子:
    在这里插入图片描述
            对于图片转化,这篇论文继承的是CycleGAN的结构。图片中的Stem和Header部分只搜索width,而中间的红色部分既搜索width也搜索operator。
    在这里插入图片描述
            同理对于超分辨率问题,该论文继承的是SRResNet。
    在这里插入图片描述

    搜索的operator和width

    operator就下面这三种,即填充到之前的那个红色框中
    在这里插入图片描述
    width的话就有点讲究了(作者所说的width其实就是每一层的通道数)。如果和operator一样,采用组合的方式来确定width,那这必然是一个指数级的组合,探索效率必然会大幅下降,所以,该论文的作者采用子集的方式。即先定义一个最大的通道数,使得每一层都是这个最大的通道数,然后探索的过程就是选取子集。原文如下:
    在这里插入图片描述

    整个过程的伪代码

    在这里插入图片描述

    展开全文
  • 用鼠标划线可实现具体识别表达内容,包括源码和可执行文件。基于对抗神经网络的鼠标手势识别实现。
  • 1.1 对抗神经网络的基本组成 1.1.1 基本构成 对抗神经网络(即生成式对抗网络,GAN)一般由两个模型组成: 生成器模型(generator):用于合成与真实样本相差无几的模拟样本。 判别器模型(discriminator):用于判断...

    1 对抗神经简介

    1.1 对抗神经网络的基本组成

    1.1.1 基本构成

    对抗神经网络(即生成式对抗网络,GAN)一般由两个模型组成:

    • 生成器模型(generator):用于合成与真实样本相差无几的模拟样本。
    • 判别器模型(discriminator):用于判断某个样本是来自真实世界还是模拟生成的。

    1.1.2 不同模型的在GAN中的主要作用

    生成器模型的目的是,让判别器模型将合成样本当成直实样本。
    判别器模的目的是,将合成样本与真实样本区分开。

    1.1.3 独立任务

    若将两个模型放在一起同步训练,那么生成器模型生成的模拟样本会更加真实,判别器模型对样本的判断会更加精准。

    • 生成器模型可以当成生成式模型,用来独立处理生成式任务;
    • 判别器模型可以当成分类器模型,用来独立处理分类任务。

    1.2 对抗神经网络的工作流程

    1.2.1生成器模型

    生成器模型的输入是一个随机编码向量,输出是一个复杂样本(如图片)。从训练数据中产生相同分布的样本。对于输入样本x,类别标签y,在生成器模型中估计其联合概率分布,生成与输入样本x更为相似的样本。

    1.2.2 判别器模型

    根据条件概率分布区分真假样本。它的输入是一个复杂样本,输出是一个概率。这个概率用来判定输入样本是真实样本还是生成器输出的模拟样本。

    1.2.3 工作流程简介

    生成器模型与判别器模型都采用监督学习方式进行训练。二者的训练目标相反,存在对抗关系。将二者结合后,将形成如下图所示的网络结构。

    对抗神经网络结构对抗神经网络的训练方法各种各样,但其原理都是一样的,即在迭代练的优化过程中进行两个网络的优化。有的方法会在一个优化步骤中对两个网络进行优化、有的会对两个网络采取不同的优化步骤。
    经过大量的迭代训练会使生成器模型尽可能模拟出“以假乱真”的样本,而判别模型会有更精确的鉴别真伪数据的能力,从而使整个对抗神经网络最终达到所谓的纳什均衡,即判别器模型对于生成器模型输出数据的鉴别结果为50%直、50%假。

    1.3 对抗神经网络的功能

    监督学习神经网络都属于判别器模型,自编码神经网络中,编码器部分就属于一个生成器模型

    1.3.1 生成器模型的特性

    • 在应用数学和工程方面,能够有效地表征高维数据分布。
    • 在强化学习方面,作为一种技术手段有效表征强化学习模型中的状态。
    • 在半览督学习方面,能够在数据缺失的情况下训练模型、并给出相应的输出。

    1.3.2 举例

    在视频中,通过场景预测下一帧的场景,而判别器模型的输出是维度很低的判别结果和期望输出的某个预测值,无法训练出单输入多输出的模型。

    1.4 Gan模型难以训练的原因

    GAN中最终达到对抗的纳什均衡只是一个理想状态,而现实情况是,随着训练次数的增多,判别器D的效果渐好,从而总是可以将生成器G的输出与真实样本区分开。

    1.4.1 现象剖析

    因为生成器G是从低维空间向高维空间(复杂的样本空间)的映射,其生成的样本分布空间Pg难以充满整个真实样本的分布空间Pr,即两个分布完全没有重叠的部分,或者重叠的部分可忽略,这就使得判别器D可以将其分开。

    1.4.2 生成样本与真实样本重叠部分可忽略的原因

    在二维平面中,随机取两条曲线,两条曲线上的点可以代表二者的分布。要想让判别器无法分辨它们,需要两个分布融合在一起,也就是它们之间需要存在重叠的线段,然而这样的概率为0。即使它们很可能会存在交叉点,但是相比于两条曲线而言,交叉点比曲线低一个维度,也就是它只是一个点,代表不了分布情况,因此可将其忽略。

    1.4.2 原因分析

    假设先将判别器D训练得足够好,固定判别器D后再来训练生成器G,通过实验会发现G的loss值无法收敛到最小值,而是无限地接近一个特定值。这个值可以理解为模拟样本分布Pg与原始样本分布Pr两个样本分布之间的距离。对于loss值恒定(即表明生成器G的梯度为0)的情况,生成器G无法通过训练来优化自己。

    在原始GAN的训练中判别器训练得太好,生成器梯度就会逍失,生成器的lossS值降不下去;

    在原始GAN的训练中判别器训练得不好,生成器梯度不准,抖动较大。

    只有判别器训练到中间状态,才是最好的,但是这个尺度很难把握,甚至在同一轮训练的不同阶段这个状态出现的时段都不一样,这是一个完全不可控的情况。

    2 WGAN模型

    WGAN的名字源于Wasserstein GAN,Vasserstein是指Wasserstein距离,又称Earth-Mover(EM)推土机距离。

    2.1 WGAN模型的原理

    WGAN的原理是将生成的模拟样本分布Pg与原始样本分布Pr组合起来,并作为所有可能的联合分布的集合,并计算出二者的距离和距离的期望值。

    2.1.1 WGAN原理的优势

    可以通过训练模型的方式,让网络沿着其该网络所有可能的联合分布期望值的下界方向进行优化,即将两个分布的集合拉到一起。此时,原来的判别器就不再具有判别真伪的功能,而获得计算两个分布集合距离的功能。因此,将其称为评论器会更加合适。最后一层的Sigmoid函数也需要去掉(不需要将值域控制在0~1)。

    2.2 WGAN模型的实现

    使用神经网络来计算Wasserstein距离,可以让神经网络直接拟合下式:

    f(x)可以理解成神经网络的计算,让判别器实现将f(x1)与f(x2)的距离变换成x1-x2的绝对值乘以k(k≥0)。k代表函数f(x)的Lipschitz常数,这样两个分布集合的距离就可以表示成D(real)-D(G(x))的绝对值乘以k了。这个k可以理解成梯度,即在神经网络f(x)中乘以的梯度绝对值小于k。

    将上式中的k忽略,经过整理后,可以得到二者分布的距离公式:

    现在要做的就是将L当成目标来计算loss值。

    判别器D的任务是区分它们,因为希望二者距离变大,所以loss值需要取反得到:

    通过判别器D的losss值也可以看出生成器G的生成质量,即loss值越小,代表距离越近,生成的质量越高。

    生成器G用来将希望模拟样本分布Pg越来越接近原始样本分布Pr,所以需要训练让距离L最小化。因为生成器G与第一项无关,所以G的loss值口可简化为:

    2.4 WGAN的缺点

    若原始WGAN的Lipschitz限制的施加方式不对,那么使用梯度截断方式太过生硬。每当更新完一次判别器的参数之后,就应检查判别器中所有参数的绝对值有没有超过阈值,有的话就把这些参数截断回[-0.01,0.01]范围内。

    Lipschitz限制本意是当输入的样本稍微变化后,判别器给出的分数不能产生太过剧烈的变化。通过在训练过程中保证判别器的所有参数有界,可保证判别器不能对两个略微不同的样本给出天差地别的分数值,从而间接实现了Lipschitz限制。

    这种期望与判别器本身的目的相矛盾。判别器中希望loss值尽可能大,这样才能拉大真假样本间的区别,但是这种情况会导致在判别器中,通过loss值算出来的梯度会沿着loss值越来越大的方向变化,然而经过梯度截断后每一个网络参数又被独立地限制了取值范圃(如[-0.01,0.01])。这种结果会使得所有的参数要么取最大值(如0.01),要么取最小值(如-0.01)。判别器没能充分利用自身的模型能力,经过它回传给生成器的梯度也会跟着变差。

    如果判别器是一个多层网络,那么梯度截断还会导致梯度消失或者梯度“爆炸”问题。截断阀值设置得稍微低一点,那么每经过一层网络,梯度就会变小一点,多层之后就会呈指数衰减趋势。

    反之截断阔值设置得稍大,每经过一层网络,梯度变大一点,则多层之后就会呈指数爆炸趋势。在实际应用中,很难做到设合适,让生或器获得恰到好处的回传梯度。

    2.3 WGAN模型总结

    WGAN引入了Wasserstein距离,由于它相对KL散度与JS散度具有优越的平滑特性,因此理论上可以解决梯度消失问题。再利用一个参数数值范围受限的判别器神经网络实现将Wasserstein距离数学变换写成可求解的形式的最大化,可近似得到Wasserstein距离。

    在此近似最优判别器下,优化生成器使得Wasserstein距离缩小,这能有效拉近生成分布与真实分布。WGAN既解决了训练不稳定的问题,又提供了一个可靠的训练进程指标,而且该指标确实与生成样本的质量高度相关。

    在实际训练过程中,WGAN直接使用截断(clipping)的方式来防止梯度过大或过小。但这个方式太过生硬,在实际应用中仍会出现问题,所以后来产生了其升级版WGAN-gp。

    3 WGAN-gp模型(更容易训练的GAN模型)

    WGAN-gp又称为具有梯度惩罚的WGAN,是WGAN的升级版,一般可以用来全面代替WGAN。

    3.1 WGAN-gp介绍

    WGAN-gp中的gp是梯度惩罚(gradient penalty)的意思,是替换weight clipping的一种方法。通过直接设置一个额外的梯度惩罚项来实现判别器的梯度不超过k。其表达公式为:

    其中,MSE为平方差公式;X_inter为整个联合分布空间中的x取样,即梯度惩罚项gradent _penaltys为求整个联合分布空间中x对应D的梯度与k的平方差。

    3.2 WGAN-gp的原理与实现

    3.3 Tip

    • 因为要对每个样本独立地施加梯度惩罚,所以在判别器的模型架构中不能使用BN算法,因为它会引入同一个批次中不同样本的相互依赖关系。
    • 如果需要的话,那么可以选择其他归一化办法,如Layer Normalization、Weight Normalization、Instance Normalization等,这些方法不会引入样本之间的依赖。

    4 条件GAN

    条件GAN的作用是可以让GAN的生成器模型按照指定的类别生成模拟样本。

    4.1 条件GAN的实现

    条件GAN在GAN的生成器和判别器基础上各进行了一处改动;在它们的输入部分加入了一个标签向量(one_hot类型)。

    4.2 条件GAN的原理

    GAN的原理与条件变分自编码神经网络的原理一样。这种做法可以理解为给GAN增加一个条件,让网络学习图片分布时加入标签因素,这样可以按照标签的数值来生成指定的图片。

    5 带有散度的GAN——WGAN-div

    WGAN-div模型在WGAN-gp的基础上,从理论层面进行了二次深化。在WGAN-gp中,将判别器的梯度作为惩罚项加入判别器的loss值中。
    在计算判别器梯度时,为了让X_inter从整个联合分布空间的x中取样,在真假样本之间采取随机取样的方式,保证采样区间属于真假样本的过渡区域。然而,这种方案更像是一种经验方案,没有更完备的理论支撑(使用个体采样代替整体分布,而没能从整体分布层面直接解决问题)。

    3.1 WGAN-div模型的使用思路

    WGAN-div模型与WGAN-gp相比,有截然不同的使用思路:不从梯度惩罚的角度去考虑,而通过两个样本间的分布距离来实现。
    在WGAN-diⅳ模型中,引入了W散度用于度量真假样本分布之间的距离,并证明了中的W距离不是散度。这意味着WGAN-gp在训练判别器的时候,并非总会拉大两个分布间的距离,从而在理论上证明了WGAN-gp存在的缺陷一—会有训练失效的情况。
    WGAN-div模型从理论层面对WGAN进行了补充。利用WGAN-div模型的理论所实现的loss值不再需要采样过程,并且所达到的训练效果也比WGAN-gp更胜一筹。

    3.2 了解W散度

     3.3 WGAN-div的损失函数

    3.4 W散度与W距离间的关系

    展开全文
  • 生成对抗神经网络matlab代码#NeuralTalk 警告:已弃用。 您好,这段代码现在很旧且效率低下,现在已弃用。 我将它留在 Github 上用于教育目的,但如果您想运行或训练图像字幕,我强烈推荐我的新代码版本。 Neural...
  • 生成对抗神经网络matlab代码#NeuralTalk 该项目包含Python+numpy源代码,用于学习用句子描述图像的多模态循环神经网络。 这方面的工作最近出现在 a 中,并且在过去几个月里一直是研究界多篇学术论文的主题。 此代码...
  • 概念 生成式对抗神经网络是由Goodfellow第一次提出的,现在被广泛地应用于计算机视觉CV,图像处理等许多领域。 IanGoodfellow,JeanPouget-Abadie,MehdiMirza,BingXu,DavidWarde-Farley, Sherjil Ozair, Aaron ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,137
精华内容 10,454
关键字:

对抗神经网络

友情链接: grand.zip