【深度学习】李宏毅2021/2022春深度学习课程笔记 - Adversarial Attack(恶意攻击)

news/2024/10/21 18:45:52/

文章目录

  • 一、基本概念
    • 1.1 动机
    • 1.2 恶意攻击的例子
    • 1.3 如何攻击?
  • 二、White Box vs Black Box
  • 三、One Pixel Attack
  • 四、Universal Adversarial Attack
  • 五、Beyond Image
  • 六、Attack in the Physical World
  • 七、Adversarial Reprogramming
  • 八、Backdoor in Model
  • 九、防御
    • 9.1 被动防御
    • 9.2 主动防御


一、基本概念

1.1 动机

当我们训练的模型正式上线后,面对的数据分布可能和训练时的数据分布不太一样,甚至会有一些攻击者会尝试用一些虚假的数据来骗过我们的模型。例如,在用AI技术过滤垃圾邮件的问题中,AI的目标是将垃圾邮件识别出来并且过滤掉,而垃圾邮件的发送者为了躲避AI的识别,也会采取一些策略去试图欺骗AI。这就是恶意攻击的由来。

在这里插入图片描述

1.2 恶意攻击的例子

如下图所示,假设原始图片输入模型,模型输出是 Tiger Cat,那么恶意攻击者就希望在原始图片上增加一些杂讯,来改变模型的输出。一般,根据恶意攻击者的意图可分为两种恶意攻击:

  • 有目标的恶意攻击:希望增加了杂讯后,模型输出一个预想的类别
  • 无目标的恶意攻击:希望增加了杂讯后,模型输出的类别和原来不一样即可

在这里插入图片描述

恶意攻击真的可行吗?下面是一个具体的例子,我们采用的网络模型是50层的ResNet,这并不是一个很弱的模型。当输入正常图片的时候,模型给出的输出是Tiger Cat,并且具有0.64的置信分数,在加入了一些人类肉眼看不到的杂讯后,模型给出的输出居然就变成了 Star Fish,而且置信分数还高达1.00!这也太不可思议了。

在这里插入图片描述

为了证明左右两个图片是真的不同,我们可以将其做减法,然后放大50倍,如下图所示,可以看出两个图其实真的是有差异的

在这里插入图片描述

还有更离谱的,在加了另外的杂讯后,模型居然认为图片中的是 Keyboard,由此可见,恶意攻击对模型的影响真的是非常大呀!

在这里插入图片描述

1.3 如何攻击?

无目标攻击希望加了杂讯后网络的输出与没加杂讯时网络的输出相差越大越好
有目标攻击希望加了杂讯后的网络的输出与目标输出越接近越好
无论是有目标攻击还是无目标攻击,杂讯都不能太大,不能被人类肉眼观察到

在这里插入图片描述

下面介绍了计算两个图片之间距离的两个方法。但是一般来说,L-infinity可能更加符合实际人类对图像的观察习惯,我们一般只在意差别最大像素块。

在这里插入图片描述

为了实现杂讯不要太大这一个约束,如下图所示,我们可以在梯度下降后,对新的参数进行clip操作,将其限制在与原图相差较小的范围内

在这里插入图片描述

还有一个方法被称为FGSM,它通过一个sign函数,将梯度调整为±1,这样一来,参数的更新就相当于固定步长。

在这里插入图片描述

传统的FGSM是单步结束的,但是我们也可以进行迭代更新,但是迭代的话就要处理超过范围的情况了。如下图所示:

在这里插入图片描述


二、White Box vs Black Box

之前讲的都是白盒攻击,也就是说我们可以获取到要攻击的模型的参数。但是现实中,大部分情况我们都只有模型的API可以调用,我们不知道模型的具体参数,这种情况下对模型进行攻击,就被称为黑盒攻击

在这里插入图片描述

如何进行黑盒攻击呢?假设我们知道要被攻击的模型的训练资料,那么我们可以用一样的训练资料训练出一个和要被攻击的模型很相似的模型,然后用白盒攻击的方法攻击相似的模型,再用对相似模型攻击有效的带有杂讯的数据去攻击真正要攻击的模型,这时候成功率就会比较高。

在这里插入图片描述

黑盒攻击其实还是蛮容易成功的,如下图所示,即使最差的情况,失败率也只有39%,说明攻击的成功率还是挺高的

在这里插入图片描述

下图所示,横轴依然代表真实模型,而纵轴代表除了该模型以外的4个模型。可以看到,最高的失败率也只有6%,所以说当数据可以骗过4个模型的时候,它能骗过真实模型的概率就会很大!

在这里插入图片描述

为什么攻击那么容易成功?有人做了研究,推测原因可能出现在训练资料上,而非模型上。在有限的资料上,模型学到的特征就是这样,没有办法。

在这里插入图片描述


三、One Pixel Attack

One Pixel Attack 要求只能改变图像中的一个像素点,就可以使得模型识别出错

在这里插入图片描述


四、Universal Adversarial Attack

Universal Adversarial Attack 指找到一个通用的杂讯,这个杂讯加到大多数图片上,都能使得模型识别出错

在这里插入图片描述


五、Beyond Image

当然,恶意攻击不止存在于图像领域。如下图所示,恶意攻击还存在于语音识别和问答系统领域。
在语音识别中,我们的任务是识别出哪些语音是机器合成的,恶意攻击的目标就是让模型认为机器合成的语音是人的语音。
在问答系统中,我们的任务是根据所给的文章和问题,正确地回答问题。恶意攻击的目标就是让模型错误的回答问题

在这里插入图片描述


六、Attack in the Physical World

前面说的,都是在图片上加上一些杂讯,然后试图导致模型输出错误的结果。其实,在真实世界中,我们也可以通过化妆、佩戴一些特定的装饰来攻击模型。如下图所示:男人带上特制的眼镜后,机器就认为他是右边的女人了,是不是很离谱?

在这里插入图片描述


七、Adversarial Reprogramming

Adversarial Reprogramming 指的是我们可以像僵尸一样寄生在别人的模型上,让别人的模型为我们服务。例如下图所示,我们想实现一个模型可以识别图中有几个方块,这时候我们可以寄生与一个分类模型上,当它输出tench时代表图中有1个方块,输出goldfish时代表图中有2个方块,以此类推。

在这里插入图片描述


八、Backdoor in Model

之前讲的攻击都是在测试阶段展开的,但是有没有可能,攻击在训练阶段就开始了呢?是有可能的,如下图所示,我们在训练资料中给图片加入一些人类观察不到的杂讯,用这些被加了杂讯的图片训练出来的模型,在看到特定的照片时就会识别错误。有点像特地用带有缺陷的训练集去训练模型,然后再用他缺陷的那部分去攻击他

在这里插入图片描述


九、防御

9.1 被动防御

被动防御指:我们的模型是不用动的,但是在数据输入前加一个过滤层,削弱杂讯的信息

在这里插入图片描述

而这个过滤层往往可以是轻微的模糊化,就可以达到很好的防御效果。如下图所示,模糊化后,机器又可以正确的识别图片了,但是缺点是识别图像的置信分数会下降

在这里插入图片描述

还有其他被动防御的方法如下图所示:

  • 我们可以将输入的图片进行压缩
  • 我们可以用一个生成模型对输入的图片进行重新生成

在这里插入图片描述

为了加强防御能力,我们可以在防御时加上随机性,如下图所示

在这里插入图片描述

9.2 主动防御

主动防御就是在训练阶段就考虑恶意攻击,每次训练完一个阶段,就找找有没有可能存在的恶意攻击数据可以攻破模型,如果有就修复它。有点像数据增强。而且还可以一定程度上缓解过拟合问题。

在这里插入图片描述


http://www.ppmy.cn/news/10281.html

相关文章

数据结构与算法【树】

二叉树性质 满二叉树 深度为k,有2k−12^{k}-12k−1个结点的二叉树,为满二叉树。 完全二叉树 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面…

逻辑漏洞渗透与攻防(六)之其他类型逻辑漏洞

目录 其他类型逻辑漏洞 数据包重放漏洞 条件竞争漏洞 订单金额任意修改 接口无限制枚举 支付漏洞 修改商品数量 修改支付状态 修改附属值 越权支付 无限制试用 支付漏洞总结 SRC中的逻辑漏洞总结 其他类型逻辑漏洞 数据包重放漏洞 漏洞介绍:通…

揣着一口袋的阳光满载而归--爱摸鱼的美工(13)

-----------作者:天涯小Y 揣着一口袋的阳光满载而归! 慷懒周末 睡到自然醒,阳光洒在书桌上 套进宽松自在的衣服里 出门,去楼下坐坐 在阳光里吃午餐 在阳光里打个盹 在阳光里看猫咪上蹿下跳 在阳光里点个咖啡外卖 虚度时光&#xf…

【Acwing 周赛#85】AcWing 4792. 最大价值 + AcWing 4793. 危险程度

目录 4791. 死或生 - 简单模拟ac 4792. 最大价值 - 简单构造ac 4793. 危险程度 - dfs / 并查集 1、dfs 2、并查集 4791. 死或生 - 简单模拟ac import java.util.*;class Main {public static void main(String[] args){Scanner scnew Scanner(System.in);int nsc.nextInt(…

【系列01】java运算符及运算符优先级[附带目录 按需服用]

运算符、三元运算符、位运算符、拓展赋值、运算优先级、自增自减 运算符 java代码优先级多用括号**,多用括号()**不仅方便而且增加可读性 自增自减 a 是先赋值再增加a 是先增加再赋值上面都表示 a a1;自减同理由 public class Demo05 {public static void main(String[] ar…

【Linux】文本编辑器-vim使用

目  录1 vim的基本概念2 vim的基本操作3 vim常用模式命令集3.1 vim正常模式命令集3.2 vim末行模式命令集4 vim的简单配置1 vim的基本概念 vim编辑器与vi编辑器一样都是多模式编辑器,不同的是vim编辑器是vi编辑器的升级版本,vim不仅兼容vi的所有指令&am…

1 机器学习之线性回归

学习笔记自,慕课网 《Python3 入门人工智能》 https://coding.imooc.com/lesson/418.html#mid33109 麻雀虽小,五脏俱全 1.1 回归分析 1.2 线性回归问题求解 1.3 寻找最合适的 a、b,引入损失函数的概念 尽可能使损失函数最小即找到了最合适的…

Java中indexOf函数详解

1.定义 Java String 类的 indexOf() 方法返回指定字符串中指定字符或字符串第一次出现的位置。 String 类的 indexOf() 方法在字符串中查找子字符串出现的位置,如果存在返回字符串出现的位置(第一位为0),如果不存在返回 -1&#x…