系列文章目录
文章目录
前言
这一节稍微叙述一些模型的攻击和防御的相关知识
一、模型攻击(Attack)、防御(Defence)的意义
当我们将深度学习模型真正应用于实际生活中的时候可能会面临很多的安全问题,一些不法分子可能会对模型进行攻击,使得模型得到的结果是他们想要的结果,所以我们要去研究模型的攻击和防御方法
二、模型攻击(Attack)
1、白盒攻击
1、模型攻击
![](https://i-blog.csdnimg.cn/blog_migrate/0b99113c5885dcebb35a8bef5f1499ea.png)
2、白盒攻击
我们事先知道我们所要攻击的模型,知道它是什么样的模型,了解该模型的参数
3、攻击方法
1、攻击图片和原图片差异
设原图片为x,攻击后的图片为x’,那么我们有很多种方法定义定义两者之间的差异,这里举两个例子
![](https://i-blog.csdnimg.cn/blog_migrate/ff99728759bc4a085987e4220486e879.png)
2、具体做法
进行攻击的方法有很多,这里只举一个简单的例子
首先我们根据我们的需要定义一个损失函数,例如如果我们想要使得一张照片被模型识别后,模型给出一个我们想要的答案,那么我们可以将损失函数L(x’)定义为为我们想要的结果和模型给出的结果间的距离或者负的模型给出的结果和正确结果的距离,然后我们根据定义的损失函数通过梯度下降的方法,更新输入x’得到x*
但是与此同时我们还希望我们更改的不要太多以免被发现,这时我们可以进一步更新计算方法
我们可以设置一个阈值,当x0和xt的距离大于
ϵ
\epsilon
ϵ时更新xt,更新的方法,我们可以采取穷举法,首先穷举和x0距离在
ϵ
\epsilon
ϵ范围内的所有值,然后分别计算xt和这些值的距离,选择和xt距离最小的值赋予xt
这里是一些具体的攻击方法的例子
3、FGSM
![](https://i-blog.csdnimg.cn/blog_migrate/67654e01fe728a97cc667433b702ba0d.png)
FGSM的攻击方法非常简单,它求梯度对于想xi的导,如果
导数大于零这赋予1,如果导数小于零则赋予负一,然后更新x0
2、黑盒攻击(Attack)
1、黑盒攻击
我们事先不知道我们所要攻击的模型,不知道它是什么样的模型,不了解该模型的参数
2、攻击方法
1、了解被攻击模型数据集
我们可以自己用被攻击模型A所使用的数据集训练一个模型B,然后攻击我们自己所训练的模型B,并将攻击我们所训练模型B的结果作为我们攻击A的数据
![](https://i-blog.csdnimg.cn/blog_migrate/103f51f2a6af29dcbd163dd91259905a.png)
2、不了解被攻击模型数据集
如果我们没有得到被攻击模型所使用的数据集,那么我们可以将自己的数据集大量丢入被攻击模型,根据被攻击模型结果训练我们自己的模型,然后对自己的模型进行攻击得到攻击后的数据集
3、特殊攻击
1、普遍性对抗攻击
一个特殊的杂讯可以让被攻击模型识别图像的时候大部分都出错
![](https://i-blog.csdnimg.cn/blog_migrate/f8359ecea11afc252cbaa4159283116a.png)
2、对抗性重编程
![](https://i-blog.csdnimg.cn/blog_migrate/cb73eb42f26b6e2ec3262de6ec6275c5.png)
通过一个杂讯可以改变模型的作用,例如可以讲一个分类模型变为为一个数方块模型,当输入不同数目的方块时模型会给出对应的种类(分类种类和方块数量一一对应)
3、真实世界的攻击
![](https://i-blog.csdnimg.cn/blog_migrate/b7c4415f78790fd20b7277a13afbe4af.png)
在加入杂讯的时候我们可以使得杂讯集中在某一部分,例如眼部,然后形成一个眼睛的样子,当这些杂讯出现的时候人脸辨识就会辨识出其他的样子,然后研究人员真的在现实世界中做出了这个眼镜
![](https://i-blog.csdnimg.cn/blog_migrate/d71d05ec1632279ec12fbf810c919a25.png)
三、模型防御(Defence)
1、防御类型
- 被动防御
在训练模型的时候不考虑防御,在模型之外加入防御,例如可以在模型前边加入过滤器,过滤器的构成有很多方法,例如图片平滑化或者对原图片进行缩放加边
- 主动防御
在训练模型的过程中就考虑到模型防御的问题,设计更加完善的模型或者自己攻击模型,得到有毒数据,然后将这些有毒数据标记正确的标签加入到数据集中重新训练模型
总结
对于模型的攻击和防御做了一点总结