zoukankan      html  css  js  c++  java
  • 九、产生和防御对抗样本的新方法 | 分享总结--廖方舟(论文11)

    视频连接:http://www.mooc.ai/course/383/learn#lesson/2163

    论文总结:http://ai.yanxishe.com/page/blogDetail/5357

    对抗样本的攻防:

      • 什么是对抗样本  adversarial examples 

    • 传统的攻击方法

    • 传统的防守方法 

    • 动量迭代攻击 

    • 去噪方法 

    • 高层引导去噪方法 

    什么是对抗样本 

    对抗样本的性质不仅仅是图片所拥有的性质,也不仅仅是深度学习神经网络独有的性质。因此它是把机器学习模型应用到一些安全敏感性领域里的一个障碍。

     当时,机器学习大牛 Good fellow 找了些船、车图片,他想逐渐加入一些特征,让模型对这些船,车的识别逐渐变成飞机,到最后发现人眼观测到的图片依然是船、车,但模型已经把船、车当做飞机。

    0?wx_fmt=png

    我们之前的工作发现样本不仅仅是对最后的预测产生误导,对特征的提取也产生误导。这是一个可视化的过程。

     当把一个正常样本放到神经网络后,神经元会专门观察鸟的头部,但我们给它一些对抗样本,这些对抗样本也都全部设计为鸟,就发现神经网络提取出来的特征都是乱七八糟,和鸟头没有太大的关系。也就是说欺骗不是从最后才发生的,欺骗在从模型的中间就开始产生的。

     0?wx_fmt=png

    不仅仅只是对最后的prediction产生了误导,还影响了特征的提取。在模型中间就产生了。

    将147号神经元的处理进行可视化,发现上图中高亮部分,对所有real image会专门观察鸟的头部;

    而对于被设计为鸟的对抗样本而言,147号神经元会注意到的是一些跟鸟头无关的特征点。

    下图是最简单的攻击方法——Fast Gradient Sign Method 

    x*为要产生的对抗样本,x为真实样本,y为正确的分类名,

    第一行Objective表示:最大化x*的基础上,得到正确分类名label的损失函数(loss function(cross-entropy交叉熵)越大,预测的概率越小),说白了,目标就是为了最小化对抗样本在正确分类名上的预测概率

    第二行:做一个线性假设,将损失函数展开,L(x,y)对x求偏导数,然后取符号函数sign,乘上系数加到原来的真实样本x上。说白了,就是将y反向梯度传回原始图片的梯度加到图片中,得到对抗样本

    为什么不采用L2 norm,而采用L∞ norm呢?

    L2可能会产生非常大的distortion:

    下图中第一列为原图,第二列加入的干扰项的L2 norm是一样的,第三列为附加后的图片

    肉眼就能看出来,第一张和第三张图片已经和原图有了非常大的差别了。

    而L∞一般不会出现这种变化。

    0?wx_fmt=png

    除了 FGSM 单步攻击的方法,它的一个延伸就是多步攻击,即重复使用 FGSM。由于有一个最大值的限制,所以单步的步长也会相应缩小。比如这里有一个攻击三步迭代,每一步迭代的攻击步长也会相应缩小。

    0?wx_fmt=png

    产生图片所用的 CNN 和需要攻击的 CNN 是同一个,我们称为白盒攻击。

    与之相反的攻击类型称为黑盒攻击,也就是对需要攻击的模型一无所知。此方法也可能成功,因为对抗样本迁移。 

    0?wx_fmt=png

    0?wx_fmt=png

    以上所说的都是 Non Targeted, 只要最后得到的目标预测不正确就可以了。

    另一种攻击 Targeted FGSM,目标是不仅要分的不正确,而且还要分到指定的类型。

    y*为指定的错误分类目标类型 。现在目标应该是最小化loss function

    0?wx_fmt=png

    一个提高黑盒攻击成功率行之有效的办法,是攻击一个集合。

    例如第一行,将多个模型的logits层拼接起来,然后当成一个大的单个模型。

    同理,不仅可以在logits,预测和损失函数都可以融合拼接。但实验表明在logits上做效果最好。

    0?wx_fmt=png

    而目前为止一个行之有效的防守策略就是对抗训练

    在模型训练过程中,训练样本不仅仅是干净样本,而是干净样本加上对抗样本。在线生成训练样本。

    随着模型训练越来越多,一方面干净图片的准确率会增加,另一方面,对对抗样本的鲁棒性也会增加。

    下表为准确率accuracy:

    e为不同的攻击步长(能容忍的攻击范围)越大攻击越强。随着它变大,准确率下降

    (1)baseline为一个普通网络

    (2)adv.training对抗样本训练之后,对此攻击基本上就免疫了。但此方法会消耗大量时间:

    原因是1、在线生成用于训练的对抗样本(两次操作:前馈+反馈)

          2、训练模型去适应对抗样本本身就比较困难

    因此,此方法可能会耗费比训练普通模型好几倍的时间。

    (3)一个增强的训练对抗样本的版本:ensemble adversarial training

    在训练时输入模型的样本是在攻击一大堆模型时产生的一堆样本。例如要训练Inception模型,找来resnet、VGG、Alexnet做陪练来产生很多对抗样本加上Inception自己也产生的很多对抗样本。

    通过此方法得到的网络是目前最稳定的网络。但训练时间就更长了,基本上是一个普通网络好几十倍的训练时间。

    Deeper model:

    0?wx_fmt=png

    下面简单介绍一下 NIPS 2017 上的这个比赛规则

     

    第一个:将图片分类为指定类别

    第二个:将图片不分为正确类别即可

    第三个:防守 

    比赛结构:主办方提供dataset包含5000张图片;

    Non-target attacks(右上橘红色)将原始图片全部变成对抗样本(例如有100个队伍,就会利用原始的五千图产生五十万张对抗样本)

    target attacks(左下橘红色)同理100个队伍一共生成五十万张对抗样本

    defense(蓝色)每个队伍都会讲上述一起产生的一百万张图片进行处理。

    评估防守方的标准就是看防守方分类正确了多少张样本。

    评估两个攻击方的标准:产生的对抗样本成功欺骗了多少防守方。

    因此,这个比赛中攻防双方两个队伍之间进行对打,互相揣摩对方用了什么模型

    0?wx_fmt=png

    两个限制条件:

    容忍范围不能太大,在4~16间测试模型的鲁棒性;

    不能花太长时间产生一个对抗样本,或者防守一个对抗样本

    0?wx_fmt=png

    FGSM 算法结果:下图表示1000张图片中分类正确的图片数目 ,左边列名为攻击模型,上面行名为防守样本

    例如第一行表示用inception-v3产生的对抗样本去攻击各种模型,正确识别的图片数越多,表示防御能力越强,越不受干扰。

    对角线标红的为白盒攻击。注意到adv-incv3对白盒攻击的正确分类相当高,能够正确分类。

     可以看出,Adv-Incv3、Ens3-Adv-Incv3、Ens4-Adv-Incv3、Ens-IncR都达到了 较高准确率。

    0?wx_fmt=png

    图中绿色模型为攻击范围,倒数三四栏R-50和R-152有“亲戚”R-101在攻击目标中,这两列可以看出随着迭代次数上升,识别准确率还是有所下降的。

    最后两栏灰色是黑盒模型,随着迭代数量的增加, 攻击成功率反而上升。这就给攻击造成了难题。

     因此,白盒攻击可以增加迭代次数,最终进入一个局部最小的识别率。

    但对于我们不了解的模型而言,就是黑盒样本应该减少迭代次数。

    对于这些黑盒模型识别率较低的情况,实际是一个overfitting过拟合的问题。局部最小适用于绿色的模型,但却不适合后两个黑盒模型。

    我们解决的办法就是在迭代与迭代中间加入动量momentum,对于后四列有明显的下降。

     

    0?wx_fmt=png

    加入动量之后,白盒攻击变强了,而且对黑盒模型攻击的成功率也大大提升了。

    从而对于黑盒攻击,也可以使用相当多数量的迭代次数了。

    0?wx_fmt=png

    0?wx_fmt=png

    总结

    以前方法(iterative attack)的弱点是在迭代数量增多的情况下,它们的迁移性,也就是黑盒攻击性会减弱,在我们提出加入动量之后,这个问题得到了解决,可以很放心使用非常多的迭代数量进行攻击。

    在 NIPS 2017 比赛上得到最高的分数

    0?wx_fmt=png

    需要提到的一点,上面提到的都是 Non-targeted , 在 Targeted 攻击里面,这个策略有所不同。在 Targeted 攻击里面,基本没有观察到迁移性,也就是黑盒成功率一直很差,即便是加入动量,它的迁移程度也非常差。

    因此,分数高是因为有很多人提交了baseline模型,而攻击这些白盒做的很好,因此分数高。

     

    下面讲一下防守

     

    我们常说对抗样本用人眼是无法识别的,但此话不全对。当我们将原图放大 ,左边对抗样本明显有噪声。

    首先想到的就是去噪声,我们尝试用了一些传统的去噪方法(median filter 、BM3D)效果都不好。之后我们尝试使用了两个不同架构的神经网络去噪。

    一个是 Denoising Autoencoder,卷积型的去噪。

    另一个是 Denoising Additive U-Net。在中间加上neural connection。目标不再是先重建原图,二是先重建出噪声,然后将重建出来的噪音对adversarial样本进行预测,然后加回去,得到纯净图片。

    0?wx_fmt=png

     下图为Denoising Additive U-Net的结构

    我们的训练样本是从 ImageNet 数据集中取了三万张图片 ,使用了七个不同的攻击方法对三万张图片攻击,得到 21 万张对抗样本图片以及三万张对应的原始图片。

    除了训练集,我们还做了两个测试集。一个白盒攻击测试集(针对Inception-v3)和一个黑盒攻击测试集(针对Inception-v4)。

    可以看到训练效果:NA表示不设防守的模型;DAE:Denoising AutoEncoder;DUNET:Denoising U-NET;

    前三行算的是去噪后的剩下的噪音(用l1来统计):DAE增加了噪声。DUNET部分减少了噪声

     后三行为去噪后的分类正确率:结果发现正确率并不高。特别是对于DUNET,明明噪声在白盒攻击的时候已经降到了0.0164了,识别率却还没有NA的高。分析原因:

    我们发现经过去噪以后,正确率反而有点下降。我们分析了一下原因,输入一个干净图片,再输入一个对抗图片,然后计算每一层网络在这两张图片上表示的差距,我们发现这个差距是逐层放大的。

    计算网络在这两张图片(第一张为干净图片,一张为对抗图片)上表示的差异:右图折线图可以看出差距是在逐层增大的

    绿线为baseline去噪后仍然在放大,

    图中蓝线发现放大的幅度非常大,图中红线是去噪过后的图片,仍然在放大,导致最后还是被分错。

    经过去噪后的PGD为红线,仍然在放大,这说明经过去噪后的噪音仍然会被放大。所以会被分错。

    既然,都是会被放大的,那不如就将最后迭代结束的作为loss function

    为了解决这个问题,我们提出了经过改良后的网络 HGD:

    变种:和之前的方法相比,改良后的网络 HGD 防守准确率得到很大的提升

    FGD:CNN提取出来的特征算距离

    LGD:不再是用卷积核的距离去度量了,直接用logist(最后一层softmax的上一层)的一千维向量

    CGD:直接用CNN进行预测,得到的结果和真实正确的计算一个误差cross-entropy

     

    比较一下鲁棒性:后三排的防守准确率得到了极大的提升。

    现在来看,误差放大也得到了很好的抑制。

    LGD训练后的误差放大曲线为黑线,只比绿线random noise高一丢丢

    1、发现HGD迁移性很好,训练750张,对测试250张的防守效果很好

    2、由于denoising的训练需要CNN的辅助,这边从模型A借了一个,安到了模型B上

    同时也比较了一下模型A自己训练出来的效果。

    可以看出,借来的模型完成了95%的防守任务。

    denoising就像是一个安全帽。自己的帽子肯定比别人的帽子效果更好。

     

    A训练一个denoising,B也训练一个denoising,然后把这两个的denoising合并一下,这样会不会是一个效果更好的denoising呢?结果如下:

    事实表明,还是自己用自己的denoising效果最好,合并起来效果没那么好。

    最后比赛中,我们集成了四个不同的模型,以及训练了他们各自的去噪denoising,最终把它们合并起来提交了上去。

    为什么LGD比PGD好的原因:

    因为PGD并没有去掉所有噪声,横坐标为噪声的幅值,纵坐标为denoising预测出来的幅值。

    将横纵坐标做一个correlation关系,发现系数为0.48,而不是想象中的接近1,说明PGD没能将图片中噪声去除干净。从而剩下的52%噪声造成了之前的error amplification effect。

    而LGD的去噪效果比例为1.05,是能够将噪声完全去除掉的。

    还做了一个补充实验:将PGD的估计噪声乘以2会不会就能达到全去除噪声呢?测试结果表明会多去除一点噪声,但是还远不及LGD的效果。

    0?wx_fmt=png

      HGD 网络总结 

    优点:

     

    • 效果显著比其他队伍的模型好。 

    • 比前人的方法使用更少的训练图片和更少的训练时间。 只需要三万张图片,半天的训练即可

    • 可迁移。 

    缺点:

     

    • 还依赖于微小变化的可测量 

    • 问题并没有完全解决。 

    • 仍然会受到白盒攻击,除非假设对手不知道 HGD 的存在

  • 相关阅读:
    CUDA内存介绍
    CUDA10.0 官方手册 阅读笔记 章三 CUDA编程接口
    Texture Gather 讲解
    cuda学习--纹理内存
    计算机缓存Cache以及Cache Line详解
    nvidia的cuda编程api
    将ORBSLAM往ANDROID STUDIO 移植的时候一些坑
    解决Android10读取不到/sdcard/、/storage/emulated/0/文件的问题
    Android NDK 从入门到精通(汇总篇)
    好好说说c++内存序--以单例模式为例子
  • 原文地址:https://www.cnblogs.com/Josie-chen/p/9881870.html
Copyright © 2011-2022 走看看