精华内容
下载资源
问答
  • GAN(生成对抗网络) 解释

    千次阅读 2019-12-20 11:40:57
    GAN (生成对抗网络)是近几年深度学习中一个比较热门的研究方向,它的变种有上千种。 1.什么是GAN GAN的英文全称是Generative Adversarial Network,中文名是生成对抗网络。它由两个部分组成,生成器和鉴别器(又称...

    GAN (生成对抗网络)是近几年深度学习中一个比较热门的研究方向,它的变种有上千种。

    1.什么是GAN

    GAN的英文全称是Generative Adversarial Network,中文名是生成对抗网络。它由两个部分组成,生成器和鉴别器(又称判别器),它们之间的关系可以用竞争或敌对关系来描述。

    我们可以拿捕食者与被捕食者之间的例子来类似说明两者之间的关系。在生物进化的过程中,被捕食者会慢慢演化自己的特征,使自己越来越不容易被捕食者识别捕捉到,从而达到欺骗捕食者的目的;与此同时,捕食者也会随着被捕食者的演化来演化自己对被捕食者的识别,使自己越来越容易识别捕捉到捕食者。这样就可以达到两者共同进化的目的。生成器代表的是被捕食者,鉴别器代表的是捕食者。

    2.GAN的原理

    GAN的工作原理与上述例子还有略微的不同,GAN是已经知道最终鉴别的目标是什么,但不知道假目标是什么,它会对生成器所产生的假目标做惩罚并对真目标进行奖励,这样鉴别器就知道了不好的假目标与好的真目标具体是什么。生成器则是希望通过进化,产生比上一次更好的假目标,使鉴别器对自己的惩罚更小。以上是一个循环,在下一个循环中鉴别器通过学习上一个循环进化出的假目标和真目标,再次进化对假目标的惩罚,同时生成器再次进化,直到与真目标一致,结束进化。

    GAN简单代码实现

    #是一个卷积神经网络,变量名是D,其中一层构造方式如下。
    w = tf.get_variable('w', [4, 4, c_dim, num_filter], 
    initializer=tf.truncated_normal_initializer(stddev=stddev))
    dconv = tf.nn.conv2d(ddata, w, strides=[1, 2, 2, 1], padding='SAME')
    biases = tf.get_variable('biases', [num_filter], 
            initializer=tf.constant_initializer(0.0))
    bias = tf.nn.bias_add(dconv, biases)
    dconv1 = tf.maximum(bias, leak*bias)
    
    #是一个逆卷积神经网络,变量名是G,其中一层构造方式如下。
    w = tf.get_variable('w', [4, 4, num_filter, num_filter*2], 
            initializer=tf.random_normal_initializer(stddev=stddev))
    deconv = tf.nn.conv2d_transpose(gconv2, w, 
            output_shape=[batch_size, s2, s2, num_filter], 
            strides=[1, 2, 2, 1])
    biases = tf.get_variable('biases', [num_filter],
    initializer=tf.constant_initializer(0.0))
    bias = tf.nn.bias_add(deconv, biases)
    deconv1 = tf.nn.relu(bias, name=scope.name)
    
    #的网络输入为一个维服从-1~1均匀分布的随机变量,这里取的是100.
    batch_z = np.random.uniform(-1, 1, [config.batch_size, self.z_dim])
                    .astype(np.float32)
    #的网络输入是一个batch的64*64的图片,
    #既可以是手写体数据也可以是的一个batch的输出。
    
    #这个过程可以参考上图的a状态,判别曲线处于不够稳定的状态,
    #两个网络都还没训练好。
    
    #训练判别网络
    #判别网络的损失函数由两部分组成,一部分是真实数据判别为1的损失,一部分是的输出self.G#判别为0的损失,需要优化的损失函数定义如下。
    
    self.G = self.generator(self.z)
    self.D, self.D_logits = self.discriminator(self.images)
    self.D_, self.D_logits_ = self.discriminator(self.G, reuse=True)
    self.d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
                self.D_logits, tf.ones_like(self.D)))
    self.d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
                self.D_logits_, tf.zeros_like(self.D_)))
    self.d_loss = self.d_loss_real + self.d_loss_fake
    
    #然后将一个batch的真实数据batch_images,和随机变量batch_z当做输入,执行session更新的参数。
    ##### update discriminator on real
    d_optim = tf.train.AdamOptimizer(FLAGS.learning_rate, 
            beta1=FLAGS.beta1).minimize(d_loss, var_list=d_vars)
    ...
    out1 = sess.run([d_optim], feed_dict={real_images: batch_images, 
            noise_images: batch_z})
            
    #这一步可以对比图b,判别曲线渐渐趋于平稳。
    #训练生成网络
    #生成网络并没有一个独立的目标函数,它更新网络的梯度来源是判别网络对伪造图片求的梯度,
    #并且是在设定伪造图片的label是1的情况下,保持判别网络不变,
    #那么判别网络对伪造图片的梯度就是向着真实图片变化的方向。
    
    self.g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(
                self.D_logits_, tf.ones_like(self.D_)))
    #然后用同样的随机变量batch_z当做输入更新
    
    g_optim = tf.train.AdamOptimizer(config.learning_rate, beta1=config.beta1) 
                .minimize(self.g_loss, var_list=self.g_vars)
    out2 = sess.run([g_optim], feed_dict={noise_images:batch_z})
    

    参考资料:
    link1
    link2

    展开全文
  • 对抗样本与对抗训练

    万次阅读 多人点赞 2016-12-07 11:03:28
    本文将会介绍对抗样本与对抗训练的相关知识(请将此对抗训练与Ian Goodfellow的生成对抗网络区别开来)。综合Ian Goodfelow在Burkeley CS 294-131的deeplearning topic上面的讲义,我将从以下几个方面介绍: 什么是...

    (本文讨论仅限个人观点,因为我见解有限,错误难免(我也可能不定时更新想法),欢迎和我讨论jsxiejp@163.com)
    本文将会介绍对抗样本与对抗训练的相关知识(请将此对抗训练与Ian Goodfellow的生成对抗网络区别开来)。综合Ian Goodfelow在Berkeley CS 294-131的deeplearning topic上面的讲义,我将从以下几个方面介绍:

    • 什么是对抗样本?
    • 它们是怎么出现的?
    • 它们是怎么危害到机器学习系统?
    • 有什么办法防范?
    • 怎样使用对抗样本训练机器学习?

    由于本人的研究方向并非是神经网络,或者机器学习,所以对相关related work没有系统的调研,仅限于读过的几篇文章,浅尝辄止,有兴趣的读者可以参考论文原文。

    1、什么是对抗样本?

    自从2013年以来,深度的神经网络模型在各方面得到了广泛应用,甚至在某些方面达到可以匹配人类的性能,比如人脸识别,最高已经可以达到99.5%的识别率,代表产品有face++等。然而Christian Szegedy等人在2014年发表一篇文章:Intriguing properties of neural networks。这篇文章介绍了关于神经网络一个有趣的现象,即神经网络学习到的那个函数是不连续的!只需要在一张图片上做微小的扰动,就能让图片以很高的置信度被错误分类,甚至能让图片被分类一个指定的标签(不是图片正确所属的标签)。这对图片分类系统无疑是危害巨大!试想在支付宝这样使用人脸识别的应用中,攻击者可以轻轻松松伪装成“马云”会怎么样,呵呵。我们把这种攻击方式叫做“adversarial example”。其实在机器学习领域中,对抗样本的问题并不是第一次提到。Biggo等人在Evasion attacks against machine learning at test time这篇文章里就介绍过。他们给潜在的“敌人(adversary)”定义了一个模型“Adversary model”。一个敌对模型包括adversary goal, adversary knowledge和adversary capability等几个方面:

    • adversary goal(攻击目标): 分为两种目标,一是能够分类为好的即可(在垃圾邮件检测中,指分类为好的邮件)。如果有一个函数g定义在样本空间中X,g(x)<0表示分类为好,那么敌人的目标就是设计一个样本x*,让g(x*)<0。这种攻击很容易破解,只要调整分类界限即可(这里指g(x)=0这条边界)。所以,其实攻击者还有一个更好的目标是让g(x)尽可能小。

    • adversary knowledge: 敌人对机器学习训练系统的知识包括:

      • 训练集是什么
      • 样本的特征表示
      • 学习算法是什么,决策函数是什么
      • 分类模型是什么,比如线性分类器的权重
      • 分类器的反馈

    显然敌人拥有什么样的知识对系统的危害程度会不一样。
    - adversary capability: 敌人的能力,包括:
    - 修改输入数据
    - 修改特征向量
    - 修改某个制定的特征
    显然敌人的能力不同,攻击的危害也不同。
    建立在上面模型中的敌人(或者叫对抗者,攻击者)就是试图寻找对抗样本来误导分类器。

    2、它们是怎么出现的?

    那么作为一个攻击方,怎么依赖他拥有的知识来做攻击(即混淆分类器)呢?
    Biggo和Szegedy都提出了类似的攻击策略,基于最优化的方法,Biggo的攻击策略如下:

    x=argmaxxg^(x),s.t.d(x,x0)dmax

    它是说我们想找一个对抗样本x,使它尽可能被分类为好,并且与某个原来的样本 x0 在样本空间里还很接近(距离小于 dmax )。
    Szegedy的攻击策略为:
    Minimize||r||2,subject to:1. f(x+r)=l,2. x+r[0,1]m

    它是说对于给定的某个样本x,怎么找离它最近的样本,使得被分类为标签 l .
    这里不再赘述优化问题该怎么解,常用的方法有梯度下降,或者牛顿法,BFGS,L-BFGS. 上述两个优化问题分别使用梯度下降法和L-BFGS来解决。这两篇文章的实验细节我们也不再举例,我们只看一下结果。Biggo的实验学术味更浓,Szegedy的实验则很直观了,他们的实验显示,给定一张图片,加一个微小扰动使它被错误的分类为某个指定标签。
    Szegedy
    上面每副图片的左侧是真实的图片,中间是加的噪音(就是优化问题中的r),右边是生成的对抗样本图片。很好笑的是,6张对抗样本全部被错分类为了鸵鸟!!
    所以,这里已经解决了怎么找对抗样本的问题,但是没有深入到问题的本质,为什么能够找到?能找到我们不意外,因为我们总可以在原来的图片上“动手术”,让他改成我们要的样子,但是Szegedy的实验很出人意料,因为结果显示其实只需要很微小的扰动就能随意改变分类的标签,这又是为什么?
    下面我们再继续讨论,首先先看goodfellow是怎么总结现有结论的:

    • 使用Box-constrained L-BFGS能够找到对抗样本
    • 在ImageNet这样的数据集里,对抗样本和原始样本的差别非常小,人眼不可分别
    • 同样的对抗样本,会同时被不同的分类器错误分类,哪怕他们使用了不同的训练集
    • 浅层的softmax回归模型对对抗样本也很脆弱
    • 在对抗样本上训练能够正则化模型,但是代价高昂,因为训练集不容易获得。

    注意最后一条,大家可能在想,我们手动生成对抗样本喂给分类器学习不就完了吗,但是效果并不好,因为对抗样本的生成比较expensive。如果我们能知道对抗样本产生的原因,也许能更轻松的制造对抗样本,从而训练。
    在这些结论基础上,我们开始学习Ian Goodfellow的这篇文章,Explaining and Harnessing Adversarial Examples.
    对抗样本产生的原因仍然不是特别清楚,有人怀疑是因为深度神经网络模型的非线性性,也许再加上不充分的模型平均和不充分的正则化(即过拟合)。G认为这些猜测都是不必要的,相反,他认为模型在高维空间中的线性性是对抗样本存在的罪魁祸首!!!
    举个例子,下面从一个线性模型入手,来解释对抗样本的存在性问题。
    在很多问题当中,一个输入的特征的取值精度通常是有限制的,这就意味着当在特征的取值上做一个微小的扰动(在精度范围内),分类器不应该返回不同的结果。比如我们现在有一个样本x和一个对抗输入 x~=x+η ,当 η 足够小的时候,分类器对 x x~的响应应该要一样的。考虑一个权值向量 ω,

    ωx~=ωx+ωη.
    对抗扰动使得激发增长了 ωη . 显然,我们可以让 η=sign(ω) 来使激发增长最大。如果 ω n 个维度,如果在每个维度上增加m,那么激发可以增加 ϵmn 。因为 ||η|| 与维度无关,而激发增加量随维度线性增长,那么在高维问题中,我们可以很大程度改变输出,但是在输入上只需要做极小的改动!这个例子说明,如果维度足够的话,一个简单的线性模型同样存在对抗样本的问题。过去对对抗样本的那些牵扯到神经网络的性质的解释,比如误认他们具有高度的非线性性,可能都不对。Ian基于线性性的假设更简单,并且能够解释softmax回归也对对抗样本很脆弱的事实。 因此,基于线性性,对抗样本很容易生成。Ian假设神经网络同样是因为太“线性”而不能抵抗对抗样本。LSTMs, ReLUs, 和maxout网络都设计得很“线性”,所以他们很容易被利用。我们可以想象一个具有高度线性性的网络训练出来的函数,它的高阶导数近似于0,Taylor展开以后占主导作用的是线性部分,所以可以类比为线性分类器。线性性意味着线性模型上面的微小扰动同样能够破坏神经网络。假设有一个模型,它的参数是 θ ,输入是 x y x 的目标,J(θ,x,y)是神经网络的损失函数。在目前的 θ 值,局部上可以将函数近似为线性,使用线性模型的攻击方法,我们得到一个最优的扰动
    η=ϵsign(xJ(θ,x,y)),

    这种方法称为生成对抗模型的快速梯度符号法,梯度可以通过反向传播算法(backpropagation)计算获得。

    3、它们是怎么危害到机器学习系统?

    讲到这里,有的人可能云里雾里了。如果我们有两张图片,人眼看上去一模一样,都是一间房子,但是cnn把一张分类为房子,一张分类为鸵鸟,这种分类器还有什么用啊。如果我们的模型随随便便就被欺骗,还能被投入使用吗,那那些研究不成了纸上谈兵了吗。但仔细看的人可能会说,不要慌。呵呵,确实,我们回过头去看,对抗样本是怎么找到的。即使是Ian的方法,都需要知道梯度怎么求,可是攻击者怎么知道我的模型是什么样子呢,换句话说,他不会求梯度生成对抗样本啊!
    可惜,对抗样本还有一个重要性质,叫做Transferability,转移性。什么意思呢,就是我在我的模型上找到一个对抗样本,放到别人的模型上,居然也有效。而且我通过我的模型把房子分类成鸵鸟,别人的模型很多时候居然也分类成了鸵鸟。。。这个可以称作灾难了,最后的堡垒也被攻破了,我们再怎么隐藏模型的细节,也可能会被攻击。(引用:Transferability in Machine Learning: from Phenomena to Black-Box Attacks using Adversarial Samples)
    先等一下,我们再好好思考一下对抗样本的问题:有一张图片(房子),加了噪音,变成了鸵鸟。首先我们不用担心的是,这个噪音很难找,不是任意一个随机的噪音都能让原来图片被误分类。在线性模型中,在一张227*227图片的每个像素里做随机扰动,他们基本上都能抵消,即使不抵消,余下的也很少,而且扰动的方向不一定沿着梯度的负梯度符号方向,所以我们不担心这种情况。
    再回来,现在的分类器,正确率都特别高,softmax,cnn在mnist上面都有90%以上的正确率。这些分类器基本上都接近了分类的正确准则,他们差不多是等价的。这里说的很悬,我的意思是说,cnn和线性分类器很像,他们对输入的图片所做的操作,变换,最终结果都是线性的变换。而一张精心制作的对抗样本,是在负梯度符号方向上做微小扰动,而大部分的分类模型都有很高的线性性,他们对这种对抗策略应该是一样脆弱。

    4、有什么办法防范?

    参见下一节

    5、怎样使用对抗样本训练机器学习?

    以最简单的logistic regression为例。如果我们要训练一个模型来识别标签 y{1,1} , P(y=1)=σ(wx+b) ,其中 σ 为sigmoid函数,然后在

    Ex,ypdataζ(y(wx+b))

    上作梯度下降,其中 ζ(x)=log(1+exp(z)) 是softplus函数。下面将 x 代替为x上面的线性扰动,推到出的解析式为
    Ex,ypdataζ(y(ϵ||w||1wxb)).

    这类似于 L1 正则化,但不同的是, L1 罚项是从激发中减去,而不是加到损失函数中。这样的坏处是会恶化欠拟合的情况。下图是Ian的解释原文: 这里写图片描述

    需要注意的是,这里对于损失函数的估计过于悲观。在softmax回归中,很难找到一个扰动,让他在每个标签的梯度上都达到最坏(即与他们的符号相反),因此我们有必要减少 ϵ
    Szegedy的文章Intriguing properties of neural networks表明将对抗样本和普通样本一起给模型训练能够使模型稍微正则化。训练对抗样本和普通的数据增加不一样:通常我们通过对数据进行变形来增加数据,这样变形后的数据是可能出现在测试集里的。而对抗样本这种数据通常不可能自然地出现在测试集中,但是它们可以揭露出模型的缺陷。增加对抗样本来训练并没有显著提高性能,有可能是因为实验样本不太够(Szegedy那篇文章使用expensive的L-BFGS来寻找对抗样本)。
    Ian发现使用对抗目标函数(基于快速梯度符号法)能够有效正则化模型:

    J~(θ,x,y)=αJ(θ,x,y)+(1α)J(θ,x+ϵsign(xJ(θ,x,y)).

    用这个方法来训练dropout网络,能够使错误率从0.94%降到0.84%。Ian发现训练集上的错误率并没有下降到0,作者做了两个改变,首先使网络更大,将每一层网络的节点从240增加到1600。如果没有对抗训练这可能会导致过拟合,此时测试集上错误率有1.14%。原来的maxout网络中验证集上错误率会平坦下降,但速度很慢,而对抗验证集不是,因此在对抗验证集上使用早停法。
    对抗训练的过程可以看做当数据被恶意扰动的时候,最小化最差情况的错误率。我在intel实习的一次组会上介绍过对抗训练,当时我提到使用正则化能有效降低对抗样本的错误分类率,有同事发出质疑:
    Q.正则化以后的实验是不是仍然用同样的对抗样本,如果是,那就没有意义,因为模型参数改变了,对抗样本理应重新找。如果不是,那很难理解,因为模型的线性性并没有改变,仍然可以找到对抗样本,没有理由错误率会降低。
    我的回答是:
    A.在论文原文里面作者是这样描述的:
    “The model also became somewhat resistant to adversarial examples. Recall that without adversarial training, this same kind of model had an error rate of 89.4% on adversarial examples based on the fast gradient sign method. With adversarial training, the error rate fell to 17.9%.”
    所以对于上面那个问题,我倾向于后者,也就是作者针对新模型,使用了Fast gradient sign method方法重新生成一批新的对抗样本。那为什么线性性没有改变,错误率能降低这么多呢。我觉得有一种可能解释是对于strong的正则化,模型(比如说线性模型)的weight会变得比较低。记得我们举过的例子,对线性模型,精心设计的对抗样本能使模型的activation改变大约 ϵmn ,这里的\epsilon是样本允许的波动范围,是固定的,m是平均的weight,当m很小的时候,对activation的扰动 ϵmn 会很小,从而对分类的影响比较小。所以,这里问题的关键变成了为什么strong的正则化会使weight降低。还记得在cost function里面加的正则化,是对样本的扰动进行惩罚,而高weight会使样本的扰动更大,那训练的时候模型显然会自然的降低weight来减少cost function的值。所以strong的正则化会使weight降低。 *

    展开全文
  • 使用PyTorch生成对抗式模仿学习 该存储库用于使用PyTorch的生成对抗模拟学习(GAIL)的简单实现。 该实现基于原始的GAIL论文()和我的Reinforcement Learning Collection存储库()。 在此存储库中,诸如CartPole-...
  • 但是本文提出这些算法对于对抗样本脆弱性的主要原因正是在于它们线性的本质。并通过定量分析来解释Adversarial Example在不同架构不同数据集能够work的原因。并以此提出一种快速产生Adversaria...

    论文摘要

    AdversarialExample的延伸,表明不仅仅只有NeuralNetwork有这种现象,在此文章之前对该问题的解释集中在nonlinearityoverfitting上。但是本文提出这些算法对于对抗样本脆弱性的主要原因正是在于它们线性的本质。并通过定量分析来解释Adversarial Example在不同架构不同数据集能够work的原因。并以此提出一种快速产生AdversarialExample的方法

    对抗样本出现的分析

    对于Adversarial Example出现的推断性的解释是深度神经网络的高度非线性特征,以及纯粹的监督学习模型中不充分的模型平均和不充分的正则化所导致的过拟合。而本文认为线性模型只要在高维空间的情况下就足以产生Adversarial Example。并且本文提出对抗训练能起到类似于dropout等泛化作用(但因为训练时间效率问题,没有实际应用),但是传统的泛化手段不能解决对抗样本的问题,但是将其转换为如RBF的非线性网络就能达到这一点。故而需要权衡模型线性与非线性的关系,线性模型更容易训练,而非线性模型能抵御对抗样本问题。(In the long run, it may be possible to escape this tradeoff by designing morepowerful optimization methods that can succesfully train more nonlinear models.)

    所以引发思考是,即便当前最好的模型是否只是虚有其表,并没有真正学习到内在的语义信息,故而无法应对这样的泛化问题。

    These results have often been interpretedas being a flaw in deep networks in particular, even though linear classifiers have the same problem。因为只有深度学习有能力去拟合一个非线性模型,而这是浅层模型所无法处理的。反倒是人们误以为深度学习的方法更容易受到对抗攻击,实际上深度学习能够学习到一个函数能够抵御对抗攻击而其他浅层模型不行。浅层模型不能做到说在不同输入给出不同输出的同时还要给临近的输入得到相同的输出。当然了,也没有理论证明算法是否能发现一个能够完全符合我们期望的函数,就像标准的有监督训练并不能保证能够学习到能够抵御对抗样本的函数,这个过程需要显式的在训练过程体现

    快速生成对抗样本:Fast Gradient Sign Method


    Fast Gradient Sign Method方法虽然简单,但是因为扰动是根据w来计算的,故而生成的对抗样本不会说100%使得网络进行误分类。作者表示,除此之外也可以通过其他方法产生对抗样本,如使x绕着梯度方向旋转一定的角度,不过文章后面提到这样生成的对抗训练泛化性能并不佳,可能是因为旋转等操作比较容易学习到(旋转矩阵的结构比较简单,However, we did not find nearly aspowerful of a regularizing result from this process, perhaps because thesekinds of adversarial examples are not as difficult to solve.)。这些生成的对抗样本反过来又证明了对抗样本的线性解释

     

    作者通过实现一个二分类的逻辑回归(MNIST中的37),查看模型参数w、扰动n,以及对比生成对抗样本前后的图片分析,如下所示


     

    对抗训练效果解释:降低overfit

    这里给了一个解释说明说对抗训练与L1范数罚项的区别,说对抗训练其实比L1范数好,因为范数在模型饱和(saturates,额,不overfit)时会逐渐消失,但是如果模型underfit的时候,模型就不必要范数?,对抗样本虽然能够在overfit时表现出同样特性,但是在underfit的情况向,对抗训练只会加重underfitting?额,第5节看不太懂,似乎是对比了这里的方法与L1范数罚项的泛化能力的区别。

     

    对抗训练能起到一定的正则化作用,但是对抗样本又不同于其他数据增量模型,因为这些通过转换所增加的数据是期望出现在测试集上的,而对抗样本在自然情况下是不可能出现的,并且本文得到的对抗训练在benchmark上的表现也没有说要比dropout好,作者说这可能是使用要的对抗样本范围有限:it was difficult to experiment extensively with expensive adversarialexamples based on L-BFGS.

    对抗训练可以对应于如下的正则化【这里的等价是要求这里的θ的参数是已经是训练好的模型下的】,其中在本文实验中α=0.5(随意测试的值,其他值或许更好),通过有dropout网络的对抗训练,能够比单纯的dropout的错误率低(from94% to 0.84%)


    通过上式的训练不仅能降低overfit并提高准确率,同时还能抵御对抗样本(对抗样本错误率从89.4%降低到17.9%)。前面提到,对抗样本有迁移能力,对不同的模型同样有效,通过对对抗正则化训练得到的新模型却能很好的降低这个问题:通过原模型和新模型的参数分别产生两种对抗样本,分别交叉放入新模型和旧模型中,错误率为19.6%40.9%,不过对于误分类的样本的confidence依旧很高,平均达81.4%。而且作者发现通过对抗训练得到的网络参数更加局部化,解释性更强。

     

    文章后来也提到说是否有必要对隐藏层进行扰动,Szegedy的表明将其应用在隐藏层的时候得到一个最好的正则效果。不过这里的实验发现隐藏单元的激活值为明确的情况下,没有必要去扰动,这样只是单纯让某些激活值更大,并且实验正则效果并不理想,甚至不如直接在输入层加入的扰动

     

    Onereason that the existence of adversarial examples can seem counter-intuitive is thatmost of us have poor intuitions forhigh dimensional spaces. Welive in three dimensions, so we are not used to small effects in hundreds of dimensions adding up to create a largeeffect. There is another way that ourintuitions serve us poorly.

     

    The simple RBFnetworks  with low capacity are naturally immune to adversarialexamples, in the sense that they have low confidence when they are fooled. 虽然在FGSM下产生的对抗样本的错误率也有55.4%,但是对这些样本的confidence1.2%,而原本测试集的confidence60.6%We can’t expect a model with such low capacity to get the rightanswer at all points of space, but it does correctly respond by reducing its confidence considerably on points it does not “understand.” 即我们希望得到的性质是说如果“not understand”的样本,即便不具备泛化能力,也不能高置信的给出错误答案

     

    对抗样本的泛化的解释

    前面提到从一个特定模型得到的对抗样本,在另外一个模型甚至另外一个数据集训练得到的网络上依旧有效,甚至它们还会将对抗样本误分为相同的类。这是因为对抗样本与模型的权值向量高度吻合,同时为了训练执行相同的任务,不同的模型学习了相似的函数。实验通过不同模型误分类的对抗样本的相关性证明的,先用maxout网络产生对抗样本,分别放入RBFsoftmax分类器,16.0%54.6%的错误率(不同模型有不同错误率)。在maxout误分的样本中,softmax错误率达84.6%RBF错误率达54.3%。在softmax误分类的样本中,RBF的错误率达53.6%。是否有必要查看softmaxmaxout都误分类的情况下,RBF的误分类结果?似乎是可算的:a significant proportion of them areconsistent with linear behavior being a major cause of cross-modelgeneralization.

     

    这种泛化特征意味着如果有人希望对模型进行恶意攻击,攻击者根本不必访问需要攻击的目标模型,就可以通过训练自己的模型来产生对抗样本,然后将这些对抗样本部署到他们需要攻击的模型中。并且下图解释了为什么误分类仍有比较高的置信度。


     

    一些假设:

    1. one hypothesis is that generative training could provide more constraint on the training processor cause the model to learn what to distinguish “real” from “fake” data and be confident only on “real” data
    2. Another hypothesis about why adversarial examples exist is that individual models have strange quirks but averaging over many models can cause adversarial examples to wash out。使用12maxout网络的ensemble,对抗样本的错误率还是达91.1%,对于单个的maxout网络产生的对抗样本,ensemble网络的错误率虽然降低到87.9%,所以ensemble对于抵御对抗样本虽然有效,但却有限

     

    总结:

    1. Adversarial examples can be explained as a property of high-dimensional dot products. They are a result of models being too linear, rather than too nonlinear.
    2. • The generalization of adversarial examples across different models can be explained as a result of adversarial perturbations being highly aligned with the weight vectors of a model, and different models learning similar functions when trained to perform the same task.
    3. • The direction of perturbation, rather than the specific point in space, matters most. Space is not full of pockets of adversarial examples that finely tile the reals like the rational numbers.
    4. Because it is the direction that matters most, adversarial perturbations generalize across different clean examples.             ??? Why?
    5. • We have introduced a family of fast methods for generating adversarial examples.
    6. • We have demonstrated that adversarial training can result in regularization; even further regularization than dropout.
    7. • We have run control experiments that failed to reproduce this effect with simpler but less efficient regularizers including L1 weight decay and adding noise.
    8. • Models that are easy to optimize are easy to perturb.
    9. Linear models lack the capacity to resist adversarial perturbation; only structures with a hidden layer (where the universal approximator theorem applies) should be trained to resist adversarial perturbation.
    10. RBF networks are resistant to adversarial examples.
    11. Models trained to model the input distribution are not resistant to adversarial examples.
    12. Ensembles are not resistant to adversarial examples.

    Some further observations concerning rubbish class examples are presented in the appendix:

    1. • Rubbish class examples are ubiquitous(普遍存在) and easily generated.
    2. • Shallow linear models are not resistant to rubbish class examples.
    3. • RBF networks are resistant to rubbish class examples.
    展开全文
  • 对抗样本和对抗网络

    2018-03-03 14:44:05
    前言:本文转载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提出了条件生成对抗网络。
    展开全文
  • 早期的工作尝试用非线性特征和过拟合去解释它,我们却认为神经网络对于对抗样本的弱点主要体现在它的线性特征,基于这个假设,我们提出了简单快速的生成对抗样本的方法即快速梯度符号法(Fast Gradient Sign Method...
  • 对抗样本&对抗训练

    万次阅读 2018-05-03 18:14:10
    原文本文将会介绍对抗样本与对抗训练的相关知识(请将此对抗训练与Ian Goodfellow的生成对抗网络区别开来)。综合Ian Goodfelow在Berkeley CS 294-131的deeplearning topic上面的讲义,我将从以下几个方面介绍:什么...
  • 对抗样本:数据集中通过故意添加细微的干扰所形成的输入样本,受干扰之后的输入导致模型以高置信度给出一个错误的输出。 对抗网络提出的背景就是,深度学习出现了绊脚石:对抗样本;深度网络不能解决对抗样本带来...
  • 对抗样本与生成式对抗网络

    千次阅读 2017-05-31 15:56:53
    对抗样本和对抗性网络,从最开始YannLeCun在Quora上直播时表示生成对抗性网络是近期人工智能最值得期待的算法之一,到生成对抗性网络的发明者IanGoodfellow在Quora上直播讲述自己的学习经历和研究,成了人工智能领域...
  • 对抗性AI 精选的对抗性AI(XAI)资源精选清单,其灵感来自和。 由于该领域的新颖性,该清单非常多。 欢迎捐款-发送请求请求或与我联系 。 机器学习模型有各种对抗性攻击。 因此,防御的方式,例如通过使用XAI技术...
  • 解释对抗训练网络:Interpreting Adversarially Trained Convolutional Neural Networks-ICML 2019 前言 最近在考虑做对抗样本可解释性方面的研究,之前没有接触过。今天要分享的这篇文章发表在ICML 2019上,我...
  • 对抗训练

    万次阅读 多人点赞 2018-10-18 21:21:09
    在对图像算法研究的过程中发现,一些机器学习方法(包括深度学习)对对抗样本非常敏感,这些对抗样本和非对抗样本非常相似,但是模型(已经在非对抗样本中训练好的模型)却会错分这些样本。为了能更好的分类该类样本...
  • 深度学习中的对抗生成网络GAN是复杂分布上无监督学习最具前景的方法之一。虽然在工程上对抗生成网络取得巨大成功,在理论上对于GAN的理解依然肤浅。本期清华大数据“技术·前沿...
  • 深度学习中的对抗生成网络GAN是复杂分布上无监督学习最具前景的方法之一。虽然在工程上对抗生成网络取得巨大成功,在理论上对于GAN的理解依然肤浅。本期清华大数据“技术·前沿...
  • 生成对抗网络和对抗神经网络 如果您最近一直在关注人工智能(AI)新闻媒体,则可能听说过Google的顶级AI人物之一Ian Goodfellow于三月份移居了Apple 。 Goodfellow在2017年被麻省理工学院评为35岁以下创新者之一,在...
  • 生成对抗神经网络matlab代码揭示每个人的肌肉激活特征的独特特征 该存储库包含用于训练和评估模型的 Python 代码,如 @article {aeles2021revealing, title = {Revealing the unique features of each individual's ...
  • 神经网络中的对抗攻击与对抗样本

    万次阅读 多人点赞 2018-11-02 15:22:59
    在学习神经网络白盒、黑盒对抗攻击时候,搜到这篇文章,觉得作者把神经网络中的对抗攻击来龙去脉介绍的特别通俗易懂,转载一下好好学习。 什么是对抗攻击 初识神经网络会惊叹它的神奇,在不了解的情况下我相信很多...
  • 点击上方“机器学习与生成对抗网络”,关注"星标"获取有趣、好玩的前沿干货!戳我,查看GAN的系列专辑~!本文汇总了ECCV 2020上部分对抗相关论文,后续公众号会随缘...
  • 电子对抗技术术语-雷达对抗工程基础 159P-54.8M.pdf
  • 对抗样本(对抗攻击)入门

    千次阅读 多人点赞 2019-12-03 19:03:56
    什么是对抗样本? 从2013年开始,深度学习模型在多种应用上已经能达到甚至超过人类水平,比如人脸识别,物体识别,手写文字识别等等。 在之前,机器在这些项目的准确率很低,如果机器识别出错了,没人会觉得奇怪。...
  • 深度学习之对抗网络

    千次阅读 2017-03-02 22:37:35
     对抗网络 是个新词,全名叫 生成式对抗网络(Generative adversarial nets),就像深度学习一样,发明时间并不长。  Ian Goodfellow(生成对抗性网络的发明者)定义了 对抗网络;  Yann LeCun(三巨头之一)在...
  • 在近日举办的清华大数据“技术·前沿”系列讲座中,来自纽约州立大学计算机系终身教授,哈佛大学数学科学与应用中心兼职教授顾险峰老师做了主题为“对抗生成网络的几何理论解释”的分...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,726
精华内容 9,090
关键字:

对抗解释