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

news2024/10/6 8:21:59

文章目录

  • 一、基本概念
    • 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.coloradmin.cn/o/148419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TLS回调函数实现反调试

title: TLS回调函数实现反调试.md date: 2022-06-16 23:40:49.231 updated: 2022-06-16 23:41:11.924 url: /archives/tls回调函数实现反调试 categories: tags: 逆向 TLS回调函数实现反调试 TLS-线程局部存储 先于我们OEP执行 #include<stdlib.h> #include<time.…

使用红黑树封装map、set

map、set如何用红黑树封装 map、set应用&#xff1a;map是一个使用参数K、参数V的类模板&#xff0c;set是只使用参数K的类模板。因为map应用时&#xff0c;需要使用到KV&#xff0c;而set只是存单个值&#xff0c;K。红黑树类的存储 &#xff1a;map和set类中使用红黑树数据成…

Logback配置详解

简介&#xff1a; logback是java的日志开源组件&#xff0c;是log4j创始人写的&#xff0c;性能比log4j要好&#xff0c;目前主要分为3个模块&#xff1a; logback-core:核心代码模块logback-classic:log4j的一个改良版本&#xff0c;同时实现了slf4j的接口&#xff0c;这样你…

树莓派mjpg-streamer实现监控功能

树莓派实现监控功能&#xff0c;调用mjpg-streamer库来实现。mjpg-streamer是一个开源的摄像头媒体流&#xff0c;通过本地获取摄像头的数据&#xff0c;通过http通讯发送&#xff0c;可以通过浏览器访问树莓派的IP地址和端口号就能看到视频流。 实现步骤 1.git clone https:…

关于内核的概念理解

狭义的操作系统可以认为就是内核&#xff0c;比如Linux内核。广义的操作系统则包括内核和一系列应用软件&#xff0c;比如Linux内核编辑器vim编译器gcc命令行解释器&#xff08;shell&#xff09;等&#xff0c;通常称为GNU/Linux。 源代码https://github.com/torvalds/Linux …

Jenkins自动化部署SpringBoot项目(windows环境)

文章目录1、Jenkins介绍1.1、概念1.2、优势1.3、Jenkins目的2、环境准备3、Jenkins下载3.1、下载3.2、运行3.3、问题解决4、Jenkins配置4.1、用户配置4.2、系统配置4.3、全局工具配置-最重要5、新建项目7、测试8、错误解决1、Jenkins介绍 1.1、概念 Jenkins是一个开源软件项目…

自动化测试Seleniums~1

一.什么是自动化测试 1.自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 将测试人员双手解放&#xff0c;将部分测…

黑马javaWeb Brand综合案例

01-综合案例-环境搭建 02-查询所有-后台&前台

leetcode83周赛

前言&#xff1a; 周赛两题选手,有点意思 830.较大分组的位置 思路&#xff1a;wa了三发&#xff0c;对边界了解的不够清楚 可以有一个小小的优化,时间复杂度O(n) // arr.add(start); //arr.add(i-1); //res.add(arr); res.add(Arrays.asList(start,i - 1));class Solution {pu…

MATLAB-mesh/ezmesh函数三维图形绘制

l ) mesh 函数生成由X、Y和Z指定的网线面&#xff0c;由C指定颜色的三维网格图。具体调用方法如下。mesh(Z):分别以矩阵Z的行、列下标作为x轴和y轴的自变量绘图。mesh(X , Y,Z):最常用的一般调用格式。mesh(X,Y ,Z,C):完整的调用格式&#xff0c;C用于指定图形的颜色&#xff0…

Ubuntu 20.4 美化桌面、美化引导界面、Mac 既视感

文章目录相关资源安装 gnome-tweaks安装浏览器插件方法一方法二&#xff08;推荐&#xff09;主题美化进行美化配置效果图美化前美化后美化 Dock扩展推荐引导美化安装主题修改配置相关资源 https://pan.baidu.com/s/1D7ZfzVKMmeZPAzuDDAVUbg提取码&#xff1a;ws3f 安装 gnom…

Java基础学习笔记(十)—— 包装类与泛型

包装类与泛型1 包装类1.1 基本类型包装类1.2 Integer类1.3 自动装箱 / 拆箱2 泛型2.1 泛型概述2.2 泛型的用法2.3 类型通配符1 包装类 1.1 基本类型包装类 基本类型包装类的作用 将基本数据类型封装成对象 的好处在于可以在对象中定义更多的功能方法操作该数据 public stat…

C库函数:stdlib.h

stdlib.h C 标准库 – <stdlib.h> | 菜鸟教程 (runoob.com) 该库主要涉及“字符串和其他类型数据的转换”、“内存空间的申请和释放”、“查找和排序”、随机数等功能函数。 7void *calloc(size_t nitems, size_t size) 分配所需的内存空间&#xff0c;并返回一个指向它…

大幅度减少零样本学习所需的人工标注

零样本旨在模仿人类的推理过程&#xff0c;利用可见类别的知识&#xff0c;对没有训练的样本不可见类别进行识别&#xff0c; 类别嵌入&#xff1a;Class embedding&#xff1a; 描述类别语义和视觉特征的向量&#xff0c;能够实现知识在类别间的转移&#xff0c;因而在零样本…

Web进阶:Day2 空间转换、动画

Web进阶&#xff1a;Day2 Date: January 4, 2023 Summary: 空间转换、动画 空间转换 **空间&#xff1a;**是从坐标轴角度定义的。 x 、y 和z三条坐标轴构成了一个立体空间&#xff0c;z轴位置与视线方向相同 空间转换也叫3D转换 属性&#xff1a;transform 语法&#xff1…

SolidWorks二次开发 API-获取当前语言与重命名文件

新的一年了&#xff0c;开始新的分享。 做SolidWorks二次开发的时候&#xff0c;难免会遇到多语言的问题。 针对不同语言的客户生成不同语言的菜单&#xff0c;所以我们要知道Solidworks的当前界面语言是什么。 这个就简单的说一下方法: GetCurrentLanguage 看结果&#xff1a;…

二、MySQL进阶教程

mysql高级 1&#xff0c;约束 上面表中可以看到表中数据存在一些问题&#xff1a; id 列一般是用标示数据的唯一性的&#xff0c;而上述表中的id为1的有三条数据&#xff0c;并且 马花疼 没有id进行标示 柳白 这条数据的age列的数据是3000&#xff0c;而人也不可能活到3000岁…

Curator实现分布式锁(可重入 不可重入 读写 联锁 信号量 栅栏 计数器)

文章目录前言代码实践1. 配置2. 可重入锁InterProcessMutex3. 不可重入锁InterProcessSemaphoreMutex4. 可重入读写锁InterProcessReadWriteLock5. 联锁InterProcessMultiLock6. 信号量InterProcessSemaphoreV27. 栅栏barrier8. 共享计数器8.1. SharedCount8.2. DistributedAto…

再学C语言28:输入和输出——重定向和文件

默认情况下&#xff0c;使用标准I/O包的C程序将标准输入作为其输入源&#xff0c;即标识为stdin的流 stdin流是作为向计算机中读取数据的常规方式而建立&#xff0c;可以是键盘、语音等不同输入设备 现代计算机还可以从文件中需求其输入&#xff0c;而不仅仅是传统的输入设备…

【docker10】Docker容器数据卷

Docker容器数据卷 1.Docker容器数据卷是什么 注意(坑): 容器卷记得加入 --privilegedtrue 为什么: docker挂载主目录访问如果出现cannot open directory.:Permission denied 解决办法: 在挂在目录后多加一个–privilegedtrue参数即可 如果是CentOS7安全模块会比之前系统版本加…