技术标签: 对抗攻击 adversary attack 深度学习/机器学习 deepfool
文章简介:
本文为Adversary Attack方向的一篇经典论文。算法名为DeepFool,其目标是寻求最小的扰动来达到生成对抗样本的目标。下图第2行为DeepFool算法生成的扰动,第3行为FGSM算法生成的扰动。可以看到当生成的target label都为turtle时,DeepFool算法所加入的扰动,明显低于FGSM。DeepFool算法的特点主要为以下几个方面:
Contribute:
其中 ∇ ( x ; k ^ ) \nabla (x; \hat{k}) ∇(x;k^)为
做了广泛的实验比较从而得出
a) 我们的方法比现有的方法更可靠、更有效地计算了对抗性扰动。
b) 发现用对抗性的例子增加训练数据可以显著增强对对抗性扰动的鲁棒性。
作者证明,使用不精确的方法来计算对抗性扰动,可能导致对鲁棒性的不同结论,有时还会产生误导。因此,作者的方法提供了一个更好的理解这个有趣的现象及其影响因素。
DeepFool for binary classifiers:
f f f是一个线性二分类分类器: f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b。如下图,为了使得扰动达到最小,最小的方向就是垂直于分类面的方向。
个人感觉这个算法中 r i r_i ri计算结果可能会偏大以至于无法满足题目中最小扰动的目标?
No!
f ( x 0 ) ∣ ∣ w ∣ ∣ 2 2 w ⇒ f ( x 0 ) ∣ ∣ w ∣ ∣ 2 w ∣ ∣ w ∣ ∣ 2 \frac{f(x_0)}{||w||_2^2} w \Rightarrow \frac{f(x_0)}{||w||_2} \frac{w}{||w||_2} ∣∣w∣∣22f(x0)w⇒∣∣w∣∣2f(x0)∣∣w∣∣2w
其中
f ( x 0 ) ∣ ∣ w ∣ ∣ 2 \frac{f(x_0)}{||w||_2} ∣∣w∣∣2f(x0)
为点到平面 f f f的距离公式
另外
w ∣ ∣ w ∣ ∣ 2 \frac{w}{||w||_2} ∣∣w∣∣2w
为梯度的单位向量。所以以上就为往梯度方向前进垂直距离
大小,即能到达超平面(针对线性超平面而言)。但是事实上神经网络一般都是高度非线性。因此可能未必一次就能到到超平面边界,所以便出现了算法中的while
循环。
值得注意的是,算法中为 ∇ f ( x i ) \nabla f(x_i) ∇f(xi)而非 w w w。但是因为 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b,所以 ∇ f ( x i ) = w \nabla f(x_i) = w ∇f(xi)=w。此外,作者发现上述算法通常会收敛到为zero level set中的一个点,因此在实际操作的过程中,作者会将最终的 r ^ \hat{r} r^乘以一个常系数 1 + η 1+\eta 1+η,在作者的实验中,他选取 η = 0.02 \eta=0.02 η=0.02
DeepFool for multiclass classifiers:
因此只要在原样本 x 0 x_0 x0上加上扰动 r r r后,满足下式即攻击成功(只要出现某个类的输出置信度高于原类别即满足)
对 k ^ ( x 0 ) = 4 \hat{k}(x_0)=4 k^(x0)=4而言,假设其决策边界为下图,为了用最小的扰动来达到攻击效果,从图中我们可以选择往第3个边界移动。
令 l ^ ( x 0 ) \hat{l}(x_0) l^(x0)为距离P的边界最近的超平面,其可以通过下式进行计算。有点不明白为什么要通过以下公式计算最近的超平面,而不是直接用点到平面的距离公式?
回答:仔细看超平面的公式为 f k ( x ) − f 4 ( x ) = 0 f_k(x) - f_4(x) = 0 fk(x)−f4(x)=0
在计算得出最近的超平面后,我们的扰动可以通过下面的方式进行计算
DeepFool for General classifiers:
此时P为
上述两种情况都可以归为以下算法
Conclusion:
由于这些笔记是之前整理的,所以可能会参考其他博文的见解,如果引用了您的文章的内容请告知我,我将把引用出处加上~
如果觉得我有地方讲的不好的或者有错误的欢迎给我留言,谢谢大家阅读(点个赞我可是会很开心的哦)~
文章浏览阅读1.1w次。java 中提供了两个线程安全的操作方式,一个是 Threadlocal ,一个是ThreadLocalMap。本文介绍他们的区别和实现原理。ThreadlocalThreadlocal 的属性包括 threadLocalHashCode,getMap(Thread t) 到当前线程去获取一个 ThreadLocalMap 的内部类对象,它的属性有一个 entry 数组,数组下标是当前 T...
文章浏览阅读2.6w次,点赞6次,收藏47次。1. 连接ftp服务器格式:ftp [hostname| ip-address]a)在linux命令行下输入:ftp192.168.1.1b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可。2. 下载文件下载文件通常用get和mget这两条命令。a) get格式:get [remote-file] [local-file]将文件从远端主机中传送至..._ftp下载命令
文章浏览阅读894次。RemainderTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2039 Accepted Submission(s): 436Problem DescriptionCoco is a clever
文章浏览阅读4k次,点赞6次,收藏31次。软件体系结构——调用/返回风格一、调用/返回风格1、调用/返回风格简介1.1 主程序/子程序风格二、风格变种三、课程总结一、调用/返回风格1、调用/返回风格简介简介思维导图:体系结构风格Review:1.1 主程序/子程序风格从图中我们可以看出整个系统是一个主程序/子程序风格的系统,它是单一的单线程的结构,首先它具有一个统一的程序入口,叫做控制器(main)。在整个统中,它具有三个..._调用/返回风格
文章浏览阅读439次。WRK是微软于 2006 年针对教育和学术界开放的Windows内核的部分源码,WRK(Windows Research Kernel)也就是Windows研究内核,在WRK中不仅仅只提供Windows内核模块的部分代码,其还提供了编译工具,也就是通过这个编译工具,你可以将你的WRK编译成一个EXE文件,也就是内核可执行模块,然后你可以利用这个EXE文件来取代操作系统本身的内核...
文章浏览阅读56次。1.删除原有的mariadb,不然mysql装不进去mariadb-libs-5.5.52-1.el7.x86_64rpm -qa|grep mariadbrpm -e --nodeps mariadb-libs1.在https://dev.mysql.com/downloads/mysql/选择为Red Hat Enterprise Linux 7 / Oracle Linux 7 ,把os的版..._centos离线安装mysql
文章浏览阅读392次。一、前期基础知识储备(1)ActivityManger管理Activity启动startActivity(Intent intent),启动一个Activity最简单的方式。Activity调用startActivity()方法时,该方法调用请求是发送给操作系统的ActivityManager。ActivityManager负责创建Activity实例并调用其onCreate()方法。Act..._onactivityresult和startactivityforresult
文章浏览阅读2.9k次。不知道为什么,readInt就是不能用,同样的还有readChar(),相信其他的也不行,不过read却能用。其他都会抛出这个异常Exception in thread "main" java.io.EOFException at java.io.DataInputStream.readChar(Unknown Source) at TestSocket.TestServer1.main(Te_socket readint
文章浏览阅读1.2w次。cmd-msconfig-引导-高级选项-最大内存不能随便勾!否则可能会出现系统无法启动的情况!最便捷的解决办法,亲测可用:1、拔掉主板电池,用PS2口键盘按F8进入安全模式,然后在相同路径下去掉最大内存前面的勾,关机!2、装上主板电池,开机正常启动!_引导最大内存设置无效
文章浏览阅读4.6k次。最近找到了一个小巧的Oracle 工具 不过要注册,真不爽Canoe是一个相当于Toad、SQL Server查询分析器的数据库查询工具。支持Oracle 8i,Oracle 9i, 无需先安装客户端 支持MS SQL 2000 支持Sybase ASE特点:1.无需安装数据库客户端即可使用数据库终端工具。2.超强的表、列注释功能,可实时增删改注释,并可以导出到Excel中交付给项目负责人。3.直_oracle查询分析器在哪
文章浏览阅读397次。使用bat文件定时创建mysql备份1.新建一个文本文档.改名为backup.bat(前缀可自定义)2.编辑backup.bat3.复制以下内容(记得将中文改成对应内容 注释中文需要去掉)SET DB_NAME=备份库名SET SAVE_PATH=备份路径SET MYSQL_DUMP_PATH=mysql的mysqldump.exe路径(注:有空格请加双引号,如"MySQL Server 5.7") %SAVE_PATH:~0,2%cd %SAVE_PATH%SET BAK_FIL_db_backup.bat
文章浏览阅读965次。对于这部分的内容,将分成4小节来描述:1.职责与关系2.消息循环3.线程与更新4.几点小结--------------------------------------------------------------------------------------------------1) 接下来,我们开始这部分的内容,首先了解一下各自的职责及相互之_android线程之间